Cónstruya un robot con Raspbery Pi y Arduino

 

En el video anterior en efecto vemos  un robot controlado a distancia basándose  en interfaces web usando para ello  una red  inalámbrica .Dado la potencia de la Raspberry Pi se usa esta para el soporte de Video  y  una placa  Arduino  para el control de los motores 

Se usa la Raspberry Pi pues para la gestión  de la cámara, una red Wi-Fi para la  interfaz de usuario  entre el robot u el usuario  y una placa  Arduino para controlar servos, sensores y motores.

¿Qué necesitamos para construir el robot?,pues propprcionamos a continuacion la siguiente lista de componentes:

  • 1 Robot Chasis, se puede usar cualquier robot de 2 o 4 ruedas, para este ejemplo se usa  DFRobot: http://www.dfrobot.com/index.php?route=product/product&path=37_69&product_id=97
  • 1 raspberry  (se usa un modelo +)
  • 1 PICAM con un casso
  • Pan & Tilt kit de la siguiente manera: http://tienda.bricogeek.com/accesorios-robotica/522-kit-pan-tilt.html
  • 1 mini servo para Pan & Tilt
  • 1 Servo
  • 1 WiFi Dongle
  • 1 sensor ultrasónico como http://www.micropik.com/PDF/HCSR04.pdf
  • 1 Arduino Nano
  • 1 paquete de la batería y el soporte de la batería (mínimo de 5 V y 3000mA)
  • 1 driver   controlador  para motores  (como http://www.banggood.com/2Pcs-L9110S-H-Bridge-Stepper-Motor-Dual-DC-Driver-Controller-Module-p-944585.html )
  • 1 Nano e-cat ( http://electronics.cat/php/common/index.php?lang=es&page=101 )
  • 1 Adaptador Módulo H ( http://electronics.cat/php/common/index.php?lang=en&page=520 )
  • 1 tablero de múltiples funciones ( http://binefa.cat/blog/wp-content/uploads/2014/12/0523_01.jpg )
  • 1 regulador de voltaje ajustable ( http://www.banggood.com/XL6009-Step-Up-Boost-Voltage-Power-Supply-Module-Converter-Regulator-p-916222.html )
  • 1 salida USB del módulo del convertidor ( http://www.banggood.com/DC-7V-24V-To-DC-5V-3A-USB-Output-Converter-Step-Down-Module-KIS3R33S-p-912110.html )
  • 1  módulo convertidor ( https://www.adafruit.com/products/757 )
  • 4  Condensadores para motores de 1uF
  • Los puentes, cables de soldadura de hierro, etc …

 

En realidad dado que  todos estos módulos ya vienen montados , el esquema de conexiones es bastante sencillo ,pues se usa  un convertidor dc/dc  para alimentar  el puente  en h para los 4 motores , los 2 servos y el sensor ultrasonico  , y otro convertidor dc/dc para alimentar exclusivamente  el Arduino Nano

La comunicación entre  Raspberry Pi y Arduino se lleva  a cabo a través de GPIO TX serie / RX (/ dev / ttyAMA0) por medio de un convertidor de nivel.

Otro aspecto destcable  es que tanto el sensor ultrasonido como los dos servos son controlados por la propia placa Arduino Uno

Asimismo se  hace uso de un modulo de cámara para Raspberry Pi  , la cual va conectada con un cable de cinta  a la Raspberry Pi . La cámara se sujeta al soporte movil especial el cual  permite gracias a los dos servos  mover la cámara  en los tres ejes

Aquí puede echar un vistazo a los detalles de  ensamblaje de los componentes mas importantes:

Detalle de conexion con los servos
Raspberry Pi / Arduino y convertidor de nivel

 

Software:

El software se divide en dos secciones: software para Raspberry  Pi  y software de Arduino.

Para la Raspberry se usa dawnrobotics SD imagen para su cámara robot Pi , la cual proporciono  con una pequeña modificación  el  archivo robot_web_server.py  para permitir la comunicación serie con Arduino Nano en lugar del controlador dawnrobotics.

A continuación se detalla el código fuente empleado:

 

#include <ecat.h>
#include <Servo.h>

Servo servoP1B2; Servo servoP1B3;

#define MAX_GRAUS 170
#define MIN_GRAUS 20

String szMissatge;
Ecat ecat;
int valorServoV;
int valorServoH;

void setup(){
  ecat.setupNibbleMode(NIBBLE_H_P1,OUTPUT);
  ecat.vUltrasonicSensorP1b0b1_init();
  
  valorServoV=90;
  valorServoH=90;
  pinMode(ecat.nPinP1B2,OUTPUT);
  pinMode(ecat.nPinP1B3,OUTPUT); 
  servoP1B2.attach(ecat.nPinP1B2);
  servoP1B3.attach(ecat.nPinP1B3);
  servoP1B2.write(valorServoV);
  servoP1B3.write(valorServoH);  
  pinMode(ecat.nPinP2B7,OUTPUT);
  pinMode(ecat.nPinP2B6,INPUT);
  pinMode(ecat.nPinP2B5,INPUT);
  pinMode(ecat.nPinP2B4,INPUT);
  ecat.setupNibbleMode(NIBBLE_L_P2,INPUT);
  Serial.begin(115200);
}

void vRobotAturat(){
  ecat.vWriteHighNibbleP1(0x00);
}

void vRobotEndarrera(){
  ecat.vWriteHighNibbleP1(B00000110);
}

void vRobotEndavant(){
  ecat.vWriteHighNibbleP1(B00001001);
}

void vRobotEsquerra(){
  ecat.vWriteHighNibbleP1(B00000101);
}

void vRobotDreta(){
  ecat.vWriteHighNibbleP1(B00001010);
}



void vManageMsg(){
 
  if(szMissatge == "b"){
    vRobotEndarrera();
  }
  if(szMissatge == "f"){
    if (ecat.nUsDistanceCmP1b0b1()>7) {
        vRobotEndavant();
    }
  }
  if(szMissatge == "s"){
    vRobotAturat();
  }
  if(szMissatge == "l"){
    vRobotEsquerra();
  }
  if(szMissatge == "r"){
    vRobotDreta();
  }
  if(szMissatge == "w"){
    if (valorServoH<MAX_GRAUS) {
      valorServoH++;
    }
  }
  if(szMissatge == "x"){
    if (valorServoH>MIN_GRAUS) {
      valorServoH--;
    }
  }
  if(szMissatge == "a"){
    if (valorServoV>MIN_GRAUS) {
      valorServoV--;
    }
  }
  if(szMissatge == "d"){
    if (valorServoV<MAX_GRAUS) {
      valorServoV++;
    }
  }
}

void loop(){

  while(Serial.available()){
    delay(3);
    char c = Serial.read();
    szMissatge += c;
  }
  vManageMsg();
  szMissatge = "";
  if (ecat.nUsDistanceCmP1b0b1()<7) {
    vRobotAturat();
  }
  servoP1B2.write(valorServoV);
  servoP1B3.write(valorServoH);
}

Como estamos utilizando versión ligeramente modificada de la imagen downrobots, la Raspberry Pi está configurado para actuar como un punto de acceso Wi-Fi, por lo que para conectarse a la nueva red inalámbrica   debe aparecer llamada ‘CameraRobot’. La contraseña de la red es «raspberry».

Nota: En algunas ocasiones el dongle WiFi en el Pi no obtendrá una dirección IP (error conocido) y por lo que no será capaz de conectarse a la red (el dispositivo pasará edades autenticación y obtener una dirección IP).Este problema suele resolverse girando el robot apagado y otra vez.

 

Para la sección de Arduino Nano,  gracias a @JordiBinefa y @electronicscat se  usa su  biblioteca de e-cat .

El robot se controla con una interfaz web que significa que debería ser accesible desde la más amplia gama de dispositivos posibles. La interfaz web hace uso de HTML5 sin embargo, por lo que tendrá que utilizar un navegador hasta la fecha. Se encontró que Chrome funciona bien en todas las plataformas que se ha probado.

 

Para controlar el robot escriba la dirección IP 192.168.42.1 en la barra de direcciones.

 

 

 

Tiene conexión Wifi, por lo tanto se puede trastear con ella sin cables y eso es muy cómodo. Con éste sistema básico, se puede expandir muchísimo y quizás dar el paso con OpenCV o algún otro tipo de funcionalidad compleja gracias a la potencia que ofrece la Raspberry Pi.

El proyecto desde luego es sumamente interesante  y desde luego abre un camino para nuestra imaginación para replicarlo y mejorarlo dotándolo de nuevas modificaciones   que sin duda lo harán mucho mejor si cabe

Fuente aqui

Deja una respuesta