23
(http://www.mauroalfieri.it) Programmare con Arduino – leggere un segnale analogico By Mauro Alfieri (http://www.mauroalfieri.it/author/mauro) in Elettronica (http://www.mauroalfieri.it/category/elettronica) 15 luglio 2011 Penso sia la parte più unteressante, parlando di acquisizione di un input estrno, offerta da Arduino; il motivo della mia affermazione non risiede nella complessità di quello che facciamo ma nel fatto che acquisire un segnale analogico ti permette di utilizzare Arduino per interagire con il mondo esterno non più in bianco o nero (0 e 1) ma con 1024 sfumature di grigio. Pensa solo un attimo al tuo robot che può misurare la distanza dall muro e girare prima di toccarlo in opposizione a quanto visto nell’articolo dedicato al segnale digitale (http://www.mauroalfieri.it/informatica/programmare-con-arduino-%e2%80%93-leggere-un- segnale-diditale.html) in cui l’ipotetico robot avrebbe dovuto sbatterci contro il muro per accorgersi dell’ostacolo, io lo trovo fantastico. Passo a descriverti come si fa a leggere un segnale analogico e dove potrai leggere quei valori, partiamo con lo schema: Schema di collegamento di un potenziometro ad Arduino Come si vede in figura il collegamento del potenziometro è molto semplice, almeno quanto la lista della spesa: 1. una scheda Arduino 2. un potenziometro da 10K hom

Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

(http://www.mauroalfieri.it)

Programmare con Arduino – leggere un segnale analogicoBy Mauro Alfieri (http://www.mauroalfieri.it/author/mauro) in Elettronica(http://www.mauroalfieri.it/category/elettronica)15 luglio 2011

Penso sia la parte più unteressante, parlando di acquisizione di un input estrno, offerta da Arduino;il motivo della mia affermazione non risiede nella complessità di quello che facciamo ma nel fattoche acquisire un segnale analogico ti permette di utilizzare Arduino per interagire con il mondoesterno non più in bianco o nero (0 e 1) ma con 1024 sfumature di grigio.

Pensa solo un attimo al tuo robot che può misurare la distanza dall muro e girare prima di toccarloin opposizione a quanto visto nell’articolo dedicato al segnale digitale(http://www.mauroalfieri.it/informatica/programmare-con-arduino-%e2%80%93-leggere-un-segnale-diditale.html) in cui l’ipotetico robot avrebbe dovuto sbatterci contro il muro per accorgersidell’ostacolo, io lo trovo fantastico. Passo a descriverti come si fa a leggere un segnale analogicoe dove potrai leggere quei valori, partiamo con lo schema:

Schema di collegamento di unpotenziometro ad Arduino

Come si vede in figura il collegamento del potenziometro è molto semplice, almeno quanto la listadella spesa:

1. una scheda Arduino2. un potenziometro da 10K hom

Page 2: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Il gioco è presto fatto, collega gli estremi del potenziometro (quelli su cui è sempre presente unaresistenza di 10K ohm indipendentemente dalla posizione della manopola) rispettivamente al +5Ve Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro al pin A0 (ossia il pin 0 analogico, vedischema).

Il codice che utilizzeremo per i nostri esperimenti è il seguente:

Analizzo le linee di codice:

linee 01-08: contiene un commento multilinea, con in fondo la frase che autorizza all’uso libero ilcodice esposto

linea 10: definisce le operazioni di impostazione della scheda arduino (in un precedente articolo(http://www.mauroalfieri.it/informatica/programmare-con-arduino-le-basi.html)ho definito meglio acosa serve la funzione setup() ), NOTA: in questo esempio non abbiamo definito il pin 0 comeinput.

linea 11: indico ad Arduino che utilizzerò la comunicazione seriale a 9600 boud (vedi articolo(http://www.mauroalfieri.it/informatica/programmare-con-arduino-%e2%80%93-pin-digitali-e-analogici.html))

linea 14: definisco la funzione loop, quella eseguita ciclicamente da Arduino, anche per questafunzione ti rimando all’articolo “le basi (http://www.mauroalfieri.it/informatica/programmare-con-arduino-le-basi.html)”

linea 15: utilizzando una sintassi compressa dichiaro la variabile sensorValue e ne imposto ilvalore con il risultato letto sul pin 0 analogico, per leggere il valore del pin 0 analogico ho utilizzatoil comando analogRead(A0), NOTA: ho definito in questo comando che mi riferisco al pin 0analogico (A0), il comando analogRead leggerà ad ogni ciclo della funzione loop il valoreanalogico rilevato sul pin 0; tale valore varia tra 0 e 1023.

linea 16: il comando Serial.prinln(sensorValue, DEC) scrive sul canale seriale di arduino chemostra i risultati nel monitor seriale, per comprendere come funziona questo meccanismo ti invitoa leggere il mio articolo sui segnali digitali (http://www.mauroalfieri.it/informatica/programmare-con-arduino-%e2%80%93-leggere-un-segnale-diditale.html).

Non ti resta che inviare lo sketch ad Arduino, aprire il monitor seriale dell’IDE: (http://www.mauroalfieri.it/wp-content/uploads/2011/07/serial-monitor.png) e provare a spostare lamanopola del potenziometro tutta da un lato leggendo il valore rilevato (ad es: 0) e ruotando lamanopola osservare il valore aumentare fino a 1023 giungendo alla fine dell’escursione delpotenziometro.

0102030405060708091011121314151617

/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor This example code is in the public domain. */ void setup() { Serial.begin(9600);} void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue, DEC);}

Page 3: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Buona sperimentazione

Cortesemente, prima di inserire i commenti leggi il regolamento(http://www.mauroalfieri.it/regolamento.html)

You may also like:

Batterie Li-Po cosasono e come legestisci Mauro AlfieriElettronica(http://www.mauroalfieli-po-cosa-sono.html)

Arduino - primi passi- Mauro AlfieriElettronica DomoticaRobotica Elettronica,Informatica(http://www.mauroalfieprimi-passi.html)

The Tactigon arduinoide(http://www.mauroalfietactigon-arduino-ide.html)

RTC shield DS1307:impostare data e ora- Mauro AlfieriElettronica(http://www.mauroalfieshield-ds1307-impostare-data-e-ora.html)

macchine da cucireArchives(http://www.mauroalfieda-cucire/nggallery/thumb

Display lcd 1602 I2CPCF8574T - MauroAlfieri ElettronicaRobotica(http://www.mauroalfielcd-1602-i2c-pcf8574t.html)

Corso ArduinoGratuito conTinkercad - MauroAlfieri TutorialElettronica(http://www.mauroalfiearduino-gratuito-con-tinkercad.html)

Halloween Pumpkin3D - Mauro AlfieriElettronica DomoticaRobotica Elettronica(http://www.mauroalfiepumpkin-3d.html)

arduino (http://www.mauroalfieri.it/tag/arduino), elettronica arduino(http://www.mauroalfieri.it/tag/elettronica-arduino), IDE di sviluppo(http://www.mauroalfieri.it/tag/ide-di-sviluppo), programmare arduino(http://www.mauroalfieri.it/tag/programmare-arduino), robot con arduino(http://www.mauroalfieri.it/tag/robot-con-arduino), segnali analogici(http://www.mauroalfieri.it/tag/segnali-analogici), segnali digitali(http://www.mauroalfieri.it/tag/segnali-digitali)

Page 4: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Permanent link to this article: http://www.mauroalfieri.it/elettronica/programmare-con-arduino-leggere-un-segnale-analogico.html

68 comments

1 ping

Skip to comment form

(http://www.mauroalfieri.it/author/mauro)

Mauro Alfieri (mailto:[email protected])

Daniel on 24 maggio 2012

ciao, ascolta ho un problemino devo far accendere 3 led con un potenziometro. il potenziometro ha la funzione di cambiare la variabile ( in questo caso la chiamerò X).con X, a seconda del valore accende un determinato led.

esempio, X 381682 // accende il led 3

PROBLEMA. io per far ciò, ho utilizzato la funzione if, else. l’unica cosa è che ho unintoppo sul led 2 ovvero non so come mettere le condizioni del if. io ho fatto in questo modo:

if (X >381<681) { digitalWrite (1, HIGH) ; } else { digitalWrite (1, LOW); }

in questo caso, se lo carico su arduino, funziona tutto, l'unica cosa è che il led 2 ( ossial'uscita 1 su ardu) rimane sempre acceso… come posso fare per risolvere?

Mauro Alfieri (http://www.mauroalfieri.it) on 25 maggio 2012 Author

Page 5: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao Daniel, il modo in cui hai scritto quella condizione è la prima volta che lo incrocio,probabilmente è una mia mancanza, ma non saprei cosa tu voglia ottenere daquella condizione. Per il tuo problema premetto che un potenziometro varia da 0 a 1023,supponendo di dividere i valori in 3 avrai: 1024/3 = 341,… prendi solo gli interi ediciamo led 1 0-341, led 2 342-682, led 3 683-1023 la condizione è:

if ( (0 < X) && (X < 341) ) ... else if ( (342 < X) && (X < 682) ) ... else ... Spero tisia utile. Mauro

Cesare on 11 maggio 2013

Salve, ho una difficoltà, monto un lm35 sul pin 0 e leggo la tmp, monto assieme a questoun potenziomentro sul pin 1 (provato sia uno da 47k che uno da 1k, putroppo questi avevoa disposizione) ed oltre un certo valore inizia a sballare la lettura della tmp, da cosa puòdipendere e come posso risolvere il problema? Grazie e saluti Cesare

Mauro Alfieri (http://www.mauroalfieri.it) on 12 maggio 2013 Author

Ciao Cesare, hai provato a leggere solo il valore del pin 0 con lo sketch ruotando ilpotenziometro ma senza leggere il pin?

Potrebbe essere un errore di sketch o di collegamento del potenziometro.

Mauro

Cesare on 13 maggio 2013

Grazie della risposta ho fatto la prova che dicevi ed anche escludendo il comando dilettura, sballa lo stesso, ho (diciamo) risolto il problema mettendo un condensatore tral’uscita dell’lm 35 e la terra nel tentativo di eliminare del rumore pescato da chissà dove edevo dire cha ha funzionato, la cosa strana, se collego solo il potenziometro su uningresso analogico il valore letto su questo funziona correttamente, ma se mi metto inascolto sugli altri ingressi su cui nn è collegato nulla leggo delle variazioni anche lì, l’ideache mi sono fatto è che la breadboard pesca rumore, fa come da antenna, potrebbeessere secondo te?

Mauro Alfieri (http://www.mauroalfieri.it) on 13 maggio 2013 Author

Page 6: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao Cesare, le uscite analogiche possono fluttuare se non collegate a nulla è un fenomenoche ho riscontrato anche io. Talvolta è sufficiente in fase di inizializzazione, setup(), inviare un segnaledigitalWrite( pin, LOW ) dove pin è il pin analogico di cui vuoi misurare il valore.

Questa operazione attiva una resistenza di pull-down interna ad arduino. Io consiglio di collegare sempre un carico da almeno 330ohm verso Gnd, laresistenza di pull-down in questo caso è fisica.

Mauro

Andrea on 20 giugno 2013

Salve, nella configurazione e nella lettura consecutiva di 2 ingressi analogici, a cui sono collegati2 convertitori di segnale 4-20mA/0-5V, su una scheda Arduino Mega 2560 mi sono accortoche le letture sballano, tra l’altro non riesco a leggere un valore maggiore di 250 count suquesti ingressi..la cosa mi succede anche se collego 2 potenziometri 10K alimentati con la5V della scheda…cosa devo fare a livello HW e SW per risolvere il problema? Grazie e saluti Andrea

Mauro Alfieri (http://www.mauroalfieri.it) on 20 giugno 2013 Author

Ciao Andrea, hai provato a segnalare la cosa nel fornum arduino od al tuo rivenditore? Sembra un problema hardware se si presenta anche con un semplicepotenziometro, i valori che dovresti leggere sono 0-1023 o poco meno

Mauro

Manuel Del Signore on 27 ottobre 2013

Salve, Io ho un problema a far trasformare il valore della letture del potenziometro in percentuale. ES: se il valore è 1023 in percentuale è 100% se il valore è 0 in percentuale è 0%

Come posso fare per risolvere ?

Mauro Alfieri (http://www.mauroalfieri.it) on 28 ottobre 2013 Author

Page 7: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao Manuel, innanzitutto ti chiedo di leggere atentamente l’avviso presente in ogni articolo epagina del blog in cui è scritto di non incollare codice nei comemnti perchè arrivaillegibile e non posso comunque aiutarti.

La prossima volta eliminerò direttamente il tuo commento se non rispetti l’avviso. Il tuo problema non è legato ad arduino ma alla matematica, ti consiglio dileggere come funzionano le proporzioni e comprenderai come convertire il valore,ad esempio se leggendo il potenziometro ottieni 512 la proporzione è: 1023 : 100= 512 : x da cui x = ((512*100)/1023) = 50% circa

Mauro

Manuel Del Signore on 28 ottobre 2013

Scusa, Non ho visto l’avviso; Comunque io ho già fatto come dici tu ma non ho il valore corretto!! Io ho provato cosi: 1023:100=(Lettura potenziometro):X ——-> [100*(Lettura potenziometro)]/1023 come risultato escono sia numeri positivi che negativi (cosa impossibile)

Ho provato anche con: [(Lettura potenziometro)/1023]*100 ——> in queto caso escono solo 2 valori 0 e 100 nonda valori intermedi.

P.S. non trovo un indirizzo e-mail per inviarti il codice

Mauro Alfieri (http://www.mauroalfieri.it) on 29 ottobre 2013 Author

Ciao Manuel, hai scritto le formule con le parentesi quadre? Dimmi di no …

L’errore potrebbe essere sintattico, in informatica le parentesi che puoi usare per icalcoli sono solo le tonde () le quadre [] e le graffe {} servono a tutt’altro scopo.

Mauro

Manuel Del Signore on 30 ottobre 2013

no no ho usato quella forma solo per far capire come si svolgono icalcoli

Albeto Dalponte on 21 gennaio 2014

Page 8: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao a tutti, mi riferisco al problema segnalato da Manuel Del Signore; l’anno scorso sono incappato anch’io in questo problema, poi ho capitoche la lettura di un input analogico è un valore intero se non si decidediversamente. Non è sempre possibile ottenere risultati esatti utilizzandogli operatori * e / con gli interi, il sistema impazzisce. Occorre inizialmente dichiarare una variabile float es : float vel; e poi leggere l’ingresso analogico assegnandogli il valore: vel=analogRead(A0); adesso si possono fare operazioni come: tp=((((vel-542)*195)/(-481))+200); ed utilizzare questo risultato per es per la pausa tra un passo e l’altro diun motore passo passo Spero di avervi risolto il problema.

Alberto Dalponte

Mauro Alfieri (http://www.mauroalfieri.it) on 22 gennaio2014

Author

Grazie Alberto, ottima descirzione. Se il problema si riferisce al delay tra uno step ed il successivopuoi usare anche delayMicrosecond oltre al delay, che lavoraper millisecondi; certo il problema dell’intero non cambia e,come giustamente dici, il valore letto dal pin analogico resta unvalore intero non modificabile come tipo.

Mauro

Giuseppe Morello on 11 novembre 2013

Salve, come posso fare per fare leggere ad arduinouno due potenziometri e un interruttoreon/off. posso fargli fare una scansione degli ingressi analogici ed una lettura? grazie Giuseppe

Mauro Alfieri (http://www.mauroalfieri.it) on 12 novembre 2013 Author

Page 9: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao Giuseppe, puoi leggere i potenziometri con gli ingressi analogici e l’interruttore con uningresso digitale o analogico secondo come ti è più comodo.

Mauro

michele on 14 novembre 2013

Ciao Mauro, in questo esempio non viene mostrato lo schema pratico di collegamento.Grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 14 novembre 2013 Author

Ciao Michele, hai ragione, puoi seguire lo schema rilasciato sul sito ufficiale arduino o in uno deialtri tutorial sui potenziomatri. I collegamenti sono sempre i medesimi, i due poli esterni del potenziometrorispettivamente a +5v e Gnd ed il pin centrale all’ingresso analogico da cui vuoileggere il segnale.

Mauro

Angelo on 25 febbraio 2014

Buon giorno Mauro. Innanzitutto complimenti per il tuo lavoro. Io mi avvicino da poco ad Arduino e vorrei costruire un sistema di allarme. Sai dove posso trovare dei sensori da mettere alle finestre che siano completi diricevitore? Grazie anticipatamente Angelo

Mauro Alfieri (http://www.mauroalfieri.it) on 25 febbraio 2014 Author

Ciao Angelo, che tipo di sensori hai in mente? Magnetici, IR, PIR o altro ? Quando scrivi “dotati di ricevitore” a cosa ti riferisci?

Angelo on 25 febbraio 2014

Page 10: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Pensavo alla tecnologia reed per potere allarmare l’apertura delle tapparelle. Per “Dotati di ricevitore” intendevo dire che si possano collegare ad Arduino senza fili. Quindi una coppia di trasmettitore e ricevitore in wireless

Mauro Alfieri (http://www.mauroalfieri.it) on 25 febbraio 2014 Author

Ciao Angelo, già pronti non ne conosco. Dovresti progettarteli e costruiti scegliendo i componenti e il metodo ditrasmissione più adatto al tuo scopo.

Marco on 18 agosto 2014

Ciao Mauro ho fatto un attimo una prova come dicevi tu collegando il potenziometro adArduino dove alle estremità do l’alimentazione e al centro lo collego al pin A0 ma niente da fare, o non so bono io, oppure i potenziometri che ho è tutti fasulli ne hoprovato una da 4K7 una da 2M2 e uno da 220K ma quando giro il potenziometro da 5V a0V mi dovrebbe variare il valore da 1023 a 0 ed invece mi rimane sempre a 1023 variandominimamente fino a 1010 e se non tocco per niente il potenziometro il valore varia perconto suo alzandosi e ribassandosi fino a 950 se non so fare ste semplici cose lascio andare veramente

Mauro Alfieri (http://www.mauroalfieri.it) on 18 agosto 2014 Author

Ciao Marco, che tutti i tuoi potenziometri siano inefficienti è vera sfortuna. Primadi abbandonare prova a collegarli ad A1 cambiandolo nel codice e vedi cosaaccade. Se continui a leggere 1023 inverti il pin del +5 con quello su A1 e seleggi ancora 1023 o 0 fisso inverti il pin a gnd con quello su A1. In pratica provitutte le combinazioni tra pin e potenziometro.

gionathan on 21 settembre 2014

ciao Mauro , mi son avvicinato da poco al mondo di arduino e come primo progetto vorreiaccendere e spegnere un led tramite un sensore di suono ma non so come programmarlose potresti darmi qualche consiglio te ne sarei grato ciao a presto

Mauro Alfieri (http://www.mauroalfieri.it) on 22 settembre 2014 Author

Page 11: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao Gionathan, hai già individuato un sensore di suono che ti piacerebbe usareo vuoi utilizzare un microfono?

Gabriele on 20 dicembre 2014

Gentilissimo Mauro, Ho collegato un joystick da 10k ed un display cosi’ da stampare sull LCD i valori X e Ypiuttosto che in console seriale. Grazie ai sui consigli presi qua e la’ funziona tutto ameraviglia. Unico neo e’ che il joystick arriva a 1023 (o a zero) gia’ a meta’ corsa. Essendo un microjoystick (il classico simile a quello fornito in kit) non mi permette una regolazione di fino. Che faccio lo butto ? Grazie se mi vorra’ rispondere Gabriele

Mauro Alfieri (http://www.mauroalfieri.it) on 23 dicembre 2014 Author

Ciao Gabriele, mi sembra strano il comportamento del joystick, tuttavia con alcuni prodottieconomici è possibile che il potenziometro su cui sono costruiti non sia di buonaqualità. Io chiederei al rivenditore spiegazioni in merito, i rivenditori autorizzati disolito verificano il prodotto ed in caso di anomalia lo sostituiscono.

Gabriele on 23 dicembre 2014

Grazie per la risposta. Si tratta di un mini joystick sparkfun. Praticamente si lamentano tutti diquella che viene definita “dead zone” di questo aggeggio e che dipendedalla qualita’ dei potenziometri evidentemente scarsa. https://www.sparkfun.com/products/9032(https://www.sparkfun.com/products/9032) (avessi letto prima !).

Personalmente l ho trovato su eBay senza marchio, ma con gli stessipot a bordo. I pot incriminati (10k tolleranza +o- 30% … alla faccia della precisione !)recitano b103-3810. L originale sparkfun non ha il suffisso”b”.

Spero di essere stato utile a qualcuno

PS Ho recuperato un joystick da 5K da un vecchio radiocomando RCguasto. Va che e’ una meraviglia.

Page 12: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Mauro Alfieri (http://www.mauroalfieri.it) on 24dicembre 2014

Author

Grande Gabriele, mi spiace che ti sia accorto solo dopo dell’informazione a volteimpiego più tempo a scegliere i componenti da acquistare chea scrivere il codice. Non mi ero accorto neppure io dell’esistenza di joystick tantoimprecisi e farò tesoro del tuo suggerimento… che dire: W ilriciclo di componenti

Antonio Russo on 22 gennaio 2015

Ciao Mauro, innanzitutto vorrei farti i complimenti per i tuoi tutorial e spiegazioni, davvero utilissime pergente alle prime armi come me. Io sono un neofita del mondo arduino e spero di non fare una figuraccia; all’interno di unprogetto che mi piacerebbe realizzare, avrei bisogno di utilizzare un joystick, così hoseguito tutti i passi per poterlo collegare e leggerne i valori, che però mi sono risultati moltostrani, perchè, a prescindere della posizione dello stesso, continuavano a salire escendere tra 0 e 1023. Così ho provato una lettura a vuoto di tutti gli ingressi analogici della mia arduino UNO,ottenendo sempre lo stesso risultato, valori che variano tra 0 e 1023 a mò di ondasinusoidale. Tutto questo è normale? vi prego aiutatemi a risolvere

Mauro Alfieri (http://www.mauroalfieri.it) on 23 gennaio 2015 Author

Ciao Antonio, i pin analogici arduino non connessi a nulla si dice che “flottano” cioèrestituiscono valori arbitrari tra 0 e 1023. Se quando colleghi il joystick continui a rilevare valori di questo tipo prova averificare le connessioni elettriche del joystick e dei potenziometri ad essoconnessi.

Massimo Andreani on 31 marzo 2015

Page 13: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao Mauro, complimenti per i bellissimi e utili tutorial, molto interessanti e utili visto che sono all’inizio. Sto costruendo un apparecchio per fare fotografie alle gocce d’acqua che cadono e siscontrano, ma mi trovo davanti ad un problema, per regolare il tempo di aperturadell’elettrovalvola che genera le gocce utilizzo due potenziometri, uno per la prima gocciaed uno per la seconda, in realtà ne andrà inserito un terzo per il tempo tra una goccia el’altra, ma qui l’imprevisto….con un potenziometro, 10K, collegato al pin analogico 0 per lagoccia 1 funziona tutto bene, ho anche convertito il valore 0-1023 in un range 40-200 cheutilizzo come tempo per l’apertura della valvola, ma nel momento che collego anche ilsecondo potenziometro, 10K, per la goccia 2, i valori si sballano, nel senso che è come seuno limitasse l’altro nei valori, non ho più l’escursione che ho quando sono collegatisingolarmente, cosa puo causare questa “dipendenza”?. Ti ringrazio in anticipo dell’aiuto

Massimo

Mauro Alfieri (http://www.mauroalfieri.it) on 31 marzo 2015 Author

Ciao Massimo, stai utilizzando un arduino originale? Francamente è la prima volta che mi capita di leggere un problema come il tuo,ho collegato più potenziometri da 10K molte volte per molti esperimenti ma maiho notato una influenza degli uni sugli altri. Prova a verificare con un tester cosa accade all’alimentazione arduino e cosaelettricamente su ciascun potenziometro.

Massimo Andreani on 31 marzo 2015

No al momento nel progetto è inserita una scheda non originale,Funduino, potrebbe dipendere da quella?, per altre cosette non ha maidato problemi, magari provo a mettere una Uno ufficiale, e verifico comedici l’alimentazione. Ti farò sapere, grazie per la celere risposta intanto

Mauro Alfieri (http://www.mauroalfieri.it) on 31 marzo2015

Author

Mi spiace Massimo, ma non conoscendo tutte le schede quando mi indicateanomalie di questo tipo penso subito ad un clone, come nel tuocaso. Prova con un arduino uno r3 originale.

Page 14: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Nico on 16 ottobre 2015

Salve, sto usando arduino uno in un progetto e tra le cose che deve fare, dovrebbeleggere (con la maggior precisione possibile) delle tensioni. Per aumentare la scala divalori che può leggere prelevo le tensioni tramite un partitore. Ora, per evitare di avereeffetti di carico data l’alta impedenza sia del pin sia del partitore preleva questa tensioneda un buffer e la mando nel pin analogico. Il problema è che queste tensioni nonsembrano molto veritiere, anzi direi proprio che non lo sono. C’è qualcosa in particolare dasapere sulle letture dai pin analogici, o qualche limite? Premetto che il codice è corretto epertanto non mi riferisco a quello con la domanda. Grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 20 ottobre 2015 Author

Ciao Nico, l’unica cosa che mi viene in mente è la presenza del convertitore analogicodigitale su arduino a 10bit che comporta i 1024 passi di lettura su 5v da cuideduci 0,0048v di risoluzione. Questo tipo di risoluzione potrebbe essere amplificato dal circuito che haianteposto.

Gino on 22 novembre 2015

Ciao, sto realizzando un progetto con arduino uno che prevede l’alimentazione con una batteria. Mi interessa controllare la tensione della batteria attraverso lo stesso arduino e pensavo diutilizzare il pin analogico: ho prelevato la tensione della batteria attraverso un partitore (inmodo da ridurre la tensione sotto i 5 volt) e la ho applicata al pin A0. Con analogReadvisualizzo il valore analogico sulla porta seriale… Ora sorgono i seguenti problemi: 1) i valori letti sul pin A0 sono molto variabili: da cosa dipende? se tento di visualizzare latensione con un multimetro questa risulta stabile… 2) come previsto il valore analogico è compreso in un intervallo da 0 e 1023 ma comeposso ricavarmi la tensione in volt applicata al pin A0? Penso che ci vorrebbe unatensione di riferimento a cui rapportarsi ma quale potrebbe essere? Grazie in anticipo per la cortese e paziente risposta.

Mauro Alfieri (http://www.mauroalfieri.it) on 23 novembre 2015 Author

Page 15: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ciao Gino, per la prima domanda potrebbe dipendere sia dal fatto che misuri l’alimentazionedal medesimo apparecchio che la utilizza, sia da un problema nello schema diconnessione elettrica per cui potresti necessitare di un circuito differente. Per la seconda richiesta la tensione di riferimento la hai è 5v a 1023 per cui puoifare una proporzione, troverai molti esempi, anche nello stesso IDE arduino, sucome fare.

Davide on 2 dicembre 2015

Cia mauro! A me succede una cosa strana, mi legge un range da 0 a 33333. Ilpotenziometro è di 10k. Come mai?

Mauro Alfieri (http://www.mauroalfieri.it) on 2 dicembre 2015 Author

Ciao Davide, strano forte !!! io penso che dipenda dall’ADC presente sulla scheda .. è unarduino.cc originale? Prova a verificare con un tester che il potenziometro sia un 10K edeventualmente segnala al rivenditore la cosa.

Sergio on 22 dicembre 2015

Ciao ho un problema che non riesco a capire se è risolvibile. Io ho un sensore dispostamento lvdt che ha una tensione di uscita che va dal negativo al positivo (peresempio da 1,25 V a -1.14V. Collegando il sensore ad Arduino mi sono accorto che fino aquando il sensore non restituisce una tensione positiva per arduino il valore del Pin è 0.Perciò io mi perdo dei dati e le letture sono falsate. E’ possibile impostare il pin di ingressoanalogico in modo che legga anche tensioni negative? Grazie.

Mauro Alfieri (http://www.mauroalfieri.it) on 22 dicembre 2015 Author

Ciao Sergio, non son certo si possa fare, prova a verificare le possibilità dell’IOREF e AREFse possano fare al caso tuo. In alternativa puoi immaginare un circuito di shift del segnale da -1.14v / 1.25v adun range tutto positivo.

Page 16: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Sergio on 23 dicembre 2015

Grazie proverò .

Mauro on 23 agosto 2016

Buongiorno, utilissimo esempio per chi è alle prime armi con arduino. Io però vorrei fare una cosa leggermente diversa, vorrei leggere delle tensioni che sono aldifuori da Arduino. Su un connettore a pettine ho una massa comune e 18 segnali elettrici da 0 a 5V. Perpoter leggere questi segnali con arduino, basta collegare la massa tra arduino e ildispositivo, e leggere i valori come ingressi analogici?

Grazie.

Mauro Alfieri (http://www.mauroalfieri.it) on 27 agosto 2016 Author

Ciao Mauro, così come descrivi il problema dovrebbe esserti sufficiente, a parte il numero disegnali ( 18 ) per i quali non hai sufficenti pin arduino neppure sulla versionegenuino mega. Tuttavia verifica bene la parte elettronica prima di collegarla direttamente,potrebbe danneggiarti arduino se i segnali non fossero esattamente 5v.

Lorenzo on 9 gennaio 2017

Buongiorno Mauro, intanto complimenti per il prezioso materiale che ci fornisci. Volevo solo segnalarti che in alcuni dei tuoi tutorial (incluso questo) non sono presenti leimmagini dei circuiti che descrivi.

Mauro Alfieri (http://www.mauroalfieri.it) on 9 gennaio 2017 Author

Ciao Lorenzo, grazie per la segnalazione. Non è un errore, è voluto, in schemi molto semplici, come questo, che si trovanosu google lascio che siate autonomi nel trovare uno schema o realizzarne unovostro.

Page 17: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Lorenzo on 9 gennaio 2017

Ciao Mauro e grazie per la risposta. Avevo scritto pensando fosse saltata la figura dato che nel tutorial c’èscritto “partiamo con lo schema:” e più sotto “Come si vede in figura…”

Mauro Alfieri (http://www.mauroalfieri.it) on 10 gennaio2017

Author

Grazie Lorenzo per la segnalazione, in questo caso hairagione, avevo proprio dimenticato la figura. L’ho aggiunta. Se noti altri articoli con tale dimenticanza avvisami pure.

Giordano on 11 agosto 2017

Ciao Mauro. Ho trovato questa discussione per caso. Leggo che ci sono dei tutorial. Puoiindicarmi come poterli leggere? Conosco un po di elettronica ma quasi nulla diprogrammazione. Ho una scheda che pilota una saldatrice a punti. Ruotando unpotenziometro da 10K si accendono 8 led in sequenza che corrispondono ad altrettantitempi di saldatura da 10 a 80 mS in passi di 10 mS. Vorrei poter leggere su un displayLCD dei valori in modo continuo da 1 mS a 100 mS ad esempio e poi passare questovalore alla variabile già esistente. Grazie in anticipo.

Mauro Alfieri (http://www.mauroalfieri.it) on 11 agosto 2017 Author

Ciao Giordano, puoi leggere tutti i miei tutorial su questo blog. Non saprei aiutarti in quello che desideri non avendo info in merito al tipo disaldatrice ed alle tensioni coinvolte.

Marius on 25 novembre 2017

Ciao Mauro, sto cercando di realizzare un mio progetto e sono inciampato in questaproblematica. Devo leggere un ingresso analogico con arduino mega ogni 20microsecondi. Io ho provato ha fare questo piccolo programma e quando ho visto il

Page 18: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

risultato mi sono bloccato. Il programma di prova che ho fatto è questo:

[[ codice rimosso in automatico ]]

Come dicevo prima il valore dell’analogica varia da 0 a 100 e ritorna a 0 in circa 25microsecondi. Il fatto che il tempo rilevato nel prog di prova è di 116 microsecondi, riesco aleggere la variazione dell’analogica???

Grazie e complimenti per i tuoi post.

Marius

Mauro Alfieri (http://www.mauroalfieri.it) on 27 novembre 2017 Author

Ciao Marius, ti chiedo, in primo luogo il rispetto delle regole presenti in fondo ad ogni articolo. Il codice non può essere incollato nei commenti. In merito alla tua richiesta penso che i tempi in cui hai necessità di rilevare lavariazione siano davvero ristretti, potresti provare con altre tipologie diprocessore come i Cortex o i SAMD sempre nella famiglia arduino.

Peppe on 24 dicembre 2017

Salve Mauro, volevo chiedere, se ad esempio io comando con un potenziometro unservomotore questo cambia l’angolo di rotazione in base a come muovo io ilpotenziometro, ma è possibile se io vorrei dargli un primo movimento e dopo finito quelmovimento Arduino ricordi quello che ho fatto e lo faccia da solo fino a quando non decidodi cambiarlo nuovamente?

Grazie mille

Mauro Alfieri (http://www.mauroalfieri.it) on 27 dicembre 2017 Author

Ciao Peppe, si è possibile farlo, devi progettare lo sketch in modo adeguato a far questo, nonlo fa da solo.

Gianfranco on 3 febbraio 2018

Complimenti per tutti i tuoi insegnamenti che seguo da anni . Riprendendo ad usarearduino, non ricordo come numerare le righe degli sketch, puoi dirmi come fare ? Grazie.

Page 19: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Gianfranco Toniutti

Mauro Alfieri (http://www.mauroalfieri.it) on 5 febbraio 2018 Author

Ciao Gianfranco, in primo luogo evita di inserire l’indirizzo email nei commenti in chiaro. in secondo luogo ti chiedo la cortesia di inserire i commenti negli articoli chetrattano l’argomento. L’aggiunta delle linee nell’IDE arduino si imposta nelle preferenze dell’IDE stesso,dovrei aver scritto un articolo in merito.

Domenico on 7 aprile 2018

Salve, avrei bisogno di una soluzione in quanto sto alle prime armi, ho visionato diversiskech per capire il funzionamento della programmazione e riesco a fare qualche modifica.Sono arrivato tra lo scopiazzare e modificare a crearmi un menu per arduino Uno. Vorreiche due lm35 mi devono comandare un servomotore per aprire e chiudere una botola inmodo da ottenere una temperatura confort di 20C. Il problema più grosso è che ho diversivoid, void temperatura1 void temperatura2 ecc. i comandi if else non funzionanoall’esterno del ciclo void, in pratica come si comanda il servomotore in base ai duesensori? C’è un’altra via? Non trovo esempi simili ma solo di un singolo sensore cioètermostato. Grazie per l’attenzione.

Mauro Alfieri (http://www.mauroalfieri.it) on 10 aprile 2018 Author

Ciao Domenico, non ho compreso la tua richiesta. Ricorda che il loop() è uno solo ed al suo interno devi leggere tutti i sensori chevuoi ed applicare le logiche. Se crei funzioni void estrene al loop e le richiamo devi portare i valori ricavati nelloop().

Andrea on 18 settembre 2018

Salve Mauro, sto realizzando una scheda per la mia asciugatrice, tutto funzioa ma sono bloccato sullalettura analogica . Ti spiego: l’asciugatrice, come forse già sai, controlla l’umidità tramite lalettura della resistenza delle due mezze vasche, i panni umidi creano la continuità tra ledue metà.

Page 20: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Ho provato ad usare un partitore per la lettura analogica, mantenendo i valori fissi delleresistenze per avere una misura costante quando i panni sono asciutti o non ci sono,quindi una lettura di default, mettendo poi in parallelo alla resistenza collegata alla vcc lavasca. Le letture a questo punto cominciano ad oscillare in modo anomalo quando non c’ècontinuità(sena panni umidi) e questo lo comprendo perchè sarebbe come lasciare‘flottante’ il partitore’, ma anche con i panni umidi o ‘cortocircuitando’ la vasca, le lettureoscillano enormemente. Hai qualche consiglio? grazie

Mauro Alfieri (http://www.mauroalfieri.it) on 19 settembre 2018 Author

Ciao Andrea, non mi è chiaro lo schema che stai usando ma potrebbe essere dovuto alla miaignoranza sul funzionamento di rilevazione dell’umidità dell’asciugatrice. Posso di certo dirti che in presenza di valori incostanti è meglio eseguire unamedia delle letture, magari fissando degli offset sotto sui scartare il valore rilavatoper pulirlo da eventuali disturbi dovuti alla parte elettrica e non al sensore stesso. In pratica hai la necessità di definire se con i panni umidi ci sia una significativavariazione dei valori rispetto ai panni asciutti o all’assenza di questi ultimi. Stabilite le soglie puoi eseguire nel codice un ciclo da 1000, o superiori, letture edefinire la media di queste ultime per arrivare a determinare la presenza o menodi panni umidi. Nel tuo caso sei abbastanza fortunato in quanto necessiti della consapevolezzasolo del dato “ci sono panni umidi” o “non ci sono panni umidi” e non dell’umiditàpresente, per cui puoi scartare quei valori sotto o sopra una certa soglia.

Andrea on 22 settembre 2018

Ciao, grazie per la risposta! Ho risolto abbastanza con le medie! Le vasche delle asciugatrici sono divise a metà da una striscia inplastica in modo da tenerle separate elettricamente, la metà anteriore haun carboncino che sfrega la vasca (collegato ad un cavetto con faston),la metà posteriore è collegata tramite l’albero alla carcassa. Quando ipanni umidi creano conduzione tra le due vasche posso leggere unvalore di resistenza o di conduttività usando un partitore di tensione .Non so bene che algoritmo venga usato , però funziona! Ora però ho un altro problema che non riguarda la lettura analogica mal’alimentazione: ti chiedo lo stesso, se vuoi reindirizzarmi posso capire. La scheda che sto realizzando usa naturalmente dei relè per pilotare ivari carichi(motore, compressore frigo,ecc) e sto visualizzando dati suun lcd. I rele sono su una scheda da 8 rele optoisolati. Non sempre, maspesso, il display smette di visualizzare correttamente e mostra caratteri

Page 21: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

random , nonostante non ci siano interruzioni nello sketch o reboot vari,solo il display. Non è necessariamente collegato all’attivazione di unrelè, ma se la faccio andare senza il carico funziona sempre. La miadomanda è: anche se uso due alimentazioni (5V), una per i relè ed unaper Arduino e display, anche se ci sono gli optoisolatori, può il carico220V pilotato dai relè creare un assorbimento o disturbo tale dascombussolare il display? Misurando con pinza amperometrica non vedo mai correnti maggiori di 2Ampere e i relè sono da 10A. Sono piu orientato verso i disturbi , ma non capisco come possano‘passare’. Cosa posso usare? VDR? Filtri antidisturbo tipo appunto quelli sullelavatrici? Grazie della pazienza!

Mauro Alfieri (http://www.mauroalfieri.it) on 24settembre 2018

Author

Ciao Andrea, i relé hanno di solito un isolamento dichiarato, puoi verificaresul tuo modello e dal datasheet quale sia. Dubito che si possatrattare di un problema di isolamento anche in funzione delfatto che sono, ulteriormente, optoisolati. In questo momento stai usando due alimentazioni separate? Le masse di entrambe sono connesse tra loro?

Andrea on 24 settembre 2018

Ciao Mauro, ho parzialmente risolto (è ancora sotto test) con deicondensatori da 0,22 uF 275V tra i contatti dei relè,cercando in rete e sul forum Arduino ho visto che è unproblema comune quando si comandano dei carichiinduttivi. La cosa strana è che mi scombussola solo ildisplay (LCD 16×2), mentre l’atmega continua a giraretranquillamente. I vari consigli riguardavano il filtraggio tramite snubbero comunque un filtro RC per evitare gli ‘sfiammamenti’dei contatti del relè. Al momento c’è una alimentazione tramitetrasformatore 220V/5V USB per atmega, un’altra linea5V per la scheda relè e la linea 220V per le utenze,piu i condesatori tra i contatti del relè ma senzaresistenze. Le masse delle due linee 5V sono separate ,sono un

Page 22: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

po perplesso per il collegamento del pin analogicosulla carcassa della macchina per il controllo umidità ,in quanto una possibile dispersione a terra della linea220V mi possa ritornare in scheda. Stavo pensando dioptoisolare anche questa, ma avrei solo la possibilitàdi un ‘on-off’ inteso come ‘panni umidi o asciutti’ ,mentre come è adesso posso fare una stimaapprossimativa del grado di umidità. Devo anche considerare come separare lealimentazioni sulla scheda finita, pensavo ad untrasformatore a doppio secondario, ma devocomunque creare 2 VCC e 2 GND. Il progettino è interessante, uso millis per un discorsodi ‘multi tasking’ , in un secondo momento ci saràanche l’uso di un esp8266 per il monitoraggio webdella macchina, e questo prevede quindi una terzaalimentazione a 3,3V con un level shifter per lacomunicazione tra le due mcu. La soddisfazione,come ben sai, è di aver recuperato un macchinarioche avrebbe dovuto finire in piazzola ecologica acausa del prezzo della scheda originale e delconsumismo sfrenato! Grazie ancora!

Mauro Alfieri (http://www.mauroalfieri.it) on27 settembre 2018

Author

Ciao Andrea, sono contento di leggere che il tuo impegno ti stiadando soddisfazione. Qualche considerazione in merito a quanto scrivi: – se fai la doppia alimentazione è giusto che tu abbiadue Vcc ma dovrai avere una sola massa ( Gnd )come leggi in molti miei articoli; – se usi lESP8266 puoi usarlo anche comemicrocontrollore ed è anche più semplice fare tutta laparte server piuttosto della soluzione ArduinoUno +ESP8266 separata; – se è solo l’LCD a subire le interferenze dei carichiinduttivi potrebbe essere di non buona fattura ed inquesto caso puoi rivolgerti a prodotti di qualitàsuperiore che siano testati in situazioni come la tua.

Page 23: Programmare con Arduino – leggere un segnale analogico · e Gnd di arduino, non è importante quale va al +5v e quale al pin Gnd. Collega, quindi, il terminale centrale del potenziometro

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati(https://akismet.com/privacy/).

Inseguitore solare con Arduino – prima parte » Mauro Alfieri(http://www.mauroalfieri.it/elettronica/inseguitore-solare-con-arduino.html) on 9 luglio 2012

[…] Non mi dilungo sulla trattazione dell’ADC di Arduino e sula conversione da Analogicoa Digitale, ti consiglio di approfondirla leggendo questo articolo. […]