Go Down

Topic: Problema comunicazione ingressi analogici con alimentazione esterna (Read 575 times) previous topic - next topic

fredrosa

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);
}
}

PaoloP

Questo codice:
Code: [Select]
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.

#2
Mar 14, 2012, 09:15 pm Last Edit: Mar 14, 2012, 09:26 pm by Perinerzia Reason: 1

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.


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?

fredrosa



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...


#5
Mar 15, 2012, 03:16 pm Last Edit: Mar 15, 2012, 03:33 pm by Perinerzia Reason: 1
È 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  ;)

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

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy