Pages: [1]   Go Down
Author Topic: Problema comunicazione ingressi analogici con alimentazione esterna  (Read 513 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7126
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo codice:
Code:
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.
« Last Edit: March 14, 2012, 02:40:23 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Albenga (SV) / Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: March 14, 2012, 03:26:11 pm by Perinerzia » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7126
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono curioso...
ci fai una foto dei collegamenti?  smiley-roll
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Albenga (SV) / Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

È 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  smiley-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
« Last Edit: March 15, 2012, 09:33:36 am by Perinerzia » Logged

Pages: [1]   Go Up
Jump to: