Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: [1]   Go Down
Author Topic: motores con arduino sebloquean las salidas  (Read 895 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Buenas alexrlopez86,

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

Un saludo
Logged

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

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?
Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 958
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-twist
« Last Edit: June 18, 2013, 03:49:02 pm by Heke » Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

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

el codigo es el siguiente

Code:
#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
Logged

Anaco, Venezuela
Offline Offline
Jr. Member
**
Karma: 8
Posts: 91
Electronic Engineer
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

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

Saludos.
Logged

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

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.
Logged

Pages: [1]   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: