Crea tus aparatos e inventos a base de arduino, cables y PLA

Robot educativo con arduino

Robots pedagógicos con 4 servomotores para niños controlados por arduino.

Materiales necesarios

  • 1 arduino
  • 4 Servomotores 9g
  • Portapilas para 4 AAA
  • Interruptor de encendido
  • Buzz de PC
  • Opcional 2 Leds 10mm
  • Opcional 2 rodamientos 13x5x4mm
  • Opcional HC-SR04

Esquema electrónico

El portapilas debe ser para 4 pilas de 1,5V

Piezas para imprimir

En el modelo se han empleados dos pequeños rodamientos en los pies de 13×5 y radio interior de 4mm aunque se pueden sustituir por unos impresos que se incluyen en los archivos para imprimir.

Las piezas pueden ser tratadas con una imprimación para posteriormente ser pintadas con témperas. Se incluye una ficha de vistas para el planteamiento del diseño.

Ficha para el diseño de la decoración

Montaje

Imprimir y montar. Hay una ranura en la parte trasera de la cabeza que nos servirá para introducir el miniUSB para programarlo.

Programación

Aquí tenemos las opciones de hacerlo a través de la IDE de arduino o a través de un software por bloques de carácter educativo en Otto DIY.

Ahí encontrarás mucha información y ejemplos, así como poder descargar el software por bloques.

Lo primero de todo es calibrar los servos del robot a una posición inicial. Para ello puedes usar el software por bloques o este programa de arduino.

//----------------------------------------------------------------
//-- Otto DIY invests time and resources providing open source code and hardware, 
//-- please support by purchasing kits from https://www.ottodiy.com/
//-- Make sure to have installed all libraries: https://github.com/OttoDIY/OttoDIYLib
//-----------------------------------------------------------------
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>
#include <Otto.h> //-- Otto Library
Otto Otto;  //This is Otto!

#define LeftLeg 2 
#define RightLeg 3
#define LeftFoot 4 
#define RightFoot 5 
#define Buzzer  13 

double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
int YL;
int YR;
int RL;
int RR;
double charRead;
void setup(){
      Otto.init(LeftLeg, RightLeg, LeftFoot, RightFoot, true, Buzzer); //Set the servo pins and Buzzer pin
    Serial.begin(9600);
    YL = EEPROM.read(0);
    if (YL > 128) YL -= 256;
    YR = EEPROM.read(1);
    if (YR > 128) YR -= 256;
    RL = EEPROM.read(2);
    if (RL > 128) RL -= 256;
    RR = EEPROM.read(3);
    if (RR > 128) RR -= 256;
    Otto.home();
    Serial.println("OTTO CALIBRATION PROGRAM");
    Serial.println("PRESS a or z for adjusting Left Leg");
    Serial.println("PRESS s or x for adjusting Left Foot");
    Serial.println("PRESS k or m for adjusting Right Leg");
    Serial.println("PRESS j or n for adjusting Right Foot");
    Serial.println();
    Serial.println("PRESS f to test Otto walking");
    Serial.println("PRESS h to return servos to home position"); 
}

void loop(){

    if((Serial.available()) > (0)){
        charRead = Serial.read();
    }
    if(((charRead)==('a' ))){
        YL++;
        Otto.setTrims(YL,YR,RL,RR);
        calib_homePos();
        Otto.saveTrimsOnEEPROM();
    }else{
        if(((charRead)==( 'z' ))){
            YL--;
            Otto.setTrims(YL,YR,RL,RR);
            calib_homePos();
            Otto.saveTrimsOnEEPROM();
        }else{
            if(((charRead)==( 's' ))){
                RL++;
                Otto.setTrims(YL,YR,RL,RR);
                calib_homePos();
                Otto.saveTrimsOnEEPROM();
            }else{
                if(((charRead)==( 'x' ))){
                    RL--;
                    Otto.setTrims(YL,YR,RL,RR);
                    calib_homePos();
                    Otto.saveTrimsOnEEPROM();
                }else{
                    if(((charRead)==( 'k' ))){
                        YR++;
                        Otto.setTrims(YL,YR,RL,RR);
                        calib_homePos();
                        Otto.saveTrimsOnEEPROM();
                    }else{
                        if(((charRead)==( 'm' ))){
                            YR--;
                            Otto.setTrims(YL,YR,RL,RR);
                            calib_homePos();
                            Otto.saveTrimsOnEEPROM();
                        }else{
                            if(((charRead)==( 'j' ))){
                                RR++;
                                Otto.setTrims(YL,YR,RL,RR);
                                calib_homePos();
                                Otto.saveTrimsOnEEPROM();
                            }else{
                                if(((charRead)==( 'n' ))){
                                    RR--;
                                    Otto.setTrims(YL,YR,RL,RR);
                                    calib_homePos();
                                    Otto.saveTrimsOnEEPROM();
                                }else{
                                    if(((charRead)==( 'f' ))){
                                        Otto.walk(1,1000,1);
                                    }else{
                                        if(((charRead)==( 'h' ))){
                                            Otto.home();
                                        }else{
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } 
}

void calib_homePos() {
  int servoPos[4];
  servoPos[0]=90;
  servoPos[1]=90;
  servoPos[2]=90;
  servoPos[3]=90;
  Otto._moveServos(500, servoPos);
  Otto.detachServos();
}

Una vez subido el programa al robot debemos abrir el Puerto Serial e ir enviando los caracteres que se muestran para notar pequeños movimientos en los motores. El objetivo es colocar los robots en una posición inicial de firmes.

Al terminar el proceso, estos datos se almacenarán en la eeprom para ser recordados siempre.

Cuando tengas el robot erguido, es el momento de empezar a programarlo a tu antojo.

Resultado final

Aquí hay algunos modelos de los diseñados por los niños en clase.

« »
Plataforma de Gestión del Consentimiento de Real Cookie Banner