Home
Accesso / Registrazione
 di 

Aiuto con arduino!!

11 risposte [Ultimo post]
ritratto di Davide90
Offline
Titolo: User
Utente
Ultima visita:
3 anni 8 settimane fa
Utente dal: 30/04/2011
Messaggi: 5

Ciao a tutti! complimenti per il forum si trovano un sacco di cose interessanti e carine e quindi ho deciso di registrarmi!

Ma veniamo al punto.

Premesso che non ho mai utilizzato le schede arduino e non so nemmeno da dove iniziare vi volevo chiedere una mano per realizzare un piccolo progetto che ho in mente
io dovrei riuscire a pilotare 30 led rgb con arduino in modo da riuscire a controllare ogni singolo led cambiano colore oppure credo sia più semplice comandarli tutti insieme!
Il tutto si può fare tramite pc?? nel senso collegando arduino alla porta usb e scrivendo un po di programma ( anche qui vi chiedo una manina!:) ) si possono controllare i vari colori? grazie! in anticipo! a presto!

ritratto di Giovanni Giomini Figliozzi
Offline
Titolo: PowerUser
Utente Power
Ultima visita:
1 anno 12 settimane fa
Utente dal: 22/03/2011
Messaggi: 163
La cosa potrebbe non essere

La cosa potrebbe non essere molto semplice per vari motivi:
1) Arduino permette di usare una decina di canali in pwm per pilotare i led, quindi pilotarne 30 di tipo RGB significherebbe o avere a disposizione 90 canali, oppure effettuare un multiplexing pesante. Ora non conosco nessun integrato facilmente accessibile da un arduino che permetta di ampliare il numero dei canali in uscita fino a 90. Se esiste sarebbe quasi sicuramente realizzato in un package leggermente proibitivo.
A comandare l'arduino tramite il computer non ci vuole niente, sono 4 righe di codice...
Se vuoi su questo posso darti una mano senza problemi, ma al momento non saprei bene come approcciare il problema del multiplexing di un numero così elevato di canali

ritratto di Davide90
Offline
Titolo: User
Utente
Ultima visita:
3 anni 8 settimane fa
Utente dal: 30/04/2011
Messaggi: 5
Intanto grazie mille per la

Intanto grazie mille per la disponibilita accetto molto volentieri il tuo aiuto:)
Secondo te se io in una uscita controllo più di un led è fattibile? cioè creo delle serie di led per esempio composte da 5 led e ogni blocco lo controllo con le 3 uscite relative è più semplice?

ritratto di Giovanni Giomini Figliozzi
Offline
Titolo: PowerUser
Utente Power
Ultima visita:
1 anno 12 settimane fa
Utente dal: 22/03/2011
Messaggi: 163
si, ora è più fattibile, ma

si, ora è più fattibile, ma per caso hai un datasheet dei led? l'inconveniente che potrebbe presentarsi è che attraverso la porta di uscita dell'arduino non può scorrere quanta corrente vuoi, ci sono dei limiti. Se sai quanta corrente assorbono i led, si può anche vedere di farla sta cosa.
Dal punto di vista software è più facile comunque.
Una cosa: i led devi pilotarli acceso/spento oppure è necessario regolare anche la luminosità?

ritratto di Davide90
Offline
Titolo: User
Utente
Ultima visita:
3 anni 8 settimane fa
Utente dal: 30/04/2011
Messaggi: 5
allora per quanta riguarda

allora per quanta riguarda l'assorbimento per ogni led siamo intorno ai 20-30 mA( milliampere) quindi se ipotizzando io collegassi 5 led insieme sarebbero intorno ai 100-120 milliamper per pilotarli a me basta la variazione di colore e acceso spento non mi serve regolare la luminosità..

ritratto di Giovanni Giomini Figliozzi
Offline
Titolo: PowerUser
Utente Power
Ultima visita:
1 anno 12 settimane fa
Utente dal: 22/03/2011
Messaggi: 163
non va benissimo. Dal

