Pages: [1]   Go Down
Author Topic: Arduino + Puente h (l298n) + motores dc, anda un poco y se enloquese  (Read 247 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos amigos, vengo a pedirles un poco de ayuda antes de volverme loco.

Mi configuración es la siguiente:

Arduino hecho en casa: http://arduino.cc/en/pmwiki.php?n=Main/Standalone
Puente H (l298n) : http://www.haoyuelectronics.com/Attachment/L298N_module/1.jpg
2 motores Dc
8 pilas AA

La conexion es asi:
De arduino al puente h => pines 2,3,4,5 para controlar los motores
Al puente H le pongo las baterias y conecto tierra con el arduino

El problema: El Robot anda bien un tiempo, pero despues los motores se quedan girando y hay que reiniciar el arduino para que pare.

Les agradesco mucho su ayuda he invertido mucho tiempo en este proyecto y me empieso a sentir frustrado
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 312
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Varias preguntas:

1) El código o crees que somos magos para imaginar el problema?
2) Qué fuente usas para alimentar el ARduino?
3) Mediste la tensión de la batería cuando los motores se ponen locos?
4) Mediste las corrientes consumidas por los motores?
5) Que motores? Datos de tensión y corriente.
6) Pasa algo raro ademas de lo que ilustras, hay temperatura en algun elemento?

Perdon pero
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola surbyte gracias por tu respuesta, a continuacion respondo tus preguntas

1. MI codigo es el siguiente:
Code:
#include <Servo.h>
Servo myservo;
//////////////
int led_front = 6;
int led_side = 7;
int led_back = 8;
int led_up = 13;
int led_head = 14;
//////////////
const int Motor1Pin1 = 3;
const int Motor1Pin2 = 2;
const int Motor2Pin1 = 5;
const int Motor2Pin2 = 4;
//////////////
void setup(){
  //
  myservo.attach(9);
  myservo.write(90);
  //
  pinMode(led_front, OUTPUT);
  pinMode(led_side, OUTPUT);
  pinMode(led_back, OUTPUT);
  pinMode(led_up, OUTPUT);
  pinMode(led_head, OUTPUT);
  //
  SetUp_Motores();
  //
  Serial.begin(9600);
  Serial.println(":::Robi-2 [OnLine]");
  //
}
void loop(){
  while (Serial.available()){
    char dato = Serial.read();
    switch(dato){
    case '1':   
      {
        digitalWrite(led_front, !digitalRead(led_front));
        break;
      }
    case '2':   
      {
        digitalWrite(led_side, !digitalRead(led_side));
        break;
      }
    case '3':   
      {
        digitalWrite(led_back, !digitalRead(led_back));
        break;
      }
      case '4':   
      {
        digitalWrite(led_up, !digitalRead(led_up));
        break;
      }
      case '5':   
      {
        digitalWrite(led_head, !digitalRead(led_head));
        break;
      }
      //
    case 'S':
      {
        StopM();
        Serial.println("Stop");
        break;
      }
    case 'w':
      {
        GoForward();
        Serial.println("GoForward");
        break;
      }
    case 's':   
      {
        GoBackward();
        Serial.println("GoBackward");
        break;
      }
    case 'a':   
      {
        GoLeft();
        Serial.println("GoLeft");
        break;
      }
    case 'd':   
      {
        GoRight();
        Serial.println("GoRight");
        break;
      }
      //
    case 'z':   
      {
        myservo.write(20);
        break;
      }
    case 'x':   
      {
        myservo.write(90);
        break;
      }
    case 'c':   
      {
        myservo.write(160);
        break;
      }
      //
    }
  }
}
//////////////
void SetUp_Motores(){
  pinMode(Motor1Pin1, OUTPUT);   
  pinMode(Motor1Pin2, OUTPUT);   
  pinMode(Motor2Pin1, OUTPUT);   
  pinMode(Motor2Pin2, OUTPUT);
}
//////////
void GoForward(){
  digitalWrite(Motor1Pin2, LOW);
  digitalWrite(Motor1Pin1, HIGH); 
  digitalWrite(Motor2Pin2, LOW);
  digitalWrite(Motor2Pin1, HIGH);
}
void GoBackward(){
  digitalWrite(Motor1Pin1, LOW);
  digitalWrite(Motor1Pin2, HIGH);
  digitalWrite(Motor2Pin1, LOW);
  digitalWrite(Motor2Pin2, HIGH);
}
void GoLeft(){ 
  digitalWrite(Motor1Pin1, LOW);
  digitalWrite(Motor1Pin2, HIGH);
  digitalWrite(Motor2Pin2, LOW);
  digitalWrite(Motor2Pin1, HIGH);
}
void GoRight(){ 
  digitalWrite(Motor1Pin2, LOW);
  digitalWrite(Motor1Pin1, HIGH);
  digitalWrite(Motor2Pin1, LOW);
  digitalWrite(Motor2Pin2, HIGH);
}
//
void StopM(){
  digitalWrite(Motor1Pin2, LOW);
  digitalWrite(Motor1Pin1, LOW);
  digitalWrite(Motor2Pin1, LOW);
  digitalWrite(Motor2Pin2, LOW);
}

