Go Down

Topic: Ardumoto e diodo infrarossi (Read 8192 times) previous topic - next topic

djtandrea

buongiorno, ho un problema col comandare due motori tramite ardumoto
http://www.sparkfun.com/products/9896 e diodo infrarossi http://www.sparkfun.com/products/9896.
La cosa strana è che il diodo da solo funziona e i motori da soli funzionano ma se li metto insieme non funzionano.
Probabilmente ho sbagliato il codice, qui metto un esempio di codice che ho provato
Code: [Select]
#include <IRremote.h>
int pwm_a = 3;  //PWM control for motor outputs 1 and 2 is on digital pin 3
int pwm_b = 11;  //PWM control for motor outputs 3 and 4 is on digital pin 11
int dir_a = 12;  //direction control for motor outputs 1 and 2 is on digital pin 12
int dir_b = 13;
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
 analogWrite(pwm_a, 100);  
 analogWrite(pwm_b, 100);
 Serial.begin(9600);
 irrecv.enableIRIn(); // Start the receiver
}

void loop() {
 if (irrecv.decode(&results)) {
   Serial.println(results.value, DEC);
   delay (100);
   irrecv.resume(); // Receive the next value
 }
 int val = results.value;

 if(val == 2011275392) {
   digitalWrite(dir_a, HIGH);
   digitalWrite(dir_b, LOW);
 }
 else{

   if(val == 2011271296){
     digitalWrite(dir_a, LOW);
     digitalWrite(dir_b, HIGH);
   }
 }


}
// 2011271296 e 2011275392 sono due tasti dell'Apple Remote

uwefed

Ciao djtandrea
Hai messo 2 volte il link del Motor shield e manca il link del LED infrarosso.

Come hai collegato il LED infrarosso?
Come alimenti l' arduiono e i motori?
Usi il LED infrarossi come ricevitore?

Il codice mi sembra giusto.

Ciao Uwe

djtandrea

http://www.sparkfun.com/products/10266 ecco il diodo.
LED infrarossi lon ce ne sono c'è solo il diodo, il led è nel telecomando,
e per il diodo:
ho collegato la massa del diodo a GND poi l'ingresso ai 5v e l'out alla porta 6.
Poi l'arduino lo alimento a 9v con una batteria, e per l'ardumoto ho piegato il pin vin e ci ho attaccato 4 pile AA.
E il  led come detto prima non c'è.

P.S. il diodo è collegato tramite protoshield

uwefed

#3
Jan 09, 2011, 11:05 pm Last Edit: Jan 09, 2011, 11:07 pm by uwefed Reason: 1
Ciao djtandrea
Il Tuo problema é che solo un motore gira mentre l'altro no?

Incominciamo a chiamare il TSOP382 ricevitore infarrossi.
Quote
Poi l'arduino lo alimento a 9v con una batteria,
dove hai collegato la batteria
Quote
l'ardumoto ho piegato il pin vin e ci ho attaccato 4 pile AA.
vuol dire che Vin di ardumotor non é collegato con Vin del Arduino, ma ai 6V delle batterie stilo? il polo delle Batterie Stilo é colegato a gnd?
Per i collegamenti del TSOP382xx avrai segiuto lo datasheet.

Il TSOP382xx é un fotodiodo con un amplificatore, filtro e demodulatore. La frequenza che lascia passare il filto é decodificato nel numero del componente dopo il numero 382. Quella frequenza dovrebbe corrispondere con quella del telecomando. Non é molto chiaro, ma mi sembra che quello che vende la sparkfun sia per 38Khz. È una frequenza molto usata e maggior parte dei telecomandi dovrebbero usare questa frequenza.

Vedo nel codice:
Code: [Select]
int pwm_a = 3;  //PWM control for motor outputs 1 and 2 is on digital pin 3 l' ardumotor usa i pin 10 a 13 percui pwm_a deve essere 10.
lo schema del Ardumoto lo trovi http://www.sparkfun.com/datasheets/Robotics/Ardumoto_v12.pdf

Ciao Uwe


 




djtandrea

no, non ne gira nemmeno uno.
l'arduino è alimentato tramite l'entrata classica e l'ardumoto tramite uno
http://www.sparkfun.com/products/8084 collegato ai due fori accanto che si vedono accanto ai terminali per i motori.
per il codice è giusto il pin 3 secondo i commenti e secondo le prove effettuate.

uwefed

Ciao djtandrea.
Scusami, noto solo adesso che ci sono 2 versoni diverse del ardumoto: la versione 12 usa i pin 10 al 13, la versione 13 i pin 3, 11-13.
Se hai controllato sará giusto il pin 3.
Domanda cretina; l'alimentazione della scheda é polarizzata giusta?
Ciao Uwe

djtandrea

penso di si perchè ci sono i segni + e -

lesto

#7
Jan 10, 2011, 04:59 pm Last Edit: Jan 10, 2011, 05:02 pm by lestofante Reason: 1
secondo me il problema è che nel loop usa il digitalWrite() al posto dell'analogWrite()... il ponte H c'è scritto di governarlo col PWM!
altro problema che può nascereè che la libreria dell'infrarosso vada a giocare con i timer, spu++anando il PWM
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

uwefed

djtandrea
per prova metti "pinMode(pwm_a, OUTPUT); digitalWrite(pwm_a, HIGH);"  al posto di "analogWrite(pwm_a, 100);"
e la stessa cosa con pwm_b
Se li gira il motore é un problema di libreria.
ciao Uwe

djtandrea

al momento sto avendo un problema col porta-batterie per le stilo, perchè mi si è staccato il filo e non ho  il saldatore ( lo comprerò a breve),
ma non penso sia quello il problema perchè i motori girano anche se l'output è analogico e penso che il problema non sia lì perchè cambierebbe poco.

uwefed

cambia tanto. per il PWM vengono usati i timer intern del ATmega; la libreria IR anche lei visto che lavora con tempi potrebbe usare uno o piú timer e percui le 2 cose vanno in conflitto
Ciao Uwe

djtandrea

ok appena entro in possesso di un saldatore lo faccio.
grazie

djtandrea


uwefed

manda il nuovo codice.
Ciao Uwe

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