Inseguitore Solare
Occorrente per realizzare questo progetto:
- Arduino Uno, Duemilanove ,Mega ecc.
- 2 Servo Motore, quelli che abbiamo usato noi sono servi di un modellino. I servi sono reperibii in qualsiasi negozio di modellismo ad un costo di circa 20 euro basta chiedere SERVI DIGITALI perchè quelli analogici hanno un movimento di 0° o 180°.
- 4 fotoresistenze
- 4 resistenze da 10kOhm
- 2 trimmer da 10kOhm
Montaggio:
Abbiamo utilizzato dei pezzi di canalina tubolare per fare da base su cui montare i servi e su cui mettere le fotoresistenze
Ecco lo schema di montaggio
ed ecco lo sketch di arduino da incollare nel suo programma compilatore
#include // include la libreria Servo Servo horizontal; // servo orizzontaleint servoh = 90; // dichiara una variabileServo vertical; // servo verticaleint servov = 90; // dichiara una variabilename = analogpin;int ldrlt = 0; //fotoresistenza in alto a sinistraint ldrrt = 1; //fotoresistenza in alto a destraint ldrld = 2; //fotoresistenza in basso a sinistraint ldrrd = 3; //fotoresistenza in basso a destravoid setup(){ Serial.begin(9600); name.attacht(pin); horizontal.attach(9);vertical.attach(10);}void loop(){ int lt = analogRead(ldrlt); // fotoresistenza in alto a sinistra int rt = analogRead(ldrrt); // fotoresistenza in alto a destra int ld = analogRead(ldrld); // fotoresistenza in basso a sinistra int rd = analogRead(ldrrd); // fotoresistenza in basso a destra int dtime = analogRead(4)/20; // leggi trimmerint tol = analogRead(5)/4;int avt = (lt + rt) / 2; // somma fotoresistenze alteint avd = (ld + rd) / 2; // somma fotoresistenze basseint avl = (lt + ld) / 2; // somma fotoresistenze a sinistraint avr = (rt + rd) / 2; // somma fotoresistenze a destraint dvert = avt - avd; // trova la differenza tra alto e bassoint dhoriz = avl - avr;// trova la differenza tra sinistra e destraif (-1*tol > dvert || dvert > tol){if (avt > avd){servov = ++servov;if (servov > 180){servov = 180;}}else if (avt < avd){servov= --servov;if (servov < 0){servov = 0;
}}vertical.write(servov);}if (-1*tol > dhoriz || dhoriz > tol){if (avl > avr){servoh = --servoh;if (servoh < 0){servoh = 0;}}else if (avl < avr){servoh = ++servoh;if (servoh > 180){servoh = 180;}}else if (avl == avr){}horizontal.write(servoh);}delay(dtime);}