Professional Documents
Culture Documents
LIBRE
JULY PAOLA CHITIVA ORTIZ
JHOSMAN ALFONSO LIZARAZO MORA
DOCENTE NORBERTO NOVOA
ARQUITECTURA DE COMPUTADORES
En el sensor infrarojo lo que hace es enviar y recibir una señal muy pequeña que
determina la transmisión 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
amplificación de la señal. Las resistencias R1 y R3 actúan como protección de los
led disminuyendo el flujo de corriente hacia éstos.
Es importante tener presente que el sensor infrarrojo también es sensible a la luz
ambiente, razón 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 dirección. O reprogramar la sensibilidad de los sensores CNY70 dentro de
la programación.
Potencia
S1 S2 S3 S4 Resultado
1 0 0 1 El motor gira en avance
0 1 1 0 El motor gira en retroceso
El motor se detiene bajo su
0 0 0 0 inercia
1 0 1 0 El motor frena (fast-stop)
Figura Etapa de Potencia
La señal de salida de los sensores infrarrojos es de tipo análoga porque su variación
depende de la distancia entre los componentes, la cantidad de luz percibida y la
línea negra, de la incidencia de la luz ambiente y de las pérdidas en el flujo de
corriente en todo el circuito. Esta señal entra a la fase de programación y allí es
transformada en una señal digital, la cual a su vez es la entrada al driver de los
motores (Puente H).
Fase de diseño mecánico
El robot cuenta con tracción diferencial, ya que utiliza dos
ruedas que son controladas de manera individual y soportadas en un eje central
común (rueda loca) para el balance. Las dos ruedas tienen un recubrimiento de
caucho que permite mayor adhesión a la superficie plana del entorno; la rueda loca
además 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.
Diseño de programación
La última fase que se tiene en cuenta para la construcción de los robots y su
funcionamiento bajo el paradigma de los Sistemas Multi-Agentes es la de
programación, la cual se divide en las secciones de control y de comunicación.
Control
Como ya se ha descrito en la fase de diseño mecánico la tracción de los robots es
diferencial, pero se hace necesario controlar su movimiento (detenerse, avanzar,
girar) y además garantizar el correcto funcionamiento de los sensores para seguir
un camino. Para solucionar esto se propone hacerlo a través de un entorno de
programación, teniendo en cuenta la población principal a la cual va dirigida la
actividad, por lo que es importante que sea de fácil acceso y uso.
De esta manera, el control de los robots se realiza a través el IDE de programación
de Arduino www.arduino.cc.
Estas placas son capaces de recibir información del ambiente o entorno en el que
se encuentren, procesarla, manipularla y controlar posteriormente una salida en la
que pueden encontrarse motores, luces, sonido, entre otras. Una ventaja que tiene
este tipo de hardware de código abierto y como aporte a la educación, es que
además de la opción de compra también pueden obtenerse las características de
hardware y así ser ensamblado libremente. El tipo de placa que se usa para este
proyecto es la Duemilanove (Figura 10), la cual cuenta principalmente con seis
entradas análogas, 14 entradas/salidas digitales, un microcontrolador ATMega168,
un voltaje de operación de 5 voltios y una conexión por puerto USB (Arduino,
2012)que permitirá la alimentación y programación de esta placa.
Programación:
1) Instalar Arduino (sudo apt-get install arduino)
2) Conectar Arduino por USB
3) Abrir Arduino
4) Seleccionar tarjeta (Herramientas/Tarjeta/Arduino Diecimila or Duemileanve w/
Atmega168
5) Verificar permisos USB (~$ ls -l /dev/tty*)
6) Visualizar cual fue el puerto asignado ~$ dmesg
DER(0);
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);