Salve a tutti, sono alle primissime armi con un Arduino Nano, volevo costruire un guanto con un LED RGB sul pollice dotato di due Pulsanti esterni: Uno spegne e accende il LED, l'altro switcha il colore secondo la sequenza in cui li programmo.
Il primo problema che mi sono trovato ad affrontare risiede nel fatto che non ho ben chiaro dove e in che modo (resistenze, collegamenti al GND e vari) collegare i due pulsanti (ottenuti cannibalizzando un joystick, sono due tasti su una scheda che esce in tre diversi fili);
Il secondo è prettamente di programmazione: Il tasto (1) ON/OFF deve fare da Latch: premendo una volta si spegne, premendo una seconda si accende. Il punto è che questo deve essere indipendente dal tasto per lo switch (2), che continua a lavorare: Ne deriva che se a LED acceso io premo un certo numero di volte il pulsante 2 fino a selezionare un certo colore, se poi spengo il LED con il pulsante 1 e dopo un po' lo riaccendo, questo si accenderà del colore precedentemente selezionato.
Purtroppo sono davvero alle prime armi, per questo vi chiedo di non dare nulla per scontato, perché davvero è la prima volta che mi accosto al mondo dell'elettronica, quindi ho numerose lacune in merito.
PS: So che vi sono vari topic simili a questo (e mi scuso se alcuni non li ho proprio trovati), ma in tutti quelli che ho visto venivano già date per scontato una serie di cose che non potevo sapere.
PPS: Altre informazioni utili potrebbero essere:
Il LED Rgb è da 1W, collegato all'uscita 5V e ai pin digitali 9,10, 11 (rispettivamente Verde, Rosso, Blu) con in serie tre resistori da 150Ohm;
Ho poco spazio a disposizione, in quanto il circuito deve stare tutto sul dorso della mano.
Prima di tutto, DEVI PRESENTARTI QUI. Non scrivere/rispondere fino a che non lo avrai fatto, mi raccomando.
Essere alle prime armi è naturale, ma non significa che qualcuno debba scriverti il codice. Prova a scrivere qualcosa, poi postalo qui e vediamo, anche perché è l'unico modo per IMPARARE.
Se sei alle prime armi (ma questo vale in generale), la prima cosa è SPERIMENTARE, ossia fare qualche programma di prova di un SINGOLO aspetto di ciò che vuoi realizzare. Quindi il consiglio è cercare in questo forum o con google in generale,e inizia a leggere qualcosa che "somigli" a quello che desideri realizzare. Ad esempio QUESTO per iniziare.
>TheSleeper1928: come ti ha già segnalato docdoc, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
A mia discolpa: avevo mandato la presentazione nel thread, ma per la regola dei due post in cinque minuti non me l'aveva presa e non me ne sono accorto. Poi sono uscito di casa, mi scuso tantissimo per la svista
Prima di tutto, DEVI PRESENTARTI QUI. Non scrivere/rispondere fino a che non lo avrai fatto, mi raccomando.
Essere alle prime armi è naturale, ma non significa che qualcuno debba scriverti il codice. Prova a scrivere qualcosa, poi postalo qui e vediamo, anche perché è l'unico modo per IMPARARE.
Se sei alle prime armi (ma questo vale in generale), la prima cosa è SPERIMENTARE, ossia fare qualche programma di prova di un SINGOLO aspetto di ciò che vuoi realizzare. Quindi il consiglio è cercare in questo forum o con google in generale,e inizia a leggere qualcosa che "somigli" a quello che desideri realizzare. Ad esempio QUESTO per iniziare.
Ti ringrazio molto per le direttive. Come ho già risposto all'altro moderatore, credevo di aver completato la presentazione, invece non ero riuscito a inviare il modulo.
Ho provato, finora, a cercare nei topic di questo stesso forum. Orientativamente, sono due settimane che cerco, provo a scrivere e smanetto con la breadboard. Purtroppo non trovo davvero nulla che soddisfi il prototipo di "pulsantiera" che mi serve. Non sto chiedendo che mi venga scritto il codice, ci mancherebbe altro, si smanetta per imparare ed è divertente farlo. Solo che trovo davvero uno scoglio duro, in quanto non riesco a mettere insieme, da ciò che ho leggiucchiato su internet e su questo stesso forum, un comando che al variare dello stato di X (Pulsante 2) ne cambi permanentemente la funzione RGB. Tutti i tutorial che vedo controllano l'RGB con un potenziometro o ne impostano il variare con un comando Blink o un comando Fade. Magari è un mio limite, che in due settimane non sono riuscito a trovare una risposta. In quel caso un enorme aiuto per me sarebbe anche se qualcun altro ha trovato un topic che possa un minimo delucidarmi su questo tipo di funzione.
Chiaramente non voglio qualcuno che lo scriva per me, voglio tuttavia comprenderne la logica e l'impostazione, cosa che purtroppo non ho mai approcciato al livello scolastico, tantomeno universitario.
Il link che mi hai postato mi è molto utile, ti ringrazio tanto, anche se non ho ben capito come collegare il GND con il resistore da 10kOhm. Vedo che è messo in parallelo rispetto al pin digitale e che l'altro capo del pulsante va messo all'uscita da 5V. Avendo due pulsanti con 3 Pin di uscita, quello in comune andrebbe collegato ai 5V o al GND/Pin digitale? Fra l'altro dovrei occupare due pin, se non sbaglio, per due pulsanti.
Infine, avendo già collegato il LED all'uscita 5V, posso sadare allo stesso piedino i pulsanti senza incorrere in nessun problema?
Sì, sto messo veramente male. Ma ehi, per imparare si parte sempre da zero, no?
visto che inizi da zero, sarebbe opportuno iniziare a capire come funzionano le cose base, cioè leggere lo stato di un pulsante, accendere/spegnere un semplice led di un colore, poi preoccuparsi del led RGB che tra l'altro essendo di 1W non lo puoi pilotare direttamente dai pin di arduino in quanto non fornisce corrente a sufficienza.
Per poter pilotare un led rgb e avere più sfumature di colore devi imparare ad usare i pin PWM (non tutti i pin della nano hanno il PWM), dove a secondo dei valori che imposti cambi il colore del led..... da li ti crei dei valori predefiniti che cambi ogni volta che premi il pulsante.
Quindi il modo più semplice per collegarli ad Arduino è il seguente, attivando le resistenze di PullUp
pinMode (Pin,INPUT_PULLUP);
Che vuol dire attiva il pin come input e attiva anche la resistenza interna tra il pin e il positivo (Vcc).
In questo modo ti risparmi due resistenze e quando un pulsante viene premuto il corrispondente Pin si collega al GND (LOW) , mentre a pulsante non premuto, detto Pin viene mantenuto a livello HIGH dalla resistenza interna.
L'unica cosa che devi ricordare è che normalmente il pin è HIGH e solo quando premi il pulsante il Pin va a LOW
Grazie mille, mi sei stato molto utile.
A questo punto il circuito dovrebbe risultare così, no? (vedi immagine)
In tal modo, devo impostare qualcosa in particolare per attivare le resistenze interne all'Arduino Nano, oppure sono presenti in ogni caso nell'output dei pin digitali?
Un'ultima cosa: Se invece volessi includere le resistenze da 10KOhm, come dovrebbero essere disposti i pulsanti? Lo chiedo perché questo ho letto da qualche parte che potrebbe rendere il circuito più gestibile, in particolare eliminare il rischio di Debounce. È vero?
Che tu metta i pulsanti al positivo o al negativo, non cambia niente, se non quello che vai a leggere via software (leggi o 0 o 1, facendo una lettura digitale del pin) e se usare delle resistenze di pull down o pull up, cioè se i pulsanti in comune sono collegati a massa, devi usare delle resistenze di pull up, ovvero collegate tra la linea da leggere e il positivo. Così se il pulsante non è premuto sai comunque che quel potenziale ha un valore certo che è quello del positivo. Allo stesso modo se i pulsanti hanno il comune al positivo, devi usare delle resistenze di pull down, ovvero collegate tra la linea da leggere e la massa.
Per quanto riguarda il debounce o lo fai via software oppure con un condensatore da 0.1 uF.
Il LED però, da come ho capito, è di potenza, per cui non lo puoi pilotare direttamente da Arduino, ma devi usare 4 transistor, uno per colore più uno per accendere o spegnere il LED.
Perdonami solo se non ho capito una cosa: devo provvedere a inserire delle resistenze tra Pin digitale e pulsante, quindi? (Volendo collegare i due pulsanti a comune massa e il positivo ai pin digitali)
PS. Il led non è di potenza, è a 5v per 0.02A, l'ho già pilotato con l'Arduino con comandi più vari, quindi quello non è un problema.
La resistenza devi mettterla tra entrata e massa.
Per usare un LED di potenza devi avere un driver a corrente costante con il valore della corrente corretta per il LED che usi e che ha un entrata PWM con cui piloti la luminositá di ognuno dei 3 colori.
Ciao Uwe
Tra entrata e massa, dunque sempre da 10kOhm? Ma stiamo comunque parlando di una Pullup o di una Pulldown?
Io vorrei realizzare un curcuito il più snello e semplice possibile, l'utente di prima mi aveva consigliato di fare un loop tra pin e gnd, segnando i pin come input. Tuttavia non ho capito in che modo "attivare" la resistenza tra Pin e Positivo
TheSleeper1928:
Io vorrei realizzare un curcuito il più snello e semplice possibile, l'utente di prima mi aveva consigliato di fare un loop tra pin e gnd, segnando i pin come input. Tuttavia non ho capito in che modo "attivare" la resistenza tra Pin e Positivo
Puoi evitare le resistenze esterne attivando le pull-up interne al chip ...
... quando dichiari il pin fai: pinMode(numeroPin, INPUT_PULLUP); in questo modo il pin è tenuto sempre a livello HIGH e quindi, il bottone che ci collegherai, deve chiudere verso massa così, tu leggera da quel pin sempre HIGH meno quando è premuto il bottone che leggerai LOW.
Ricordati di fare il debouncing ...
Guglielmo
P.S.: ... non ho ben capito inoltre se ti sei ricordato di mettere le resistenze in serie al LED per limitare la corrente massima.
gpb01:
Puoi evitare le resistenze esterne attivando le pull-up interne al chip ...
... quando dichiari il pin fai: pinMode(numeroPin, INPUT_PULLUP); in questo modo il pin è tenuto sempre a livello HIGH e quindi, il bottone che ci collegherai, deve chiudere verso massa così, tu leggera da quel pin sempre HIGH meno quando è premuto il bottone che leggerai LOW.
Ricordati di fare il debouncing ...
Guglielmo
P.S.: ... non ho ben capito inoltre se ti sei ricordato di mettere le resistenze in serie al LED per limitare la corrente massima.
Innanzitutto grazie, chiarissimo
Il debouncing ricorderò di farlo, devo ben capire come ma in ogni caso prima mi occupo dell'hardware
E sì, ci sono le resistenze in serie al LED RGB, tutte e tre da 150Ohm, altrimenti non potrei pilotarlo
A questo punto mi gioco l'ultima domanda: Il modo meno ingombrante di alimentarlo quale potrebbe essere?
Tieni conto che è tutto su un guanto e lì deve rimanere, non posso portare un filo fino a una tasca o cose del genere. Io pensavo alle banali pile a bottone, ma non so se reggano per abbastanza tempo. Oltretutto non saprei in che modo portarle a 5v, visto che una pila ha 1.5v di diff. potenziale. Né saprei come collegarle al processore, aggiungo.
... non puoi usare batterie a bottone, non vanno bene nè come voltaggio, né come capacità.
Devi andare sulle LiPo, magari abbassando il clock del ATmega a 8 MHz, senza quazo esterno (così semplifichi l'HW); ne trovi di piccole che su un guanto puoi facilmente fissare
Dunque, le Lipo se ho capito bene erogano corrente a 3.7v, l'arduino funziona a cinque. Inoltre, sarebbe comodo poter ricaricare la batteria collegando direttamente l'arduino al pc dalla porta mini usb.
Ho anche letto che far "scaricare" la batteria la danneggerebbe. Che significa esattamente?
Infine: esiste una Lipo abbastanza piccola da stare su un guanto? Tutte quelle che vedo raggiungono dimensioni relativamente grandi, io ho bisogno qualcosa che non "appesantisca" per nulla i movimenti.
Il ATMega in realtà funziona da 1.8V a 5.5V, ma, al calare della tensione, occorre abbassare il clock.
Quindi, volendo lavorare con le LiPo, la cosa migliore è prendere un Arduino Pro Mini fatto per i 3.3V, ovvero, con clock a 8MHz ... è molto più piccolo della Nano e non ha inutili fronzoli che consumano corrente. Per la programmazione ci attacchi un convertitore USB <--> Seriale a 3.3V come QUESTO, che togli quando è sul guanto
Ci sono LiPo piccolissime che su un guanto pesano nulla ... cerca QUI