miércoles, 24 de febrero de 2016

Cabeza humanoide (Humanoid head)



Introducción:
Un elemento importante para que los robots interactúen con las personas, consiste en que su apariencia sea similar a un ser vivo, por ejemplo un animal, una planta o un ser humano. Una característica importante en los robots es la de generar comportamientos que produzcan empatía por parte de la persona, estos comportamientos o acciones forman un lenguaje no verbal, favoreciendo la comunicación humano-robot.

Paso 1:
El término robots bioinspirados, requiere de varios campos de estudio, siento un trabajo interdisciplinario. Tres habilidades importantes para los robots interactuando con personas son: habilidades sociales (emociones, comportamientos), colaboración con personas y la habilidad de aprender.

Para el diseño de una cabeza mecatrónica, los elementos a considerar son:

-       Movimiento del cuello a los lados y hacia arriba y abajo (pan-tilt)
-       Movimiento de la quijada para simular el habla
-       Animación de las cejas para simular emociones
-       Movimiento de los ojos (cámaras) hacia los lados y hacia arriba y abajo (pan-tilt)

Primero se realizan varios modelos que cumplan con las especificaciones. Un primer diseño empleando mecanismos de barras paralelas se muestra a continuación.
Primer diseño de la cabeza humanoide
Un segundo diseño también con barras paralelas se muestra a continuación. El objetivo del diseño consiste en usar el menor espacio y peso en el mecanismo de la cabeza humanoide. Esto permite que los actuadores del cuello puedan realizar el movimiento libremente y utilizando la menor cantidad de energía. Ahorrando espacio en la cabeza permitirá alojar la electrónica de los componentes sin mayor problema.

Diseño preliminar de la cabeza humanoide
Paso 2:
Para el sistema de visión se adoptará la cámara CMUcam2, la cual se puede conectar a un microcontrolador.
Sistema de visión CMUcam2
Los componentes electrónicos y actuadores que se emplearon son:

-       Servomotor de 11.67 kg-cm (2)
-       Servomotor de 3.02 kg-cm (3)
-       Cámara CMUcam2 (2) con tarjeta de interfase
-       Tarjeta de desarrollo para PICs
-       PIC16F877A
-       Tarjeta de interfase serial

Paso 3:
Ahora que se tienen las especificaciones técnicas sobre el funcionamiento de la cabeza humanoide, los elementos que serán empleados y las tareas que se pretenden realizar, se definirá la arquitectura de esta parte del robot.
Arquitectura de la cabeza humanoide
Paso 4:
Después de realizar 9 prototipos para el sistema de visión del robot, el último ha sido seleccionado como el mejor debido a la capacidad de modificar la dirección y la elevación de las cámaras, siendo un mecanismo compacto y ligero. Se ha realizado una simulación de la funcionalidad de los mecanismos en el programa de diseño. La simulación se presenta en el video.
Mecanismo final del robot
Integración al cuello del robot
Paso 5:
Las piezas del mecanismo, debido a que fueron diseñadas específicamente para optimizar el espacio y el acomodo de los servomotores, están hechos con geometrías complicadas, para las cuales el mejor método de manufactura es la impresión en 3D de las piezas.

Robot con cabeza humanoide
En el programa de diseño usado, se tiene la opción de exportar los archivos 3D a un formato estándar (.step), el cual es reconocido por la impresora 3D, sin modificar las dimensiones originales, e imprimir las piezas diseñadas.


martes, 23 de febrero de 2016

Motor DC Bluetooth con Arduino



Introducción
El objetivo de este proyecto es el controlar un motor de dc a través de un Smartphone. La velocidad del motor varía. La comunicación entre el motor y el Smartphone se realizará a través de un módulo Bluetooth y el control del motor se realizará con una tarjeta Arduino UNO

Paso 1
Primero se realiza el diseño del circuito en base a las especificaciones (lo que se desea que realice el circuito). Este primer sketch puede realizarse a mano o con un programa de diseño de circuitos. En este caso se empleará el software libre para simular circuitos de Autodesk 123D.
Diagrama de conexiones del Arduino y el HC-05
Paso 2
Una vez que ha diseñado el circuito, se procede a la simulación del mismo, con Autodesk 123D. La simulación permite comprobar si el circuito funcionará correctamente. En la siguiente imagen se muestra un esquema del circuito. El elemento en rojo representa el módulo Bluetooth (HC-05).

