Laboratorio Arduino terza lezione Pietro Bonora - L.S. Sabin - Bologna Con i sensori sappiamo: - Collegare e leggere un sensore digitale; - Collegare e leggere un sensore analogico; - Modificare la scala della lettura di un sensore tramite il controllo proporzionale: funzione map (value, fromlow, fromhigh, tolow, tohigh) Sostanzialmente i sensori funzionano tutti allo stesso modo; per alcuni tipi di sensore ci sono accorgimenti particolari (esempio: sensore di posizione a ultrasuoni, encoders...)
TRASDUTTORE DI POSIZIONE
ATTUATORI: Al momento sappiamo gestire solo quelli digitali. (LED, buzzer). Attuatori analogici: ci interessano principalmente i motori. Gestione più complessa. TIPI di MOTORI ELETTRICI: - motori a corrente continua (2 fili, a magnete permanente), economici, potenti, facili da gestire ma senza controlli v, posizione - motori a corrente alternata (più potenti, costruzione più difficile).
Motori passo passo o stepper: pochissima potenza, regolazione precisissima della posizione. Hanno bisogno di un circuito driver di comando. Motori brushless : potenti, silenziosi, affidabili e senza manutenzione. Costano molto e hanno bisogno di un driver. Con sensori a effetto Hall: regolazione precisissima della veloictà. Questi due tipi di motore si riconoscono per i numerosi contatti.
Difficoltà da risolvere per il comando di un motore a CC con Arduino (per gli altri la gestione è molto più comlessa): 1) Fare in modo che un oggetto digitale (Arduino) fornisca una uscita analogica. Cioè, dobbiamo fare in modo che la tensione data da Arduino, che ha valori possibili solo di 0 e 5V, si trasformi in un intervallo continuo di tensioni tra 0 e 5V. 2) Problema della potenza: Arduino fornisce una corrente sufficiente ad accendere un LED o un buzzer, ma non per fare girare neppure un piccolo motore o accendere una lampadina a incandescenza. 3) Problema della polarità: se voglio avere un motore che gira nei due versi, devo invertire la polarità (+ e -) per invertire la marcia. Ma le uscite di Arduino sono fisse. + e GND.
PWM (pulse wawe modulation): frequenza costante (490 Hz). Quando si modulano frequenze si generano anche effetti sonori: http://youtu.be/qduaklarfjy
GESTIONE DELLA PWM: E' disponibile sulle uscite digitali (perché in verità è un segnale digitale!) contrassegnate dalla scritta PWM ~ Per scrivere un segnale PWM si utilizza il comando analogwrite (pin,valore); il valore va da 0 a 255; ATTENZIONE che un sensore analogico legge da 0 a 1023, quindi se nella variabile a leggo il valore di un sensore... a=analogread(apin); a può avere valori da 0 (minimo, 0V) a 1023 (massimo, 5V). Se voglio scrivere il valore di a su un attuatore analogico (esempio: regolo la luminosità di un LED), devo prima mappare il valore in modo che il massimo (5V) non corrisponda più a 1023, ma a 255! b=map(a,0,1023,0,255); analogwrite(bpin,b);
ALIMENTAZIONE di UN MOTORE a CC: La potenza fornita dalla corrente elettrica dipende da: - differenza di potenziale o tensione (Volt): ΔV=ΔE/q - intensità di corrente: I=q/Δt 100 J per unità di carica 60 J per unità di carica. ΔV= 40V q q 100-40 60 I è il numero di cariche che passano al secondo (= numero di camion al secondo). Potenza = ΔV I Arduino: 5V costanti (o meno, se PWM). I max= 0,040 A. P=0,2 W. Non riesce a pilotare: - oggetti che richiedono potenze superiori a 2W, funzionanti a tensioni superiori a 5V, che assorbono corrente superiore a 40 ma.
La cosa si risolve inserendo una fonte di potenza esterna, che controlliamo tramite Arduino:
diodo BASE COLLETTORE EMETTITORE Il transistor funziona come un interruttore che si apre in modo variabile in funzione della tensione applicata alla base. IMPORTANTISSIMO: il DIODO. Quando si interrompe l'alimentazione al motore, finché questo non si ferma agisce come una dinamo, che manda una corrente parassita sul transistor, bruciandolo! Un altro metodo è quello di utilizzare un relé, che però non regola la tensione: solo on/off. In compenso è più affidabile e sopporta tensioni maggiori.