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
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?
#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
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.