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:
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
È 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