Programmare con Arduino – leggere un segnale analogico

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 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:

AnalogReadSerial_BB

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

Il gioco è presto fatto, collega gli estremi del potenziometro (quelli su cui è sempre presente una resistenza di 10K ohm indipendentemente dalla posizione della manopola) rispettivamente al +5V e 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, vedi schema).

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

/*
 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);
}

Analizzo le linee di codice:

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

linea 10: definisce le operazioni di impostazione della scheda arduino (in un precedente articolo ho definito meglio a cosa serve la funzione setup() ), NOTA: in questo esempio non abbiamo definito il pin 0 come input.

linea 11: indico ad Arduino che utilizzerò la comunicazione seriale a 9600 boud (vedi articolo)

linea 14: definisco la funzione loop, quella eseguita ciclicamente da Arduino, anche per questa funzione ti rimando all’articolo “le basi

linea 15: utilizzando una sintassi compressa dichiaro la variabile sensorValue e ne imposto il valore con il risultato letto sul pin 0 analogico, per leggere il valore del pin 0 analogico ho utilizzato il comando analogRead(A0), NOTA: ho definito in questo comando che mi riferisco al pin 0 analogico (A0), il comando analogRead leggerà ad ogni ciclo della funzione loop il valore analogico 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 che mostra i risultati nel monitor seriale, per comprendere come funziona questo meccanismo ti invito a leggere il mio articolo sui segnali digitali.

Non ti resta che inviare lo sketch ad Arduino, aprire il monitor seriale dell’IDE: serial monitor e provare a spostare la manopola del potenziometro tutta da un lato leggendo il valore rilevato (ad es: 0) e ruotando la manopola osservare il valore aumentare fino a 1023 giungendo alla fine dell’escursione del potenziometro.

Buona sperimentazione

Cortesemente, prima di inserire i commenti leggi il regolamento

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

62 comments

1 ping

Skip to comment form

    • Daniel on 24 maggio 2012 at 21:20
    • Reply

    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 un intoppo 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 ( ossia l'uscita 1 su ardu) rimane sempre acceso… come posso fare per risolvere?

    1. 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 da quella 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 e diciamo 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 ti sia utile. Mauro

    • Cesare on 11 maggio 2013 at 10:46
    • Reply

    Salve, ho una difficoltà, monto un lm35 sul pin 0 e leggo la tmp, monto assieme a questo un potenziomentro sul pin 1 (provato sia uno da 47k che uno da 1k, putroppo questi avevo a 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

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

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

      Mauro

    • Cesare on 13 maggio 2013 at 15:17
    • Reply

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

    1. Ciao Cesare,
      le uscite analogiche possono fluttuare se non collegate a nulla è un fenomeno che ho riscontrato anche io.
      Talvolta è sufficiente in fase di inizializzazione, setup(), inviare un segnale digitalWrite( 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, la resistenza di pull-down in questo caso è fisica.

      Mauro

    • Andrea on 20 giugno 2013 at 10:08
    • Reply

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

    1. 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 semplice potenziometro, i valori che dovresti leggere sono 0-1023 o poco meno

      Mauro

    • Manuel Del Signore on 27 ottobre 2013 at 15:23
    • Reply

    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 ?

    1. Ciao Manuel,
      innanzitutto ti chiedo di leggere atentamente l’avviso presente in ogni articolo e pagina del blog in cui è scritto di non incollare codice nei comemnti perchè arriva illegibile 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 di leggere 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 at 17:24
    • Reply

    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 non da valori intermedi.

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

    1. 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 i calcoli sono solo le tonde () le quadre [] e le graffe {} servono a tutt’altro scopo.

      Mauro

        • Manuel Del Signore on 30 ottobre 2013 at 14:44
        • Reply

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

        • Albeto Dalponte on 21 gennaio 2014 at 21:10
        • Reply

        Ciao a tutti,
        mi riferisco al problema segnalato da Manuel Del Signore;
        l’anno scorso sono incappato anch’io in questo problema, poi ho capito che la lettura di un input analogico è un valore intero se non si decide diversamente. Non è sempre possibile ottenere risultati esatti utilizzando gli 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 di un motore passo passo
        Spero di avervi risolto il problema.

        Alberto Dalponte

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

          Mauro

    • Giuseppe Morello on 11 novembre 2013 at 11:54
    • Reply

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

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

      Mauro

    • michele on 14 novembre 2013 at 16:35
    • Reply

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

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

      Mauro

    • Angelo on 25 febbraio 2014 at 10:50
    • Reply

    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 di ricevitore?
    Grazie anticipatamente
    Angelo

    1. 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 at 11:37
    • Reply

    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

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

    • Marco on 18 agosto 2014 at 17:59
    • Reply

    Ciao Mauro ho fatto un attimo una prova come dicevi tu collegando il potenziometro ad Arduino 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 ho provato una da 4K7 una da 2M2 e uno da 220K ma quando giro il potenziometro da 5V a 0V mi dovrebbe variare il valore da 1023 a 0 ed invece mi rimane sempre a 1023 variando minimamente fino a 1010 e se non tocco per niente il potenziometro il valore varia per conto suo alzandosi e ribassandosi fino a 950
    se non so fare ste semplici cose lascio andare veramente

    1. Ciao Marco, che tutti i tuoi potenziometri siano inefficienti è vera sfortuna. Prima di abbandonare prova a collegarli ad A1 cambiandolo nel codice e vedi cosa accade. Se continui a leggere 1023 inverti il pin del +5 con quello su A1 e se leggi ancora 1023 o 0 fisso inverti il pin a gnd con quello su A1. In pratica provi tutte le combinazioni tra pin e potenziometro.

    • gionathan on 21 settembre 2014 at 10:18
    • Reply

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

    1. Ciao Gionathan, hai già individuato un sensore di suono che ti piacerebbe usare o vuoi utilizzare un microfono?

    • Gabriele on 20 dicembre 2014 at 19:28
    • Reply

    Gentilissimo Mauro,
    Ho collegato un joystick da 10k ed un display cosi’ da stampare sull LCD i valori X e Y piuttosto che in console seriale. Grazie ai sui consigli presi qua e la’ funziona tutto a meraviglia.
    Unico neo e’ che il joystick arriva a 1023 (o a zero) gia’ a meta’ corsa. Essendo un micro joystick (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

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

        • Gabriele on 23 dicembre 2014 at 15:27
        • Reply

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

        Personalmente l ho trovato su eBay senza marchio, ma con gli stessi pot 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 RC guasto.
        Va che e’ una meraviglia.

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

    • Antonio Russo on 22 gennaio 2015 at 11:20
    • Reply

    Ciao Mauro,
    innanzitutto vorrei farti i complimenti per i tuoi tutorial e spiegazioni, davvero utilissime per gente alle prime armi come me.
    Io sono un neofita del mondo arduino e spero di non fare una figuraccia; all’interno di un progetto che mi piacerebbe realizzare, avrei bisogno di utilizzare un joystick, così ho seguito tutti i passi per poterlo collegare e leggerne i valori, che però mi sono risultati molto strani, perchè, a prescindere della posizione dello stesso, continuavano a salire e scendere 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 onda sinusoidale. Tutto questo è normale? vi prego aiutatemi a risolvere

    1. 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 a verificare le connessioni elettriche del joystick e dei potenziometri ad esso connessi.

    • Massimo Andreani on 31 marzo 2015 at 11:55
    • Reply

    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 si scontrano, ma mi trovo davanti ad un problema, per regolare il tempo di apertura dell’elettrovalvola che genera le gocce utilizzo due potenziometri, uno per la prima goccia ed uno per la seconda, in realtà ne andrà inserito un terzo per il tempo tra una goccia e l’altra, ma qui l’imprevisto….con un potenziometro, 10K, collegato al pin analogico 0 per la goccia 1 funziona tutto bene, ho anche convertito il valore 0-1023 in un range 40-200 che utilizzo come tempo per l’apertura della valvola, ma nel momento che collego anche il secondo potenziometro, 10K, per la goccia 2, i valori si sballano, nel senso che è come se uno limitasse l’altro nei valori, non ho più l’escursione che ho quando sono collegati singolarmente, cosa puo causare questa “dipendenza”?.
    Ti ringrazio in anticipo dell’aiuto

    Massimo

    1. 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 mai ho notato una influenza degli uni sugli altri.
      Prova a verificare con un tester cosa accade all’alimentazione arduino e cosa elettricamente su ciascun potenziometro.

        • Massimo Andreani on 31 marzo 2015 at 12:27
        • Reply

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

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

    • Nico on 16 ottobre 2015 at 23:53
    • Reply

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

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

    • Gino on 22 novembre 2015 at 23:11
    • Reply

    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 di utilizzare il pin analogico: ho prelevato la tensione della batteria attraverso un partitore (in modo da ridurre la tensione sotto i 5 volt) e la ho applicata al pin A0. Con analogRead visualizzo 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 la tensione con un multimetro questa risulta stabile…
    2) come previsto il valore analogico è compreso in un intervallo da 0 e 1023 ma come posso ricavarmi la tensione in volt applicata al pin A0? Penso che ci vorrebbe una tensione di riferimento a cui rapportarsi ma quale potrebbe essere?
    Grazie in anticipo per la cortese e paziente risposta.

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

    • Davide on 2 dicembre 2015 at 02:13
    • Reply

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

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

    • Sergio on 22 dicembre 2015 at 15:35
    • Reply

    Ciao ho un problema che non riesco a capire se è risolvibile. Io ho un sensore di spostamento lvdt che ha una tensione di uscita che va dal negativo al positivo (per esempio da 1,25 V a -1.14V. Collegando il sensore ad Arduino mi sono accorto che fino a quando 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 ingresso analogico in modo che legga anche tensioni negative?
    Grazie.

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

    • Sergio on 23 dicembre 2015 at 10:27
    • Reply

    Grazie proverò .

    • Mauro on 23 agosto 2016 at 12:48
    • Reply

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

    Grazie.

    1. Ciao Mauro,
      così come descrivi il problema dovrebbe esserti sufficiente, a parte il numero di segnali ( 18 ) per i quali non hai sufficenti pin arduino neppure sulla versione genuino 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 at 00:31
    • Reply

    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 le immagini dei circuiti che descrivi.

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

        • Lorenzo on 9 gennaio 2017 at 18:50
        • Reply

        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…”

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

    • Giordano on 11 agosto 2017 at 16:06
    • Reply

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

    1. 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 di saldatrice ed alle tensioni coinvolte.

    • Marius on 25 novembre 2017 at 13:38
    • Reply

    Ciao Mauro, sto cercando di realizzare un mio progetto e sono inciampato in questa problematica. Devo leggere un ingresso analogico con arduino mega ogni 20 microsecondi. Io ho provato ha fare questo piccolo programma e quando ho visto il 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 25 microsecondi. Il fatto che il tempo rilevato nel prog di prova è di 116 microsecondi, riesco a leggere la variazione dell’analogica???

    Grazie e complimenti per i tuoi post.

    Marius

    1. 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 la variazione siano davvero ristretti, potresti provare con altre tipologie di processore come i Cortex o i SAMD sempre nella famiglia arduino.

    • Peppe on 24 dicembre 2017 at 07:47
    • Reply

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

    Grazie mille

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

    • Gianfranco on 3 febbraio 2018 at 19:43
    • Reply

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

    1. 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 che trattano 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 at 18:00
    • Reply

    Salve, avrei bisogno di una soluzione in quanto sto alle prime armi, ho visionato diversi skech 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. Vorrei che due lm35 mi devono comandare un servomotore per aprire e chiudere una botola in modo da ottenere una temperatura confort di 20C. Il problema più grosso è che ho diversi void, void temperatura1 void temperatura2 ecc. i comandi if else non funzionano all’esterno del ciclo void, in pratica come si comanda il servomotore in base ai due sensori? C’è un’altra via? Non trovo esempi simili ma solo di un singolo sensore cioè termostato.
    Grazie per l’attenzione.

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

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

Lascia un commento

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.