HARDWARE LIBRE July Paola Chitiva Ortiz Jhosman Alfonso Lizarazo Universidad Distrital Francisco Jos de Caldas Facultad Tecnolgica Tecnologa en Sistematizacin de Datos PROBLEMA PLANTEADO Vehculo Controlado Mediante un Computador: se podra controlar un vehculo (Robot pequeo de ruedas) que avance, retroceda o gire mediante instrucciones que se impartan desde el computador, o se podra hacer que este vehculo en vez de seguir instrucciones desde el PC, siga una ruta determinada mediante sensores infrarrojos. Este ser constituido por ruedas, motores, fuente de energa, y tarjeta de control (micro controlador Arduino ATmega168) programado en lenguaje Arduino. FASE DE DISEO ELECTRNICO El robot actuar como un mvil seguidor de lnea negra haciendo uso de sensores infrarrojos, los cuales detectan la lnea y envan una seal al resto del circuito del robot. All, de acuerdo a la programacin realizada, se tomar una decisin respecto a las acciones que el robot debe realizar para mantenerse en el camino y llegar a la meta. Este diseo electrnico cuenta con dos sistemas: percepcin y potencia. PERCEPCIN En el sensor infrarojo lo que hace es enviar y recibir una seal muy pequea que determina la transmisin de luz infraroja que dependiendo de las condiciones del espacio puede darnos varios valores, estos van conectados a unas resistencias R2 y R4 controlan el flujo de corriente, la cual desbloquear su base y permitir la amplificacin de la seal. Las resistencias R1 y R3 actan como proteccin de los led disminuyendo el flujo de corriente hacia stos. CNY70 Es importante tener presente que el sensor infrarrojo tambin es sensible a la luz ambiente, razn por la cual tanto el led infrarrojo como el fotodiodo deben recubrirse con cinta aislante negra (u otro material oscuro), formando una especie de conducto que limita la incidencia de esta luz y facilita que el haz de luz infrarroja se emita en una sola direccin. O reprogramar la sensibilidad de los sensores CNY70 dentro de la programacin. POTENCIA La seal de salida obtenida de los sensores infrarrojos se convierte en la seal de entrada a la fase de programacin, en la que interviene un mdulo electrnico (Arduino) para el control del robot. Para ello se utilizar un componente (SN754410NE) o el componente (L293D) quienes realizarn la funcin de indicar a los motores que actividad realizar dependiendo del momento
FUNCIONAMIENTO DEL PUENTE H
S1 S2 S3 S4 Resultado 1 0 0 1 El motor gira en avance 0 1 1 0 El motor gira en retroceso 0 0 0 0 El motor se detiene bajo su inercia 1 0 1 0 El motor frena (fast-stop) DISEO MECANICO El robot cuenta con traccin diferencial, ya que utiliza dos ruedas que son controladas de manera individual y soportadas en un eje central comn (rueda loca) para el balance. Las dos ruedas tienen un recubrimiento de caucho que permite mayor adhesin a la superficie plana del entorno; la rueda loca adems facilita el movimiento del robot al contar con un giro libre de 360 grados. Las dos ruedas principales son controladas por un motor de corriente continua que cuenta con un sistema de engranajes que ayuda a aumentar la potencia en el movimiento. UBICACIN DE LAS RUEDAS DEL ROBOT En la figura 7 se observa la ubicacin de las ruedas en el robot; la rueda loca se encuentra en la parte posterior de ste. Las formas de avance con las que cuenta robot son hacia adelante, girar a la izquierda y girar a la derecha y hacia atrs si as se requiere. En la figura 8 se indica la posicin en el robot de los sensores para el avance del seguimiento de lnea: DISEO DE PROGRAMACIN Como ya se ha descrito en la fase de diseo mecnico la traccin de los robots es diferencial, pero se hace necesario controlar su movimiento (detenerse, avanzar, girar) y adems garantizar el correcto funcionamiento de los sensores para seguir un camino. Para solucionar esto se propone hacerlo a travs de un entorno de programacin, teniendo en cuenta la poblacin principal a la cual va dirigida la actividad, por lo que es importante que sea de fcil acceso y uso. De esta manera, el control de los robots se realiza a travs el IDE de programacin de Arduino www.arduino.cc. DISEO DE PROGRAMACIN Para que sea posible la programacin de la placa en el entorno Arduino, primero debe descargarse el software Arduino y el firmware que har posible el reconocimiento de dicha placa por el entorno. En la pgina principal de Arduino se encuentran las especificaciones de instalacin de acuerdo al tipo y versin del sistema operativo con el que se cuente. En este proyecto se utiliz la versin de Arduino para Ubuntu, el cual se puede encontrar en el centro de Software para Ubuntu: https://apps.ubuntu.com/cat/applications/arduino/ PROGRAMACION Programacin: 1) Instalar Arduino (sudo apt-get install arduino) 2) Conectar Arduino por USB 3) Abrir Arduino PROGRAMACION 4) Seleccionar tarjeta (Herramientas/Tarjeta/Arduino Diecimila or Duemileanve w/ Atmega168 PROGRAMACION 5) Verificar permisos USB (~$ ls -l /dev/tty*) PROGRAMACION 6) Visualizar cual fue el puerto asignado ~$ dmesg PROGRAMACION 7) Si no tiene permisos asignar permisos al puerto USB que se asign a la placa (crwxrwxrwx 1 root dialout 188, 0 may 24 10:33 ttyUSB0) ~$chmod 777 ttyUSB0 PROGRAMACION Este es un ejemplo del Hola Mundo para arduino PROGRAMACION Cdigo para nuestro robot seguidor de lnea con Arduino: #define M1A 19 //Motor 1A #define M1B 18 //Motor 1B #define M2A 17 //Motor 2A #define M2B 16 //Motor 2B #define PIN_PWM11 //Modulacion por ancho de pulso - Emular salida analogica con salida digital #define VEL 100 //Velocidad #define S1 0 //IZQ #define S2 1 //DER #define _UMBRAL_ 200 //Umbral de los sensores unsigned long timeserial; void setup (){ Serial.begin(9600); timeserial = millis(); pinMode(M1A, OUTPUT); pinMode(M1B, OUTPUT); pinMode(M2A, OUTPUT); pinMode(M2B, OUTPUT); STOP(10000); analogWrite(PIN_PWM, VEL); } void loop() { byte SDER = (analogRead(S1)> _UMBRAL_ )?0:1; byte SIZQ = (analogRead(S2)> _UMBRAL_ )?0:1; if(SDER && SIZQ) STOP(0); else if (!SDER && SIZQ) DER(0); else if (SDER && !SIZQ) IZQ(0); else ADE(0); if(millis() - timeserial > 500){ timeserial = millis(); Serial.print("Sensor1: "); //Serial.print(SDER); Serial.print(analogRead(S1)); Serial.print(" Sensor2: "); //Serial.println(SIZQ); Serial.println(analogRead(S2)); } } void ATR(uint16_t time){ digitalWrite(M1A, HIGH); digitalWrite(M1B, LOW); digitalWrite(M2A, HIGH); digitalWrite(M2B, LOW); delay(time); } void ADE(uint16_t time){ digitalWrite(M1A, LOW); digitalWrite(M1B, HIGH); digitalWrite(M2A, LOW); digitalWrite(M2B, HIGH); delay(time); } void DER(uint16_t time){ //Llanta Izquierda digitalWrite(M1A, HIGH); digitalWrite(M1B, LOW); //llanta Derecha digitalWrite(M2A, LOW); digitalWrite(M2B, HIGH); delay(time); } void IZQ(uint16_t time){ //Llanta Izquierda digitalWrite(M1A, LOW); digitalWrite(M1B, HIGH); //Llanta Derecha digitalWrite(M2A, HIGH); digitalWrite(M2B, LOW); delay(time); } void STOP(uint16_t time){ digitalWrite(M1A, LOW); digitalWrite(M1B, LOW); digitalWrite(M2A, LOW); digitalWrite(M2B, LOW); delay(time); } ELEMENTOS NECESARIOS Cantidad Componente 2 Led infrarrojo CNY70 2 Resistencias 220 2 Resistencias 47K 1 Driver para motor L293 B SN754410NE 2 Secciones de acrlico de 12x12 cms de 10 mm. de ancho para las partes superior e inferior. Tornillos y Tuercas 2 Ruedas de 8 cm de dimetro 1 Rueda loca 1 Twin Motor GrearBox 1 Placa Arduino ATMega168 1 Protoboard Cables para conexiones 5 Condensadores Agradecimientos: Laura Romero Leonardo Urrego Documentacin arduino.cc Google y Wikipedia Texas Instruments FOTOGRAFIAS