Problema comunicazione ingressi analogici con alimentazione esterna

Salve ragazzi..sto realizzando un robot Line following da 0. ammetto di avere conoscenze basilari e sto realizzando questo robot con un semplice sensore ir comprato su df robot. sto realizzando il tutto sull'analogico xke siccome il sensore nn è preciso, in digitale è un casino. sto provando cosi per iniziare e ho visto che funziona..c'è cosa che nn capisco. in pratica io alimento arduino e la shield dei motori con un alimentazione esterna ed è sempre funzionato tutto correttamente in quanto lavoravo sempre con sensori in digitale..ma adesso facendo questo sketch con ingressi analogici ho visto che se il robot è collegato all'USB funziona e il robot cammina...se invece sta scollegato dall'usb ma sempre collegato all'alimentazione esterna non funziona..aiutatemi..spero di essere stato chiaro...

Lo sketch:

int sensoresx = 1;
int sensoredx = 0;
int valoresx;
int valoredx;
int motsx = 5;
int motdx = 6;
int pwmsx = 4;
int pwmdx = 7;

void setup(){
  pinMode(sensoresx,INPUT);
  pinMode(sensoredx,INPUT);
  pinMode(motsx,OUTPUT);
  pinMode(motdx,OUTPUT);
  pinMode(pwmsx,OUTPUT);
  pinMode(pwmdx,OUTPUT);
  Serial.begin(9600);
}
void loop(){
  
valoresx = analogRead(sensoresx);
valoredx = analogRead(sensoredx);

Serial.print("valoresx:");
Serial.println(valoresx,DEC);
Serial.print("valoredx:");
Serial.println(valoredx,DEC);
delay(10);


if ( (valoresx < 100) && (valoredx < 100)){
  analogWrite(motsx,60);
  analogWrite(motdx,60);
  digitalWrite(pwmsx,HIGH);
  digitalWrite(pwmdx,HIGH);
}if ( (valoresx > 100) && (valoredx < 100)){
  analogWrite(motsx,60);
  analogWrite(motdx,0);
  digitalWrite(pwmsx,HIGH);
  digitalWrite(pwmdx,HIGH);
} if ( (valoresx < 100) && (valoredx > 100)){
  analogWrite(motsx,0);
  analogWrite(motdx,60);
  digitalWrite(pwmsx,HIGH);
  digitalWrite(pwmdx,HIGH);
}  if ( (valoresx > 100) && (valoredx > 100)){
  analogWrite(motsx,0);
  analogWrite(motdx,0);
  digitalWrite(pwmsx,HIGH);
  digitalWrite(pwmdx,HIGH);
}
}

Questo codice:

 digitalWrite(pwmsx,HIGH);
digitalWrite(pwmdx,HIGH);

viene ripetuto in ogni if e non c'è un digitalwrite LOW.
Potresti spostarlo nel setup(), il risultato sarebbe identico.

Inoltre, stai usando i pin 0 e 1 che sono della seriale (usb). Cambia pin di ingresso.

PaoloP:
Inoltre, stai usando i pin 0 e 1 che sono della seriale (usb). Cambia pin di ingresso.

No, sono pin analogici quindi vanno bene, non interferiscono con la seriale.

fredrosa:
int sensoresx = 1;
int sensoredx = 0;
...
valoresx = analogRead(sensoresx);
valoredx = analogRead(sensoredx);

Inoltre i pin analogici sono solo INPUT, quindi è superfluo scrivere il pinMode per i pin analogici.

Comunque tutti questi if non servono a niente, basta che scrivi:
if (valoresx < 100){
analogWrite(motdx,60);
}
else{
analogWrite(motdx,0);
}
if (valoredx < 100){
analogWrite(motsx,60);
}
else{
analogWrite(motsx,0);
}

Ma con non funziona cosa intendi? Non partono proprio o non girano al modo giusto? Che alimentazione esterna usi?

Perinerzia:
Ma con non funziona cosa intendi? Non partono proprio o non girano al modo giusto? Che alimentazione esterna usi?

Ciao Perinerzia... in pratica il tutto funziona solo se, oltre ad essere collegato all'alimentazione esterna, è collegato anche all'USB del pc. Posso sicuramente escludere che il problema dipenda dall'alimentazione esterna xke ho fatto altre prove e il robot funziona e cammina benissimo..pensa che ho provato a fare un robot rileva ostacoli con lo stesso sensore xo collegandolo all'input digitale e funziona tutto correttamente. invice configurandolo in analogico e con quel mio sketch, se nn collego l'usb, nn si muove il robot..si accende solo la spia power verde di arduino. E' come se ha bisogno dell'Usb x leggere i dati che riceve dal sensore. cmq uso 4 batterie della sony ricaricabili : 1.2V e 2500mAh

Help me...

Sono curioso...
ci fai una foto dei collegamenti? :roll_eyes:

È questo il problema: Lo alimenti con 4.8 volt, quella consigliata è tra 7 e 12. L'input analogico funziona prendendo come riferimento i 5 volt, se alimenti con una tensione troppo bassa il voltaggio di riferimento non è più 5 volt, e l'analogRead ti da valori sbagliati. È per questo che con l'usb funge e con l'alimentazione no :wink:

Edit: comunque controlla sempre le tensioni dell'alimentazione e quelle richieste dagli utilizzatori (nel tuo caso dei servo suppongo): rischi di bruciare qualcosa se non fai attenzione a tensioni e correnti, prima di attaccare robe assieme leggi bene le caratteristiche di funzionamento sia dei componenti che dell'arduino