Go Down

Topic: [Risolto] Problema LED da principiante :/ (Read 812 times) previous topic - next topic

NorthDakota

Mar 26, 2012, 02:13 am Last Edit: Mar 26, 2012, 12:18 pm by NorthDakota Reason: 1
Salve a tutti! Mi sto avvicinand proprio adesso al mondo di Arduino e ho un piccolo problema con dei LED :/ In sostanza, ho costruito un piccolo circuito con il sensore di temperatura LM35DZ che dovrebbe accendere una serie di LED in base..beh, alla temperatura :D

Il mio problema è che i LED si accendono ma si vedono a malapena :S

Ho una Arduino UNO, ho collegato i LED a delle resistenze (ne ho provate diverse, da 1K a 4,7ohm nella speranza che fossero troppo "potenti" ma niente :/) che, a loro volta, sono collegate ai pin 8, 7 e 2. I LED poi, naturalmente, finiscono attaccati a GND. L'LM35DZ è invece collegato ai 5V per l'alimentazione, alla A0 per la lettura della temperatura e poi a terra. La lettura avviene correttamente (nel monitor della seriale riesco a leggerla ed è su per giù corretta) ma i LED sono molto sbiaditi :/

Ho scritto il seguente programmino:
Code: [Select]
const int highTemp = 26;
const int normTemp = 24;
const int lowTemp = 22;

int tempPin = A0;
int sensValue = 0;
int temp = 0;

int pins[3] = { 8,7,2 };

void setup() {
 Serial.begin(9600);
}

void loop() {
 sensValue = analogRead(tempPin);
 temp = (5.0*sensValue*100.0) / 1024.0;
 Serial.print("Temperatura: ");
 Serial.print(temp);
 Serial.print(" C\n");
 
 if(temp >= lowTemp) {
   digitalWrite(pins[0], HIGH);
 } else {
   digitalWrite(pins[0], LOW);
 }
 
 if(temp >= normTemp) {
   digitalWrite(pins[1], HIGH);
 } else {
   digitalWrite(pins[1], LOW);
 }
 
 if(temp >= highTemp) {
   digitalWrite(pins[2], HIGH);
 } else {
   digitalWrite(pins[2], LOW);
 }
 
 delay(1000);  
}


Dov'è che sbaglio? :(

Federico

Nella fase di setup dovresti definire le porte dei led come output, ma forse e' opzionale. Una resistenza da 1k a seconda del led che utilizzi potrebbe essere troppo. Prova che so, 330ohm ? Per piccole veloci prove puoi vedere anche SENZA resistenza, in modo da fare un metro di quale sia l'illuminazione massima dei tuoi led.
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

NorthDakota

Uhm, ho provato ad avviare la schedina senza le resistenze dei LED ma il risultato non cambia :/ mi sta venendo un dubbio, potrebbe essere che il sensore che uso "mangi" quasi tutta l'energia della scheda? e così non ne rimane più per alimentare i LED (scusatemi se ho detto una cavolata :D)?

Ah, mi son dimenticato di aggiungere che attualmente sto usando la porta USB per alimentare il tutto!

uwefed


Nella fase di setup dovresti definire le porte dei led come output, ma forse e' opzionale. Una resistenza da 1k a seconda del led che utilizzi potrebbe essere troppo. Prova che so, 330ohm ? Per piccole veloci prove puoi vedere anche SENZA resistenza, in modo da fare un metro di quale sia l'illuminazione massima dei tuoi led.

MAI usare LED senza resistenza.
Ciao Uwe

leo72


Nella fase di setup dovresti definire le porte dei led come output, ma forse e' opzionale.

No, non è opzionale. All'avvio del microcontrollore tutti i pin sono in stato di alta impedenza, ossia INPUT. Se si scrive con un digitalWrite lo stato HIGH si attiva la resistenza interna di pull-up. Ecco spiegato perché il led è fioco, perché arriva quella debolissima corrente data dalla resistenza interna.
Vanno dichiarati esplicitamente come OUTPUT tutti i pin usati in uscita.

uwefed


Uhm, ho provato ad avviare la schedina senza le resistenze dei LED ma il risultato non cambia :/ mi sta venendo un dubbio, potrebbe essere che il sensore che uso "mangi" quasi tutta l'energia della scheda? e così non ne rimane più per alimentare i LED (scusatemi se ho detto una cavolata :D)?

Ah, mi son dimenticato di aggiungere che attualmente sto usando la porta USB per alimentare il tutto!


Come ha giá detto Federico devi definire i pin come uscite:
pinMode(pin,OUTPUT);
http://arduino.cc/en/Reference/PinMode

Se cosumeresti troppa corrente si spegne l'arduino, non solo i LED e il Tu PC si lamenterebbe.

Ciao Uwe

Federico



Nella fase di setup dovresti definire le porte dei led come output, ma forse e' opzionale.

No, non è opzionale. All'avvio del microcontrollore tutti i pin sono in stato di alta impedenza, ossia INPUT. Se si scrive con un digitalWrite lo stato HIGH si attiva la resistenza interna di pull-up. Ecco spiegato perché il led è fioco, perché arriva quella debolissima corrente data dalla resistenza interna.
Vanno dichiarati esplicitamente come OUTPUT tutti i pin usati in uscita.


Mi era venuto il dubbio perche' diceva che il led si accendeva debolmente, e quindi non sapevo bene se effettivamente andasse dichiarato o meno, visto che io lo dichiaro sempre (quantomeno per capirci qualcosa dopo nel codice). Avete fugato ogni dubbio!
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Michele Menniti

Usando il pin correttamente comunque una R da 1K fornirà poca corrente al led, anche se lo vedrai decisamente più luminoso rispetto ad ora (considerando che la pull-up interna al minimo è 20K.
Il range varia da 680ohm a 220ohm, più è basso il valore e maggiore è la corrente che scorre nel led, quindi maggiore è la luminosità. l'LM35 assorbe pochissimo, piuttosto fai ben attenzione alle connessioni  ;)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

NorthDakota

Ecco qual'è il problema! Mi sono proprio dimenticato di dichiarare i pin come output :) grazie mille a tutti quanti per le informazioni, gentilissimi :D

Go Up