Sommario:
- Passaggio 1: progettazione hardware + costruzione + stampa 3D
- Passaggio 3: programmazione del dispositivo di scorrimento della fotocamera
- Passaggio 4: utilizzo del dispositivo di scorrimento della fotocamera
- Passaggio 5: considerazioni finali + miglioramenti futuri
Video: Cursore della telecamera di rilevamento degli oggetti con asse di rotazione. Stampato in 3D e costruito su RoboClaw DC Motor Controller e Arduino: 5 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Progetti Fusion 360 »
Questo progetto è stato uno dei miei preferiti da quando ho avuto modo di combinare il mio interesse per la creazione di video con il fai-da-te. Ho sempre guardato e voluto emulare quegli scatti cinematografici nei film in cui una telecamera si muove su uno schermo mentre esegue una panoramica per tracciare l'oggetto. Questo aggiunge un effetto di profondità molto interessante a un video altrimenti 2D. Volendo replicare questo senza spendere migliaia di dollari per l'attrezzatura di Hollywood, ho deciso di costruire da solo un dispositivo di scorrimento della fotocamera.
L'intero progetto è basato su parti che puoi stampare in 3D e il codice viene eseguito sulla popolare scheda Arduino. Tutti i file di progetto come i file CAD e il codice sono disponibili per il download in basso.
File di stampa CAD/ 3D disponibili qui
File del codice Arduino disponibile qui
Il progetto ruota attorno ai 2 motori DC a spazzole e al controller Basic Micro Roboclaw Motor. Questo controller del motore può trasformare i motori CC con spazzole in un tipo superiore di servo con un'incredibile precisione di posizione, tonnellate di coppia e una rotazione completa di 360 gradi. Più su questo più tardi.
Prima di continuare, guarda prima il tutorial video collegato qui. Quel tutorial ti darà una panoramica su come costruire questo progetto e questa guida di Instructables approfondirà come ho costruito questo progetto.
Materiali-
- 2 barre filettate m10 lunghe 1 metro utilizzate per collegare tutte le parti
- 8x dadi M10 per montare le parti sulle barre filettate
- 2 aste in acciaio liscio da 8 mm lunghe 95 cm per far scorrere il cursore
- 4x cuscinetti lm8uu per il cursore per scorrere dolcemente sulle aste in acciaio
- 4 dadi m3 lunghi 10 mm per il montaggio del motore
- 2 x cuscinetti per skateboard (diametro esterno 22 mm, diametro interno 8 mm) per l'asse di rotazione
- 1x cuscinetto da 15 mm per il lato folle
- 1x bullone m4 lungo 4 cm con controdado m4 per il montaggio del cuscinetto del tenditore sulla parte stampata in 3D del tenditore.
- Ingranaggio a 20 denti con diametro interno di 4 mm per il motore del cursore. L'esatta puleggia non è molto importante poiché il tuo motore CC dovrebbe essere orientato per una coppia sufficiente. Assicurati solo che sia lo stesso passo della tua cintura
- Cintura GT2 lunga 2 metri. Anche in questo caso puoi usare qualsiasi cinghia purché corrisponda al passo dei denti della tua puleggia.
Elettronica
- 2 * Motoriduttori DC con encoder (uno controlla il movimento laterale, mentre l'altro controlla l'asse di rotazione). Ecco quello che ho usato. Maggiori informazioni su questo nella parte Elettronica della guida
- RoboClaw controller del motore CC. (Ho usato il doppio controller da 15Amp poiché mi ha permesso di controllare entrambi i motori con un controller)
- Qualsiasi Arduino. Ho usato Arduino UNO
- Batteria/Fonte di alimentazione. (Ho usato una batteria LiPo da 7,4 V a 2 celle)
- Schermo (per visualizzare il menu. Qualsiasi schermo compatibile con U8G funzionerà, ho usato questo schermo OLED da 1,3 pollici)
- Encoder rotativo (per la navigazione e la configurazione delle opzioni nel menu)
- Pulsante fisico (per attivare il movimento del cursore)
Passaggio 1: progettazione hardware + costruzione + stampa 3D
Passiamo ora all'elettronica. L'elettronica è dove questo progetto ha molta flessibilità.
Iniziamo con il nucleo di questo progetto: i 2 motori DC con spazzole.
Ho scelto i motori DC spazzolati per alcuni motivi.
- I motori con spazzole sono molto più semplici da cablare e utilizzare rispetto ai motori passo-passo
- I motori CC spazzolati sono molto più leggeri dei motori CC, il che è particolarmente importante per il motore dell'asse di rotazione poiché quel motore si muove fisicamente lateralmente con la fotocamera e renderlo il più leggero possibile è importante per prevenire un'eccessiva sollecitazione sul motore del cursore della fotocamera principale.
Ho scelto questo particolare motore DC. Questo motore mi ha fornito una coppia estremamente elevata che era necessaria per spostare un carico di fotocamera così pesante. Inoltre, l'alto ingranaggio significava che l'RPM di picco era lento, il che significava che potevo filmare movimenti più lenti, e l'alto ingranaggio portava anche a una maggiore precisione di posizione poiché una rotazione di 360 gradi dell'albero di uscita significava 341,2 conteggi dell'encoder del motore.
Questo ci porta al controller di movimento RoboClaw. Il controller del motore a doppio CC del motore Roboclaw prende semplici istruzioni dal tuo Arduino tramite semplici comandi di codice e fa tutte le elaborazioni pesanti e l'erogazione di potenza per far funzionare il tuo motore come previsto. L'Arduino può inviare segnali al Roboclaw tramite PWM, tensione analogica, seriale semplice o seriale a pacchetto. Il pacchetto seriale è il modo migliore per procedere poiché consente di ottenere informazioni dal Roboclaw necessarie per il tracciamento posizionale. Mi immergerò più a fondo nella parte software/programmazione di Roboclaw nel passaggio successivo (programmazione).
In sostanza, il Roboclaw può trasformare un motore a spazzole DC con un encoder per essere più simile a un servo grazie alla capacità del RoboClaw di eseguire il controllo di posizione. Tuttavia, a differenza di un servo tradizionale, ora il tuo motore CC spazzolato ha molta più coppia, molta più precisione di posizione grazie all'elevato ingranaggio del motore e, soprattutto, il tuo motore CC può girare a 360 gradi continuamente, nessuno dei quali un servo tradizionale non può fare.
La parte elettronica successiva è lo schermo. Per il mio schermo, ho scelto questo pannello OLED per le sue dimensioni e l'elevato contrasto. Questo alto contrasto è incredibile e rende lo schermo molto facile da usare alla luce diretta del sole senza emettere troppa luce che può interferire con una potenziale ripresa della fotocamera scura. Questo schermo può essere facilmente sostituito con un altro schermo compatibile con U8G. L'elenco completo degli schermi compatibili è disponibile qui. In effetti questo progetto è stato intenzionalmente codificato attorno alla libreria U8G in modo che i costruttori fai-da-te come te avessero più flessibilità nelle loro parti
Le parti elettroniche finali per questo progetto erano l'encoder rotativo e il pulsante per avviare il movimento del cursore. L'encoder consente di navigare nel menu dello schermo e configurare tutti i menu del dispositivo di scorrimento con un solo quadrante. L'encoder rotativo non ha una posizione di "fine" come un potenziometro tradizionale, e questo è particolarmente utile per modificare le coordinate x e y del tracciamento dell'oggetto sullo schermo. Il pulsante viene utilizzato esclusivamente per avviare il movimento del cursore senza dover armeggiare con l'encoder rotativo.
Passaggio 3: programmazione del dispositivo di scorrimento della fotocamera
La codifica è stata di gran lunga la sfida più difficile di questo progetto. Vedete, fin dall'inizio volevo che lo slider fosse controllabile da uno schermo. Per rendere questo progetto compatibile con il maggior numero di schermi possibile, ho dovuto utilizzare la libreria U8Glib per Arduino. Questa libreria supporta oltre 32 schermi. Tuttavia, la libreria U8Glib utilizzava un loop di immagini per disegnare il menu sullo schermo e questo era in conflitto con la capacità di Arduino di raccogliere simultaneamente informazioni sulla posizione della telecamera che erano necessarie per la funzionalità di calcolo dell'angolo della telecamera (questo è trattato nei prossimi due paragrafi). L'U8Glib2 ha un'alternativa al ciclo delle immagini utilizzando qualcosa chiamato un'opzione buffer a pagina intera, ma la libreria ha consumato troppa memoria e ha reso difficile adattare il resto del codice dati i vincoli di memoria di Arduino Uno. Ciò significava che ero bloccato con U8G e dovevo aggirare il problema impedendo l'aggiornamento dello schermo ogni volta che lo slider era in movimento e Arduino aveva bisogno di raccogliere dati di posizione dal Roboclaw. Sono stato anche costretto ad attivare il dispositivo di scorrimento per iniziare a muoversi al di fuori del ciclo del menu poiché una volta entrato nei sottomenu, sarei stato all'interno del ciclo dell'immagine e il dispositivo di scorrimento non avrebbe funzionato come previsto. Ho anche aggirato questo problema facendo in modo che un pulsante fisico separato attivasse il movimento del cursore.
Parliamo ora dell'elemento di tracciamento rotazionale. Questa parte sembra molto complessa da integrare, ma in realtà è piuttosto semplice. L'implementazione per questo è sotto la funzione "motor()" all'interno del mio codice Arduino. Il primo passo è creare una griglia bidimensionale e decidere dove è posizionato l'oggetto che si desidera tracciare. In base a ciò puoi disegnare un triangolo nella tua posizione attuale. Puoi ottenere la tua posizione attuale dal valore dell'encoder del motore. Se desideri configurare la posizione dell'oggetto da inseguire in cm/mm, dovrai tradurre il valore dell'encoder in un valore cm/mm. Questo può essere fatto semplicemente spostando il cursore della fotocamera di 1 cm e misurando l'aumento del valore dell'encoder. Puoi inserire questo valore nella parte superiore del codice sotto la variabile encoder_mm.
Andando avanti, ora useremo la funzione tangente inversa per ottenere l'angolo che la telecamera deve essere rivolta per puntare verso il tuo oggetto. La tangente inversa prende il lato opposto e adiacente del triangolo. Il lato opposto del triangolo non cambia mai poiché è la distanza y dal cursore all'oggetto. Tuttavia, il lato adiacente del cursore della fotocamera cambia. Questo lato adiacente può essere calcolato prendendo la posizione x dell'oggetto e sottraendo la tua posizione attuale da essa. Mentre il cursore si sposta attraverso il suo raggio di movimento, continuerà ad aggiornare Arduino sul valore dell'encoder. L'Arduino convertirà ripetutamente questo valore dell'encoder in un valore posizionale cm/mm x e quindi calcolerà la lunghezza del lato adiacente e infine calcolerà l'angolo che la telecamera deve essere sempre rivolta verso l'oggetto.
Ora che il nostro Arduino sta elaborando dinamicamente l'angolo della telecamera, possiamo affrontare la conversione di questo angolo in un valore posizionale per il movimento del motore di rotazione. Questo ci porta alla più grande caratteristica di RoboClaw per questo progetto. Dando al Roboclaw un valore di posizione, può essenzialmente far sì che un motore a spazzole CC si comporti come un servo. A differenza di un servo, il nostro motore ha tonnellate di coppia in più, una precisione molto più elevata e può anche ruotare di 360 gradi.
Il codice Arduino per spostare il Roboclaw in una determinata posizione è il seguente:
roboclaw. SpeedAccelDeccelPositionM1(address, 'speed', 'acceleration', 'deceleration', 'position you want to go to', 1);
Per regolare il valore di posizione del motore in modo che corrisponda all'angolo della telecamera, sarà necessario spostare manualmente la piastra della telecamera di 180 gradi. Quindi vedere quanto è cambiato il valore dell'encoder dallo spostamento della piastra della telecamera da 0 gradi a 180 gradi. Questo ti dà la tua gamma di codificatori. Puoi inserire questo intervallo nella funzione del motore che mappa l'angolo della telecamera di Arduino su un valore posizionale. Questo è anche commentato nel codice, quindi dovrebbe essere facile da trovare *****
Il RoboClaw mi ha anche dato la possibilità di regolare altri fattori come accelerazione, decelerazione e valori PID. Ciò mi ha ulteriormente permesso di rendere più fluido il movimento dell'asse di rotazione, specialmente quando i cambiamenti di angolo erano piccoli e aggiungevano jerk senza un valore PID "D" elevato. Puoi anche regolare automaticamente i tuoi valori PID tramite l'app desktop di Roboclaw.
Passaggio 4: utilizzo del dispositivo di scorrimento della fotocamera
Ora veniamo alla parte divertente, azionando lo slider Il menu ha 4 schede principali. La scheda in alto è dedicata al controllo della velocità. La riga centrale del menu contiene schede per configurare la posizione X e Y dell'oggetto tracciato in mm e configurare anche se vogliamo che il dispositivo di scorrimento ruoti e insegua il nostro oggetto o semplicemente esegua un semplice movimento di scorrimento senza rotazione. Ruotando l'encoder rotativo è possibile navigare tra le diverse opzioni dei menu. Per configurare una qualsiasi delle opzioni, accedere all'opzione e premere il codificatore rotante. Una volta premuto, la rotazione del codificatore rotante cambierà il valore del sottomenu evidenziato anziché scorrere il menu. Una volta raggiunto il valore desiderato, è possibile fare nuovamente clic sull'encoder rotativo. Ora sei tornato al menu principale e puoi navigare tra le diverse schede. Una volta che sei pronto, premi semplicemente il pulsante Vai accanto allo schermo e lo slider farà le sue cose!
Assicurati che una volta terminato l'utilizzo del dispositivo di scorrimento della fotocamera, che la fotocamera sia nella posizione "home": il lato del dispositivo di scorrimento da cui è iniziata. La ragione di ciò è che l'encoder del motore non è un encoder assoluto, il che significa che Roboclaw/Arduino non può dire dove si trova l'encoder. Possono solo dire quanto è cambiato l'encoder dall'ultima volta che è stato acceso. Ciò significa che quando spegni il dispositivo di scorrimento della fotocamera, il dispositivo di scorrimento "dimenticherà" la posizione del dispositivo di scorrimento e ripristinerà l'encoder su 0. Pertanto, se spegni il dispositivo di scorrimento dall'altra parte, quando lo accendi, il dispositivo di scorrimento prova a spostarti oltre il bordo e a schiantarti contro il muro di scorrimento. Questo comportamento dell'encoder è anche il motivo per cui la telecamera reimposta il suo angolo di rotazione dopo ogni movimento di scorrimento della telecamera. L'asse di rotazione si protegge anche dall'urto contro la fine del suo raggio di movimento.
Puoi risolvere questo problema aggiungendo i finecorsa e una procedura di homing all'avvio. Questo è ciò che usano le stampanti 3D.
Passaggio 5: considerazioni finali + miglioramenti futuri
Consiglio vivamente che ogni costruttore crei le proprie versioni di questo slider piuttosto che costruire esattamente lo stesso slider. Modificare il mio design ti consentirà di costruire il tuo dispositivo di scorrimento secondo le tue specifiche esatte e allo stesso tempo comprendere meglio come funzionano l'elettronica e il codice.
Ho reso il codice il più leggibile e configurabile possibile in modo da poter modificare/calibrare le diverse variabili del codice per le specifiche del dispositivo di scorrimento. Il codice è anche completamente costruito attorno alle funzioni, quindi se vuoi copiare/modificare/riscrivere determinati comportamenti del dispositivo di scorrimento, non è necessario decodificare e rielaborare l'intero codice, ma solo le parti che si desidera modificare.
Infine, se realizzassi una versione 2.0, ecco alcuni miglioramenti che farei
- Rapporto di trasmissione più elevato per il motore dell'asse di rotazione. Un rapporto di trasmissione più alto significa che posso fare piccoli movimenti più precisi. Questo è particolarmente importante quando la fotocamera è lontana dall'oggetto e l'angolazione della fotocamera cambia molto lentamente. Attualmente, il mio motore non è orientato troppo in alto e può provocare un movimento leggermente a scatti quando il cursore della fotocamera funziona troppo lentamente o quando c'è un cambiamento minimo dell'angolo di rotazione. L'aggiunta di un valore PID "D" elevato mi ha aiutato a sbarazzarmene, ma è venuta a scapito di una precisione di tracciamento degli oggetti leggermente inferiore.
- Lunghezza modulare. Questo è un obiettivo inverosimile, ma mi piacerebbe che il cursore della fotocamera fosse modulare in lunghezza, il che significa che puoi facilmente collegare lunghezze di binario più lunghe su cui far scorrere la fotocamera. Questo è abbastanza difficile poiché si dovrà allineare perfettamente entrambi i binari e capire come far funzionare il sistema di cinghie. Tuttavia, sarebbe un aggiornamento interessante!
- Keyframing di movimento personalizzato. Mi piacerebbe introdurre il concetto di movimenti con fotogrammi chiave in questo dispositivo di scorrimento della fotocamera. Il keyframing è una tecnica molto comunemente usata nella produzione di video e audio. Consentirebbe movimenti della telecamera non lineari in cui la telecamera va in una posizione, attende, quindi si sposta in un'altra posizione a una velocità diversa, attende, quindi va in una terza posizione ecc.
- Controllo del telefono Bluetooth/senza fili. Sarebbe davvero bello poter configurare i parametri del dispositivo di scorrimento della fotocamera in modalità wireless ed essere in grado di distribuire il dispositivo di scorrimento della fotocamera in luoghi di difficile accesso. L'app del telefono potrebbe anche aprire opportunità per integrare il keyframing come menzionato nell'ultimo paragrafo.
Questo è tutto per questo tutorial. Sentiti libero di lasciare qualsiasi domanda nella sezione commenti qui sotto.
Per ulteriori contenuti e tutorial di elettronica puoi anche controllare il mio canale YouTube qui.
Consigliato:
Telecamera CCTV con NodeMCU + modulo telecamera del vecchio laptop (con e senza l'utilizzo di Blynk): 5 passaggi
Telecamera CCTV con NodeMCU + modulo telecamera del vecchio laptop (con e senza l'utilizzo di Blynk): Ciao ragazzi! In questo tutorial, ti mostrerò come ho usato il modulo fotocamera di un vecchio laptop e nodeMCU per creare qualcosa di simile a CCTV
Tracciamento degli oggetti basato sul rilevamento del colore: 10 passaggi
Tracciamento degli oggetti basato sul rilevamento del colore: storia Ho realizzato questo progetto per imparare l'elaborazione delle immagini utilizzando Raspberry PI e aprire CV. Per rendere questo progetto più interessante ho usato due servomotori SG90 e ci ho montato una telecamera. Un motore utilizzato per muoversi orizzontalmente e il secondo motore utilizzato per muoversi verticalmente
Telecamera a 180° con rilevamento della palla: 5 passaggi (con immagini)
Ball Tracking 180° Camera: Benvenuti nel mio primo progetto! Sono entusiasta di condividere ciò che ho realizzato e di mostrarti i passaggi per costruire la tua telecamera di localizzazione. Questo progetto è stato reso possibile utilizzando la libreria OpenCV in combinazione con Python
Rilevamento di oggetti visivi con una fotocamera (TfCD): 15 passaggi (con immagini)
Visual Object Detection With a Camera (TfCD): i servizi cognitivi in grado di riconoscere emozioni, volti di persone o semplici oggetti sono attualmente ancora in una fase iniziale di sviluppo, ma con l'apprendimento automatico questa tecnologia si sta sviluppando sempre più. Possiamo aspettarci di vedere più di questa magia in
Guardiano V1.0 --- Aggiornamento della telecamera spioncino della porta con Arduino (caratteristiche di registrazione del rilevamento del movimento e scosse elettriche): 5 passaggi
Guardiano V1.0 ||| Aggiornamento della telecamera spioncino della porta con Arduino (funzioni di registrazione del rilevamento del movimento e scosse elettriche): ho ordinato una telecamera spioncino ma quando la uso, mi sono reso conto che non esiste una funzione di registrazione automatica (attivata dal rilevamento del movimento). Poi ho iniziato a indagare su come funziona. Per registrare un video, dovresti 1- tenere premuto il pulsante di accensione per quasi 2 secondi