miércoles, 16 de diciembre de 2015

CUARTA ENTREGA


ESTUCTURA FINAL (Modulo MP3, Sensor de Color,
 
Sensor de Distancia y Motores DC)


OBJETIVO:

Determinar, realizar la cuarta entrega de nuestro prototipo la misma que se basa en la implementación del módulo mp3 para simular la reproducción de sonido desde nuestro prototipo.

DESARROLLO: 

El módulo mp3 o también conocido como DFPlayer Mini es un módulo de coste pequeño con una producción simplificada directamente al altavoz. El módulo puede ser utilizado como un módulo independiente con la batería, altavoces y botones pulsadores conectados o utilizado en combinación con un Arduino UNO o cualquier otro con capacidades de RX/ TX utilizados para la transmición y recepción.
Se integra perfectamente módulo de decodificación duro, que es compatible con los formatos de audio comunes, tales como MP3 y WAV. Además, también soporta tarjeta formateadas con el sistema de archivos FAT16, FAT32.

Esto es en cuanto puedo compartir de información estimados lectores, sobre el funcionamiento del modulo mp3, ya que existe mucho informacion en internet, ya depende de nuestra lógica y la funcionalidad que le demos a nuestro robot.


MATERIALES

1. Placa Arduino Mega El MEGA 2560 está diseñado para los proyectos más complejos. Con 54 E / S pines, 16 entradas analógicas y un espacio más grande para su boceto es la junta recomendado para las impresoras 3D y proyectos de robótica. Esto le da a sus proyectos con mucho espacio y oportunidades


























2. Placa L298N

En esta entrada describo una placa controladora de 4 motores de Corriente Continua (CC). La cual usa 4 puentes H integrados en dos "chips" L298N".


  



















3. Motores DC


El motor de corriente continua es una máquina que convierte la energía eléctrica en mecánica, provocando un movimiento rotatorio, gracias a la acción que se genera del campo magnético


 

















4. Sensor de Distancia

Un sensor de proximidad es un transductor que detecta objetos o señales que se encuentran cerca del elemento sensor.


 
  













5. Sensor de Color

Este sensor esta basado en el TCS3200. Es un convertidor de luz a frecuencia programable, puede filtrar los datos RGB de la fuente de luz y convertirlo en una onda cuadrada 

 

 


















6. Modulo Mp3 

El Mini Player es un módulo de coste muy pequeño con una produccion simplificada directamente del altavos  


























ESQUEMA DE CONEXIÓN:










CÓDIGO:


//PROGRAMA PARA EL FUNCIONAMIENTO DE PROTITPO JUNTO
//(MOTORES DC, SENSORES DE DISTANCIA, SENSOR DE COLOR, MODULO MP3


#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>


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 = 22;
const int s1 = 23;
const int s2 = 24;
const int s3 = 25;
const int out = 26;

// Variables de los led rojo verde y azul
int redLed = 2;
int greenLed =3;
int blueLed = 4;
// Variables
int red = 0;
int green = 0;
int blue = 0;
////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600);
  mp3_set_serial (Serial);      
  delay(1);                    
  mp3_set_volume (50);
 
  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(2000);

  //////////////////////////////////////////////
  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);
  //////////////////////////////////////////////
  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;
  }

  else {
    estado = 2;
  }

  switch (estado) {
    case 0:
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      analogWrite(ENA, 200);

      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      analogWrite(ENB, 200);
      break;

    case 1:
      avanzarA();
      avanzarB();
      break;

    case 2:
     
      direccion = random(2);
     
      if (direccion == 0) {
        retroDerecha();
      }else {
        retroIzquierda();
      }
      break;
  }
}
void avanzarA() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, 255);}

void avanzarB() {
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENB, 255);}

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);
 
  cont++;
  //giros=random(5);
  Serial.println(cont);

  if (cont == 10){
    apagarTodo();}}

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++;
  //giros=random(5);
  Serial.println(cont); 
  if (cont == 10){
    apagarTodo();
    }}

void apagar() {
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
  delay(100);}

void apagarTodo() {
  cont=0;
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);

  mp3_play(0);
  delay(2000);
  sonido=random(1,4);
  mp3_play (sonido);
  delay(2000);

  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);

   if (red < blue && green > red && red < 20) {
      //Serial.println(" - (Red Color)");
      digitalWrite(redLed, HIGH); 

     // Turn RED LED ON
      delay(3000);
      digitalWrite(greenLed, LOW);
      digitalWrite(blueLed, LOW);
      Serial.println("Se ha detectado el color rojo");
      sensorColor = 1;
      colores=1;
    
      }
    else if (green < red && green < blue)  {
      //Serial.println(" - (Green Color)");
      digitalWrite(redLed, LOW);
      digitalWrite(greenLed, HIGH);

     // Turn GREEN LED ON
      delay(3000);
      digitalWrite(blueLed, LOW);
      Serial.println("Se ha detectado el color verde");
      sensorColor = 1;
      colores=2;
    }

     else if (blue > red && blue > green) {
      //Serial.println(" - (Blue Color)");
      digitalWrite(redLed, LOW);
      digitalWrite(greenLed, LOW);
      digitalWrite(blueLed, HIGH);
      delay(3000);
      Serial.println("Se ha detectado el color azul");
      colores=3;
      sensorColor = 1;}

    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(blueLed, LOW);}

//función declarada para el reconocimiento de color
    if (colores==sonido){
      mp3_play(7);
      delay(4000);
      mp3_play (4);
      delay (3000);
      mp3_play(8);
    }
    else{
      mp3_play (6);
      delay (3500);
      mp3_play (5);
      delay (3000);
      mp3_play(8);     
    }
}
void color()  {
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);
  //count OUT, pRed, RED
  red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  digitalWrite(s3, HIGH);
  //count OUT, pBLUE, BLUE
  blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  digitalWrite(s2, HIGH);
  //count OUT, pGreen, GREEN
  green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}


 

IMAGENES:









AUDIO/VIDEO: 









1 comentario: