Usando un led a tre colori e tre fotoresistenze, potrai creare una “lampada” che cambia colore in base alle condizioni esterne di luce.
Far lampeggiare i LED può essere divertente, ma che ne pensi di farli sfumare o miscelarne i colori? Ti potresti aspettare che si tratti solo di fornire meno tensione a un LED per fargli cambiare luminosità?
Arduino non può variare la tensione di uscita dei suoi piedini che può essere solo di 5 V. Quindi avrai bisogno di una tecnica chiamata di larghezza di impulso – in inglese Pulse With Modulation (PWM) – per attenuare i LED. La modulazione di larghezza di impulso accende e spegne rapidamente i piedini di uscita in un determinato intervallo di tempo. Il cambiamento avviene più velocemente di quanto l’occhio umano possa percepire.
E’ simile al modo in cui funziona il cinema: mostrare velocemente una serie di immagini fisse per creare l’illusione del movimento.
Quando fai passare velocemente il piedino da HIGH a LOW, è come se stessi cambiando la tensione. La percentuale di tempo in cui un piedino è HIGH in un periodo è chiamata duty cycle o ciclo di lavoro utile. Quando il piedino è HIGH per metà di un periodo e LOW per l’altra metà, il ciclo di lavoro è 50%. Un ciclo di lavoro più basso produce un LED più attenuato che un ciclo di lavoro più alto.
Arduino Uno ha sei piedini riservati al PWM (piedini digitali 3, 5, 6, 9, 10 e 11); sono identificati dal simbolo ~ accanto al loro numero sulla board.
In questo progetto come ingressi userai delle fotoresistenze (sensori che cambiano la loro resistenza secondo la quantità di luce che li colpisce; sono conosciuti anche come fotocellule o fotoricevitori). Se ne colleghi una estremità ad Arduino, puoi misurare il cambiamento di resistenza controllando la tensione sul piedino.
Componenti da utilizzare:
- 1x LED RGB
- 1x Scheda Arduino Uno
- 3x resistenza da 220 ohm
- 3x resistenza da 10 kilo ohm
- 3x fotoresistenze
- Vari jumper
- Filtri colorati
Ecco qui il diagramma di collegamento:
Metti tre fotoresistenze sulla breadboard a cavallo del separatore centrale. Collega una estremità di ogni fotoresistenza all’alimentazione. Sull’altro lato, collega a massa una resistenza da 10 kilo ohm. Questa resistenza è in serie con la fotoresistenza, e insieme formano un partitore di tensione.
La tensione nel punto in cui si incontrano è proporzionale al rapporto delle loro resistenze, seconda la legge di Ohm.
Al variare della luce che colpisce la fotoresistenza cambia la tensione nel punto di contatto.
Prendi tre filtri colorati e posizionali ciascuno su una fotoresistenza. Metti il filtro rosso sulla fotoresistenza collegata al pin A0. Metti il filtro verde sulla fotoresistenza collegata al pin A1. Metti il filtro blu sulla fotoresistenza collegata al pin A2. Ognuno di questi filtri consente solo alla luce di una specifica lunghezza d’onda di arrivare al sensore. Il filtro rosso per esempio fa passare solo la luce rossa. Questo permette di rilevare i livelli di colore nella luce che colpisce i sensori.
Il led RGB contiene tre elementi separati – rosso, verde e blu – e una massa comune (il catodo). Creando una differenza di tensione tra il catodo e la tensione di uscita dei piedini PWM dell’arduino.
Il codice
La spiegazione delle varie funzioni e istruzioni è inserita all’interno del codice con dei commenti.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
/* Imposta le costanti per i piedini che stai usando come ingressi e uscite, così puoi tenere traccia di quale sensore si accoppia con quale colore del LED. */ const int greenLEDPin = 9; const int redLEDPin = 11; const int blueLEDPin = 10; const int redSensorPin = A0; const int greenSensorPin = A1; const int blueSensorPin = A2; /* Aggiungi variabili per i valori dei sensori di ingresso e per i valori di luminosità dei LED. */ int redValue = 0; int greenValue = 0; int blueValue = 0; int redSensorValue = 0; int greenSensorValue = 0; int blueSensorValue = 0; /* Nel setup avvia la comunicazione seriale a 9600 bps. Utilizzi questa modalità per visualizzare i valori dei sensori. Definisci i piedini del led come OUTPUT tramite la funziona pinMode */ void setup (){ Serial.begin(9600); pinMode(greenLEDPin,OUTPUT); pinMode(redLEDPin,OUTPUT); pinMode(blueLEDPin,OUTPUT); } /* Nel loop leggi i valori del sensore sui piedini A0, A1 e A2 con analogRead(); e memorizzi il valore. Metti un breve delay() per dare tempo all'ADC di svolgere il suo lavoro */ void loop (){ redSensorValue = analogRead(redSensorPin); delay(5); greenSensorValue = analogRead(greenSensorPin); delay(5); blueSensorValue = analogRead(blueSensorPin); delay(5); Serial.print("Raw Sensor Value \t Red: "); Serial.print(redSensorValue); Serial.print("\t Green: "); Serial.print(greenSensorValue); Serial.print("\t Blue: "); Serial.print(blueSensorValue); /* La funzione per modificare la luminosità del LED tramite PWM è analogWrite(); . Ha bisogno di due parametri: il piedino da modificare e un valore tra 0 e 255. Il secondo rappresenta il ciclo di lavoro che Arduino produce sul piedino specificato. Un valore di 255 imposta il piedino HIGH per tutto il tempo e abbiamo la luminosità max. Un valore di 127 imposta il piedino HIGH per metà del periodo, rendendo il LED più sfumato Per convertire la lettura di un sensore da un valore tra 0 e 1023 a uno tra 0 e 255 dividi per 4 la lettura del sensore */ redValue = redSensorValue/4; greenValue = greenSensorValue/4; blueValue = blueSensorValue/4; Serial.print("Mapped Sensore Values \t Red: "); Serial.print(redValue); Serial.print("\t Green: "); Serial.print(greenValue); Serial.print("\t Blue: "); Serial.print(blueValue); analogWrite(redLEDPin, redValue); analogWrite(greenLEDPin, greenValue); analogWrite(blueLEDPin, blueValue); } |
Ora sei pronto a copiare e caricare il codice sulla scheda Arduino.
Conclusione
Quando hai programmato e collegato Arduino, apri il monitor seriale. Il led è probabilmente di un colore biancastro, a seconda dal colore predominate della luce nella tua stanza. Guarda i valori provenienti dai sensori nel monitor seriale: se sei in un ambiente con illuminazione stabile, il numero sarà probabilmente abbastanza consistente.
Spegni la luce nella stanza in cui stai lavorando e guarda cosa succede ai valori dei sensori. Con una torica elettrica, illumina ogni sensore e nota come i valori cambiano nel monitor seriale, e come il LED cambia colore. Quando le fotoresitenze sono coperte con un filtro, reagiscono solo alla luce di una certa lunghezza d’onda. Questo ti dà la possibilità di cambiare ogni colore in modo indipendente.
Probabilmente hai notato che la sfumatura dei LED non è lineare. Quando il LED è circa a metà luminosità, sembra che non diventi più luminoso. Questo perché i nostri occhi non percepiscono la luminosità in maniera lineare. La luminosità non dipende solo dalla funzione analogWrite(); ma anche dalla distanza della luce dal diffusore, la distanza dell’occhio dalla luce e la luminosità della luce rispetto all’ambiente circostante.
Iscriviti ai nostri gruppi Telegram
Link utili