Il micromouse è un robot che utilizza un algoritmo labirinto solving per risolvere autonomamente un problema labirinto. In questo post, voglio condividere come la mia squadra e sono riuscito a farlo con la guida tanto necessaria da alcune persone molto utili.
Durante il mio semestre autunnale alla UC Berkeley, ho preso una classe guidata da studenti per creare un robot che risolve autonomamente un problema di labirinto. I miei pensieri sono che se siete in UC Berkeley, interessati a progetti di elettronica e alla ricerca di un programma altamente guidato con istruttori impressionante, questo è un ottimo posto per essere! Per me, questo corso è speciale perché è dove ho iniziato il mio viaggio nella robotica, armeggiare e fare ed è uno che mi è piaciuto profondamente. Questo corso mi ha dato grandi fondamenti, e ho imparato di più lungo la strada come ho iniziato ad assumere nuovi progetti.
Ecco un rough set di istruzioni su come iniziare il tuo Micromouse Progetto come un principiante:
- Parts List
- Mettendo le parti hardware insieme
- Impostazione del Teensy Micro Controller & IDE di Arduino
- Teensy pinOut Introduzione
- Utilizzo di Sensori
- Tensione di Regolamento
- H Bridge Motor Controller per il controllo del motore
- Utilizzando l’Effetto Hall Rotorary Encoder
- Mettere tutto insieme
- Codifica
- Come controllare il tuo hardware con il codice
- Rilevamento
- Controllo PID
- Labirinto risolvere Algoritmo
- affinare
- Come risolvere
Parts List
- Parti Meccaniche
- Telaio
- Ruote
- un Sacco di nastro adesivo, se non avete intenzione di stampa 3D custom made parti o spendere soldi per comprare montaggi personalizzati
- Parti Elettriche
- Breadboard, fili
- Due 5 Volt mini Motori DC
- Un piccolo da 7 a 9 volt batteria
- 7805 Regolatore di Tensione
- sensore Hall rotorary encoder
- H-Bridge
- Teensy (O qualsiasi piccolo micro controllore. Arduino funziona troppo!)
- Due sensori di distanza (ho usato un sensore a infrarossi)
Mettere insieme l’hardware
2.1 Impostazione del micro controller Teensy & Arduino IDE
Teensy è un micro controller che funziona come un Arduino. Un enorme vantaggio è la sua dimensione. Come suggerisce il nome, il Teenst è piccolo e compatto, che è grande!
Iniziamo posizionando il Teensy sopra alcuni perni dell’intestazione, quindi saldando i perni dell’intestazione sul Teensy e quindi montandolo saldamente sulla nostra breadboard.
Se non l’hai già fatto, installare Arduino IDE sul vostro computer. https://www.arduino.cc/en/Main/Software
MOLTO IMPORTANTE: Se si utilizza Teensy 3.1, assicurarsi di installare la versione di Arduino compatibile con Teensy. Ecco il link per installare Teensyduino, in modo che il tuo Teensy possa funzionare con l’IDE Arduino: https://www.pjrc.com/teensy/td_download.html
2.2 Il circuito
2.21) Alimentazione a batteria: alimentazione deve essere 7.2 V e superiori. Per convenzione di circuito, possiamo chiamare questo Vcc2.
2.22) 5 V Alimentazione regolata: componenti di chip elettronici spesso hanno bisogno di una tensione di alimentazione stabile per funzionare correttamente. Il problema è che con dispositivi come motori che possono assorbire grandi quantità variabili di corrente, questo fa sì che la tensione di alimentazione si riduca. Questo è il motivo per cui abbiamo bisogno di un regolatore di tensione per fornire quel 5V stabile agli altri componenti elettronici.
2.23) Micro controller: Questo è il cervello di qualsiasi robot che sembra avere qualsiasi semblace di pensiero intelligente. Un microcontrollore può sembrare complicato all’inizio, ma per iniziare, non è così difficile. Ecco le basi: Semplice, ma molto importante.
2.23 a) Pin di ingresso digitali: in grado di leggere e scrivere segnali binari. Diversi microcontrollori hanno diversi livelli logici, ma la maggior parte dei microcontrollori hanno livello logico di 3.3 V o 5V. Per esempio, l’Arduino è un microcontrollore con un livello logico di 5V.Durante la lettura, una tensione da qualche parte vicino a 5V registra come alto, mentre una tensione da qualche parte vicino a 0V registra come BASSO.
2.23 b) Pulse Width Modulated (PWM) pin: si tratta di pin di ingresso digitali con una speciale capacità di emettere un segnale modulato a larghezza di impulso. È un segnale digitale che è alto per una certa percentuale di tempo e basso per un’altra percentuale di tempo. Questo è noto come il ciclo di lavoro. Un segnale PWM con un duty cycle del 60% è a livello logico ALTO 60% del tempo, mentre a livello logico BASSO 40% del tempo. Scopri di più su PWM qui.
2.23 c) Pin analogici: Questi pin sono in grado di leggere una tensione analogica ovunque da 0 a detta quantità di volt. Nel caso di Arduino, il suo 0-5V. Possono leggerlo con vari gradi di risoluzione, a seconda di quanti bit analogico al convertitore digitale viene utilizzato. Un convertitore analogico-digitale a 8 bit può leggere una risoluzione di 2^8 = 256. Per un livello logico 5V, può leggere con una precisione di 5V / 256 = 19,5 mV.
2.23 d) Interruzioni digitali: Alcuni pin digitali sui microcontrollori possono essere configurati come segnali di interrupt. Un interrupt è molto cool. Quando un pin è configurato come pin di interrupt, rileva (1) Un bordo del segnale in aumento (2) Un bordo del segnale in caduta o (3) Un cambiamento nel livello logico. Uno di questi attiverà ciò che chiamiamo una routine di servizio di interrupt (ISR). L’ISR è una funzione breve nel codice che viene attivata ogni volta che viene rilevato un interrupt.
2.26) Motori: I motori sono dispositivi che girano quando viene data una tensione. In questo caso, stiamo usando il motore DC spazzolato. È chiamato come tale perché c’è una spazzola CC del commutatore all’interno di esso che lo aiuta a girare correttamente quando viene data una tensione. Motori generalmente disegnare una grande corrente e tutti i motori hanno una certa tensione potenza nominale. Quando i motori girano, producono un back-emf. Questo può sembrare contro-intuitivo, ma un motore che sta girando alla sua velocità massima in realtà attira la minor quantità di corrente a causa della emf posteriore. Al contrario, un motore che è in stallo (cioè vuole muoversi ma non può a causa di forze esterne) attira la maggior quantità di corrente.
2.25) Driver del motore: Questo è necessario per controllare la velocità/direzione del motore utilizzando un microcontrollore. Questo perché il microcontrollore non può fornire abbastanza tensione o corrente per pilotare un motore. Inoltre, quando i motori girano, il back-emf generato potrebbe facilmente danneggiare il microcontrollore. È necessaria un’interfaccia tra i due per controllare la velocità e la direzione del motore. Il controller del motore utilizzato era un driver Half-H quadruplo SN754410. Ciò che fa un controller del motore è che prende il segnale proveniente dal microcontrollore (di solito un segnale modulato a larghezza di impulso) e quindi attiva un “interruttore digitale” dalla batteria al motore. Quello che fa è che si accende un interruttore digitale dalla batteria al motore estremamente rapidamente. Se questo interruttore digitale è acceso 100% del tempo (o 100% duty cycle), il motore è in funzione a piena potenza. Se l’interruttore digitale è acceso solo il 50% del tempo, il motore è in funzione al 50% di potenza.
2.26) Encoder: Gli encoder sono dispositivi intelligenti che rilevano il movimento. Come ad esempio, alcuni encoder rilevano quante volte una ruota è filata, altri sono ancora più precisi per dirti esattamente quale angolo ha girato un braccio robotico, ecc. Per il Micromouse, stiamo usando encoder che rilevano quante volte una ruota ha girato. Esistono encoder ad effetto hall o encoder ottici. Due tipi di encoder, ma fondamentalmente fanno la stessa cosa. Attivano un impulso digitale ogni volta che una ruota è girata! Come funziona un encoder ad effetto hall è che c’è un piccolo magnete permanente all’interno di qualcosa che è attaccato all’albero motore. Quando il motore gira, anche il magnete gira. Ci sono sensori che rilevano quando il magnete è passato. Quando lo fa, invia un impulso che può essere letto da un microcontrollore. Di solito inviamo quel segnale a un pin configurato come pin di interrupt digitale.
2.27) Sensori di distanza a infrarossi: rileva la distanza utilizzando infrarossi. Quello che fa è che spara un segnale infrarosso e aspetta che quel segnale rimbalzi per determinare quanto lontano l’oggetto è lontano da esso. Si può sperimentare, ma se si devia il segnale fuori una superficie inclinata, non si può ottenere una lettura fuori il sensore IR. Questo lo rende non così ideale. Questo sensore IR ha anche una gamma limitata che può rilevare le distanze. Filo rosso è per 5 V di alimentazione, filo nero per GND, filo giallo per il segnale. Per questo particolare sensore IR, a seconda di quanto il sensore IR rileva l’oggetto, emette una tensione analogica diversa. Quello che puoi fare è leggere quella tensione analogica usando un microcontrollore. Leggi la scheda tecnica qui per saperne di più informazioni sul sensore IR.
2.3 Schemi elettrici & Cablaggio
Ecco uno schema circuitale approssimativo. Nota non ho specificato esattamente a quali pin collegare i fili. Questo perché i numeri dei pin variano a seconda del micro-controller che si sta utilizzando, ma qui, sto dando i principi generali:
I segnali dall’encoder devono essere collegati a un Pin di interrupt digitale. In questo modo, ogni volta che viene inviato un segnale, il microcontrollore può sapere che la ruota ha girato 1 round.
I segnali provenienti dal sensore a infrarossi devono essere collegati a un pin di ingresso analogico.
I segnali che vengono alimentati nel controller del motore dovrebbero uscire da un pin PWM.
*Inserisci schema elettrico
3.0 Codice& Controlli:
Non pubblicherò codice, ma ecco alcuni concetti generali:
3.1 Come si fa a far muovere il mouse dritto o girare:
Questo mouse è controllato in modo differenziato. Ci sono due ruote, con due motori su ogni ruota. Se entrambe le ruote girano alla stessa velocità, il mouse va dritto. Se la ruota sinistra accelera mentre la ruota destra rallenta, il mouse gira a destra. Questo è noto come controllo differenziale.
3.2 Controlli & correzione degli errori
Ma bisogna pensare a come controllare il mouse. Come facciamo a farlo muovere all’interno del labirinto senza schiantarsi contro un muro? Potremmo pensare che stiamo inviando due segnali uguali ai motori sinistro e destro per dire al mouse di andare dritto. Quindi il mouse dovrebbe andare dritto a destra? Sbagliato! Vari motivi possono far sì che i motori non rispondano nel modo in cui lo diciamo. Fondamentalmente, ogni motore è costruito quasi lo stesso, ma non esattamente lo stesso. L’hardware non è mai costruito perfettamente e c’è sempre qualche errore finito.
Come ci assicuriamo che il mouse si stia effettivamente muovendo nella direzione in cui lo diciamo? Abbiamo bisogno di quello che viene chiamato controllo a circuito chiuso. Il che significa che colleghiamo i sensori per misurare l’output e quindi reinserire il risultato nell’input per eseguire la correzione degli errori. Ne riparleremo piu ‘ tardi. Abbiamo bisogno di quello che chiamiamo un controller PID (proporzionale integrale derivato).
In questo caso, potremmo voler ottenere il mouse per mantenere una distanza rigorosa dal muro. Diciamo, 5 cm di distanza dal muro sulla sua destra. Noi chiamiamo questo il set-point. Qualsiasi deviazione dal set-point è ciò che chiamiamo errore. Quando viene rilevato un errore, vogliamo che il mouse si corregga. Quando l’errore è grande, vogliamo una grande azione di correzione. Quando l’errore è piccolo, vogliamo una piccola azione di correzione.
I sensori sul lato del mouse determinano la distanza del mouse da un muro. Dire che il mouse è troppo lontano dal muro sulla sua destra. Vogliamo che la ruota sinistra giri più velocemente, mentre la ruota destra gira più lentamente in modo che il mouse possa spostarsi verso destra per correggere l’errore. Se il mouse è molto lontano dal set-point di 5 cm, come 10 cm di distanza dal muro, vogliamo che la ruota sinistra giri molto velocemente, mentre la ruota destra rallenti di molto. Se il mouse è a soli 6 cm di distanza dal muro, vogliamo che la ruota sinistra aumenti di velocità e la ruota destra diminuisca la sua velocità, ma solo leggermente.