Cerca nel blog

La Chat

venerdì 19 novembre 2021

Inseguitore solare


















Codice:


#include <Servo.h>   // libreria del servomotore
/////////////////////////////     uscite analogiche dei fotoresistori      ////////////////////////////////////
int uno = A0;     
int due = A1;
int tre = A2;                      
int qua = A3;
//////////////////    variabili di mappature per i servomotori dei valori in ingresso     ///////////////////
int u = 0;
int d = 0;
int t = 0;
int q = 0;
/////////////////////////////    angoli di base dei servomotori       /////////////////////////////////
int angx = 90;   // asse delle x
int angy = 90;   // asse delle y
////////    valore minimo di differenza tra coppia di resistori per l'azionamento del servomotore   //////////
char vmin = 10;    // si può impostare il valore che si vuole (sensibilità del movimento)
////////////////////////////   nomi dei servomotori    /////////////////////////////////////////
Servo servox;   // servo asse delle x
Servo servoy;   // servo asse delle y
///////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600);
  pinMode(uno, INPUT);  // settaggio ingresso
  pinMode(due, INPUT);  // settaggio ingresso
  pinMode(tre, INPUT);  // settaggio ingresso
  pinMode(qua, INPUT);  // settaggio ingresso
  servox.attach(3);   // pin di controllo del servomotore dell'asse x
  servoy.attach(2);   // pin di controllo del servomotore dell'asse y
}
void loop() {
////////////////////////////////   mappatura dati ricevuti dai fotoresistori   ///////////////////////////////
  u = map(analogRead(uno), 12, 860, 0, 180);
  d = map(analogRead(due), 12, 875, 0, 180);
  t = map(analogRead(tre), 12, 820, 0, 180);
  q = map(analogRead(qua), 12, 915, 0, 180);
///////////////////////////////////   inizio del controllo dei servomotori   ////////////////////////////
//////////////////////////////////   controllo asse delle x   ////////////////////////////////////////
  if ( u > q && angx <= 180 && u - q > vmin) {
    angx = angx + 1;
    servox.write(angx);
  }
  if (u < q && angx >= 0 &&  q - u> vmin) {
    angx = angx - 1;
    servox.write(angx);
  }
//////////////////////////////////   controllo asse delle y   ////////////////////////////////////////
  if (t < d && angy <= 180 && d - t > vmin) {
    angy = angy + 1;
    servoy.write(angy);
  }
  if (t > d && angy >= 0 && t - d > vmin) {
    angy = angy - 1;
    servoy.write(angy);
  }
  delay(2);   // tempo di delay (volendo si può eliminare)
////////////////////////////////////   fine    //////////////////////////////////////
}



Nessun commento: