Go Down

Topic: motores con arduino sebloquean las salidas (Read 920 times) previous topic - next topic

alexrlopez86

hola a todos estoy tratando de controlar dos motores de mediana potencia unos 2 amperios de pico mas concretamente estos http://www.ebay.es/itm/Smart-car-Robot-Self-balancing-Kits-Wheel-12V-Motor-Motor-bracket-Connector-/170904253802?pt=LH_DefaultDomain_0&hash=item27caaff56a y e probado de todo e usado drivers l298n , l6203 (driver mofet) con codensadores con pull up ,pull down incluso con optoacopladores y no hay manera al pricipio enpiezan a funcionar pero desde que se enbalan un poco con poca carga el arduino se bloque se las salidas se quedan en el ultimo estado asta que lo reseteas todo con un "atmega 1280"


espero su ayuda haber si hay alguien con mas experiencia

Wk3

Buenas alexrlopez86,

Podrías poner el código y el esquema de montaje? como alimentas a los motores?

Un saludo

alexrlopez86

probando tratando de simplificar el codigo e descubierto que el problema procede del acelerometro si le acerco la mano el problema desapace mi duda es la siguiete ¿como lo aislo para no tener mi mano pegada sobre el?

Heke

#3
Jun 18, 2013, 10:46 pm Last Edit: Jun 18, 2013, 10:49 pm by Heke Reason: 1
Realizo un "GOTO" al post del compañero, y te digo lo mismo... un esquema o una foto, el codigo ... como alimentas los motores?



Buenas alexrlopez86,

Podrías poner el código y el esquema de montaje? como alimentas a los motores?

Un saludo



Otra opcion es emplear esto  ]:D
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

alexrlopez86

el codigo es el siguiente

Code: [Select]

#include "Wire.h"

#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;

int16_t ax, ay, az;
float angleYZ, angleXZ, angletmp, angletmp1, angleXZ1;
int16_t gx, gy, gz;

#define LED_PIN 13
#define porcent 50
bool blinkState = false;

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    Wire.begin();

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(115200);

    // initialize device
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();

    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

    // configure Arduino LED for
    pinMode(12, OUTPUT);
    pinMode(11, OUTPUT);
}

void loop() {
    // read raw accel/gyro measurements from device
   angletmp=0;
   angletmp1=1;
while(true){   
   
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
   
    ax = map(ax, -3800, 3800, -500 ,500);
    ay = map(ay, -3800, 3800, -500, 500);
    az = map(az, -3800, 3800, -500, 500);
   
    angleYZ = atan((double)ay / (double)az);
    angleYZ = angleYZ*(57.2958)*10;
   
    angleXZ = atan((double)ax / (double)az);
    angleXZ = angleXZ*(57.2958)*10;

    //if(angletmp1 != 0){
    /*for (int i=1; i <= 20; i++){
    delayMicroseconds(50);
    //angletmp = angletmp + angleXZ;
    angleXZ = angleXZ + angleXZ1;
    //angletmp1 = angleXZ`
    }
    angleXZ = angleXZ /20;
    //} */
    if(angleXZ >= (angletmp1 +20))
    {
      if(angleXZ >= (angletmp1 +30))
      {
      detras(100);
      //angletmp1=angletmp1-0.1;
      }else{
      detras(30);
     
      }}
    else if(angleXZ <= (angletmp1 -20))
    {
      if(angleXZ <= (angletmp1 -30)){
        delante(100);
        //angletmp1=angletmp1+0.1;
      }else{ delante(30);
       
    }}
    Serial.print("a/g:\t");
  //  Serial.print(ay); Serial.print("\t");
    Serial.print(angletmp1); Serial.print("\t");
    Serial.println(angleXZ); Serial.print("\t");
   
   
   
}}
void delante(int speed)
{
    if(speed=100)
    {
    digitalWrite(11,HIGH);
    }else{
    analogWrite(11,speed);
    }
    digitalWrite(12, LOW); 
    delay(2);
    Serial.print("delante\t");

}
void detras(int speed)
{
    if(speed=100)
    {
    digitalWrite(12,HIGH);
    }else{ 
    analogWrite(12, speed); 
    }
    digitalWrite(11,LOW);
    delay(2);
    Serial.print("detras\t");

}


como se puede apreciar el codigo eta lejos fde ser definitibo pero si el hardware no acompaña esta dificil, la alimentacion de los motores la e echo tanto con baterias totalmente independientes con optoacopladores de por medio como directo no dispongo de esquemas y los drivers usados son los mencionados anteriormente uno es el l298n modulo para arduino y el otro con iguales resultados es el l6203. no poseo esquemas pero ambos estan testeados y funcionan correctamente

Luis_AM3C

Hola,

       Prueba agregar un condensador ceramico de 0.1uF lo mas cerca posible al acelerometro en la alimentación.

Saludos.

MGDavid

Posiblemente el problema no es ni de software ni de hardware ¿Alimentas los motores y el sensor con la misma bateria? Mira de alimentar los motores con una fuente exclusiva para ellos y en la medida de lo posible apantalla los cables de los sensores.

Go Up