non va benissimo. Dal datasheet della atmel, questo qua
http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf
si può leggere a pagina 309 che la massima corrente su un pin può essere di 40 mA, quindi non è possibile collegare 5 led insieme. per poter fare una cosa del genere dovresti usare un transistor che alimenti i tuoi led. quindi per ogni ramo del circuito colleghi la base del transistor, che assumo essere un npn alla porta dell'arduino, poi colleghi il collettore all'alimentazione a 5V. Sull'emettitore devi mettere il terminale del colore desiderato dei 5 led, ma in serie purtroppo tocca anche aggiungere una resistenza.
I led RGB contano 4 reofori (i piedini) quindi 1 è massa, e poi ce n'è uno per ogni colore. Ovviamente se vuoi che tutti e 5 i led tirino fuori lo stesso colore, devi montarli esattamente in parallelo. Riassumo il circuito:
Collettore del transistor collegato a 5V
Pin di uscita dell'arduino collegato alla base del transistor
Emettitore del transistor collegato a un terminale della resistenza di valore R (che poi calcolo)
Altro capo della resistenza collegato a tutti e 5 i led che devi accendere
Massa dei led collegata a massa (ovvio)

Calcolo la resistenza.
Allora, per ipotesi mettiamo che il led assorba 25mA quando è polarizzato a 3V di tensione.
Mettiamo anche che tra la base e l'emettitore del transistor ci siano 0,7V di tensione. Il valore esatto probabilmente non sono 0,7V precisi, ma ci si avvicina di sicuro.
Ora hai sulla maglia che parte da 5V le cadute di potenziale di led e transistor, e bisogna calcolare quella che deve avere la resistenza: 5 -3 -0,7 = 1,3V
Sapendo che nella resistenza scorrono 25mA per 5 led, allora R=1,3 /(0,025 * 5) = 10,4
Quindi il valore della resistenza che puoi usare è di 10 ohm. Se per caso vuoi usare più led devi ricalcolare questo valore e adattarlo al valore che si trova in commercio più vicino.
su breadboard dovrebbe essere abbastanza facile fare una cosa del genere... non c'è bisogno di componenti strani... bastano qualche resistenza e qualche transistor, che messi insieme più o meno costano come un led RGB :)

Per quel che riguarda il lato software, è necessario aprire una connessione seriale tra l'arduino e il computer. Questo lo fai mettendo l'istruzione serial.begin(9600) dentro la funzione di Setup.
Successivamente bisogna trovare qualche metodo per codificare il comando che vuoi inviare all'arduino. Ora non so come può farti più comodo...
una soluzione potrebbe essere utilizzarlo in toggle, cioè scrivi all'arduino il numero del pin, e quello lo spegne o lo accende, a seconda dello stato, insomma commuta lo stato del led.

Ah una cosa io sto parlando di led in generale perchè come penso tu sappia i led RGB sono praticamente 3 led messi insieme nello stesso contenitore trasparente.

Per fare questa cosa bisogna sfruttare il ciclo loop() e verificare a ogni iterazione se sono presenti comandi nel buffer della connessione seriale. A quel punto si interpreta il comando e si accende o spegne il led interessato.
Ora quasi quasi lo scrivo io il programma, tanto ci vuole più a dirlo che a farlo un programma del genere... Poi però la fase di test la lascio a te che al momento il mio arduino è impegnato

ritratto di Davide90
Offline
Titolo: User
Utente
Ultima visita:
3 anni 8 settimane fa
Utente dal: 30/04/2011
Messaggi: 5
Che dire... sei praticamente

Che dire... sei praticamente un genio! grazie infinite!! allora appena pronto il tutto ti aggiorno!
Quindi da quello che ho capito io ogni 5 led devono essere alimentati da transistor però (correggimi se ho capito male) ogni 5 led mi servono 3 transistor uno per ogni colore?

ritratto di Giovanni Giomini Figliozzi
Offline
Titolo: PowerUser
Utente Power
Ultima visita:
1 anno 12 settimane fa
Utente dal: 22/03/2011
Messaggi: 163
i geni lasciamoli nelle

i geni lasciamoli nelle lampade... se uno ha un minimo di pratica lo risolve al volo un problema di questo tipo! Sarebbe bene comunque che anche tu provassi a fare qualcosa di tuo. Puoi partire da questo schema che ti ho proposto e puoi provare a modificarlo, cercare di ottimizzare il codice, il circuito, ecc.
Per il resto hai capito bene: un transistor ogni 5 led, considerando un led RGB come se fossero 3 led distinti, quindi per esempio alla prima fila da 5 led devi collegare 3 transistor: uno per il rosso uno per il verde e uno per il blu. idem per le altre file. QUindi in totale ti servono 9 transistor, 9 resistenze e 15 led.
Il programma che ho scritto è un punto di inizio, l'ho fatto in 5 minuti, ma se ti ci metti non avrai certamente difficoltà a scriverne uno migliore.
Aspettiamo tue notizie. facci sapere se funziona!

