SOBRE AMPERAJE DE BATERÍAS.



  • Buenas tardes, Tengo un pequeño problema y no se cual puede ser la causa.

    Hemos hecho un printbot con un sensor de ultrasonidos. El sensor está bien, ya que lo hemos comprobado varias veces por el serialport y mide perfectamente.
    La cosa es la siguiente. Cuando arrancamos el programa en el printbot, parece que le cuesta leer el sensor, y parece que cuando llega a esa parte, se reinicia le programa. Tenemos conectados dos servos, dos led y un buzzer.
    Me da la sensación de que es un problema de la batería, aunque no estoy del todo seguro. Al principio funcionaba, y parece que llegado a un punto dejo de funcionar. (el caso es q los servos giran, los leds parpadean y el buzzer suena). Puede ser un problema de consumo? Hay muchos actuadores enchufados? Esto tendría solución de ser este el problema?
    El printbot lleva una pila de 9V. Es el del hilo anterior, y creemos que el programa está correcto. Si alguien nos puede alumbrar sería de gran ayuda. Un saludo.


  • Moderador

    Hola @Chocarrat,

    Para ayudarte correctamente, ¿podrías indicarnos la placa que estás utilizando, así como si la alimentas desde el jack o desde la entrada Vin?. También, estaría bien que pudiésemos ver el código para cargarlo en nuestras placas y analizar el comportamiento.

    Un saludo,



  • Buenas tardes, gracias por contestar.
    La placa es la Freaduino UNO de mi primer kit de robotica. Conectamos la batería al jack, y también sucede con el USB.
    Con una versión reducida del programa, sin los leds va mejor, pero también falla al rato (me da que puede ser falta de potencia)
    En cuanto la código lo tenemos puesto en bitbloq y en el thingiverse (en el post anterior está). Estoy desde el móvil y me apaño fatal.
    Un saludo!


  • Moderador

    Hola @{Chocarrat},


    En ese caso, te recomiendo desconectar uno o los dos servos y comprobar si el programa funciona correctamente. En caso de que así funcionara correctamente podría deberse al problema que dices. Si aun así funciona de manera incorrecta, es posible que el fallo se encuentre en el propio programa, quizás necesite algún delay más.

    Un saludo,



  • Probaremos! Un saludo!



  • Comprobado.

    Efectivamente, al desconectar los servos (dos mejor que uno) El programa va perfecto. En cuanto detecta el obstaculo ejecuta la función de esquivar. Lo sabemos por los leds y el zumbador, que hacen las secuencias correspondientes, y no reinicia a modo arranque de avance contínuo. Luego parece casi claro del todo que es problema de intensidad (tal vez?). Con la pila de 9V va peor que con el portapilas de 6 x 1,5 V (aunque tampoco tira ya las 6 pilas, imagino que ya un poco gastadas. ¿Tanto chupa el HC-SR04? Como se podría solventar? Se le puede alimentar a parte? Muchas preguntas me parece a mi, verdad?

    Gracias en cualquier caso. Por cierto, aquí pego el código del programa. Sed benévolos ya que somos profanos y novatos!
     
    /***   Included libraries  /
    #include <Servo.h>
    #include <BitbloqUS.h>


    /   Global variables and function definition  /
    int zumbador_0 = 1;
    Servo MOTOR_IZQ;
    Servo MOTOR_DCH;
    int LED_DCH = 12;
    int LED_IZQ = 13;
    US ultrasonidos_0(8, 7);
    /
    Aqui las funciones de avance y detectar
    /
    void comienza_avance() {
        MOTOR_IZQ.write(0);
        MOTOR_DCH.write(180);
        digitalWrite(LED_DCH, HIGH);
        digitalWrite(LED_IZQ, HIGH);
        delay(100);
        digitalWrite(LED_DCH, LOW);
        digitalWrite(LED_IZQ, LOW);
        delay(1900);
    }
    void detecta_ostaculo() {
        float PITOS_INI1 = 0;
        MOTOR_IZQ.write(90);
        MOTOR_DCH.write(90);
        for (PITOS_INI1 = 0; PITOS_INI1 <= 3; PITOS_INI1 += 1) {
            digitalWrite(LED_DCH, HIGH);
            digitalWrite(LED_IZQ, HIGH);
            tone(zumbador_0, 392, 100);
            delay(100);
            digitalWrite(LED_DCH, LOW);
            digitalWrite(LED_IZQ, LOW);
            delay(100);
        }
        /
        Hacemos un Random de dos variables para girar a derechas o a izquierdas
        /
        randomSeed(micros());
        float sentidogiro = random(0, 1 + 1);
        if (sentidogiro == 0) {
            digitalWrite(LED_IZQ, HIGH);
            MOTOR_IZQ.write(0);
            delay(random(300, 900 + 1));
            MOTOR_IZQ.write(90);
            digitalWrite(LED_IZQ, LOW);
        } else if (sentidogiro == 1) {
            digitalWrite(LED_DCH, HIGH);
            MOTOR_DCH.write(180);
            delay(random(300, 900 + 1));
            MOTOR_DCH.write(90);
            digitalWrite(LED_DCH, LOW);
        }
    }

    /**   Setup  /
    void setup() {
        MOTOR_IZQ.attach(5);
        MOTOR_DCH.attach(3);
        pinMode(LED_DCH, OUTPUT);
        pinMode(LED_IZQ, OUTPUT);
        float flashes = 0;
        MOTOR_DCH.write(90);
        MOTOR_IZQ.write(90);
        for (flashes = 0; flashes <= 2; flashes += 1) {
            digitalWrite(LED_DCH, HIGH);
            digitalWrite(LED_IZQ, HIGH);
            tone(zumbador_0, 261, 100);
            delay(100);
            delay(100);
            digitalWrite(LED_DCH, LOW);
            digitalWrite(LED_IZQ, LOW);
            delay(100);
        }
        delay(2000);
        digitalWrite(LED_DCH, HIGH);
        digitalWrite(LED_IZQ, HIGH);
        tone(zumbador_0, 494, 500);
        delay(500);
        digitalWrite(LED_DCH, LOW);
        digitalWrite(LED_IZQ, LOW);
        delay(2000);
    }

    /   Loop  ***/
    void loop() {
        comienza_avance();
        if (ultrasonidos_0.read() <= 5) {
            detecta_ostaculo();
        }
    }


  • Moderador

    Hola @{Chocarrat},


    En ese caso, es posible que la electrónica esté sobrecargada. En robots que utilizan gran cantidad de componentes yo suelo alimentarlos a parte para no sobrecargarla. En tu caso, lo que haría sería alimentar externamente a los servos. Para ello, utilizaría un regulador de voltaje a 5V, que es lo que necesitan los servos, y lo conectarían a los pines + y - de cada uno. El pin de señal debería de ir conectado, obviamente, a la electrónica. Además, deberías de unir ambas masas conectando el negativo del regulador a tu placa. Con ello, conseguirás que tu programa funcione a la perfección y tu electrónica no sufra en absoluto.

    Otra posible causa podría ser que las baterías que utilizas no sean capaces de entregar la intensidad que necesita tu robot. Por ello, podrías probar a utilizar otro tipo de baterías como las que se utilizan en vehículos de radio-control, siempre y cuando respectes el máximo voltaje permitido por tu placa.

    Y enhorabuena por tu código, muy bien estructurado :).

    Un saludo,



  • Muchas gracias AParra. Muy esclarecedor. He estado además documentándome un poco, y he visto que la pila de 9V es la peor forma de darle sustento al proyecto. Suelen rondar los 300mAh, con lo que a poco que los servos tiren de ella muere pronto. Voy a tratar de ingeniarme un sistema para el próximo chasis, y poder hacer lo que me dices, aunque voy a ver sí me hago de una batería de LIPO para salir del paso sin grandes complicaciones en el próximo proyecto que estamos ideando (un printbot wifi, controlado desde el ordenador con una cámara ip... Todo un reto de diseño, electrónica y programación para unos novatos)
    Por cierto, pongo aquí este enlace muy interesante para entender esto. Saludos.

    http://www.educachip.com/alimentar-arduino/



  • Yo utilizo un powerbank en mis robot y me va fenomenal

    Enviado desde mi iPhone utilizando Tapatalk