CARRO CON ARDUINO
OBJETIVOS
- El objetivo de este proyecto basado en arduino es implementar códigos de cada sensor y así poder obtener un carro manejado por arduino y hacer optimo su funcionamiento.
- emplear todos los conocimientos adquiridos dentro de los laboratorios y de los curzos de cursera.
TEORÍA DE MATERIALES UTILIZADOS
• ARDUINO UNO
• PUENTE H
• SENSOR ULTRASONICO HC_SR04
• BLUETOOH
• SERVOBO MOTOR DE 300RPM
• WHEELS
• CABLES DE CONEXION
• 4 MOTORES PEQUEÑOS CON REDUCTOR
• 2 BATERIAS DE 9 V
EVIDENCIA DE LOS LABORATORIOS ANTERIORES
SENSOR ULTRASONICO HC_SR04"LAB 13"
CARACTERISTICAS DE UN SENSOR ULTRASONICO HC_SR04
- Alimentación de 5 volts.
- Interfaz de cuatro hilos (vcc, trigger, echo, GND).
- Rango de medición: 2 cm a 400cm.
- Corriente de alimentación: 1.5mA.
- Frecuencia de pulso: 40Khz.
- Apertura del pulso ultrasónico: 15°.
- Señal de disparo: 10us.
- Dimensiones del módulo: 45x20x15mm.
DIAGRAMA ESQUEMÁTICO SENSOR DE DISTANCIA ARDUINO
CÓDIGO DEL SENSOR DE DISTANCIA
long dis; | |
long tiem; | |
int led1 = 11; | |
void setup( ){ | |
Serial.begin(9600); | |
pinMode(10, OUTPUT); //salida del pulso generado por el sensor ultrasónico | |
pinMode(9, INPUT);//entrada del pulso generado por el sensor ultrasónico | |
pinMode(11, INPUT);//alarma de la distancia(encenderá el led) | |
} | |
void loop(){ | |
digitalWrite(10,LOW);//recibimiento del pulso. | |
delayMicroseconds(5); | |
digitalWrite(10, HIGH);//envió del pulso. | |
delayMicroseconds(10); | |
tiem=pulseIn(9, HIGH);//fórmula para medir el pulso entrante. | |
dis= long(0.017*tiem);//fórmula para calcular la distancia del sensor ultrasónico. | |
if(dis>10){ //comparativo para la alarma se ingresa la distancia en la que encenderá o apagara. | |
digitalWrite(11, HIGH); | |
} | |
else | |
{ | |
digitalWrite(11,LOW); | |
} | |
Serial.println("LA DISTANCIA MEDIDA ES:"); | |
Serial.println(dis); | |
Serial.println("cm"); | |
delay(500); | |
} |
DIRECCIONALES DEL CARRO CON EL PROGRAMA APP INVENTOR"LAB 14"
CARRO CON 3 RUEDAS(RUEDA LOCA)"LAB 15"
PROGRAMA ARDUINO
/* Arduino Control Car V2 By: El Profe Garcia
ARDUINO L293D(Puente H)
5 10
6 15
9 7
10 2
5V 1, 9, 16
GND 4, 5, 12, 13
El motor 1 se conecta a los pines 3 y 6 del Puente H
El motor 2 se conecta a los pines 11 y 14 del Puente H
La fuente de alimentacion de los Motores se conecta a tierra y
el positivo al pin 8 del puennte H.
Conexion del Modulo Bluetooth HC-06 y el Arduino
ARDUINO Bluetooth HC-06
0 (RX) TX
1 (TX) RX
5V VCC
GND GND
!!Cuidado!! Las conexiones de TX y RX al modulo Bluetooth deben estar desconectadas
en el momento que se realiza la carga del codigo (Sketch) al Arduino.
Conexion Sensor Ultrasonido HC-SR04
ARDUINO Ultrasonido HC-SR04
2 Echo
3 Trig
5V VCC
GND Gnd
Conexion Servo SG90
ARDUINO Ultrasonido HC-SR04
11 Signal
5V VCC
GND Gnd
*/
#include <Servo.h> // Incluye la libreria Servo
Servo servo1; // Crea el objeto servo1 con las caracteristicas de Servo
int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'c'; // inicia detenido
int pecho = 2; // define el pin 2 como (pecho) para el Ultrasonido
int ptrig = 3; // define el pin 3 como (ptrig) para el Ultrasonido
int duracion, distancia; // para Calcular distacia
void setup() {
Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
pinMode(pecho, INPUT); // define el pin 2 como entrada (pecho)
pinMode(ptrig,OUTPUT); // define el pin 3 como salida (ptrig)
pinMode(13,OUTPUT);
servo1.attach(11,660,1400); // Asocia el servo1 al pin 11, define el min y max del ancho del pulso
// eso depende del fabricante del servo
}
void loop() {
if(Serial.available()>0){ // lee el bluetooth y almacena en estado
estado = Serial.read();
}
if(estado=='a'){ // Boton desplazar al Frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
if(estado=='b'){ // Boton IZQ
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
}
if(estado=='c'){ // Boton Parar
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='d'){ // Boton DER
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}
if(estado=='e'){ // Boton Reversa
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(derB, vel);
analogWrite(izqB, vel);
}
if (estado =='f'){ // Boton ON, se mueve sensando distancia
digitalWrite(ptrig, HIGH); // genera el pulso de trigger por 10us
delay(0.01);
digitalWrite(ptrig, LOW);
duracion = pulseIn(pecho, HIGH); // Lee el tiempo del Echo
distancia = (duracion/2) / 29; // calcula la distancia en centimetros
delay(10);
if (distancia <= 15 && distancia >=2){ // si la distancia es menor de 15cm
digitalWrite(13,HIGH); // Enciende LED
analogWrite(derB, 0); // Parar los motores por 200 mili segundos
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
delay (200);
analogWrite(derB, vel); // Reversa durante 500 mili segundos
analogWrite(izqB, vel);
delay(500);
analogWrite(derB, 0); // Girar durante 1100 milisegundos
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
delay(600);
digitalWrite(13,LOW);
}
else{ // Si no hay obstaculos se desplaza al frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
}
if(estado=='g'){ // Boton SER, activa el Servomotor
servo1.write(30); // Gira el servo a 30 grados
delay(1000); // Espera 1000 mili segundos a que el servo llegue a la posicion
servo1.write(90); // Gira el servo a 90 grados
delay(700); // Espera 700 mili segundos a que el servo llegue a la posicion
servo1.write(150); //Gira el servo a 150 grados
delay(700);
}
if(estado=='h'){ //Programacion de los botones 13-10-9-6-5
digitalWrite(13,1);
}
if(estado=='m'){
digitalWrite(13,0);
}
if(estado=='i'){
digitalWrite(derB,1);
}
if(estado=='n'){
digitalWrite(derB,0);
}
if(estado=='j'){
digitalWrite(derA,1);
}
if(estado=='o'){
digitalWrite(derA,0);
}
if(estado=='k'){
digitalWrite(izqB,1);
}
if(estado=='p'){
digitalWrite(izqB,0);
}
if(estado=='l'){
digitalWrite(izqA,1);
}
if(estado=='q'){
digitalWrite(izqA,0);
}
}
VÍDEO FINAL DEL PROYECTO
OBSERVACIONES Y CONCLUSIONES
OBSERVACIONES
- Nos dimos cuenta de si un cable esta mal ubicado conectado fuera de lugar en nuestro protoboard no funciona, en cambio conectado a 5 voltios si funcionaba con la ayuda de una batería de 9 V conectado al servomotor.
- Se vio que con una programación adecuada no hay problema en que los motores se muevan y el servomotor actue
CONCLUSIONES
- Se experimento con este proyecto basado en arduino ademas de implementar códigos de cada sensor y así poder obtener un carro manejado por arduino y hacer optimo su funcionamiento.
- Empleamos todos nuestros conocimientos adquiridos dentro de los laboratorios y de los curzos de cursera.
FOTO GRUPAL
´
No hay comentarios:
Publicar un comentario