Go Down

Topic: Problema con uno sketch Arduino Uno (Read 1 time) previous topic - next topic

alberto01

Buongiorno a tutti!
So da subito che il mio problema sarà facilmente risolvibile da chi ha esperienza nella programmazione arduino, ma io non riesco a far funziobare un robot evita_ostacoli a ultrasuoni composto da:
-3 sensori a ultrasuoni HC-SR04(quello DX è decentrato di 9 cm);
-2 motori convenzionali(quelli con fili positivo e quello negativo, niente GND)
-Scheda Arduino UNO
-batteria da 9 volt collegata a GND e Vin
-breadboard
-molti cavi di connessione
Il codice che ho adoperato è questo:
Code: [Select]
int trigDX = 11; 
int echoDX = 12; 
int trigSX = 10;
int echoSX = 9;
int trigAX = 8;
int echoAX = 7;
int motoreSX = 13;
int motoreDX = 6;
int terra = 5;

void setup() { 
pinMode( terra, OUTPUT);
pinMode( motoreSX, OUTPUT );
pinMode( motoreDX, OUTPUT );
pinMode( trigDX, OUTPUT ); 
pinMode( echoDX, INPUT );
pinMode( trigSX, OUTPUT ); 
pinMode( echoSX, INPUT );
pinMode( trigAX, OUTPUT ); 
pinMode( echoAX, INPUT );

void loop() { 
digitalWrite( terra, HIGH );
digitalWrite( motoreSX, HIGH );
digitalWrite( motoreDX, HIGH );
digitalWrite( trigDX, LOW );   
digitalWrite( trigDX, HIGH ); 
pinMode( trigSX, LOW ); 
pinMode( trigSX, HIGH );
pinMode( trigAX, LOW ); 
pinMode( trigAX, HIGH );
delayMicroseconds( 10 ); 
digitalWrite( trigDX, LOW );
digitalWrite( trigSX, LOW );
digitalWrite( trigAX, LOW );
long durationDX = pulseIn( echoDX, HIGH );
long durationSX = pulseIn( echoSX, HIGH );
long durationAX = pulseIn( echoAX, HIGH );
long rDX = 0.034 * durationDX / 2;
long rSX = 0.034 * durationSX / 2;
long rAX = 0.034 * durationAX / 2;   
if ( rDX < 14 ) {
digitalWrite( motoreSX, LOW );
delayMicroseconds( 500 );
digitalWrite( motoreSX, HIGH );
}
if ( rSX < 5 ) {
digitalWrite( motoreDX, LOW);
delayMicroseconds( 500 );
digitalWrite( motoreDX, HIGH);
}
if ( rAX < 7 ) {
if ( rSX < rDX ) {
digitalWrite( motoreSX, LOW);
delayMicroseconds ( 700 );
digitalWrite(motoreSX, HIGH);
}
else {
digitalWrite( motoreDX, LOW );
delayMicroseconds ( 700 );
digitalWrite( motoreDX, HIGH );
}
}
delay( 1500 ); 
}

se volete avere chiaro il funzionamento dei sensori andate qui: http://barcadero.wordpress.com/2012/02/14/sensore-a-ultrasuoni-hc-sr04-e-arduino/
Ah, è vero, il problema: non parte nulla!!!!
misteriosamente i motori non partono (e sospetto nemmeno i sensori!).
grazie in anticipo a chi vorrà aiutarmi !
ALBERTO01

Brunello

A parte il fatto che con una batteria a 9V ( di ridotta capacita' ) non vai molto lontano... dubito che ce la faccia ad erogare la corrente necessaria per tutto quello che hai menzionato..

Prima di vedere cosa fa' lo sketch, mi togli una curiosita' ...
Come li hai collegati i motori ad arduino ?


alberto01

positivo a GND
negativo lo vedi nel codice
grazie!

PaoloP

#3
Feb 11, 2013, 05:02 pm Last Edit: Feb 11, 2013, 05:09 pm by PaoloP Reason: 1

positivo a GND
negativo lo vedi nel codice
grazie!


puff!!  :smiley-fat: (nel senso che è scoppiato il pin di Arduino)
Tutorial --> http://glgprograms.altervista.org/index.php?p=micro/arduino-8

Comunque, procedi con ordine.
Stacca tutto e prova componente per componente con gli sketch di prova che trovi nei vari tuttorial.
Così sarai sicuro di cosa funziona e cosa no.
Poi ti consiglio di fare un po' di debug tramite il serial monitor verificando lo stato del programma nei punti critici, come la stampa dei valore dei sensori, ecc. 
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Brunello

Quote
puff!!  smiley-fat (nel senso che è scoppiato il pin di Arduino)


E' il caso che codesti motorini li scolleghi e al loro posto mettici dei LED ( con una resistenza in serie ), cosi' intanto vedi se lo sketch funziona ( e se le porte sono ancora "vive" )

Non puoi collegare direttamente i motori sui pin di arduino, neanche se sono dei motorini da bambole.
hai mica dei dati su quei motori ?

alberto01

a PaoloP
Ti è scoppiato il pin????
ora comunque controllo i dati e lo sketch!

alberto01

Ah, dimenticavo!
nel codice trovate "terra" perche per fare il progetto ho occupato tutti i 3 PIN GND, ma se utilizzavo il 3 la scheda non si "accendeva"(non riuscivo a caricare il programma e non si alimentava neanche!)

alberto01

#7
Feb 12, 2013, 05:14 pm Last Edit: Feb 12, 2013, 05:21 pm by alberto01 Reason: 1
ho torvato i dati del motore: http://it.opitec.com/opitec-web/articleNumber/224057/kbmo/p/2 non sono sicuro che sia questo, cmq, vai nella sezione
in cui è e trovi tutti i motori(non cambiano di tanto!)
A paoloP: oddio, io non ce li ho tutti quei componenti! inoltre per me è scritto come se fosse in arabo! :smiley-fat: :smiley-fat: :( :( :(

PaoloP

Se hai collegato direttamente il motorino con i pin di Arduino, visto che l'assorbimento del modello inferiore è di 70mA probabilmente hai bruciato il pin di Arduino che può erogare massimo 40mA.

Puoi verificarlo facilmente caricando su Arduino lo sketch del blink, modificando il numero del pin con quello a cui era collegato il motore e vedere se lampeggia collegandoci un led con in serie una resistenza da 470 ohm.
Schemi di collegamento --> http://arduino.cc/forum/index.php/topic,146152.0.html

Se non dovesse funzionare ed hai la versione di Arduino con il Chip estraibile puoi sostituire il chip con uno nuovo.
Se comunque dovesse funzionare, ti consiglio di acquistare una scheda per il controllo dei motori come questa --> http://arduino.cc/en/Main/ArduinoMotorShieldR3
a cui puoi collegare anche i sensori, oppure se non vuoi comprare la scheda, prendi il singolo integrato per pilotare i motori: L293D (max 600mA) --> http://glgprograms.altervista.org/index.php?p=micro/arduino-8
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

alberto01

Ho controllato tutti i PIN, non ce ne sono di bruciati o rotti...
cmq, potrebbe non essere quello il modello, guarda nella sezione motori e motoriduttori del sito...

alberto01

#10
Feb 13, 2013, 06:32 pm Last Edit: Feb 13, 2013, 06:37 pm by alberto01 Reason: 1
Comunque, quella scheda fa "da scudo" all scheda Arduino dall'assorbimento di superiore alla norma del motore?? :~ :smiley-eek-blue:
o deve essere programmata anche quella???  :smiley-eek: :smiley-eek:
mi puoi trovare un esempio o un tutorial????? ;)
GRAZIE ANCORA!

PaoloP

--> http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/?ALLSTEPS

Si, serve per poter collegare motori Dc o 1 motore stepper.
Non deve essere programmata, ma si programma Arduino per agire sui motori.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

alberto01

ho notato che sotto ha quelle cose di connessione, come-si-chiamano????, quelle spinette di ferro, ma ce le ha integrate ho devo mettercele io??Perchè ho visto che occupano tutti i pin della scheda, ed io devo collegarci i sensori!
Cmq, grz(tt abbrvt!)

PaoloP

La scheda dovrebbe avere gli strip femmina lunghi già montati.
E' normale che occupino tutti i pin, anzi è preferibile; infatti sono "passanti".
Vuol dire che è possibile collegare i jumper ai pin della seconda scheda che è collegata ai pin sottostanti.
In questo modo puoi collegare più schede sovrapposte e tutte potranno accedere ai pin dell'Arduino.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

alberto01

ahhh, grazie! Ho capito!
credo che per un po' non avrò bisogno di aituo, oggi ordino la scheda e se ho bisogno di aiuto lo scrivo in un nuovo topic
grazie!!!

Go Up