Go Down

Topic: Problema con modulo L298 per robot evita ostacoli. (Read 172 times) previous topic - next topic

hassanbaydary

Salve a tutti:

Negli ultimi giorni sto lavorando ad un robot (machina con 2 ruote) che riesce ad evitare gli ostacoli davanti a lui e cambia direzione da solo. Il robot è costituito da un modulo ultrasuoni, un modulo L298, un servomotore, una arduino sensor shield V5 e un arduino uno.

Questo è il programma:
Code: [Select]


#include <Servo.h>          //Libreria servomotore.
#include <NewPing.h>       //Libreria modulo ultrasuoni.

//Pin per controllo modulo L298.
const int LeftMotorForward = 5;
const int LeftMotorBackward = 4;
const int RightMotorForward = 3;
const int RightMotorBackward = 2;

//Pin per modulo ultrasuoni.
#define trig_pin A1 //Input analogico A1
#define echo_pin A2 //Input analogico A2

#define maximum_distance 200
boolean goesForward = false;
int distance = 100;

NewPing sonar(trig_pin, echo_pin, maximum_distance); //Funzione sensore ultrasuoni.
Servo servo_motor; //Nome servomotore.


void setup(){

  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
 
  servo_motor.attach(11); //Nome pin servo.

  servo_motor.write(90);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop(){

  int distanceRight = 0;
  int distanceLeft = 0;
  delay(50);

  if (distance <= 20){
    moveStop();
    delay(300);
    moveBackward();
    delay(400);
    moveStop();
    delay(300);
    distanceRight = lookRight();
    delay(300);
    distanceLeft = lookLeft();
    delay(300);

    if (distance >= distanceLeft){
      turnRight();
      moveStop();
    }
    else{
      turnLeft();
      moveStop();
    }
  }
  else{
    moveForward();
  }
    distance = readPing();
}

int lookRight(){ 
  servo_motor.write(10);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(90);
  return distance;
}

int lookLeft(){
  servo_motor.write(170);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(90);
  return distance;
  delay(100);
}

int readPing(){
  delay(70);
  int cm = sonar.ping_cm();
  if (cm==0){
    cm=250;
  }
  return cm;
}

void moveStop(){
 
  digitalWrite(RightMotorForward, LOW);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  digitalWrite(LeftMotorBackward, LOW);
}

void moveForward(){

  if(!goesForward){

    goesForward=true;
   
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(RightMotorForward, HIGH);
 
    digitalWrite(LeftMotorBackward, LOW);
    digitalWrite(RightMotorBackward, LOW);
  }
}

void moveBackward(){

  goesForward=false;

  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
 
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorForward, LOW);
 
}

void turnRight(){

  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
 
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorForward, LOW);
 
  delay(500);
 
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
 
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
 
 
 
}

void turnLeft(){

  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
 
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);

  delay(500);
 
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
 
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
}




Ora il mio problema deriva dal fatto che collegando la batteria al modulo L298 i motori non girano e quindi la macchina non cammina anche se il servomotore e il modulo ultrasuoni funzionano.
Al modulo L298 ho collegato una batteria da 7V nel foro dove vanno i 5V perchè ho provato a mettere i 7V nel foro dei 12V, ma il led del modulo non si accendeva. Ad arduino invece ho collegato il powerbank da 5V nell' entrata che si utilizza quando lo si collega al computer. Controllando con il multimetro nei fori del modulo L298 dove ho collegato i motori non si rileva nessuna tensione, quando in entrata ci sono i 7V. Non credo che il modulo L298 sia rotto perchè lo comprato da pochissimo tempo, e lo ho appena tolto dal pachetto per fare questo progetto.

Spero di essere stato abbastanza chiaro e vi invito a farmi qualsiasi domanda voglite sui punti che ritenete poco chiari.

Grazie a tutti 


uwefed

Quote
Al modulo L298 ho collegato una batteria da 7V nel foro dove vanno i 5V perchè ho provato a mettere i 7V nel foro dei 12V, ma il led del modulo non si accendeva.
La é una scenza esatta non un campo di prova e di idee fantasma.

Il L298 ha bisogno di 2 alimentazioni. una per la logica e una per il motore.
La tensione della logica non puó superare i 7V. Non conosco nessuna batteria da 7V. Se hai una LIPO sono almeno 7,4V e hai probabilmente rotto il L298.

Ciao Uwe

hassanbaydary

salve a tutti e grazie per l'aiuto.

 Nel modulo L298 ho collegato solo l' alimentazione dei motori ,quella per la logica non so dove metterla. Perchè nel modulo trovo solo 3 fori, uno da 5V un0 da 12V e una GND.

Graziea a tutti

brunello22

Infatti devi collegare l'alimentazione solo sul 12V, perchè la linea a 5V è un' uscita , non un ingresso, collegata al 7805 montato sulla scheda

hassanbaydary

Grazie per la risposta.

Il problema è che collegando una batteria da 6V o una da 7.4V all' ingrezzo dei 12V il led del modulo non si accende.

brunello22

Se intendo il led sul modulo L298 che indica se è presente l'alimentazione, mi pare che sia colllegato trail +5V e il GND,
Quindi se non si accende alimentandolo sulla linea dei 12V vuol dire che il regolatore 7805 è andato

Davide02

#6
Aug 25, 2019, 04:06 pm Last Edit: Aug 26, 2019, 08:17 am by Davide02
Buongiorno,

Il modulo che hai comprato ha due porte di funzionamento dei motorini separate, quindi le consiglio di usare un voltaggio di 5volt massimo 7 volt nella porta dove é scritto +5v e nella porta dei +12 può utilizzare una alimentazione che va dai 7 ai 35 volt con un massimo di 2.5A.

Quindi probabilmente adesso il modulo non si accende piú perché ha inserito una batteria (probabilmente a litio ma non lo so) da poco di piú di sette volt nella porta +5  e questo deve aver bruciato il driver. Perciò le consiglio di alimentare i motorini da 7 volt nell'entrata +12.

Spero di esserle stato utile e Arrivederci :)

uwefed

Visto che il L298 ha 2 ponti H da 2A l' alimentazione deve garantire 4A.
Ciao Uwe

hassanbaydary

Salve  atutti e vi ringrazio per l'aiuto.

Dopo aver constatato che il mio modulo si era rotto ne ho ordinato un'altro. Ho collegato la batteria da 6V all'entrata del foro con scritto 12 V del modulo ,e finalmente il led si è acceso. Però dando alimentazione sia al modulo e sia ad arduino i motori non giarano e la macchina non si muove anche se il modulo ultrasuoni e il servomotore funzionano. Ora non capisco quale si il problema, il programma funziona e il modulo che ho appena comrato è nuovissimo.

Grazie a tutti.

uwefed

Nel datasheet come tensione minima per i motori dice 7V. Non so cosa succede se alimenti i motori con soli 6V.
Cioa Uwe

docdoc

Ehm, scusa, ma postare da subito uno schemino (anche fatto a mano e fotografato, se non sai usare qualche tool per disegno tecnico) non è meglio per te e per noi, rispetto a stare a descrivere fumosamente le connessioni fatte in 4-5 messaggi? ;)
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Go Up