RoboYún, robot esploratore con webcam e controllo Wi-Fi

Sul sito Elettronica Open Source, ho già presentato alcuni modelli di robot comandati in remoto, come LittleBot che è comandato tramite Bluetooth , o un altro modello che era comandato tramite un telecomando ad infrarossi
L’opportunità data dal contest 20 Arduino Motor Shield di Infineon gratis per voi, ha portato all’idea di realizzare un nuovo modello di rover comandato in remoto utilizzando il sistema Wi-Fi. Per il controllo si è utilizzata una scheda Arduino Yún che è la combinazione di un classico Arduino Leonardo (basato sul processore ATMEGA32U4) con un sistema-one-chip Wi-Fi in cui viene eseguito Linino (un MIPS GNU / Linux basata su OpenWRT). Altre particolarità sono date dal fatto che sulla scheda sono presenti alcuni connettori tra i quali una porta USB Host a cui è possibile collegare una web camera, che gestita dalla sezione Linux, permette di trasmettere in streaming le immagini riprese attraverso la rete Wi-Fi.

Descrizione dei componenti base che formano il rover.

Cominciamo con la descrizione dei principali elementi che formano il Rover:

  • Base robotica con telaio in alluminio e 2 motoriduttori;
  • Scheda con controllo Arduino Yún;
  • Motor shield di Infineon (ricevuto tramite il contest 20 Arduino motor shield di Infineon gratis per voi )
  • Dispositivo Pan & Tilt per movimentazione webcam;
  • Shield con circuito gestione motori, dispositivo Pan & Tilt, sensori;
  • Scheda alimentazione;
  • Webcam.

Queste sono solo alcune delle caratteristiche del robot RoboYún:

Telaio Il telaio in alluminio di tipo commerciale prodotto dalla DFRobot: Turtle - 2WD Mobile Platform
Scheda di comando Scheda Arduino Yúnconsigliato l’uso di una memoria SD esterna per ospitare i propri files
Modulo comando motori DC Motor Control Shield with BTN8982TA for Arduino
Shield controllo Comando relè per inversione senso di rotazione motore
Comando fari a led per illuminazione frontale
Uscite per azionamento servo Pan & Tilt
Sensore Temperatura/umidità – Sensore DHT11
Webcam Webcam modello C170 della Logiteh - Altezza 60.5 mm, Larghezza 70.3 mm, Profondità 71 mm, Peso 75 g
Dispositivo Pan & Tilt Dispositivo Pan & Tilt SparkFun codice ROB-10335
Alimentazione 5 batterie tipo AA per una tensione di 7,5V
Modulo di tipo Step-Down basato sul circuito integrato LM2596S, per l’uscita di 5V alimentazione parte elettronica.
Motoriduttori In plastica con rapporto riduzione 1:120, alimentazione 7,5V, assorbimento 170 mA
Ruote Ruote di plastica e gomma, Diametro esterno: 65mm, Larghezza ruota: 26 millimetri, Hub: 6mm
Misure robot Diametro 170 mm altezza massima 170 mm
Peso robot  750 g, compreso batterie

descrizione_robotyun

Posizione delle varie parti che costituiscono il robot

Passiamo ora a una breve descrizione dei singoli componenti:

Base robotica

Il telaio utilizzato per la realizzazione del Rover è prodotto dalla DFRobots e il suo nome commerciale è Turtle - 2WD Mobile Platform, si tratta di un kit costituito da un corpo in alluminio, due motoriduttori, due ruote Tamiya racing (diametro 65 mm), un ballcaster in metallo, un portabatteria, un deviatore, una presa di alimentazione, le viti e i dadi.

Turtle_2wd

Il montaggio è molto semplice, è sufficiente seguire le indicazioni riportate sul manuale cartaceo (o in versione pdf) presente all'interno della confezione.

Motoriduttori

All'interno del kit della base robotica sono presenti due motoriduttori (SKU: FIT0016) con motore a corrente continua con un’uscita di 160 rpm se alimentati a 6V.

motore_robot

Caratteristiche Elettriche:

  • Tensione di funzionamento: 3 ~ 7.5V (6V nominale);
  • Max. A vuoto Corrente (3V): 140 mA (3V) - 170 mA (6V);
  • Velocità a vuoto (3V): 90 rpm (3V) - 160 rpm (6V);
  • Max. Coppia di uscita: 0.8 kgf.cm;
  • Max. corrente di Stallo: 2,8 A.

Condizioni Operative:

  • Carico stimato: 0,2 kgf.cm;
  • Temperatura di funzionamento: -10 ~ + 60 ℃;
  • Tipo motore: 130.

