In questa lezione mostreremo come modificare gradualmente la luminanza di un LED attraverso la programmazione. Poiché la luce pulsante sembra respirare, le diamo un nome magico: LED che respira. Otterremo questo effetto con la modulazione di larghezza degli impulsi (PWM).
Scheda base OSOYOO (completamente compatibile con Arduino UNO rev.3) x 1
Breadboard x 1
LED x 1
Resistenza da 200 ohm x 1
Ponticello M/M x 5
Cavo USB x 1
PC x 1
Arduino IDE (version 1.6.4+)
La modulazione di larghezza di impulso, o PWM, è una tecnica per ottenere risultati analogici con mezzi digitali. Il controllo digitale viene utilizzato per creare un’onda quadra, un segnale commutato tra acceso e spento. Questo schema on-off può simulare tensioni comprese tra l’accensione completa (5 Volt) e lo spegnimento (0 Volt) modificando la porzione di tempo che il segnale trascorre acceso rispetto a quella che trascorre spento. La durata del “tempo di accensione” è chiamata larghezza dell’impulso. Per ottenere valori analogici variabili, si modifica, o si modula, l’ampiezza dell’impulso.
Per ottenere valori analogici variabili, si cambia, o si modula, l’ampiezza dell’impulso. Se si ripete questo schema on-off abbastanza velocemente con un LED, ad esempio, il risultato è come se il segnale fosse una tensione costante tra 0 e 5 V che controlla la luminosità del LED. (Vedere the PWM description on the official website of Arduino).
Dall’oscillogramma superiore si può notare che l’ampiezza della tensione CC in uscita è pari a 5 V. Tuttavia, la tensione effettiva in uscita è solo di 3,75 V attraverso il PWM perché il livello alto occupa solo il 75% della tensione totale in un periodo.
Ecco un’introduzione ai tre parametri di base del PWM:
Sulla maggior parte delle schede di base OSOYOO ci sono 5 pin contrassegnati da ‘PWM’ accanto al numero del pin (su alcune schede è un simbolo “~”) – questi pin sono pin PWM. Qui usiamo il pin3 per controllare il LED.Collegare l’hardware come nel seguente diagramma di Fritzing:
Avviso:
Non è possibile collegare direttamente un LED a una batteria o a una fonte di tensione. In primo luogo, perché il LED ha un cavo positivo e uno negativo e non si accende se sono al contrario e, in secondo luogo, un LED deve essere utilizzato con un resistore per limitare o “soffocare” la quantità di corrente che scorre attraverso il LED – altrimenti il LED potrebbe bruciarsi!
Collegare la scheda OSOYOO Basic al computer utilizzando il cavo USB. Il LED verde di alimentazione (PWR) dovrebbe accendersi. Aprire l’IDE Arduino e selezionare il tipo di scheda e il tipo di porta corrispondenti alla scheda OSOYOO Basic.
Ora caricate il file ‘PWM_Control_LED’ o copiare il codice sottostante nella nuova finestra dell’IDE Arduino e caricarlo sulla scheda OSOYOO Basic. Attendere qualche secondo: si dovrebbero vedere lampeggiare i led RX e TX sulla scheda. Se il caricamento ha avuto successo, nella barra di stato apparirà il messaggio “Done uploading”.
void setup () { pinMode(3,OUTPUT);// declare pin 3 to be an output } void loop() { for (int a=0; a<=255;a++) //loop from 0 to 255,it controls the increase in PWM brightness { analogWrite(3,a); //set the brightness of pin 3: delay(8); //wait for 8 ms } for (int a=255; a>=0;a--) //loop from 255 down to 0,it control PWM brightness reduction { analogWrite(3,a); // set the brightness of pin 3: delay(8); //wait for 8 ms } delay(800); //wait for 800 ms }
Pochi secondi dopo il termine del caricamento, si dovrebbe vedere il LED diventare sempre più luminoso, per poi affievolirsi lentamente, proprio come se si respirasse.
DownLoad Url osoyoo.com
You must be logged in to post a comment.
try this Sketch (adds the built-in LED in case someone doesn’t get the breadboard hookup correct):
void setup() {
// put your setup code here, to run once:
pinMode(3,OUTPUT); // declare pin 3 to be an output
pinMode(LED_BUILTIN, OUTPUT); // pin 13 on an Uno R3
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED_BUILTIN, HIGH); // LED on
for (int a=0; a=0;a–) //loop from 223 down to 0, it control PWM brightness reduction
{
analogWrite(3,a); // set the brightness of pin 3:
delay(4); // wait for 4 ms
}
delay(300); //wait for 300 ms
}
hmm.. some of the code vanished due to the use of (less than) ” (greater than) chars. this message will test
try this instead (make the substitutions for .lt. and .gt. chars below):
void setup() {
// put your setup code here, to run once:
pinMode(3,OUTPUT); // declare pin 3 to be an output
pinMode(LED_BUILTIN, OUTPUT); // pin 13 on an Uno R3
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED_BUILTIN, HIGH); // LED on
for (int a=0; a.lt.=223;a++) //loop from 0 to 223,it controls the increase in PWM brightness (max 255)
{
analogWrite(3,a); //set the brightness of pin 3:
delay(4); //wait for 4 ms
}
digitalWrite(LED_BUILTIN, LOW); // LED off
for (int a=223; a.gt.=0;a–) //loop from 223 down to 0, it controls PWM brightness reduction
{
analogWrite(3,a); // set the brightness of pin 3:
delay(4); //wait for 4 ms
}
delay(300); //wait for 300 ms
}