07. Interruttore crepuscolare
In questo progetto il led si accende automaticamente quando la luminosità ambientale è bassa.
Nel circuito compaiono due resistori, un led rosso ed un fotoresistore.
La resistenza inserita nel circuito del led rosso è di 150 Ω.
La resistenza per la fotoresistenza è di 1K Ω.
Per far comparire la slider bar associata alla fotoresistenza occorre cliccare sul fotoresistore dopo aver avviato la simuazione.
Il codice di riferimento è il seguente:
void setup()
{
pinMode(12, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop()
{
int v;
v=analogRead(A0);
Serial.println(v);
if (v<400)
digitalWrite(12, HIGH);
else
digitalWrite(12, LOW);
}
Lo sketch fa uso del monitor seriale per consentire di valutare il codice numerico letto sul pin analogico A0 e metterlo in relazione alla luminosità ambientale.
Il valore 400 presente nell'if è puramente indicativo; il valore più opportuno deve essere individuato sperimentalmente.
I risultati ricavati dalla precedente sperimentazione sono inseriti in un progetto che implementa una macchina a stati finiti in cui solo uno stato è riservato all'interruttore crepuscolare.
Il pulsante sinistro fa avanzare, in modo circolare, tra i 6 stati gestiti. Il pulsante destro opera in modo inverso.
I 5 stati gestiti, nell'ordine, determinano le seguenti azioni sui led: spento/spento, spento/acceso, acceso/spento, acceso/acceso, lampeggiante, crepuscolare.
long TIMER1;
int lampeggiante;
int ultimo_rilevato=LOW;
int ultimo_rilevato2=LOW;
int stato=0;
int v;
int timer(long *t, long millisecondi)
{
long x;
x=millis();
if (!*t){
*t=x;
return 0;
}
else if (x-*t > millisecondi) {
*t=millis();
return 1;
}
else
return 0;
}
void setup()
{
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(8, INPUT);
pinMode(4, INPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop()
{
if (digitalRead(8)==HIGH && ultimo_rilevato==LOW){
ultimo_rilevato=HIGH;
stato++;
if (stato==6)
stato=0;
}
if (digitalRead(8)==LOW)
ultimo_rilevato=LOW;
if (digitalRead(4)==HIGH && ultimo_rilevato2==LOW){
ultimo_rilevato2=HIGH;
stato--;
if (stato==-1)
stato=5;
}
if (digitalRead(4)==LOW)
ultimo_rilevato2=LOW;
v=analogRead(A0);
Serial.println(v);
if(stato==0) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
if(stato==1) {
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
}
if(stato==2) {
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
}
if(stato==3) {
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
}
if(stato==4) {
if (timer(&TIMER1, 1000)){
if (lampeggiante==0){
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
lampeggiante=1;
}
else{
digitalWrite(12, LOW);
digitalWrite(11, LOW);
lampeggiante=0;
}
}
}
if(stato==5) {
if (v<400){
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
}
else{
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
}
}
Sito: 7ecnologie
Sezione: 17. Robotica e domotica
Capitolo: 01. Elementi di Elettronica
Paragrafo: 03. Progetti
Sottoparagrafo: 07. Interruttore crepuscolare
Indice dei capitoli: 00. Risorse - 01. Elementi di Elettronica - 02. Arduino - 98. Esercizi
Indice dei paragrafi: 01. Ambiente di sviluppo - 02. Elementi di programmazione - 03. Progetti - 04. Tutorial
Indice dei sottoparagrafi: 01. Led lampeggiante - 02. Pulsante di accensione led - 03. Pilotare un transistor - 04. Pilotare un relè - 05. Uso del fotoaccoppiatore - 06. Pilotare un Display a led - 07. Interruttore crepuscolare - 08. Gli infrarossi - 09. Sensore di distanza