EMBRONCADOR DE PERROS
Sistema de refuerzo contingente negativo ante estímulos neutros para la modificación de conducta
TRABAJO REALIZADO POR: Adrián López Cruz, Nuria Muñoz Viana, Hugo Rumi García y Virginia Pérez Clemente.
Cambio de proyecto
La idea inicial de nuestro proyecto era un sistema capaz de reconocer voz y de transcribir (mediante una pantalla led) lo que se escucha letra a letra. Estaba pensado para poder servir de ayuda a dar clase a personas sordas. La idea la descartamos por la necesidad de un modulo wifi (de elevado coste), la implementación de un sistema de reconocimiento de voz como el de Google o similar y la necesidad de un buen micrófono para que el reconocimiento fuera óptimo puesto que en una clase puede haber distintos ruidos y el micrófono podría confundirse si no fuera de buena calidad. También decidimos cambiar nuestro proyecto porque con la nueva idea que tuvimos, podíamos resolver un problema real y ya existente en el día a día de uno de los integrantes de nuestro grupo.
Necesidad y objetivo.
El Sistema de refuerzo contingente negativo ante estímulos neutros para la modificación de conducta también conocido como Embroncador perruno, surge como respuesta a una necesidad, pues tener hermanos alérgicos, sumado a un peludo que ama subirse al sofá hace que los afectados no puedan si quiera entrar al salón de casa sin estornudar y tener picores en los ojos.
Para solucionar este problema, necesitamos que el perro asocie subirse al sofá como algo negativo. Pensando en posibles maneras de conseguirlo, se nos ocurrió la idea de un sistema que detectara cuando el perro (Frodo a partir de ahora) se subía al sofá, y emitiese un sonido que Frodo identificase como una regañina.
Funcionamiento del sistema. Hardware.
Los componentes de nuestro sistema son: el sistema central (Placa UNO Arduino); una tarjeta SD; un sistema de almacenamiento, dado que el sistema central será tecnología Arduino se elige el Arduino SD Card Shield el cual te permite leer y escribir datos en la tarjeta SD; cableado macho- hembra; un sistema con micrófono para poder guardar la pista de audio a la tarjeta SD; un sensor de ultrasonidos; un altavoz y una protoplaca para realizar pruebas.
Conexiones:
- El sensor ultrasónico irá conectado al pin 2 de la placa Arduino y a GND.
- La tarjeta SD irá conectada al pin 4 de la placa Arduino.
- El altavoz al pin 10 de la placa Arduino y a GND.
El sistema funcionará de la siguiente manera: El dispositivo se colocará con el sensor ultrasónico en el sofá, y si, detecta un objeto a una distancia próxima (nosotros la hemos ajustado en 50 centímetros) en el altavoz se reproducirá la pista de audio guardada en la tarjeta SD «fb1.wav» que será el dueño de Frodo diciendo «¡Frodo no!».
Software (código).
Nuestro código no es de suma complejidad, sin embargo si que tuvimos algunos problemas para lograr su correcto funcionamiento. Al principio establecimos el umbral de distancia en la medida del sofá, esto hacía que en cuanto una tela se moviera un poco por el viento o cualquier otra cosa interfiriese un poco con el sensor, se activaba siendo esto un falso positivo, hubo que ajustarlo. Este y otros problemas y sus posibles soluciones se redactarán más adelante.
El código es el siguiente:
#include <Ultrasonic.h>
#include <SD.h>
#include <TMRpcm.h>
// Configuración del hardware:
// Pin 2 para el sensor ultrasónico.
// Pin 10 para el altavoz.
// Se necesita incluir la biblioteca SD.
#define SD_ChipSelectPin 4
TMRpcm tmrpcm; // Crea un objeto (tmrpcm) para usar en este sketch.
// Pin para el sensor ultrasónico.
Ultrasonic usensor(2);
boolean soundActive;
int contCicles;
void setup()
{
tmrpcm.speakerPin = 10;
//tmrpcm.soundbuff = 500; // Usa 1KB de memoria. La configuración mínima es de alrededor de 200 (400 bytes).
tmrpcm.volume(25);
pinMode(10,OUTPUT); // Pin del altavoz.
Serial.begin(9600);
contCicles=0;
soundActive=false;
if (!SD.begin(SD_ChipSelectPin))
{
// Verifica si la tarjeta está presente y se inicializa.
Serial.println("Fallo al inicializar SD");
return; // No hagas nada más si la tarjeta no está presente.
}
else
{
Serial.println("SD inicializada correctamente");
}
}
void loop()
{
if(soundActive==false)
{
if(evaluateSonar()==1)
{
tmrpcm.play("fb1.wav"); // El archivo se reproduce
soundActive=true;
}
delay(500);
}
else
{
contCicles++;
if(contCicles==3)
{
soundActive=false;
contCicles=0;
}
delay(1500);
}
}
int evaluateSonar(void)
{
int res;
long rangeInCentimeters;
usensor.distanceRead();// Obtén el tiempo de señal actual.
rangeInCentimeters = usensor.read(); //Obtener la distancia en centímetros.
if(rangeInCentimeters<50)
{
Serial.print("¡FRODOOOOO NOOO! ");
Serial.print(rangeInCentimeters);//0~400cm
Serial.println(" cm");
res=1;
}
else
{
Serial.print("La distancia a los obstáculos del frente es: ");
Serial.print(rangeInCentimeters);//0~400cm
Serial.println(" cm");
res=0;
}
return res;}
EXPLICACIÓN DEL CÓDIGO:
Primero se deben incluir las bibliotecas con las que vamos a trabajar.
Después el programa comienza con el establecimiento de los pines. Esto es muy importante pues software y hardware se deben complementar o el sistema no funcionará.
Se inicializa la tarjeta SD y se verifica si la inicialización ha sido correcta.
En el loop lo primero que hará el programa es ver si el sonido está activo y en caso negativo llamará a la función evaluateSonar que mide la distancia al objeto más cercano usando el sensor ultrasónico. Si esa distancia medida es menor a 50 centímetros, se reproduce el archivo de audio llamado fb1.wav guardado en la tarjeta SD con la bronca del perro y se establece la variable soundActive en true.
Si el sonido ya está activo, se incrementa el contador de ciclos. Si el contador alcanza el valor de 3, se establece la variable «soundActive» en false para detener la reproducción del archivo de sonido y evitar bucles.
La función «evaluateSonar» obtiene la distancia en centímetros del objeto detectado por el sensor ultrasónico y devuelve un valor de 1 si la distancia es menor de 50 centímetros, lo que significa que hay un obstáculo en el camino. De lo contrario, devuelve un valor de 0 y muestra la distancia en centímetros del objeto más cercano detectado en el monitor serie. Esto se podría también mostrar en una pantalla LCD o similar, e incluso si se consiguiera que funcionara de forma remota estableciendo conexiones por bluetooth sería de suma utilidad que una vez el perro se ha subido al sofá del salón, en una pantalla en otra habitación se notificara de ello.
Problemas y posibles mejoras.
El primer problema con el que nos encontramos es la necesidad de que el sistema funcionase sin tener que estar enchufado ya que todos los enchufes y fuentes de alimentación cercanos al sofá donde se sube el perro están ocupados. Esto ha sido rápido y sencillo de solucionar, usando una batería portátil con autonomía para más de 10 horas.
Otro problema que tuvimos fue que la biblioteca AUDIO de Arduino no funcionaba correctamente ya que estaba pensado para la placa DUE y no para la UNO, esto lo solucionamos con la librería TMRpcm.h.
También encontramos dificultades a la hora de conectar los cables. Al principio decidimos utilizar los cables macho-hembra que venían en la caja proporcionada por el profesor, pero al ser muy cortos, tuvimos que comprar unos mucho más largos para que nos permitiese poder colocar el sensor de ultrasonidos sin que se viese el resto de la estructura. Sin embargo, al reemplazar los cables cortos por los largos, el sistema dejó de funcionar y en vez de sonar cuando se detectaba al perro, entró en un bucle y sonaba cada cinco segundos, asique decidimos volver a poner los cables cortos ya que los largos estaban defectuosos. Al volver a poner los cables cortos, el problema se solucionó.
Por último, al grabar el audio con la voz de Virginia (dueña de Frodo) no conseguíamos que bajase del sofá ya que el perro no hacía caso. La solución fue grabar la pista con la voz de su padre ya que el perro solo le obedece a él.
Como posibles mejoras se podría usar un altavoz con mayor volumen, además de utilizar pistas de audio con mas variedad de frases para evitar que Frodo acabe reconociéndolas y mejorar la estructura, por ejemplo, poniendo el sensor y el altavoz dentro de una caja decorada.
Video demostración.
https://drive.google.com/file/d/1SIMUDjnaGoDvXrBLRFmewNJ9oitm_MOk/view?usp=sharing
https://drive.google.com/file/d/1GgazS6OSiAuLbYw7oiEvwAYeac_nAS7w/view?usp=sharing