Caratteristiche meccaniche:

  • Modalità uscita: 2 lati;
  • Rapporto di trasmissione: 1:120;
  • Max. Diametro Asse di uscita: 5,4 millimetri;
  • Peso netto: 45 g

dimensioni_riduttore

Dimensioni del motoriduttore utilizzato

NOTA: Per ridurre le interferenze con la circuiteria elettronica causate dallo scintillio dovuto allo sfregamento delle spazzole del motore elettrico sul collettore, è consigliabile saldare tre condensatori ceramici (o meglio multistrato) da 100nF uno tra positivo e carcassa, uno tra negativo e carcassa e uno tra positivo e negativo. Nella Figura è visibile lo schema di collegamento dei condensatori utilizzati come filtri antidisturbo.

condensatori_motore

Scheda di controllo Arduino Yún

La scheda di controllo utilizzata è il modello Arduino Yún, in cui sono presenti due microcontrollori: il primo è un Atheros AR9331 che supporta una distribuzione Linux basata su OpenWRT chiamata Linino, il secondo è un ATmega32u4, lo stesso che utilizza la scheda Arduino Leonardo o la scheda Arduino Esplora.  La scheda offre così un potente computer connesso con il microcontrollore di Arduino, è dotata di connettore per rete Ethernet, Wi-Fi, slot MicroSD e di 20 pin di I/O, dei quali 7 PWM e 12 ingressi analogici, le sue dimensioni sono 73x53mm per un peso di 32g.

YunParts

Caratteristiche del microcontroller AVR Arduino

Microcontroller: ATMEGA32U4
Tensione di funzionamento:  5V
Tensione in ingresso: 5V
Pin di I/O Digitale: 20
Canali PWM: 7
Canali di ingresso analogici 12
Corrente per Pin I/O: 40 mA
Corrente sul Pin 3.3V:  50 mA
Flash Memory:  32 KB (di cui 4 KB utilizzato da bootloader)
SRAM: 2.5 KB
EEPROM:  1 KB
Velocità di clock:  16 MHz

Caratteristiche microprocessore Linux

Processore: Atheros AR9331
Architettura: MIPS @ 400MHz
Tensione di funzionamento:  3.3V
Ethernet:  IEEE 802.3 10 / 100Mbit / s
WiFi: IEEE 802.11b / g / n
USB tipo A: Host USB 2.0
Lettore di schede: Micro-SD
RAM:  64 MB DDR2
Memoria flash: 16 MB

Alimentazione

L’alimentazione della scheda avviene attraverso la connessione micro-USB con una tensione di 5VDC.  Se si vuole utilizzare il pin Vin, è necessario fornire una tensione di 5V DC stabilizzata, in quanto sulla scheda non è presente come nelle normali schede Arduino, l’apposito integrato regolatore. Fornire una tensione superiore può danneggiarla.

Memoria

Il processore ATMEGA32U4 ha 32 KB (con 4 KB per il bootloader). Ha anche 2.5 KB di SRAM e 1 KB di EEPROM (che può essere letta e scritta con la libreria EEPROM ).
La memoria dell’ AR9331 non è incorporata all'interno del processore.  La RAM e la memoria di archiviazione sono collegate esternamente. Yún ha 64 MB di DDR2 RAM e 16 MB di memoria flash.

Pin di Ingresso e uscita

Si dispone in totale di 20 pin di input/output digitali, di cui 7 da utilizzare come output PWM e 12 come input analogici.
Ciascuno di questi pin può essere pilotato in maniera indipendente dal software.
Alcuni di questi pin hanno comportamenti specifici:

  • I pin 0 (Rx) e 1 (Tx) possono essere utilizzati per la comunicazione seriale.
  • I pin 0, 1, 2, 3 e 7 possono essere configurati come trigger per eventi esterni
  • I pin 3, 5, 6, 9, 10, 11 e 13 possono essere configurati per generare segnali PWM con risoluzione di 8 bit
  • I pin A0-A5 e A6-A11 (sui pin digitali 4, 6, 8, 9, 10 e 12) sono gli ingressi analogici. Ognuno di questi pin può essere utilizzato come I/O digitale. Ogni ingresso analogico fornisce 10 bit di risoluzione (cioè 1024 valori differenti). Di default, gli ingressi analogici hanno un range che va da massa a 5V, anche se è possibile cambiare l'estremità superiore con il pin AREF.

Bridge

Come abbiamo visto Arduino Yún integra il microcontrollore ATmega32u4 e l'Atheros AR9331 in cui "gira" Linino, una distribuzione di Linux.  Il "Bridge" è una libreria che mette in comunicazione questi due componenti.

Bridge_arduino_yun