2. Al Arduino lo alimento con una pila cuadrada de 9 voltios
3. Si la medi y se baja, me he dado cuenta que a medida que las pilas se descargan el error se repite
4. Amigo no se como medir esas corrientes, me das una ayuda por fa!
5. Adjunto una foto de los motores, por que no se  sus tensiones y corrientes, son de los muy comunes
6. Mira cuando la bateria de los motores esta apagada, no se presenta el problema, y otra cosa rara es que el problema no pasa (Muy a menudo) cuando no hay uso del serial, es decir cuando cargo un programa que mueve por si solo el robot, Y las temperaturas de todo son normales nada se sobrecalienta

Muchas gracias por tu atencion


* IMG_20140828_190850094.jpg (844.13 KB, 2592x1456 - viewed 13 times.)
« Last Edit: August 28, 2014, 07:24:06 pm by josewebdev » Logged

Maracaibo
Offline Offline
Full Member
***
Karma: 4
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos

Prueba con este codigo

Code:
#include <Servo.h>
Servo myservo;
//////////////
int led_front = 6;
int led_side = 7;
int led_back = 8;
int led_up = 13;
int led_head = 14;
//////////////
const int Motor1Pin1 = 3;
const int Motor1Pin2 = 2;
const int Motor2Pin1 = 5;
const int Motor2Pin2 = 4;
//////////////
void setup(){
  //
  myservo.attach(9);
  myservo.write(90);
  //
  pinMode(led_front, OUTPUT);
  pinMode(led_side, OUTPUT);
  pinMode(led_back, OUTPUT);
  pinMode(led_up, OUTPUT);
  pinMode(led_head, OUTPUT);
  //
  SetUp_Motores();
  //
  Serial.begin(9600);
  Serial.println(":::Robi-2 [OnLine]");
  //
}
void loop(){
  while (Serial.available()>0){
    char dato = Serial.read();
    switch(dato){
    case '1':   
      digitalWrite(led_front, !digitalRead(led_front));
      break;
    case '2':   
      digitalWrite(led_side, !digitalRead(led_side));
      break;
    case '3':   
      digitalWrite(led_back, !digitalRead(led_back));
      break;
    case '4':   
      digitalWrite(led_up, !digitalRead(led_up));
      break;
    case '5':   
      digitalWrite(led_head, !digitalRead(led_head));
      break;
    case 'S':
      StopM();
      Serial.println("Stop");
      break;
    case 'w':
      GoForward();
      Serial.println("GoForward");
      break;
    case 's':   
      GoBackward();
      Serial.println("GoBackward");
      break;
    case 'a':   
      GoLeft();
      Serial.println("GoLeft");
      break;
    case 'd':   
      GoRight();
      Serial.println("GoRight");
      break;
    case 'z':   
      myservo.write(20);
      break;
    case 'x':   
      myservo.write(90);
      break;
    case 'c':   
      myservo.write(160);
      break;
      //
    }
  }
}
//////////////
void SetUp_Motores(){
  pinMode(Motor1Pin1, OUTPUT);   
  pinMode(Motor1Pin2, OUTPUT);   
  pinMode(Motor2Pin1, OUTPUT);   
  pinMode(Motor2Pin2, OUTPUT);
}
//////////
void GoForward(){
  StopM();
  digitalWrite(Motor1Pin1, HIGH); 
  digitalWrite(Motor2Pin1, HIGH);
}
void GoBackward(){
  StopM();
  digitalWrite(Motor1Pin2, HIGH);
  digitalWrite(Motor2Pin2, HIGH);
}
void GoLeft(){ 
  StopM();
  digitalWrite(Motor1Pin2, HIGH);
  digitalWrite(Motor2Pin1, HIGH);
}
void GoRight(){ 
  StopM();
  digitalWrite(Motor1Pin1, HIGH);
  digitalWrite(Motor2Pin2, HIGH);
}
//
void StopM(){
  digitalWrite(Motor1Pin2, LOW);
  digitalWrite(Motor1Pin1, LOW);
  digitalWrite(Motor2Pin1, LOW);
  digitalWrite(Motor2Pin2, LOW);
}

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos max_saeta te agradezco mucho tu ayuda, te cuento que probé el código y no soluciono por completo el problema, pero ahora ocurre en menos ocasiones, es decir ayudo mucho el cambio, me pregunto si tengo algún problema eléctrico, ¿habrá que poner algo entre los motores y el puente h?, muchas gracias!
Logged

Maracaibo
Offline Offline
Full Member
***
Karma: 4
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos
Tendrías que subir el diagrama eléctrico de tu sistema y así poder ayudare con eso.
Logged

Pages: [1]   Go Up
Jump to: