viernes, 18 de diciembre de 2015
Hago presente mi cuarta entrega de mi prototipo, bueno empecemos por los materiales que se utilizó:
-Arduino mega: Placa fundamental y principal para dar el funcionamiento al circuito.
-Placa L298N: Es el controlador principal para hacer funcionar los motores DC.
-Kit de motores DC: Un kit de motores de corriente alterna, con su base diseñada.
-Sensor ultrasónico: Sensor que nos permite captar una determinada distancia para que el prototipo esquive el obstáculo.
-Sensor TSC3200 o detector de color: Detecta la cantidad de rojo, verde y azul de un objeto.
-Fuente de alimentación de 9V: Energía necesaria para que funcione la placa L298N y para alimentar el arduino.
-Modulo DF Player mini: Módulo reproductor de archivos mp3 o wav.
-Speaker o parlante: Nos sirve para dar la salida del audio del módulo mp3.
-Cables.- Para las conexiones de los pines de los componentes.
--Led RGB con tres resistencias para cada color: Permitirá encender el color rojo, verde o azul, según detecte el sensor TSC3200, cada pin con su respectiva resistencia de 220 o 330 Ohmios.
Diagrama de conexión de los componentes:
Código empleado:
//Librerías necesarias para el funcionamiento del módulo mp3
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
//Variables de los pines del sensor de distancia
int trigger = 21;
int echo = 20;
//Motor Izquierdo
int ENA = 8;
int IN1 = 9;
int IN2 = 10;
//Motor Derecho
int ENB = 13;
int IN3 = 11;
int IN4 = 12;
int estado = 0;
int cont = 0;
int direccion;
int giros;
if (direccion == 0) {
retroDerecha();}
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255);
delay(300);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 255);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);
delay(300);
cont++;
Serial.println(cont);
if (cont == 10){
apagarTodo();}}
//Método apagar
void apagar() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
delay(100);}
//Método apagarTodo
void apagarTodo() {
cont=0;
analogWrite(ENA, 0);
analogWrite(ENB, 0);
//Condición para detectar color verde
else if (green < red && green < blue) {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH); //Encendemos led verde si la condición se cumple
delay(3000);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color verde");
sensorColor = 1;
colores=2;}
//Condición para detectar color azul
else if (blue > red && blue > green) {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, HIGH); //Encendemos led azul si la condición se cumple
delay(3000);
Serial.println("Se ha detectado el color azul");
colores=3;
sensorColor = 1;}
//Apagamos todos los leds
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);}
/*Si la variable colores que almacena el color que pone el usuario en el sensor es igual a la variable sonido que es el color que pidió el robot entonces*/
if (colores==sonido){
#include <DFPlayer_Mini_Mp3.h>
//Variables de los pines del sensor de distancia
int trigger = 21;
int echo = 20;
//Motor Izquierdo
int ENA = 8;
int IN1 = 9;
int IN2 = 10;
//Motor Derecho
int ENB = 13;
int IN3 = 11;
int IN4 = 12;
int estado = 0;
int cont = 0;
int direccion;
int giros;
int sonido=0;
int colores=0;
//Variables del sensor de color
const int s0 = 19;
const int s1 = 18;
const int s2 = 16;
const int s3 = 17;
const int out = 15;
// Variables de los leds rojo verde y azul
int redLed = 2;
int greenLed =3;
int blueLed = 4;
// Variables que almacenan la cantidad de color rojo, verde y azul
int red = 0;
int green = 0;
int blue = 0;
void setup() {
Serial.begin(9600);
int colores=0;
//Variables del sensor de color
const int s0 = 19;
const int s1 = 18;
const int s2 = 16;
const int s3 = 17;
const int out = 15;
// Variables de los leds rojo verde y azul
int redLed = 2;
int greenLed =3;
int blueLed = 4;
// Variables que almacenan la cantidad de color rojo, verde y azul
int red = 0;
int green = 0;
int blue = 0;
void setup() {
Serial.begin(9600);
//Iniciamos el funcionamiento del módulo mp3 con volumen de sonido: 50
mp3_set_serial (Serial);
delay(1);
mp3_set_volume (50);
mp3_set_serial (Serial);
delay(1);
mp3_set_volume (50);
//Configuración de pines del sensor de distancia
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
//Configuración de los pines del controlador de motores L298N
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
//Iniciamos el random
randomSeed(analogRead(0));
//Llamamos método apagar, que apaga los motores durante 2 segundos para despues iniciar
apagar();
delay(2000);
//Configuración de pines del sensor de color
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
apagar();
delay(2000);
//Configuración de pines del sensor de color
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
//Configuración del led RGB
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
//Encendemos el pin s0 y s1 del sensor de color
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
//Iniciamos con una canción de fondo del prototipo
mp3_play(8);}
void loop() {
digitalWrite(trigger, LOW);
delayMicroseconds(5);
// Comienzo de la medida
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
// Adquisición y conversión a centímetros
float distancia = pulseIn(echo, HIGH);
distancia = distancia * 0.01657;
if ((distancia >= 15) && (distancia <= 40)) {
estado = 0;}
else if (distancia > 10.0) {
estado = 1;}
digitalWrite(trigger, LOW);
delayMicroseconds(5);
// Comienzo de la medida
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
// Adquisición y conversión a centímetros
float distancia = pulseIn(echo, HIGH);
distancia = distancia * 0.01657;
if ((distancia >= 15) && (distancia <= 40)) {
estado = 0;}
else if (distancia > 10.0) {
estado = 1;}
else {
estado = 2;}
switch (estado) {
estado = 2;}
switch (estado) {
//Conforme a la condición de arriba, si el estado es 0 el robot disminuye un poco su velocidad
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 200);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 200);
break;
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 200);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 200);
break;
//Si el estado es 1: el robot avanza normalmente su trayecto
case 1:
avanzarA();
avanzarB();
break;
avanzarA();
avanzarB();
break;
/*Si el estado es 2: El robot pasa a esquivar el obstáculo y a través del random elije si girar a la
izquierda o derecha*/
case 2:
direccion = random(2);
direccion = random(2);
if (direccion == 0) {
retroDerecha();}
else {
retroIzquierda();}
break;}}
//Método: Avanza el motor A(izquierdo) a velocidad normal
void avanzarA() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);}
//Método: Avanza el motor B(derecho) a velocidad normal
void avanzarB() {
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);}
//Método para girar a la derecha
void retroDerecha() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(150);
retroIzquierda();}
break;}}
//Método: Avanza el motor A(izquierdo) a velocidad normal
void avanzarA() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);}
//Método: Avanza el motor B(derecho) a velocidad normal
void avanzarB() {
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);}
//Método para girar a la derecha
void retroDerecha() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(150);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255);
delay(300);
//Variable que nos permite contar 10 esquivos del robot
cont++;
Serial.println(cont);
/*Si el contador llega a 10 llama al método apagarTodo donde apaga los motores y da paso al funcionamiento del sensor de color*/
if (cont == 10){
apagarTodo();}}
//Método que gira a la izquierda
void retroIzquierda(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(150);
cont++;
Serial.println(cont);
/*Si el contador llega a 10 llama al método apagarTodo donde apaga los motores y da paso al funcionamiento del sensor de color*/
if (cont == 10){
apagarTodo();}}
//Método que gira a la izquierda
void retroIzquierda(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(150);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 255);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);
delay(300);
cont++;
Serial.println(cont);
if (cont == 10){
apagarTodo();}}
//Método apagar
void apagar() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
delay(100);}
//Método apagarTodo
void apagarTodo() {
cont=0;
analogWrite(ENA, 0);
analogWrite(ENB, 0);
/*Reproducción de sonidos donde pide que coloquemos el color que diga el robot a través del random el elije que color pedir*/
mp3_play(0);
delay(2000);
sonido=random(1,4);
mp3_play (sonido);
delay(2000);
delay(2000);
sonido=random(1,4);
mp3_play (sonido);
delay(2000);
//Ejecuta el sensor de color y empieza con la lectura
int sensorColor = 0;
while (sensorColor != 1) {
color();
Serial.print("R Intensity:");
Serial.print(red, DEC);
Serial.print(" G Intensity: ");
Serial.print(green, DEC);
Serial.print(" B Intensity : ");
Serial.print(blue, DEC);
Serial.println();
delay(100);
int sensorColor = 0;
while (sensorColor != 1) {
color();
Serial.print("R Intensity:");
Serial.print(red, DEC);
Serial.print(" G Intensity: ");
Serial.print(green, DEC);
Serial.print(" B Intensity : ");
Serial.print(blue, DEC);
Serial.println();
delay(100);
//Condición para detectar color rojo
if (red < blue && green > red && red < 20) {
digitalWrite(redLed, HIGH); //Encendemos led rojo si la condición se cumple
delay(3000);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color rojo");
sensorColor = 1;
colores=1;}
if (red < blue && green > red && red < 20) {
digitalWrite(redLed, HIGH); //Encendemos led rojo si la condición se cumple
delay(3000);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color rojo");
sensorColor = 1;
colores=1;}
//Condición para detectar color verde
else if (green < red && green < blue) {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH); //Encendemos led verde si la condición se cumple
delay(3000);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color verde");
sensorColor = 1;
colores=2;}
//Condición para detectar color azul
else if (blue > red && blue > green) {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, HIGH); //Encendemos led azul si la condición se cumple
delay(3000);
Serial.println("Se ha detectado el color azul");
colores=3;
sensorColor = 1;}
//Apagamos todos los leds
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);}
/*Si la variable colores que almacena el color que pone el usuario en el sensor es igual a la variable sonido que es el color que pidió el robot entonces*/
if (colores==sonido){
//Se ejecutan sonidos de exitoso dando a saber que ingreso bien el color pedido por el robot
mp3_play(7);
delay(4000);
mp3_play (4);
delay (3000);
mp3_play(8);}
mp3_play(7);
delay(4000);
mp3_play (4);
delay (3000);
mp3_play(8);}
//Caso contrario si no acierta el color manda un sonido erroneo
else{
mp3_play (6);
delay (3500);
mp3_play (5);
delay (3000);
mp3_play(8);}}
//Método para detectar la cantidad de cada color: rojo, verde y azul
void color() {
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
//Capta el color rojo
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH)
digitalWrite(s3, HIGH);
//Capta el color azul
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
//Capta el color verde
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);}
Imágenes prototipo:
Video del funcionamiento:
Podcast:
else{
mp3_play (6);
delay (3500);
mp3_play (5);
delay (3000);
mp3_play(8);}}
//Método para detectar la cantidad de cada color: rojo, verde y azul
void color() {
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
//Capta el color rojo
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH)
digitalWrite(s3, HIGH);
//Capta el color azul
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
//Capta el color verde
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);}
Video del funcionamiento:
Podcast:
Suscribirse a:
Enviar comentarios
(Atom)
Datos personales:
Etiquetas
- Arduino (8)
- Auditoria (2)
- ConceptosAuditoria (2)
- EjerciciosRedes (2)
- Entregas (4)
- Introducción a la web (2)
- Noticias (7)
- Programación (2)
- Redes (6)
- Scratch (5)
Entradas populares
-
Hago presente mi segunda entrega de mi prototipo, empezando con los materiales que utilicé: -Arduino UNO.- Placa principal para dar func...
-
Esta vez les traigo un ejercicio de enrutamiento estático con 3 routers: Datos: Lan1: 172.168.0.0 /18 Lan2: 172.168.64.0 /18 Lan3...
-
A continuación mostrare el funcionamiento del sensor detector de colores TCS3200 con el arduino. Como habíamos dicho en la presentación d...
-
Hago presente mi cuarta entrega de mi prototipo, bueno empecemos por los materiales que se utilizó: -Arduino mega: Placa fundamental y p...
-
Hola estimados esta vez les traigo un tutorial de como instalar Packettracer 6.2 para el sistema operativo ubuntu, bueno sin mas rodeo v...
Muy bien Dennis, siga adelante
ResponderEliminar