Arduino birichino

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.

Ho appena visto che il problema deriva dai servo motori, ma comunque non capisco cosa devo sistemare

Non so se nel frattempo hai risolto, e non ho capito in che modo hai capito che il problema deriva dai servo, comunque sia la prima cosa che ti potrei consigliare di fare, visto che non potresti fare debug USB (hai detto che se colleghi la USB ti funziona tutto) è di aggiungere o un convertitore seriale TTL-USB e quindi leggere sul PC le informazioni di debug che manderesti con Serial.print(), oppure un LCD sul quale mostrare regolarmente i valori letti dalla fotocellula e nella riga sotto i valori impostati per i servo.

Ho capito che erano i servomotori che davano il problema perchè se li scollegavo la scheda non dava problemi

Potrebbe anche dipendere dalla batteria da 9V che magari è già mezza scarica, e non riesce ad erogare corrente sufficiente, nel momento in cui si vuole far muovere i motori.
Prova con un alimentatore esterno.

Una batteria da 9V è una vera cacca. Fornisce al massimo 350mA quindi di sicuro non riesce a dare sufficiente energia a tutta quella roba.
Non per nulla (è un esempio) i Lego treno e robot son passati da singola batteria 9V a 6 batterie 1,5 in serie (6*1,5=9V) quindi sempre 9V ma molti più ampere

Sicuramente era colpa della pila 9v

Grazie mille sistemato.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.