Dalla figura si nota come la microSD, l'interfaccia Wi-Fi ed Ethernet non siano direttamente connesse al microcontrollore ATmega; quest'ultimo ha accesso tramite il microprocessore AR 9331.  Il Bridge consente quindi ad Arduino di interfacciarsi con queste periferiche.

Motor shield della Infineon

Il controllo dei motori è realizzato tramite il motor Shield della Infineon che permette di controllare, tramite alcune porte I/O di Arduino, un motore DC nei due sensi di marcia, oppure due motori DC nello stesso di marcia.
Lo schema della scheda è molto semplice, essendo formato da un circuito per la protezione contro l’inversione di polarità e da due circuiti ponte circondati da pochissimi altri componenti passivi.

Motor_shield_Infineon_adrirobot

Circuito per la protezione contro l’inversione di polarità
Il circuito di protezione contro l’inversione della polarità è formato dal mosfet Q1 tipo IPD90P04P4L, prodotto dalla stessa Infineon, questi è un mosfet di potenza canale P, la qui polarizzazione è realizzata dalla resistenza R8 e dallo zener D1, mentre la tensione di alimentazione è limitata nel suo valore massimo tramite lo zener D2 da 39 V, il condensatore elettrolitico C4 da 1000µF è necessario per mantenere basso il ripple della tensione VS durante la commutazione.

protezione_alimentazione

Circuito di potenza
Il cuore della scheda è rappresentato da due integrati tipo BTN8982TA: si tratta di un integrato semiponte H, il circuito interno è formato da un MOSFET canale P e uno a canale N più il relativo circuito driver.
Il circuito è facile da controllare, poiché è sufficiente applicare segnali di livello logico al pin IN e INH.

infineon_motor_BTN8982TA_diagram

Quando si applica un segnale PWM (acronimo inglese di Pulse-Width Modulation o modulazione di larghezza di impulso) al pin IN, la corrente fornita al motore, può essere controllata tramite il duty cycle del PWM.
Con un resistore collegato esternamente tra il pin SR e GND è possibile regolare la velocità di risposta, o slew rate.

schema_ponte

Le principali caratteristiche dell’integrato sono:

  • Tensione d’ingresso nominale 8-18 V (max. 6 - 40 V);
  • Possibilità di controllo motori Brushed DC fino a 250 W con carico continuo
  • Unità per il controllo sia di un motore DC bidirezionale con spazzole o di due motori a corrente continua unidirezionali;
  • Corrente media pari a 30 A (BTN8982 ha una limitazione in corrente @55 A), il limite è dato dalla dissipazione del PCB;
  • Alta frequenza PWM, per esempio 30 kHz;
  • Slew Rate modificabile per EMI ottimizzato tramite resistori esterni;
  • Circuito del driver con ingressi a livello logico;
  • Protezione da sovraccarichi o temperature eccessive;
  • Diagnosi con current sense, protezione da sovratemperatura e sovracorrente;
  • Lo shield presenta già i collegamenti con i pin di controllo.

Modifiche effettuate sullo shield originale.

Allo shield originale sono state apportate alcune modifiche per adattarlo al progetto.
Inserimento morsettiere a vite: la scheda in origine prevede l’utilizzo di boccole per spinotto a banana con diametro 4 mm, si è invece preferito inserire le più comode morsettiere a vite. Per questo motivo si è dovuto forare il circuito ed effettuare qualche saldatura.

morsettiere

Modifica orientamento condensatore: il condensatore di livellamento C4 che era montato in verticale, per ridurre l’ingombro è stato montato orizzontalmente.
Isolamento pin alimentazione: esiste la possibilità che il pad dell’alimentazione vada a contatto con la presa usb (nel caso della scheda Arduino UNO) o con la presa ethernet (nel caso della scheda Arduino Yún) per questo motivo la scheda è stata isolata con del nastro adesivo.

modifiche

Sensore di temperatura e umidità

Il sensore di temperatura e umidità e il modello DHT11 che è un sensore con uscita dati in formato digitale. I suoi elementi sensibili sono connessi ad un processore 8-bit single-chip.
Ogni sensore è compensato in temperatura e calibrato in un'apposita camera di calibrazione che determina in modo preciso il coefficiente che viene poi salvato all'interno della memoria OTP.

Modello DHT11
Alimentazione 3-5.5V DC
Segnale di uscita digitale tramite single-bus
Elemento sensibile resistenza in  Polimero
Campo di misura umidità 20-90% di umidità relativa, temperatura di 0-50 gradi Celsius
Precisione umidità ±4% RH (Max ±5% di umidità relativa), temperatura ±2.0 Celsius
Risoluzione o la sensibilità umidità 1% di umidità relativa, temperatura 0.1 Celsius
Ripetibilità umidità ±1% di umidità relativa temperatura ±1 Celsius
Umidità isteresi ±1% RH
Stabilità a lungo termine ±0.5% UR / anno
Tempo di rilevazione medio: 2s
Dimensioni 12x 15,5 x5,5 millimetri

