Non riesco a spiegarmi la motivazione. Grazie in anticipo per chi mi aiuterà.

Ciao a tutti, da poco sono impegnato nel "costruire" un banale robot, una macchinina dotata di sensore HC-SR04 che rileva gli ostacoli e comunica ai due motori DC di cambiare,in pratica, il senso di rotazione fino a quando il sensore non rileverà più un ostacolo allora riprenderà il senso di marcia iniziale, il tutto ovviamente funziona tramite una scheda l298n.
Inizialmente per utilizzare la mia macchinina utilizzavo una batteria da 9V per la scheda l298n (la semplicissima batteria da 9V) e il cavo che va dal computer ad arduino per caricare gli sketch (per capirci) Tutto andava a meraviglia, tutto perfettamente funzionante fino a quando decido di cambiare l'alimentazione, non usando più quella del computer, ho usato quindi due batterie da 9V, una per arduino e una per la scheda l298n, la mia macchinina è così diventata completamente stupida non ascolta bene il mio sensore anche se soltanto qualche volta riesce ad evitare un ostacolo. sarà questione di ampere? Ho provato a collegare anche delle stilo in serie o parallelo avendo 6 volt ma il doppio degli ampere ma niente sempre stupida. Non so più cosa fare!

Grazie mille per chi riuscirà ad aiutarmi! :slight_smile:

link del l298n --> http://www.instructables.com/id/Arduino-Modules-L298N-Dual-H-Bridge-Motor-Controll/

il mio semplicissimo sketch:

#include <NewPing.h>
#define PIN_TRIG 2
#define PIN_ECHO 3
#define MAX_DIST 3000
NewPing datoregistrato(PIN_TRIG,PIN_ECHO,MAX_DIST);
int ENA=11; 
int IN1=10; 
int IN2=9; 
int IN3=8; 
int IN4=7; 
int ENB=6;
unsigned int uS;
float cm;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(115200);
}

void loop() {
Serial.print("Dista: ");

Serial.print(cm);
Serial.println(" cm");

 uS = datoregistrato.ping();
 cm = datoregistrato.convert_cm(uS);
if(cm>30)
{ 
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 200);
analogWrite(ENB, 200);
}
if (cm>=8 && cm<=50)
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, (int)(200*(cm-10)/40+50));
analogWrite(ENB, (int)(200*(cm-10)/40+50));
}                                                                                                             

if (cm<8 ) 
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 150);
analogWrite(ENB, 150);
delay(1500);  
}

}

//grazie in anticipo per chi mi aiuterà!!

programmato in Arduino UNO

Ciao,
prima di tutto, essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ...

... poi, proprio in conformità a detto regolamento, punto 7, cortesemente edita il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

Qui sono spiegati bene i collegamenti:

Ma hai provato ad alimentare Arduino dai pin di uscita della scheda l298n? O a collegare tutte le masse in comune?

Sei sicuro di non avere la batteria 9V scarica?
Ciao Uwe

Grazie a anto30 e a cyberhs sono riuscito a fare andare meglio il mio piccolo robot anche se qualche volte si "impalla" rimanendo a girare su se stesso. Sapete dirmi qualcosa a riguardo? Grazie :slight_smile:

anto30:
Ma hai provato ad alimentare Arduino dai pin di uscita della scheda l298n? O a collegare tutte le masse in comune?

Ciao. Ho fatto anche quello che mi hai detto tu, il mio robot riconosce gli ostacoli ma arduino UNO si riavvia sempre.