top of page

LA PROGRAMMAZIONE

 

 

​

#include <Servo.h> //include la classe Servo.h, che semplifica tutta la gestione del servomotore;

/*Le variabli e le instruzioni sono state ripetute due volte in quanto il sistema deve eseguire controlli su due coppie di sensori che, grazie all'algoritmo, comandano due servo motori per effettuare, a loro volta, due movimenti differenti.*/

int ledPin1 = 2;  //imposta la variabile di tipo integer a cui si assegna il pin a cui si collegano i led del cartello;
int ledPin2 = 3;  //imposta la variabile di tipo integer a cui si assegna il pin a cui si collegano i led del cartello;
int sensorPin1 = A1; //imposta la variabile di tipo integer a cui si assegna il pin a cui si collegano le foto resistenze;
int servoPin1 = 10; //imposta la variabile di tipo integer a cui si assegna il pin a cui si collega il servomotore;
int sensorPin = A0;
int servoPin = 9;
int sensorValue = 0; //imposta una variabile di tipo integer a cui verrà assegnato il valore letto dal sensore in fase loop();
int servoGrad = 0; //imposta una variabile di tipo integer che indica la posizione, in gradi, del servo, in fase di avvio del programma
int servoGrad2= 10;
int tolleranza = 40; //imposta una variabile di tipo integer a cui si assegna una tolleranza entro la quale il servo non deve ruotare //anche se il sensore rileva variazioni dal valore centrale
Servo myservo; //inizializza l’oggetto Servo assegnandolo all’istanza myservo;
Servo myservo2;
void setup() {
pinMode(ledPin1, OUTPUT); //imposta il pin a cui è connesso il Led in modalità OUTPUT;
pinMode(ledPin2, OUTPUT); //imposta il pin a cui è connesso il Led in modalità OUTPUT;
digitalWrite(ledPin1, HIGH); //porta il valore delle variabili relative ai pin a cui sono connessi i led del cartello nello stato alto
digitalWrite(ledPin2, HIGH); //porta il valore delle variabili relative ai pin a cui sono connessi i led del cartello nello stato alto
pinMode( sensorPin, INPUT); //imposta il pin a cui è connesso il sensore in modalità INPUT;
myservo.attach( servoPin ); //con il metodo attach(pin) dell’oggetto myservo si indica a quale pin è collegato il servomotore;
myservo.write( servoGrad ); //con il metodo write(grad) si impostano i gradi a cui il servo deve posizionarsi, in fase di setup()
pinMode( sensorPin1, INPUT);
myservo2.attach( servoPin1 );
myservo2.write( servoGrad );
}
void loop() {
sensorValue = analogRead(sensorPin); //si legge il valore proveniente dal pin analogico ( A0 ) con la funzione analogRead() e lo si //assegna alla variabile sensorValue
if ( sensorValue < (512-tolleranza) ) //si esegue il primo controllo. Se il valore letto dalla nella variabile sensorValue è minore della //differenza tra 512 e la tolleranza impostata si è nella condizione in cui il pannello non è più orientato difronte alla luce, una delle //due foto resistenze sta rilevando una intensità maggiore dell’altra.
{
if (servoGrad < 170) servoGrad++; //questa istruzione verifica che il valore in gradi assunto dal servo non sia > di 170 se l’angolo del //servo è < di 170° allora si possono incrementare i gradi di rotazione. L’espressione servoGrad++ indica di incrementare di un //grado il valore di servoGrad ad ogni loop() arduino;
}
if ( sensorValue > (512+tolleranza) ) // verifica una condizione simile al primo controllo. In questo caso il valore letto dal sensore è //confrontato con la somma tra 512 + tolleranza;
{
if (servoGrad > 10) servoGrad--; //questa istruzione verifica che l’angolo in cui il servo si trova non sia inferiore a 10. Decrementa //quindi il valore di servoGrad, un grado per ogni loop() di arduino;
}
myservo.write( servoGrad ); //questa istruzione permette di far muovere il servo motore nella posizione desiderata
sensorValue = analogRead(sensorPin1);
if ( sensorValue < (512-tolleranza) )
{
if (servoGrad2 < 145) servoGrad2++;
}
if ( sensorValue > (512+tolleranza) )
{
if (servoGrad2 > 10) servoGrad2--;
}
myservo2.write( servoGrad2 );
delay(100); //attendi un tempo di 100 millisecondi tra una rilevazione e la succesiva, questo permette al servo di raggiungere la //posizione indicata prima che la rilevazione dei sensori cambi.
}

 

 

 

 

 

Considerata l'estensione eccessiva della programmazione della casa domotica, l'intero sketch con la spiegazione di ogni stringa è scaricabile cliccando sul seguente link:

 

http://www.mediafire.com/view/av6or4rn2ns453d/sketch_domotica.txt

i  PANNELLO SOLARE:
i  CASA DOMOTICA:
bottom of page