Habíamos realizado con éxito un robot con una aplicación de detección de metales y vigilancia que puede extenderse a muchas otras aplicaciones. Básicamente para construir este robot nos habíamos decidido a utilizar el coche como un chasis para el circuito receptor, cuyo movimiento puede ser controlado por una aplicación android porque los teléfonos inteligentes desempeñan un papel clave en nuestras vidas haciendo todo en un dispositivo con muchas características esenciales como Bluetooth, GPS, acelerómetro que puede utilizarse para controlar robots muy fácilmente. Por lo tanto, móvil se utiliza como un sistema de control en nuestro proyecto. Para dar un enfoque modular para nuestro proyecto hemos dividido nuestro proyecto en dos secciones: transmisor y receptor. Tanto estas secciones fueron juntadas y el producto final trabaja muy eficientemente.
Para construir el robot, se necesitan los siguientes componentes:
1 android app
2 Módulo Bluetooth HC05
3 Atmega 328 PU (2 ICs)
4. los módulos transmisor y receptor RF
5. chasis
6 motores de corriente continua
7 neumáticos
8 circuito de detección de metales de hobby
9 cámara estenopeica inalámbrica
10.9V batería
Un montón de aplicaciones disponible en play store que se puede descargar pero en nuestro proyecto hemos obtenido un código fuente y modificar que utilizando sólo 4 movimientos: adelante, atrás, derecha e izquierda. Además, habíamos añadido un botón de stop y luz de botón de encendido/apagado. La aplicación fue desarrollada usando android studio. Se muestra una captura de pantalla de nuestra aplicación.
SECCIÓN DE TRANSMISOR:
La unidad de transmisión se compone de una aplicación para android que consiste en las indicaciones que se moverán y botones para encendido y apagado del led. Las señales son transmitidas desde el dispositivo vía Bluetooth para ser decodificada por un microcontrolador y enviadas a los módulos de RF. Hemos utilizado módulos de RF como una solución para aumentar el alcance en cuanto a un dispositivo funcionar en sistema de RF; no necesitan estar en la línea de visión. En otras palabras, la sección de transmisión consta de:
· Aplicación para Android
· Módulo de Bluetooth
· Codificador de IC
· Transmisor de RF
SECCIÓN DEL RECEPTOR:
Los datos recibidos por el receptor de RF se envían al decodificador IC que se acopla al motor conductor IC. Se da la salida descodificada al conductor del motor IC que impulsa los motores del coche en la dirección deseada. La sección receptora del coche RC tiene puertos donde podemos introducir periféricos adicionales. En este proyecto, hemos conectado dos características: un circuito de detector de metales y una cámara estenopeica inalámbrica. La sección receptora consta de:
· Receptor RF
· Decodificador IC
· Motor controlador IC
· Engranó los motores
· Módulo detector de metales
Cámara espía pinhole inalámbrica
La sección del receptor se coloca en el chasis del modelo del coche que habíamos diseñado y elaborado con la hoja de acrílico con dimensión 20 x 12 x 5 cm que se puede abrir desde la parte superior.
Habíamos comprado una cámara estenopeica inalámbrica de ebay junto con un adaptador usb para controlar los videos tomados por el robot en laptop. Puede conectarse a la TV también.
El circuito detector de metales es soldado con los componentes disponibles en el circuito de hobby y alimentado con la batería de 9V y comprobado. Este circuito se coloca dentro del chasis junto con el circuito del receptor de RF y la cámara que independientemente funciona con otra batería de 9V. El circuito receptor de la consta de la IC Atmega y el conductor del motor IC para controlar el movimiento del robot. El circuito detector de metales tiene un timbre que suena cuando el robot detecta un metal. El rango de sensibilidad de nuestro detector de metales es 1 pulgada.
Los circuitos de emisor y receptor se muestran en la figura. Se ser adjuntando el código fuente pronto para el transmisor y el receptor ICs Atmega.
La labor futura de nuestro proyecto sólo puede ser limitada por nuestra imaginación. Este chasis altamente personalizable fue diseñado para que el usuario puede agregar fácilmente en partes. Mediante la adición de un sensor infrarrojo o ultrasónico puede implementarse un modo autónomo y el robot llevará alrededor de recogida de datos. También podemos ejecutar la aplicación por wifi por lo que se puede conectar a un sitio web, esto permitirá que trabajadores de la seguridad ver múltiples robots conducir alrededor de una instalación. Micrófono del teléfono puede utilizarse para detectar y transmitir audio para alertar al usuario. Un modo de captura de imagen podría aplicarse también para guardar material de archivo. Es otro de los beneficios de la reasignación de un teléfono como una cámara IP, uno podría hacer uso de la amplia gama de características promedio de teléfonos contiene como sensor de luz, GPS, brújula y una luz de flash. Todas estas características podrían aplicarse en nuestra aplicación.
CÓDIGOS DE SOFTWARE
SECCIÓN DE TRANSMISOR
/*
Controlador Arduino para el control remoto de Android app.
Escucha este sketch las instrucciones en el puerto serie
a continuación, envía las instrucciones apropiadas para el receptor de RF a través de un transmisor de RF
*/
#include
SoftwareSerial bluetooth (10, 11); Esta función se utiliza para cambiar el RX, pines de TX
int const FWD = 2; de arduino al pin 10 y 11
int const BWD = 4;
int const plataforma = 7;
int const LEF = 8;
void setup() {}
pinMode (FWD, salida);
pinMode (BWD, salida); inicialización de pines como entrada y salida
pinMode (plataforma, salida);
pinMode (LEF, salida);
inicial no establecido recto hacia adelante, ninguna velocidad de la
digitalWrite (FWD, LOW);
digitalWrite(BWD,LOW);
digitalWrite (plataforma, LOW); valores iniciales de ajuste de pernos
digitalWrite (LEF, LOW);
Serial.Begin(9600);
Bluetooth.Begin(9600); ajuste de velocidad de transmisión de
}
void loop() {}
ver si hay entrada serial de los datos:
Si (bluetooth.available() > 0) {}
leer el byte más antigua en el buffer serial:
int incomingByte = bluetooth.read();
acción según la instrucción
Además de enviar una confirmación a la aplicación
interruptor (incomingByte) {}
caso 'F':
moveForward(true);
Serial.println ("adelantando");
rotura;
caso 'R':
turnR(true);
Serial.println ("girar a la derecha");
rotura;
caso 'L':
turnL(true);
Serial.println ("girando a la izquierda");
rotura;
caso 'B':
moveBackward(true);
Serial.println ("yendo hacia atrás");
rotura;
de caso ':
moveStops(true);
Serial.println("stopping");
rotura;
caso 'X':
LEDOn(true);
Serial.println ("luz");
rotura;
caso 'Y':
Ledoff(true);
Serial.println ("luz apagada");
rotura;
por defecto:
Si nada coincide con, no hacer nada
rotura;
}
}
}
void moveForward(boolean forward) {}
Dirección del motor controles booleanos de avance
Si (hacia adelante)
{
digitalWrite (FWD, alto);
digitalWrite(BWD,LOW);
digitalWrite (plataforma, LOW);
digitalWrite (LEF, LOW);
Serial.println ("subiendo");
}
}
void Ledon(boolean on) {}
Boolean led de control luz de bot
if (a)
{
digitalWrite (FWD, alto);
digitalWrite(BWD,HIGH);
digitalWrite (plataforma, LOW);
digitalWrite (LEF, LOW);
Serial.println ("LED");
}
}
void Ledoff(boolean offF) {}
Boolean led de control luz de bot(turning off)
Si (offF)
{
digitalWrite (FWD, alto);
digitalWrite(BWD,HIGH);
digitalWrite (RIG, alto);
digitalWrite (LEF, LOW);
Serial.println ("LED apagado");
}
}
void moveBackward(boolean backward) {}
Dirección del motor controles hacia atrás booleano
Si (hacia atrás)
{
digitalWrite (FWD, LOW);
digitalWrite(BWD,HIGH);
digitalWrite (plataforma, LOW);
digitalWrite (LEF, LOW);
Serial.println ("bajando");
}
}
void moveStops(boolean stops) {}
Boolean parada parando el motor
Si (paradas)
{
digitalWrite (FWD, LOW);
digitalWrite(BWD,LOW);
digitalWrite (plataforma, LOW);
digitalWrite (LEF, LOW);
Serial.println("STOPS");
}
}
void turnR(boolean rightR) {}
Dirección del motor controles booleanos de derecha
Si (rightR) {}
digitalWrite (FWD, LOW);
digitalWrite(BWD,LOW);
digitalWrite (RIG, alto);
digitalWrite (LEF, LOW);
Serial.println ("va bien");
}
}
void turnL(boolean rightL) {}
Dirección del motor controles izquierda booleano
Si (rightL) {}
digitalWrite (FWD, LOW);
digitalWrite(BWD,LOW);
digitalWrite (plataforma, LOW);
digitalWrite (LEF, alto);
Serial.println ("va izquierda");
}
}
int const PP = 0;
int const P1 = 1;
int const P2 = 2;
int const P3 = 3;
int const P4 = 4;
int const P5 = 5;
int const P6 = 6;
int const P7 = 7;
int const P8 = 8;
int const P9 = 9;
int const P10 = 10;
int const P11 = 11;
int const P12 = 12;
int const P13 = 13;
SECCIÓN DE RECEPTOR
/ * Este programa recibirá las instrucciones que es enviado por el transmisor de RF y controla el bot por consiguiente * /
int const PP = 0;
int const P1 = 1;
int const P2 = 2;
int const P3 = 3;
int const P4 = 4;
int const P5 = 5;
int const P6 = 6;
int const P7 = 7;
int const P8 = 8;
int const P9 = 9;
int const P10 = 10;
int const P11 = 11;
int const P12 = 12;
int const P13 = 13;
void setup() {}
pinMode (PP, entrada);
pinMode (P1, entrada);
pinMode (P2, entrada);
pinMode (P3, entrada);
pinMode (P4, salida);
pinMode (P5, salida);
pinMode (P6, salida);
pinMode (P7, salida);
pinMode (P8, salida);
pinMode (P9, salida);
pinMode (P10, salida);
pinMode (P11, salida); inicialización como entrada y salida
pinMode (P12, salida);
digitalWrite (PP, baja);
digitalWrite (P1, LOW);
digitalWrite (P2, bajo);
digitalWrite (P3, bajo);
digitalWrite (P4, LOW);
digitalWrite (P5, LOW); valores iniciales de configuración de pines
digitalWrite (P6, LOW);
digitalWrite (P7, LOW);
digitalWrite (P8, LOW);
digitalWrite (P9, LOW);
digitalWrite (P10, LOW);
digitalWrite (P11, LOW);
digitalWrite (P12, LOW);
}
void loop() {}
int C1 = digitalRead(PP);
int C2 = digitalRead(P1);
int C3 = digitalRead(P2); lectura de los datos obtenidos por el receptor de RF
int C4 = digitalRead(P3);
int C5 = digitalRead(P9);
Si (C1 == alto & & C2 == LOW) {}
{if(C3==Low)}
digitalWrite (P4, alto);
digitalWrite (P5, LOW); condición de movimiento hacia adelante
digitalWrite (P6, alto);
digitalWrite (P7, LOW);
}
}
Si (C2 == alto & & C1 == LOW) {}
{if(C3==Low)}
digitalWrite (P4, LOW);
digitalWrite (P5, alto); hacia atrás
digitalWrite (P6, LOW);
digitalWrite (P7, alto);
}
}
Si (C3 == alto & & C2 == LOW) {}
{if(C1==Low)}
digitalWrite (P4, alto);
digitalWrite (P5, LOW);
digitalWrite (P6, LOW); derecho
digitalWrite (P7, alto);
}
}
Si (C4 == alto & & C3 == LOW) {}
Si (C2 == baja & & C1 == LOW) {}
digitalWrite (P4, LOW);
digitalWrite (P5, alto);
digitalWrite (P6, alto); izquierda
digitalWrite (P7, LOW);
}
}
Si (C1 == alto & & C2 == HIGH) {}
Si (C3 == baja & & C4 == LOW)
{
digitalWrite (P8, alto); LED encendido
}
}
Si (C1 == alto & & C2 == HIGH) {}
if(C3==High
& & C4 == LOW) {}
digitalWrite (P8, LOW); LED apagado
}