Buongiorno, ho sviluppato un codice per un solar tracket, con 2 servo, 1 di questi è un servo 360 mentre l'altro un comune servomotore con angolo 180.
Il codice procede con l anallizamento delle 4 fotoresistenze ( 2 che lavorano con un servo e 2 che lavorano con l altro ), se 1 fotoresistenza capta una luminosità minore dell'altra, il servo girerà fino a che i valori non saranno simili. Stessa cosa vale per l'altro servomotore 360, ( dando come valore servo.write(90) il servo sta fermo, per valori minori di 90 gira da una parte e per valori maggiori di 90 gira dal lato opposto).
Ora che ho verificato il codice, volevo staccarlo dalla usb e alimentarlo tramite una batteria 9v ( quella in dotazione del kit eleego), appena attacco il 'jack' i servomotori si muovono totalmente a caso senza motivo e la scheda sembra che vadi in protezione da cortocircuito.
Vi lascio sotto il software e, con le mie misere capacità di disegno anche uno schizzo del circuito.
//SERVOBASE = SERVO MOTORE 360°
//SERVOVERTICALE = SERVO MOTORE 180°
#include <Servo.h>
int sensorPin1 = A0;
int sensorPin2 = A1;
int sensorPin3 = A2;
int sensorPin4 = A3;
int servoPin1 = 8;
int servoPin2 = 9;
int sensorValue1 = 0;
int sensorValue2 = 0;
int sensorValue3 = 0;
int sensorValue4 = 0;
int tolleranza = 40;
int vSer = 90;
Servo servobase;
Servo servoaltezza;
void setup() {
pinMode( sensorPin1, INPUT);
pinMode( sensorPin2, INPUT);
pinMode( sensorPin3, INPUT);
pinMode( sensorPin4, INPUT);
servobase.attach( servoPin1 );
servoaltezza.attach( servoPin2 );
servobase.write(90);
servoaltezza.write(vSer);
}
void loop() {
sensorValue1 = analogRead(sensorPin1);
sensorValue2 = analogRead(sensorPin2);
sensorValue3 = analogRead(sensorPin3);
sensorValue4 = analogRead(sensorPin4);
//CALIBRAZIONE SERVOMOTORE BASE
//PRIMA FOTORESISTENZA
if ( sensorValue1 - tolleranza > sensorValue2 ){
servobase.write(100);
}
else{
if ( sensorValue2 - tolleranza < sensorValue1 )
servobase.write(90);
}
//SECONDA FOTORESISTENZA
if ( sensorValue2 - tolleranza > sensorValue1 ){
servobase.write(80);
}
else{
if ( sensorValue1 - tolleranza < sensorValue2 )
servobase.write(90);
}
//CALIBRAZIONE SERVOMOTORE ALTEZZA
//PRIMA FOTORESISTENZA
if ( sensorValue3 - tolleranza > sensorValue4 ){
vSer++;
}
//SECONDA FOTORESISTENZA
if ( sensorValue4 - tolleranza > sensorValue3 ){
vSer--;
}
if ( vSer < 0 )
vSer = 0;
if ( vSer > 180 )
vSer = 180;
servoaltezza.write(vSer);
delay(500);
}
circuito: Imgur: The magic of the Internet
N.B.: il collegamento delle fotoresistenze è uguale per tutte 4.