Aqui estamos realizando la prueba del control de servos por medio del celular, y este video muestra el resultado:
sábado, 22 de junio de 2013
trabajo finalizado, ultima prueba!!!
una vez realizado todos los circuitos, unimos primero la parte del arduino para ver que funcionara y si se moviera el carro, después se le colocaron los servos que mueven el tanque de gas para el lanzallamas. Una vez realizado todo el ensamblaje, este es el resultado del proyecto:
Programa del Arduino y control con la aplicación "Bluetooth RC".
Puedes descargar el programa que hicimos aquí MachineGun Arduino.
Éste es el código de Arduino:
#include <Servo.h>
Servo x;
Servo y;
Servo shoot;
int pos1;
int pos2;
int motorA = 2;
int motorB = 3;
int dirA = 4;
int dirB = 5;
int luz = 11;
int led=13;
char c;
boolean apuntar = false;
void adelante();
void reversa();
void parado();
void derecha();
void izquierda();
void adelanteDerecha();
void adelanteIzquierda();
void atrasDerecha();
void atrasIzquierda();
void encenderLuz();
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(motorA, OUTPUT);
pinMode(motorB, OUTPUT);
pinMode(dirA, OUTPUT);
pinMode(dirB, OUTPUT);
pinMode(luz, OUTPUT);
x.attach(9);
y.attach(10);
shoot.attach(8);
x.write(90);
y.write(90);
shoot.write(50);
}
void loop(){
while (Serial.available()) {
if (Serial.available() >0) {
c = Serial.read();
}
}
if(apuntar == false){
switch(c){
case 'F':
adelante();
break;
case 'B':
reversa();
break;
case 'S':
parado();
break;
case 'L':
izquierda();
break;
case 'R':
derecha();
break;
case 'G':
adelanteIzquierda();
break;
case 'I':
adelanteDerecha();
break;
case 'H':
atrasIzquierda();
break;
case 'J':
atrasDerecha();
break;
case 'W':
encenderLuz();
break;
case 'w':
apagarLuz();
break;
case 'X':
apuntar = true;
break;
case 'v':
shoot.write(50);
break;
}
}
else{
switch(c){
case 'B': //HACIA ARRIBA
pos1++;
if(pos1 > 100){
pos1=100;
}
y.write(pos1);
break;
case 'F': //HACIA ABAJO
pos1--;
if(pos1 < 60){
pos1=60;
}
y.write(pos1);
break;
case 'L':
pos2++;
if(pos2>180){
pos2=180;
}
x.write(pos2);
break;
case 'R':
pos2--;
if(pos2<0){
pos1=0;
}
x.write(pos2);
break;
case 'x':
apuntar = false;
break;
case 'V':
shoot.write(100);
break;
case 'v':
shoot.write(50);
break;
}
delay(5);
}
}
void adelante(){
digitalWrite(motorA,HIGH);
digitalWrite(motorB,LOW);
digitalWrite(led,HIGH);
}
void reversa(){
digitalWrite(motorA,LOW);
digitalWrite(motorB,HIGH);
digitalWrite(led,HIGH);
}
void parado(){
digitalWrite(motorA,LOW);
digitalWrite(motorB,LOW);
digitalWrite(led,LOW);
digitalWrite(dirA,LOW);
digitalWrite(dirB,LOW);
}
void izquierda(){
digitalWrite(dirB,LOW);
digitalWrite(dirA,HIGH);
digitalWrite(led,HIGH);
}
void derecha(){
digitalWrite(dirB,HIGH);
digitalWrite(dirA,LOW);
digitalWrite(led,HIGH);
}
void adelanteIzquierda(){
digitalWrite(dirB,LOW);
digitalWrite(dirA,HIGH);
digitalWrite(motorB,LOW);
digitalWrite(motorA,HIGH);
digitalWrite(led,HIGH);
}
void adelanteDerecha(){
digitalWrite(dirB,HIGH);
digitalWrite(dirA,LOW);
digitalWrite(led,HIGH);
digitalWrite(motorA,HIGH);
digitalWrite(motorB,LOW);
}
void atrasIzquierda(){
digitalWrite(dirB,LOW);
digitalWrite(dirA,HIGH);
digitalWrite(motorB,HIGH);
digitalWrite(motorA,LOW);
digitalWrite(led,HIGH);
}
void atrasDerecha(){
digitalWrite(dirB,HIGH);
digitalWrite(dirA,LOW);
digitalWrite(led,HIGH);
digitalWrite(motorB,HIGH);
digitalWrite(motorA,LOW);
}
void encenderLuz(){
digitalWrite(luz,HIGH);
}
void apagarLuz(){
digitalWrite(luz,LOW);
}
Control del auto mediante la aplicación y cómo utilizamos los botones:
Éste es el código de Arduino:
#include <Servo.h>
Servo x;
Servo y;
Servo shoot;
int pos1;
int pos2;
int motorA = 2;
int motorB = 3;
int dirA = 4;
int dirB = 5;
int luz = 11;
int led=13;
char c;
boolean apuntar = false;
void adelante();
void reversa();
void parado();
void derecha();
void izquierda();
void adelanteDerecha();
void adelanteIzquierda();
void atrasDerecha();
void atrasIzquierda();
void encenderLuz();
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(motorA, OUTPUT);
pinMode(motorB, OUTPUT);
pinMode(dirA, OUTPUT);
pinMode(dirB, OUTPUT);
pinMode(luz, OUTPUT);
x.attach(9);
y.attach(10);
shoot.attach(8);
x.write(90);
y.write(90);
shoot.write(50);
}
void loop(){
while (Serial.available()) {
if (Serial.available() >0) {
c = Serial.read();
}
}
if(apuntar == false){
switch(c){
case 'F':
adelante();
break;
case 'B':
reversa();
break;
case 'S':
parado();
break;
case 'L':
izquierda();
break;
case 'R':
derecha();
break;
case 'G':
adelanteIzquierda();
break;
case 'I':
adelanteDerecha();
break;
case 'H':
atrasIzquierda();
break;
case 'J':
atrasDerecha();
break;
case 'W':
encenderLuz();
break;
case 'w':
apagarLuz();
break;
case 'X':
apuntar = true;
break;
case 'v':
shoot.write(50);
break;
}
}
else{
switch(c){
case 'B': //HACIA ARRIBA
pos1++;
if(pos1 > 100){
pos1=100;
}
y.write(pos1);
break;
case 'F': //HACIA ABAJO
pos1--;
if(pos1 < 60){
pos1=60;
}
y.write(pos1);
break;
case 'L':
pos2++;
if(pos2>180){
pos2=180;
}
x.write(pos2);
break;
case 'R':
pos2--;
if(pos2<0){
pos1=0;
}
x.write(pos2);
break;
case 'x':
apuntar = false;
break;
case 'V':
shoot.write(100);
break;
case 'v':
shoot.write(50);
break;
}
delay(5);
}
}
void adelante(){
digitalWrite(motorA,HIGH);
digitalWrite(motorB,LOW);
digitalWrite(led,HIGH);
}
void reversa(){
digitalWrite(motorA,LOW);
digitalWrite(motorB,HIGH);
digitalWrite(led,HIGH);
}
void parado(){
digitalWrite(motorA,LOW);
digitalWrite(motorB,LOW);
digitalWrite(led,LOW);
digitalWrite(dirA,LOW);
digitalWrite(dirB,LOW);
}
void izquierda(){
digitalWrite(dirB,LOW);
digitalWrite(dirA,HIGH);
digitalWrite(led,HIGH);
}
void derecha(){
digitalWrite(dirB,HIGH);
digitalWrite(dirA,LOW);
digitalWrite(led,HIGH);
}
void adelanteIzquierda(){
digitalWrite(dirB,LOW);
digitalWrite(dirA,HIGH);
digitalWrite(motorB,LOW);
digitalWrite(motorA,HIGH);
digitalWrite(led,HIGH);
}
void adelanteDerecha(){
digitalWrite(dirB,HIGH);
digitalWrite(dirA,LOW);
digitalWrite(led,HIGH);
digitalWrite(motorA,HIGH);
digitalWrite(motorB,LOW);
}
void atrasIzquierda(){
digitalWrite(dirB,LOW);
digitalWrite(dirA,HIGH);
digitalWrite(motorB,HIGH);
digitalWrite(motorA,LOW);
digitalWrite(led,HIGH);
}
void atrasDerecha(){
digitalWrite(dirB,HIGH);
digitalWrite(dirA,LOW);
digitalWrite(led,HIGH);
digitalWrite(motorB,HIGH);
digitalWrite(motorA,LOW);
}
void encenderLuz(){
digitalWrite(luz,HIGH);
}
void apagarLuz(){
digitalWrite(luz,LOW);
}
Control del auto mediante la aplicación y cómo utilizamos los botones:
Control de los sevomotores.
Información sobre los servos, funcionamiento y construcción: Servomotores.
Código para controlar los servomotores que usamos para apuntar: Aim.
#include <Servo.h> //INCLUIMOS LA LIBRERIA SERVO
Servo x; //DECLARAMOS EL OBJETO SERVO QUE MUEVE EL LANZA LLAMAS EN EL EJE X
Servo y; //DECLARAMOS EL OBJETO SERVO QUE MUEVE EL LANZA LLAMAS EN EL EJE Y
int pos1; //DECLARAMOS LA VARIABLE DE LA POSICION DEL SERVO X
int pos2; //DECLARAMOS LA VARIABLE DE LA POSICION DEL SERVO Y
char c;
void setup(){
Serial.begin(9600);
x.attach(9); //EL SERVO X ESTA CONECTADO AL PIN 9
y.attach(10); //EL SERVO Y ESTA CONECTADO AL PIN 10
x.write(90); //EL SERVO X TIENE UNA POSICION INICIAL A 90 GRADOS
y.write(90); //EL SERVO Y TIENE UNA POSICION INICIAL A 90 GRADOS
}
void loop(){
while (Serial.available()) {
if (Serial.available() >0) {
c = Serial.read();
}
}
switch(c){
case 'F': //HACIA ARRIBA
pos1++;
if(pos1 > 100){ //MAXIMO PARA QUE EL LANZA LLAMAS NO GOLPEE CON EL TANQUE
pos1=100;
}
y.write(pos1);
break;
case 'B': //HACIA ABAJO
pos1--;
if(pos1 < 60){ //MAXIMO PARA QUE EL LANZA LLAMAS NO QUEME EL TANQUE
pos1=60;
}
y.write(pos1);
break;
case 'L': //IZQUIERDA
pos2++;
if(pos2>180){
pos2=180;
}
x.write(pos2);
break;
case 'R': //DERECHA
pos2--;
if(pos2<0){
pos1=0;
}
x.write(pos2);
break;
}
delay(5);
}
Código para controlar los servomotores que usamos para apuntar: Aim.
#include <Servo.h> //INCLUIMOS LA LIBRERIA SERVO
Servo x; //DECLARAMOS EL OBJETO SERVO QUE MUEVE EL LANZA LLAMAS EN EL EJE X
Servo y; //DECLARAMOS EL OBJETO SERVO QUE MUEVE EL LANZA LLAMAS EN EL EJE Y
int pos1; //DECLARAMOS LA VARIABLE DE LA POSICION DEL SERVO X
int pos2; //DECLARAMOS LA VARIABLE DE LA POSICION DEL SERVO Y
char c;
void setup(){
Serial.begin(9600);
x.attach(9); //EL SERVO X ESTA CONECTADO AL PIN 9
y.attach(10); //EL SERVO Y ESTA CONECTADO AL PIN 10
x.write(90); //EL SERVO X TIENE UNA POSICION INICIAL A 90 GRADOS
y.write(90); //EL SERVO Y TIENE UNA POSICION INICIAL A 90 GRADOS
}
void loop(){
while (Serial.available()) {
if (Serial.available() >0) {
c = Serial.read();
}
}
switch(c){
case 'F': //HACIA ARRIBA
pos1++;
if(pos1 > 100){ //MAXIMO PARA QUE EL LANZA LLAMAS NO GOLPEE CON EL TANQUE
pos1=100;
}
y.write(pos1);
break;
case 'B': //HACIA ABAJO
pos1--;
if(pos1 < 60){ //MAXIMO PARA QUE EL LANZA LLAMAS NO QUEME EL TANQUE
pos1=60;
}
y.write(pos1);
break;
case 'L': //IZQUIERDA
pos2++;
if(pos2>180){
pos2=180;
}
x.write(pos2);
break;
case 'R': //DERECHA
pos2--;
if(pos2<0){
pos1=0;
}
x.write(pos2);
break;
}
delay(5);
}
viernes, 21 de junio de 2013
Circuitos de Control para los motores (puente H con relevadores y transistores).
TODO ESTO LO MONTAMOS EN UN CHASIS DE UN AUTO A CONTROL REMOTO.
MT1 ES EL MOTOR TRASERO QUE DA LA DIRECCIÓN.
MT2 ES EL SERVO DELANTERO QUE CONTROLA LA DIRECCIÓN.
La potencia a las salidas del integrado L293 no eran suficientes para mover los motores a la velocidad deseada, nosotros optamos por hacer un puente H con relevadores y transistores. Los transistores los utilizamos para amplificar la señal del Arduino ya que las bobinas de los relevadores consumen mucha corriente. Como los relees son mecánicos no hay perdidas a la salida así que los motores reciben casi todo el voltaje y toda la corriente. Diseñamos el siguiente circuito:
Seguimos utilizando el L293 para el servo de la dirección, los 600mA del integrado son suficientes para moverlos y ahorramos espacio al no poner más relevadores.
Material:
Pines del Transistor BC547.
MT1 ES EL MOTOR TRASERO QUE DA LA DIRECCIÓN.
MT2 ES EL SERVO DELANTERO QUE CONTROLA LA DIRECCIÓN.
La potencia a las salidas del integrado L293 no eran suficientes para mover los motores a la velocidad deseada, nosotros optamos por hacer un puente H con relevadores y transistores. Los transistores los utilizamos para amplificar la señal del Arduino ya que las bobinas de los relevadores consumen mucha corriente. Como los relees son mecánicos no hay perdidas a la salida así que los motores reciben casi todo el voltaje y toda la corriente. Diseñamos el siguiente circuito:
Seguimos utilizando el L293 para el servo de la dirección, los 600mA del integrado son suficientes para moverlos y ahorramos espacio al no poner más relevadores.
Material:
- 1 Batería 9v (de preferencia utiliza la original del auto a control remoto).
- 1 LED.
- 4 resistencias 330 ohms.
- 1 Switch.
- 3 Relevadores de 5v.
- 3 Transitores BC547 (BJT).
- 1 Arduino.
- 1 Diodo rectificador
- 1 Protoboard.
- Alambre para proto.
Pines del Transistor BC547.
Puente H
Un Puente H o Puente en H es un circuito electrónico que
permite a un motor eléctrico DC girar en ambos sentidos, avance y retroceso.
Son ampliamente usados en robótica y como convertidores de potencia. Los
puentes H están disponibles como circuitos integrados, pero también pueden
construirse a partir de componentes discretos.
El término "puente H" proviene de la típica
representación gráfica del circuito. Un puente H se construye con 4
interruptores (mecánicos o mediante transistores). Cuando los interruptores S1
y S4 (ver primera figura) están cerrados (y S2 y S3 abiertos) se aplica una
tensión positiva en el motor, haciéndolo girar en un sentido. Abriendo los
interruptores S1 y S4 (y cerrando S2 y S3), el voltaje se invierte, permitiendo
el giro en sentido inverso del motor.
El término puente H proviene de la típica representación gráfica del circuito.
El término puente H proviene de la típica representación gráfica del circuito.
El término "puente H" proviene de la típica
representación gráfica del circuito. Un puente H se construye con 4
interruptores (mecánicos o mediante transistores). Cuando los interruptores S1
y S4 (ver primera figura) están cerrados (y S2 y S3 abiertos) se aplica una tensión
positiva en el motor, haciéndolo girar en un sentido. Abriendo los
interruptores S1 y S4 (y cerrando S2 y S3), el voltaje se invierte, permitiendo
el giro en sentido inverso del motor.
Con la nomenclatura que estamos usando, los interruptores S1
y S2 nunca podrán estar cerrados al mismo tiempo, porque esto cortocircuitaría
la fuente de tensión. Lo mismo sucede con S3 y S4.
Más información: Puente H wikipedia
Lanza Llamas
Para el Lanzallamas utilizamos un desodorante montado sobre dos servos que lo mueven en los ejes xy y un tercer servo para presionar la válvula y disparar.
Lo montamos de la siguiente manera:
Hicimos una pieza que encajara en la boquilla de la válvula para que al jalarla con el servo la presionara y saliera el desodorante.
Amarramos alambre a cada extremo de la pieza que hicimos y luego los sujetamos a un clavo para que el servo pudiera tirar de él.
Lo montamos de la siguiente manera:
Sujetamos un servo a la parte trasera para presionar la válvula.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglw4EPxvcwMIx3-eao0a1rR55VX_ahusE9DOTxU7PZMIHJoF03HD29SK9l0zxgddahyphenhyphenUUrb90nOvc9XyBag3toZs3DaF9qq2rASO36OTFVnQL3SDI01Mi4ReUe9obVM_hKneKhcdt2RIk/s400/20130622_002723.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg63orrnnCbctz3ujTKf4XVBwMXEFoisVvOEKHPmaWs_EE0ejOzjWQ6OEgb2DVZqN3AB_rnHEXBWZGh9qseX-g8oqd8CVQIdQ_neilFdW2BEW9SdDYSFgF13UeBArrTsYX2EDR6urD6RyI/s400/20130622_002731.jpg)
jueves, 9 de mayo de 2013
Control de los motores DC con el LN293 o puente H
Utilizando una aplicación Android, Arduino, Módulo Bluetooth y un
puente H podemos controlar los motores de nuestro tanque, la App que nosotros
utilizamos se llama “Bluetooth RC”, la puedes encontrar en Google Play y es
gratuita. Su manejo es intuitivo, al abrir el menú de opciones puedes ver un
botón que dice “Info” allí viene la lista de caracteres que “manda” al
presionar los botones, estos caracteres son los que el Arduino interpretará
para realizar las funciones.
Material:
- Arduino Uno.
- Cable para proto.
- L293.
- Módulo bluetooth.
- Dos Motores DC bipolares.
- Batería (el voltaje depende de los motores que utilices).
Herramientas:
- Computadora.
- Dispositivo Android.
- Pinzas de corte y de punta.
- Protoboard.
Forward - F
Backward - B
Left - L
Right - R
Forward Left - G
Forward Right - I
Backward Left - H
Backward Right - JStop - S
El Puente H que utilizamos es el LN293, lo puedes conseguir en cualquier tienda de electrónica y cuesta aproximadamente $50 Mexicanos. Este es su diagrama de conexiones:
Para nuestro caso lo conectaremos al Arduino y a los motores
de la siguiente manera:
viernes, 3 de mayo de 2013
Encender y apagar un LED (Arduino-Módulo Bluetooth)
Una manera muy sencilla de aprender a utilizar el módulo bluetooth es encender y apagar un LED, para esto se conecta el módulo como se muestra en el diagrama y se puede hacer una aplicación Android en App Inventor para controlarlo (http://appinventor.mit.edu/) en la misma página hay tutoriales y explicaciones para instalarlo y aprender a utilizarlo.
Esto es la base para controlar los motores y todo lo que el tanque tenga.
Material:
LED.
Resistencia 330 ohms.
Cable para proto.
Módulo bluetooth.
Arduino.
Herramientas:
Computadora.
Dispositivo Android.
Pinzas de corte y de punta.
![](//lh4.ggpht.com/--yUk1wly8oE/UYPCkZ4bYtI/AAAAAAAAAA4/hc7MYwU9xX0/s640/1367582187792.jpg)
Esto es la base para controlar los motores y todo lo que el tanque tenga.
Material:
LED.
Resistencia 330 ohms.
Cable para proto.
Módulo bluetooth.
Arduino.
Herramientas:
Computadora.
Dispositivo Android.
Pinzas de corte y de punta.
![](http://lh4.ggpht.com/--yUk1wly8oE/UYPCkZ4bYtI/AAAAAAAAAA4/hc7MYwU9xX0/s640/1367582187792.jpg)
Suscribirse a:
Entradas (Atom)