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! ![]()
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à!!