Boceto de la conexión del motor, el transistir, el HC-05 y el Arduino
Paso 3
Un módulo Bluetooth ampliamente usado es el HC-05. La comunicación entre el arduino y el PC es serial. El Bluetooth, emula una comunicación serial, por lo que se requiere de 2 pines para las señales (RX: recibir y TX: transmitir), adicional, la alimentación de energía eléctrica es requerida (5 V, 0 V). La siguiente imagen muestra el módulo empleado. 4 de las 6 conexiones serán empleadas. Los puertos STATE y EN, no serán cableados.

Módulo Bluetooth HC-05
STATE y EN no se emplearán, RXD y TXD son los pines de comunicación

Paso 4
Se procede a realizar el cableado del circuito. La siguiente imagen muestra los componentes que serán empleados. 2 Fuentes de alimentación serán usadas, una para el arduino y el otro para los periféricos y actuadores. La primera fuente alimenta el Arduino UNO. La segunda fuente alimenta el módulo Bluetooth, el transistor y el motor. El transistor NPN será empleado como etapa de potencia, ya que los puertos de salida del Arduino, aunque suministren 5 V, la corriente suministrada es a lo máximo de 20 mA, lo cual es insuficiente para arrancar el motor, pero suficiente para activar el transistor. Las tierras (0 V) de ambas fuentes de poder deben de estar conectadas.
Componentes a emplear en el circuito
Paso 5
Se procede a armar el circuito como se muestra en la imagen. Se empleó la librería SoftwareSerial. Por default la comunicación serial y/o Bluetooth, se realiza a través de los puertos 0 y 1 (RX y TX respectivamente). Para emplear otros pines diferentes para la comunicación Bluetooth, se configuran con una utilería de la librería arriba mencionada.

Circuito final armado
PASO 6
A continuación se  muestra el código para controllar el módulo Bluetooth de manera remota:

// The program is designed to perform the next tasks:
// 1. A Bluetooth module (HC-05) will be configured 
//    and attachet to an Arduino UNO module
// 2. A DC motor will be attached to one output of the Arduino board
// 3. The DC motor will be remotely controlled using a smartphone
// 4. Different speeds will be programmed
// Written by AMS

#include <SoftwareSerial.h>                   // serial communication library


SoftwareSerial ConfigurePorts (8, 9);         // Port_8 ==> RX, Port_9 ==> TX
int ReceiveInfo;                              // for the received information
int MotorPort=11;                             // Port 13 for the dc motor                                            

  void setup()
        {
          ConfigurePorts.begin(9600);         // Baud rate
          ConfigurePorts.println("0=off, 1=speed 1, 2=speed 2 ...");
          pinMode(MotorPort, OUTPUT);
        }

        void loop()
              {
                if(ConfigurePorts.available()>0) 
                  {
                  ReceiveInfo=ConfigurePorts.read();
                  switch (ReceiveInfo) 
                    {
                  case '0':                  // off
                    analogWrite(MotorPort,0);
                    ConfigurePorts.println("off");
                    break;
                  case '1':                  // speed 1
                    analogWrite(MotorPort,40);
                    ConfigurePorts.println("1");
                    break;
                  case '2':                 // speed 2
                    analogWrite(MotorPort,60);
                    ConfigurePorts.println("2");
                    break;
                  case '3':                 // speed 3
                    analogWrite(MotorPort,80);
                    ConfigurePorts.println("3");
                    break;
                  case '4':                 // speed 4
                    analogWrite(MotorPort,100);
                    ConfigurePorts.println("4");
                    break;
                  case '5':                 // speed 5
                    analogWrite(MotorPort,120);
                    ConfigurePorts.println("5");
                    break;
                    case '6':              // speed 6
                    analogWrite(MotorPort,160);
                    ConfigurePorts.println("6");
                    break;
                    case '7':              // speed 7
                    analogWrite(MotorPort,200);
                    ConfigurePorts.println("7");
                    break;
                  case '8':                // speed 8
                    analogWrite(MotorPort,240);
                    ConfigurePorts.println("8");
                    break;
                    }
                  }
              }

