|
Sfruttando alcune delle innumerevoli proprietà di Arduino 2009 son riuscito a realizzare un semplice indicatore di direzione su 360 gradi, semplice ma nello stesso tempo funzionale e preciso.
Il circuito richiede soltanto due fotoresistenze collegate a due pin analogici di Arduino, che grazie ad un dischetto/matrice particolare rileva la posizione e la visualizza su un display a cristalli liquidi (16,2).
Il CODICE
// IREZIONE VENTO CON DUE FOTORESISTENZE
/*La taratura puo essere effettuata nel modo seguente:
Programmare l'ATMEGA 328 includendo la riga
//lcd.print(analogRead(FA);ed escludendo la riga //lcd.print(GRADI);
quindi mettere in funzione il tutto
poi posizionando l'indicatore tutto verso NORD legger il valore
minimo di FA ed annotarlo.Posizionare l'indicatore tutto vrso SUD
e leggere il valore max di FA ed annotarlo.
Ora inserire questi due valori nella riga
GRADI = map(analogRead(FA),minore,maggiore,0,180);
al posto di minore e maggiore,quindi disabilitare la riga
//lcd.print(analogRead(FA); e riprogrammare l'integrato.
*/
#include ;
LiquidCrystal lcd(2,3,4,5,6,7); //ordine dei piedini collegati ad ARDUINO
#define FA 0 //piedino di collegamento fotoresistenza A
#define FB 1 //piedino di collegamento fotoresistenza B
int GRADI; //variabile relativa al valore dei gradi letto
int maggiore; //variabile che stabilisce la modalita del calcolo
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop()
{
GRADI = map(analogRead(FA),0,1023,0,180); //legge il valore e lo conserva convertendolo in 0°-180°
maggiore = map(analogRead(FB),0,1023,0,100); //legge il valore e lo conserva convertendolo in 0-100
if (maggiore <= 50){ //se la fotoresistenza B è illuminata per il 50% o meno
GRADI = GRADI; //il conteggio dei gradi è GRADI=GRADI else GRADI = (180 - GRADI)+180
} else {
GRADI = (180 - GRADI)+180;
}
lcd.clear(); //ripulisce il display LCD
lcd.setCursor(1,0); //Posiziona il cursore sulla prima casella della prima riga
lcd.print(" DIREZIONE VENTO ");
lcd.setCursor(0,1); //sposta il cursore sulla seconda riga
lcd.print(" ");
//lcd.print(analogRead(FA); //per la taratura abilitare questa riga
lcd.print(GRADI); //per la taratura disabilitare questa riga
lcd.print(" Gradi ");
Serial.print("DIREZIONE del VENTO = "); //stampa su Serial Monitor i valori
Serial.print(GRADI);
Serial.print(" Gradi ");
Serial.print(" ");
Serial.print(analogRead(FA));
Serial.println( maggiore);
delay(1000);
}