ritratto di Giovanni Giomini Figliozzi
Offline
Titolo: PowerUser
Utente Power
Ultima visita:
1 anno 12 settimane fa
Utente dal: 22/03/2011
Messaggi: 163
int

int led1,led2,led3,led4,led5,led6,led7,led8,led9;
int cmd = 0;
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);

}

void loop()
{

if (Serial.available() > 0) {

cmd = Serial.read();
switch(cmd){
case 1:
if(led1==HIGH) led1=LOW;
else led1=HIGH;

case 2:
if(led2==HIGH) led2=LOW;
else led2=HIGH;

case 3:
if(led3==HIGH) led3=LOW;
else led3=HIGH;

case 4:
if(led4==HIGH) led4=LOW;
else led4=HIGH;

case 5:
if(led5==HIGH) led5=LOW;
else led5=HIGH;

case 6:
if(led6==HIGH) led6=LOW;
else led6=HIGH;

case 7:
if(led7==HIGH) led7=LOW;
else led7=HIGH;

case 8:
if(led8==HIGH) led8=LOW;
else led8=HIGH;

case 9:
if(led9==HIGH) led9=LOW;
else led9=HIGH;
}
//aggiorna tutto
digitalWrite(2, led1);
digitalWrite(3, led2);
digitalWrite(4, led3);
digitalWrite(5, led4);
digitalWrite(6, led5);
digitalWrite(7, led6);
digitalWrite(8, led7);
digitalWrite(9, led8);
digitalWrite(10, led9);

}
}

Questo è il codice. devi solo incollarlo dentro l'ambiente di sviluppo di arduino e provarlo. Posso dire che compila, quindi è una buona cosa... In realtà potrebbe essere ottimizzato un pò, ma non mi andava di arrovellarmi il cervello... Questo codice funziona così: la prima parte ovviamente è la dichiarazione delle variabili, successivamente nella funzione setup attivo la connessione seriale, e imposto le porte dalla 2 alla 10 come output. Successivamente c'è il loop principale. se è presente qualche byte nel buffer della connessione seriale, allora switcha tra i due stati alto o basso (acceso spento) il led corrispondente al numero inviato. I led vanno montati in ordine dalla porta 2 alla porta 10 (vanno collegate le basi dei transistor del post di prima)
Quando si avvia il programma basta aprire la console seriale dell'arduino e scrivere il numero da 1 a 9 del led che si vuole accendere o spegnere. Questa era la versione del programma più semplice. Possono essere implementate cose come l'accensione o lo spegnimento esatto (non il toggle) di un certo led, oppure che ne so, comandi il led e il colore e l'arduino accende quello che dici, ma lascio a te la scrittura di questo codice.
Se i led RGB fossero solo due sarebbe possibile anche comandarli in pwm per ottenere sfumature dei colori...

Provalo e fammi sapere se funziona. Se al momento non hai i transistor per provare il circuito completo, puoi anche provare un led solo con in serie una resistenza da qualche centinaio di ohm.

ritratto di Davide90
Offline
Titolo: User
Utente
Ultima visita:
3 anni 8 settimane fa
Utente dal: 30/04/2011
Messaggi: 5
NOn so come hai fatto in cosi

NOn so come hai fatto in cosi poco tempo ha trovarmi una soluzione cosi efficace per la mia esigenza!!Grazie grazie appena recupero i componenti ti faccio sapere!

ritratto di ale_dj
Offline
Titolo: User
Utente
Ultima visita:
2 anni 22 settimane fa
Utente dal: 16/02/2012
Messaggi: 3
Buonasera a tutti, vorrei, se
Anonim (non verificato)
ritratto di Anonim
Come faccio a chiede aiuto a

Come faccio a chiede aiuto a voi che sieta 10000 passi avanti a me????

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 12 utenti e 66 visitatori collegati.

Ultimi Commenti