PASO 7
Ahora se procederá a realizar la conexión con el Smartphone. La aplicación empleada se descargó de Google Play (“Bluetooth Controller”). Los botones tienen que ser configurados. Para este proyecto la configuración es la siguiente:

0 => off
1 => velocidad 1 (12.5%)
2 => velocidad 2 (25%)
3 => velocidad 3 (37.5%)
4 => velocidad 4 (50%)
5 => velocidad 5 (62.5%)
6 => velocidad 6 (75%)
7 => velocidad 7 (87.5%)
8 => velocidad 8 (100%)

A continuación se presenta el video del proyecto.

domingo, 21 de febrero de 2016

Sensor Ultrasónico Arduino



Introducción:
Se conoce como ultrasonido, a ondas de sonido a frecuencias muy altas (aproximadamente 20 KHz.). Éstas ondas de sonido no son audibles para el ser humano, sin embargo en la naturaleza, existen animales que pueden percibir estas ondas (murciélagos, delfines), las cuales al ser dirigidas hacia algún cuerpo físico, rebotan, a esto se le conoce como ecolocalización. Ésta idea, aplicada a la electrónica ha dado como resultado, el sensor ultrasónico.


Paso 1:
Un sensor ultrasónico está formado de 2 componentes principales, los cuales son: el altavoz (emisor) y el micrófono (receptor). El principio de funcionamiento es el siguiente: se emiten ondas a una frecuencia de 40 KHz. Al chocar con un objeto, estas ondas regresan y son detectadas por el receptor. El sensor HC-SR04 emite 8 pulsos a una frecuencia de 40 KHz. Los 8 pulsos al chocar con un objeto dentro del rango de detección (entre 2 y 50 cm.), regresan y son captados por el receptor. El tiempo transcurrido, “retardo de propagación”, se contabiliza, determinando así la distancia que recorrió la onda (tanto de ida como de regreso).
Diagrama de señales del sensor Ultrasónico HC-SR04
Paso 2:
Para determinar la distancia a la que se encuentra un objeto, se emplearán los siguientes componentes:

-       Tarjeta Arduino Leonardo
-       Sensor ultrasónico HC-SR04
-       Puerto serial de computadora

La siguiente imagen muestra el cableado del circuito.
Conexión del Arduino Leonardo y del sensor HC-SR04
Paso 3:
Ahora se procede a la escritura del programa para el Arduino. Hay que tener en cuenta lo siguiente:

-       Vcc y GND del sensor se conectan a las terminales Vcc y GND del Arduino (Vcc= 5 Volts, GND= 0 Volts)
-       Trigg será conectado al puerto 2 y Echo al 3

A continuación se presenta el programa.


/****** Sonar Arduino ***** //
 * Escrito: AMS
 * 
 */

int Informacion_Serial;
int Pulso_Trig=2;                  // Puerto de salida
int Pulso_Echo=3;
long tiempo;
long distancia;

void setup() {
  pinMode(Pulso_Trig, OUTPUT);     // Configuración del puerto
  pinMode(Pulso_Echo, INPUT);
  Serial.begin(9600);
  Serial.println("Medir distancia");
}                                     // 

void loop() {

      digitalWrite(Pulso_Trig, LOW);
      delayMicroseconds(4);
  
      digitalWrite(Pulso_Trig, HIGH);
      delayMicroseconds(10);
      digitalWrite(Pulso_Trig, LOW);

      tiempo=pulseIn(Pulso_Echo, HIGH);
      distancia=tiempo/58;

      if (distancia < 5)
        {
          Serial.println("Colision");
        } 
          else if (distancia > 50)
            {
              Serial.println("Fuera de rango");
            }
            else
              {
                Serial.print("Distancia: ");
                Serial.print(distancia);
                Serial.println(" cm");
              }
                delay(120);
}

La siguiente imagen muestra la conexión de la tarjeta Arduino Leonardo y el HC-SC04.

Arduino Leonardo y sensor ultrasónico HC-SR04
Paso 4:
Una vez realizado el cableado y la descarga del programa a la tarjeta, se conecta el puerto serie de la PC al Arduino. El IDE de Arduino cuenta con una conexión serial. El símbolo es la lupa situado a la derecha.