jueves, 10 de diciembre de 2015
Hago presente mi tercera entrega de mi prototipo, empezando con los materiales que utilicé:
-Arduino Mega.- Placa principal para dar funcionamiento al circuito.
-Placa L298N.- Controlador de los motores DC.
-Kit Motores DC: Motores de corriente alterna, irán conectados a la placa L298N.
- Sensor Ultrasónico: Nos permite captar la distancia hacia un obstáculo
-Fuente de alimentación de 9V: Energía necesaria para que funcione la placa L298N.
-Sensor TSC3200 o detector de color.- Detecta la cantidad de rojo, verde y azul de un sólido.
-Cables.- Para las conexiones de los pines de los componentes.
-Led RGB con tres resistencias para cada color.- Permitira encender el color rojo, verde o azul, según detecte el sensor TSC3200.
Diagrama de conexión de los componentes:
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 = 4;
int direccion;
int giros;
////////////////////////////////////////////////////
//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 led rojo verde y azul
int redLed = 2;
int greenLed =3;
int blueLed = 4;
// Variables del sensor de color
int red = 0;
int green = 0;
int blue = 0;
////////////////////////////////////////////////////
void setup() {
Serial.begin(9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
randomSeed(analogRead(0));
apagar();
delay(3000);
//////////////////////////////////////////////
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
//////////////////////////////////////////////
}
void loop() {
/////////////////////////////////////////////////////////////
//Código para capturar la distancia
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;
////////////////////////////////////////////////////////////////////
//Condicionales para la distancia de giro
if ((distancia >= 15) && (distancia <= 50)) {
estado = 0;
}
else if (distancia > 15.0) {
estado = 1;
}
else {
estado = 2;
}
switch (estado) {
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 125);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 125);
break;
case 1:
avanzarA();
avanzarB();
break;
case 2:
direccion = random(2);
if (direccion == 0) {
retroDerecha();
}else {
retroIzquierda();}
break;}}
//Motor avanza normalmente
void avanzarA() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);}
void avanzarB() {
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);}
//Motor gira a la derecha
void retroDerecha() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(250);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255);
giros=random(5);
Serial.println(giros);
delay(500);
//Si el contador que es 4 coincide con el random giros entonces para los motores y se ejecuta el //sensor de color
if (cont == giros){
apagarTodo();}}
//Motor gira a la derecha
void retroIzquierda(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(250);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 255);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);
giros=random(5);
Serial.println(giros);
delay(500);
if (cont == giros){
apagarTodo();}}
void apagar() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
delay(100);}
void apagarTodo() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
int sensorColor = 0;
//Mientras sensorColor diferente de 1 repite las capturas de los colores
while (sensorColor != 1) {
color();
Serial.print("Intensidad de rojo:");
Serial.print(red, DEC);
Serial.print("Intensidad de verde:");
Serial.print(green, DEC);
Serial.print("Intensidad de azul: ");
Serial.print(blue, DEC);
Serial.println();
//Si llega a detectar cualquiera de los colores el sensorColor cambia a 1 rompiendose el bucle y
//los motores de nuevo avanza
if (red < blue && red < green && red < 10) {
digitalWrite(redLed, HIGH); // Se enciende el led rojo
delay(3000);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color rojo");
sensorColor = 1;}
else if (blue < red && blue < green) {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, HIGH); //Se enciende el led azul
delay(3000);
Serial.println("Se ha detectado el color azul");
sensorColor = 1;}
else if (green < red && green < blue) {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH); // Se enciende el led verde
delay(3000);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color verde");
sensorColor = 1;}
else {
Serial.println();}
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);}}
//Método para capturar el color rojo, verde y azul de un sólido
void color() {
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}
Imágenes prototipo:
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...
0 comentarios:
Publicar un comentario