Salve, sono nuovo su questo forum. Sono un appassionato di programmazione e mi piace usare arduino per fare progetti che possono essere utili o meno, giusto per passione. Ora... volevo chiedere se è possibile accendere un led quando un Voltmetro rileva una determinata tensione, come se ad esempio il voltmetro legge 10v e maggiore e "chiude il circuito" e accende il led mentre a 9v il led è spento. Se si può fare cosa serve e come sarebbe il codice? Grazie
Buonasera e benvenuto nella sezione Italiana del forum,
prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...
... cortesemente, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15) e poi, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. ![]()
Mi scuso per l equivoco ma non avevo letto che la sezione era solo inglese, la prossimo volta starò più attento
... ho letto la tua presentazione ed, intanto, ti consiglio lo studio sia dei pdf che dell'ottimo libro, indicati al punto 16.1 del REGOLAMENTO ![]()
Detto questo la cosa è semplicemente fattibile usando un pin analogico ed un partitore di tensione per abbassare la tensione di cui parli ad un valore accettabile da Arduino (a seconda della scheda 5V o 3.3V) ... leggi il pin analogico e se la tensione è superiore al valore da te fissato accendi il LED, altrimenti lo spegni ![]()
Guglielmo
Quindi da come ho capito, Arduino legge un massimo di 5v? E se volessi usare una tensione maggiore? Per quanto riguarda il codice ho visto che nel codice non devo mettere "se l ingresso analogico è uguale a 3.8v accendi il led" ma devo mettere dei numeri giusto o mi sto sbagliando?
EDIT:
Ho provato a creare questo codice ma il led rimane sempre acceso, cosa ho sbagliato?
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
int sensore = analogRead(A0);
float volt = sensore * (5.0 / 1023);
if (volt >= 4)
{
digitalWrite(13, HIGH);
}
}
... te l'ho scritto ...
... mi sembra normale ... non lo spegni mai ... ![]()
Guglielmo
P.S.: cortesemente, come richiesto al punto 7 del succitato regolamento, per favore edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita
che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE). Grazie.
Mi scuso per gli errori che sto commettendo.
Ho aggiornato il codice aggiungendo il comando if else spegnendo il led. Se uso una batteria da 9v o 1.5V AA il codice funziona bene ma se uso un generatore di funzione non funziona, o meglio funziona ma ai capi del led è presente una tensione più bassa che non è pari a 0V
Ciao @zanco4. il problema nel tuo codice è che alla tensione da te scelta accendi il LED, ma poi non lo spegni più.
prova a variare lo sketch. Io penserei di fare così:
void loop()
{
int sensore = analogRead(A0);
float volt = sensore * (5.0 / 1023);
if (volt>=4) {
digitalWrite (13, HIGH);}
else{
digitalWrite (13, LOW);}
Facci sapere.
... se guardi la sua risposta più sopra ... ha fatto esattamente così ... ![]()
Guglielmo
gpb01, ha risposto mentre scrivevo. Non ci ho fatto caso.
Però, anche se sono un neofita, ho ragionato correttamente. ![]()
Intanto spero tu NON abbia mandato i 9V sul pin analogico o bruci l'ingresso ... come detto max 5V o devi usare un partitore di tensione e, ovviamente, fare tutti i calcoli per le proprorzioni sui valori che leggerai.
Detto questo ... che significa "se uso un generatore di funzioni" ? Che segnale gli mandi in ingresso e come hai collegato il tutto (metti sempre uno schema, anche disegnato a mano, ma chiaro)?
Guglielmo
Spiega meglio. Generatore di funzioni?
La batteria da 1.5V scordatela, non può funzionare arduino a quella tensione. Minimo 1.8V e comunque per adesso usalo alimentando arduino dalla USB. Riguardo al partitore di tensione, forse non lo avete ancora studiato, per cui dovrai documentarti, in breve si tratta di impiegare due resistori di opportuno valore per attenuare la tensione in modo da ricondurla al range di valori accettati da arduino, cioè 0÷5.0V.
Esatto, all'interno della MCU, c'è un convertitore da Analogico a digitale da 10 bit, quindi se in ingresso al convertitore fornisce il potenziale di 5 volt la analogRead restituisce tutti i 10 bit accesi che in decimale equivale a 1023.
Ciao.
Sto usando per fare le prove tinkercad, per questo non è bruciato il piedino😅. Per quanto riguarda il generatore di funzioni così si chiama si tinkercad e sarebbe un generatore di tensione in onda quadra, sinusoidale e triangolare. Il partitore di tensione ancora non lo studiamo... Domani allego lo schema che ho fatto su tinkercad e farò altri test li sopra prima di farli dal "vivo"
... anticipo Mauro che sicuramente te lo dirà
... invece di tinkercad prova il decisamente migliore Wokwi ![]()
Guglielmo
Spero di non dire cavolate.
Quando usi una pila dai una tensione regolare, costante, fissa. analogRead() impiega tempo a leggere, ma leggi di sicuro sempre una tensione es. 4,5V (3 pile AA)
Se usi generatore di funzione, QUANDO la analogRead() legge ? Magari quando la tensione dell'onda quadra è al massimo 5V, magari al minimo 0V. Supponi onda quadra. A volte becca/legge max a volte 0.
Siccome lo fai di continuo (loop infinito) a volte accendi il led a volte no, l'effetto è quello quasi di dare un segnale PWM al led. Quindi lo vedi con luminosità "fioca"
... questo ovviamente dipende dalla frequenza impostata sul generatore di funzioni che, per poter apprezzare l'accensione e spegnimento del LED, deve essere sicuramente inferiore ai 10 Hz. Inoltre fatto con tinkercad non so quanto senso abbia, dato che è solo un emulatore che, per ovvie ragioni, spesso NON rispetta correttamente i tempi ... ![]()
Guglielmo
Ho usato tinkercad dato che a scuola quello usiamo e non sapevo le alternative.
Per quanto riguarda il codice, io volevo fare un progetto per far accendere il led quando ad un altoparlante li arriva una distorsione, quindi onda quadra. Ora, si può fare che il led si accende quando si collega un oscilloscopio o altro( non conosco molto i componenti)?
... beh, allora scordatelo di farlo in quel modo ... è ben più complesso e non so neanche se con Arduino UNO la cosa sia possibile, probabilmente non ha sufficiente capacità elaborative. ![]()
Guglielmo
un rivelatore di inviluppo ed una soglia
si fa con un diodo un condensatore un operazionale e una manciata di resistenze
figuriamoci se non basta un Arduino: è anche troppo....
il problema è un altro, e risiede nella "seconda legge di Nelson (che sono io):
Seconda legge di Nelson (che sono io): Remember, researching how to solve a problem is often necessary before a programmer can teach the computer how to solve it
ovvero:
Ricorda, la ricerca su come risolvere un problema è spesso necessaria prima che un programmatore possa insegnare al computer come risolverlo (Bjarne Stroustrup)
come vedete io non ho letto "solo" il K&R
pur se considero lo stile di scrittura di Bjarne un po' soporifero
che poi la seconda legge si può condensare nella:
Prima legge di Nelson (che sono io): A parità di risultato maggiore è il pensiero, minore il lavoro. Quindi prima di fare pensa!
... interessante idea, ma ... come lo applichi per rilevare se c'è distorsione o meno? ![]()
Sono ignorante in materia ... ![]()
Guglielmo