Tag: led

Leave a reply

Size led resistor Arduino

LED

When we have an Arduino project  in which there is an LED that is powered through a pin, one would think that it is enough to connect it to the pin and GND. But is it correct?

To take away the doubt we can try to plug it in, and we would see that the LED lights without any problems.

This type of connection is not recommended except for a short time, because the LED has a very low resistance, so an high current will circulate, and may damage the LED and the pin, which can deliver up to 40mA.
We must then insert a resistor in series with the LED, and size it using the first principle of Kirchhoff.

R=V/I

where V is not just the voltage of the Arduino’s pin (5V), but it subtracted the voltage ai capi del led,  which depends on the color of the LED.

  •  red: 1,8 V
  •  yellow: 1,9 V
  •  green: 2,0 V
  •  orange: 2,0 V
  •  blue: 3,0 V
  •  white: 3,0 V

I is the maximum current that can withstand the LED without burning, and ranges from 15-25 mA.

for example if we use a red LED, the resitance will be:

R=(5-1.8)/0,02=160Ω


Leave a reply

Virtual die with Arduino

dado

In questo articolo vedremo come creare un dado virtuale con Arduino, usando dei led.

INGREDIENTI:

-1x Arduino UNO

-1x Bredboard

-1×6 led

-1x pulsante

-1x resistenza da 10kΩ

-7x resistenze da  almeno 150Ω

Il circuito da realizzare è semplice, l’importante è rispettare l’ordine dei led. La resistenza collegata al pulsante è quella da 10 kΩ, mentre quelle collegate ai led sono quelle da 150Ω.

dado_schem Ora passiamo allo sketch. Per prima cosa creiamo un array di 6 interi e li scriviamo in binario.

int numbers[6]= { 0b0010001000, 0b0101000100, 0b0111001100, 0b1001010101, 0b1011011101, 0b1101110111, };

In ogni numero intero i primi 7 bit partendo dal’LSB (quello più a destra) indicano la combinazione di led da accendere, mentre gli ultimi tre indicano il numero (da 1 a 6), scritto in binario, che corrisponde alla combinazione.

Prendiamo l’esempio del numero “4”:

bit

I bit verdi indicano il numero da rappresentare. 1 0 0 in binario, ovvero 4 in base 10. I bit rossi invece rappresentano la sequenza di led per visualizzare il numero. Successivamente dichiariamo i pin dei led come uscite e quello del pulsante come entrata

for(int i=0;i<13;i++)pinMode(i,OUTPUT);
pinMode(13,OUTPUT);

I numeri da visualizzare verranno generati dalla funzione pseudo-ramdom ramdom().
Questa funzione però genera sempre la stessa sequenza di numeri ogni volta che si resetta il microcontrollore.
Per evitare questo, nel setup richiamiamo la funzione randomSeed(analogRead(0)) passandole il valore della porta analogica A0.
Ora quando avvieremo il programma, la funzione random() prenderà come riferimento per iniziare a generare i numeri casuali, il valore della porta A0, che non essendo avrà dei valori casuali diversi tra loro. la funzione che fa visualizzare il numero sui led è writeDie() e le passiamo il numero generato dalla funzione random(1,7).

writeDie(random(1,7));

Questa funzione compara il numero generato dalla funzione random() con i ultimi tre bit di ogni numero int dell’array, finché non trova quello corrispondente. Per poter fare questa operazione, dobbiamo liberarci, per ora, dei primi 7 bit che indicano la sequenza di led; per farlo usiamo l’operatore bitshift right >> che farà slittare a destra i bit; in questo caso li faremo slittare di 7 posizioni ovviamente.

int i=0; 
for(;i<6;i++)if(num==numbers[i]>>7)break;

Il contatore i è stato dichiarato fuori dal ciclo for perché ci servirà poi per ricordarci qual’era la sequenza di bit che corrispondeva al numero casuale generato. Ora che abbiamo trovato la sequenza di bit dobbiamo accendere i led corrispondenti e per farlo, useremo un ciclo for che scrive ad ogni uscita il valore del bit corrispondente.

for(int k=0;k<9;k++)digitalWrite(k,bitRead(numbers[i],k));

Per finire dobbiamo generare il numero solo c’è un fronte di salita sul pin al quale è collegato il pulsante, quindi aggiungiamo due cicli while() che restano in ascolto dello stato del pin.
Lo sketch completo:

//Created by Mohamed Fadiga momodesine@hotmail.it
int numbers[6]=
{
    0b0010001000,
    0b0101000100,
    0b0111001100,
    0b1001010101,
    0b1011011101,
    0b1101110111,
};

void setup()
{
    for(int i=0;i<13;i++)pinMode(i,OUTPUT);
    pinMode(13,OUTPUT);
    randomSeed(analogRead(0));
}

void loop()
{
    while(digitalRead(13)==0);
    writeDie(random(1,7));
    while(digitalRead(13)==1);
}

void writeDie(byte num)
{
    int i=0;
    for(;i<6;i++)if(num==numbers[i]>>7)break;
    for(int k=0;k<9;k++)digitalWrite(k,bitRead(numbers[i],k));
}