Il modello utilizzato venduto da Banggood è già montato su una basetta, insieme alla resistenza tra il pin di alimentazione e il pin dati, è inoltre presente un led che segnala la presenza dell’alimentazione. Il sensore è montato sullo speciale shield previsto sul robot ed è connesso al pin D7; per la sua gestione si utilizza una speciale libreria DHT.h.

sensore_dht11

Dispositivo PAN & TILT

Il dispositivo Pan & Tilt è analogo a quello già mostrato nell’articolo Gestione di un dispositivo Pan & Tilt con la scheda Arduino Esplora, questo è venduto dalla SparkFun codice ROB-10335.
Nel kit sono presenti i componenti meccanici cioè due staffe e tutto l’hardware necessario per il fissaggio, i servomotori devono essere presi a parte, quelli consigliati sono dei servo compatibili con il modello Hitec HS-55 codice Sparkfun ROB-09065 le cui caratteristiche sono:

  • Tensione: 4,8-6,0 V;
  • Coppia: 1,6/ 2 Kg/cm. (4.8 / 6.0V);
  • Velocità: 0.15 / 0.10 sec / 60 ° (4,8 / 6.0V);
  • Rotazione: ~ 160 °;
  • Ingranaggi in Nylon;
  • 3-Pole ferrite motore;
  • Dimensioni: 31,8 x 11,7 x 29 mm;
  • Filo Lunghezza: 160 mm;
  • Peso: 9g.

kit-pan_tilt

I due servo sono collegati allo speciale shield realizzato per il robot e risultano collegati alle porte D5 (servo Pan) e D6 (servo Tilt).
Per la gestione è utilizzata la libreria servo.h.

WebCam

RoboYún è dotato di una webcam, la scelta del modello, è fatta anche in funzione della possibilità di essere riconosciuta dalla sistema operativo della scheda Arduino Yún, quindi si è scelto il modello C170 della Logiteh.

c170

Questa WebCam è un modello poco costoso dalle buone caratteristiche, che sono:

  • Acquisizione video: Fino a 1024 x 768 pixel;
  • Tecnologia Logitech Fluid Crystal;
  • Foto: Fino a 5 megapixel (con interpolazione software);
  • Microfono incorporato con funzionalità di riduzione del rumore;
  • Certificazione Hi-Speed USB 2.0;
  • Clip universale per laptop e monitor LCD o CRT.

Shield con circuito gestione motori, dispositivo Pan & Tilt, sensori

Come abbiamo visto il motor Shield della Infineon, presenta un solo ponte H, per cui può gestire un solo motore DC nei due sensi di marcia, oppure due motori DC nello stesso senso di marcia.
Per questo motivo nell'azionamento dei motori sono utilizzati dei motor shield con intergrati tipo L293, SN754410, L298, che hanno al loro interno 4 ponti H, il che permette di gestire due motori nei due sensi di marcia.
Per aggirare il problema si è realizzato un apposito shield (Schema formato pdf) su cui sono montati due relè a doppio contatto, che permettono di invertire il senso di rotazione dei motori, indipendentemente dal senso dato dal modulo Infineon, che in questo caso viene utilizzato solo come regolatore della velocità di rotazione tramite la gestione PWM.

shield_yun

Il segnale proveniente dallo shield Infineon è applicato alla morsettiera X1, dove arriva ai due relè a doppio scambio controllati tramite i due transistor TR1 e TR2 (tipo BC547) pilotati dalle porte D2 e D4.

shield_yun_rele

Dettaglio della sezione gestione dei relè controllo rotazione motori.

L’attivazione dei relè è segnalato anche tramite i due Led D3 e D4, nel circuito sono poi presenti i diodi D1 e D2 che hanno il compito di scaricare rapidamente tutta l'energia accumulata nella bobina mantenendo la tensione inversa a valori accettabili e non dannosi per gli altri componenti.

rotazione_1

rotazione_2

Schema di attivazione  relè e rotazione motori

Sulla scheda sono inoltre presenti i connettori per il collegamento dei due servo del dispositivo di orientamento della webcam, il connettore per il sensore di temperatura/umidità e uno per il pilotaggio del circuito dei fari.

shield_yun_output

Sullo shield è poi montato un led di colore blu D5 controllato dalla porta D9 che è utilizzato per segnalare quando il robot è pronto ad accettare i comandi.