Cuna para bebés 2.0
1. INTRODUCCIÓN Y FUNCIONAMIENTO
Nuestra idea inicial era hacer una cuna para bebes con diferentes modos de movimiento.
Esta idea se ha mantenido durante toda la fase de diseño, implementación y construcción de las mismas, pero hemos añadido algunas funcionalidades al diseño inicial.
La cuna que hemos construido consta de:
– Cuatro botones para seleccionar los tres modos diferentes de movimiento (Modo 1 es un movimiento de 15 grados sobre la base; Modo 2 es un movimiento de 15 grados hacia atrás; Modo 3 mezcla los dos modos anteriores) y un botón de parada.
Cada uno de estos movimientos se puede llevar a cabo gracias a los dos servomotores que hemos colocado en el interior de la caja.
Cada uno de estos movimientos se puede llevar a cabo gracias a los dos servomotores que hemos colocado en el interior de la caja.
– Un micrófono que detecta el llanto del bebé y hace sonar una melodía.
– Un display el cual nos indica en todo momento el modo seleccionado y el estado de la cuna.
2. MONTAJE
En este apartado vamos a explicar brevemente como se ha montado cada una de las partes de la CunaBebe.
Soporte y cuna:
Para ello se ha utilizado:
– Un palo de plástico (Bastón de Juguete).
– Trozos de madera fina.
– Cesta de pan.
– Tela Azul.
– Muñeca de juguete.
Base cuna:
Para la base de la cuna se ha utilizado una caja rectangular de madera. En la parte exterior o tapa, podemos observar los cuatro botones, el display y un agujero central para el soporte de la cuna. En la parte superior de la tapa se encuentra el altavoz y el micrófono.
En el reverso de la tapa se encuentra la circuitería junto con la placa Arduino.
En la parte interior de la caja se encuentran los dos servomotores.
3. TRABAJO DE CADA INTEGRANTE
El trabajo se ha dividido en:
-Diseño estructural de la cuna ( boceto ,funcionalidad, )
-Diseño del circuito.
-Implementación del código.
-Montaje de los componentes.
-Montaje de la estructura.
-Pruebas.
-Diseño del circuito.
-Implementación del código.
-Montaje de los componentes.
-Montaje de la estructura.
-Pruebas.
4. HARDWARE
4.1. LISTA DE COMPONENTES
Nombre del Componente |
Precio |
Palo de Plástico |
1.80€ / ud |
Cesta de mimbre |
1.80€ / ud |
Maderas finas |
0.80€ |
Tela Azul |
1.20€ / metro |
Servomotor (x2 uds) |
12€ /ud = 24€ |
Protoboard |
5€ /ud |
Cable 1mm (5 metros) |
2€ |
Micrófono |
3€ /ud |
Muñeca |
5€ / ud |
Botones (x4 uds) |
Aportado por la URJC |
Altavoz |
Aportado por la URJC |
Display |
Aportado por la URJC |
Resistencias |
Aportado por la URJC |
Placa Arduino |
Aportado por la URJC |
Potenciómetro (x2 uds) |
Aportado por la URJC |
4.2. CIRCUITO Y ESQUEMA
5. PROBLEMAS ENCONTRADOS
Uno de nuestros problemas principales y por el que nos vimos obligados a modificar nuestro diseño, fue la Celda de Carga. Tras investigar en la web, manuales acerca del código y sus conexiones y no encontrar nada, decidimos no utilizarlo.
También tuvimos problemas con el uso del display. Después de tener soldados cada uno de los cables de conexión, no mostraba nada, simplemente se encendía. Comprobando cada una de las conexiones nos dimos cuenta de que el problema estaba en el potenciómetro al que va conectado.
También nos surgió un problema una vez que teníamos montado cada una de las partes de la cuna, nos dimos cuenta de que los servomotores no tenían la suficiente fuerza para mover el soporte y la cuna. En ese momento la primera idea que nos surgió fue cortar el palo del soporte porque era demasiado largo, pero esta solución no dio resultado ya que los servomotores seguían sin poder moverlo. Entonces decidimos modificar el punto de unión de la cuna y el palo de plástico, para que el peso de la cuna estuviese más repartido e hicimos la unión en el medio de la cesta como se puede observar en las fotografías de la parte superior, pero esta solución seguía sin dar el resultado esperado. Después de todas estas ideas se nos ocurrió poner una goma en la base de la cuna que ayudase a los servomotores a realizar el movimiento, esta última idea si dio resultado.
Por último nos gustaría mencionar los problemas que tuvimos con el micrófono. Dicho componente tiene un potenciómetro para medir la sensibilidad del ruido siendo este muy difícil de ajustar. Tras varias modificaciones en el código y unos pequeños ajustes en el dispositivo logramos el resultado que esperábamos.
6. CONCLUSIONES
La realización de la práctica nos ha resultado entretenida y hemos aprendido a utilizar Arduino y los diferentes componentes que hemos usado. Pero nos gustaría destacar que a lo largo del desarrollo del proyecto nos han surgido numerosos problemas que hemos ido solucionando, gracias a los manuales que hemos encontrado en la Web.
A lo largo del desarrollo del proyecto hemos tenido que ir adecuando los materiales a las características de cada uno de los componentes de Arduino.
Desde el primer momento intentamos buscar una idea original y que llamase la atención a los usuarios, creemos que los hemos conseguido y por todo esto estamos satisfechos con nuestro trabajo.
7. APÉNDICE
7.1. CÓDIGO ARDUINO
#include <Servo.h> // Librería para servos
#include <LiquidCrystal.h> // Incluye la Libreria LiquidCrystal
Servo servo1; // Creamos un objeto de tipo servo
Servo servo2;
#define button1 2 // definimos un primer botón
#define button2 4 // definimos un segundo botón
#define button3 8 // Si da problemas el código, poner las var de los botones en MAYUS
#define button4 12
LiquidCrystal lcd(1, 7, 9, 10, 11, 13); // Crea un Objeto LC. Parametros: (rs, enable, d4, d5, d6, d7)
int zumbador = 6; // Pin 6 para el cable rojo del zumbador
int SensorsonidoPin = 3; //pin 3 para el sensor con microfono
int con1 = 0;
int con2 = 0;
int con3 = 0;
int con4 = 0;
int conSensor = 0;
int aux = 0;
int aux1 = 0;
int aux2 = 0;
int grado = 90;
int grado2 = 115;
int sube = 0;
int sube2 = 0;
int dejarComp = 0;
int unaVez = 0;
int buttonstate1 = 0;
int buttonstate2 = 0;
int buttonstate3 = 0;
int buttonstate4 = 0;
int sensorState;
void setup() {
servo1.attach(0); // pin del servomotor en Arduino
servo2.attach(5);
pinMode(button1, INPUT); // se declara el botón como componente de entrada
pinMode(button2, INPUT);
pinMode(button3, INPUT); // se declara el botón como componente de entrada
pinMode(button4, INPUT);
pinMode(zumbador, OUTPUT); // El zumbador está en un pin digital de salida
pinMode(SensorsonidoPin, INPUT);
lcd.begin(16, 2); // Inicializa la interface para el LCD screen, and determina sus dimensiones (ancho y alto) del display
lcd.print(«CUNA BEBE 2.0»); // Imprime «BIENVENIDO A LA CUNA» sobre el LCD
delay(3000); // 3 segundos de espera
lcd.setCursor(0, 1); // Seteamos la ubicacion texto 0 linea 1 que sera escrita sobre el LCD
}
void loop () {
buttonstate1 = digitalRead(button1); // Creamos dos estados para los dos botones
buttonstate2 = digitalRead(button2);
buttonstate3 = digitalRead(button3); // Creamos dos estados para los dos botones
buttonstate4 = digitalRead(button4);
sensorState = digitalRead(SensorsonidoPin);
servo1.write(90);
servo2.write(115);
if (sensorState == LOW) {
lcd.clear(); // Limpia la pantalla
delay(500);
lcd.print(«BEBE LLORANDO»);
delay(500);
delay(600);
tone(zumbador, 329.63, 300);
delay(350);
//play d4#
tone(zumbador, 311.13, 300);
delay(350);
// play e4
tone(zumbador, 329.63, 300);
delay(350);
// play d4#
tone(zumbador,311.13, 300);
delay(350);
// play e4
tone(zumbador, 329.63, 300);
delay(350);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play d4
tone(zumbador, 293.66,300);
delay(400);
// play c4
tone(zumbador, 261.63,300);
delay(400);
// play a3
tone(zumbador, 220, 900);
delay(1000);
// play d3
tone(zumbador,146.83, 300);
delay(350);
//play f3
tone(zumbador, 174.61, 300);
delay(400);
//play a3
tone(zumbador, 220, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 900);
delay(1000);
// play f3
tone(zumbador, 174.61, 300);
delay(400);
// play a3#
tone(zumbador, 233.08, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 900);
delay(1000);
delay(300);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play d4#
tone(zumbador, 311.13, 300);
delay(400);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play d4#
tone(zumbador, 311.13, 300);
delay(400);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play d4
tone(zumbador, 293.66, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 300);
delay(400);
// play a3
tone(zumbador, 220, 900);
delay(1000);
// play d3
tone(zumbador, 146.83, 300);
delay(400);
// play f3
tone(zumbador, 174.61, 300);
delay(400);
// play a3
tone(zumbador, 220, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 900);
delay(1000);
// play f3
tone(zumbador, 174.61, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play a3
tone(zumbador, 220, 900);
delay(1000);
// play b3
tone(zumbador,246.94, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 300);
delay(400);
// play d4
tone(zumbador, 293.66, 300);
delay(400);
// play e4
tone(zumbador, 329.63, 900);
delay(1000);
// play g3
tone(zumbador, 196, 300);
delay(400);
// play f4
tone(zumbador, 349.23, 300);
delay(400);
//play e4
tone(zumbador, 329.23, 300);
delay(400);
// play d4
tone(zumbador, 293.63, 900);
delay(1000);
// play e3
tone(zumbador,164.81, 300);
delay(400);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play d4
tone(zumbador, 293.63, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 900);
delay(1000);
// play d3
tone(zumbador, 146.83, 300);
delay(400);
// play d4
tone(zumbador, 293.63, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 900);
delay(1000);
delay(400);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play d4#
tone(zumbador, 311.13, 300);
delay(350);
// play e4
tone(zumbador, 329.63, 300);
delay(350);
// play d4#
tone(zumbador,311.13, 300);
delay(350);
// play e4
tone(zumbador, 329.63, 300);
delay(350);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play d4
tone(zumbador, 293.66,300);
delay(400);
// play c4
tone(zumbador, 261.63,300);
delay(400);
// play a3
tone(zumbador, 220, 900);
delay(1000);
// play d3
tone(zumbador,146.83, 300);
delay(350);
//play f3
tone(zumbador, 174.61, 300);
delay(400);
//play a3
tone(zumbador, 220, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 900);
delay(1000);
// play f3
tone(zumbador, 174.61, 300);
delay(400);
// play a3
tone(zumbador, 233.08, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 900);
delay(1000);
delay(300);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play d4#
tone(zumbador, 311.13, 300);
delay(400);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play d4#
tone(zumbador, 311.13, 300);
delay(400);
// play e4
tone(zumbador, 329.63, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play d4
tone(zumbador, 293.66, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 300);
delay(400);
// play a3
tone(zumbador, 220, 900);
delay(1000);
// play d3
tone(zumbador, 146.83, 300);
delay(400);
// play f3
tone(zumbador, 174.61, 300);
delay(400);
// play a3
tone(zumbador, 220, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 900);
delay(1000);
// play f3
tone(zumbador, 174.61, 300);
delay(400);
// play c4
tone(zumbador, 261.63, 300);
delay(400);
// play b3
tone(zumbador, 246.94, 300);
delay(400);
// play a3
tone(zumbador, 220, 900);
delay(1000);
lcd.clear(); // Limpia la pantalla
delay(500);
}
if (buttonstate1 == HIGH) {
con1 = 1 – con1;
con2 = 0;
con3 = 0;
dejarComp = 0;
unaVez = 0;
sube = 0;
sube2 = 0;
lcd.clear(); // Limpia la pantalla
delay(500);
lcd.print(«MECEDORA MODO 1»);
delay(500);
}
if (buttonstate2 == HIGH) {
con2 = 1 – con2;
con1 = 0;
con3 = 0;
dejarComp = 0;
unaVez = 0;
sube = 0;
sube2 = 0;
lcd.clear(); // Limpia la pantalla
delay(500);
lcd.print(«MECEDORA MODO 2»);
delay(500);
}
if (buttonstate3 == HIGH) {
con2 = 0;
con1 = 0;
con3 = 1 – con3;
dejarComp = 0;
unaVez = 0;
sube = 0;
sube2 = 0;
lcd.clear(); // Limpia la pantalla
delay(500);
lcd.print(«MECEDORA MODO 3»);
delay(500);
}
if (buttonstate4 == HIGH) {
con2 = 0;
con1 = 0;
con3 = 0;
dejarComp = 0;
unaVez = 0;
sube = 0;
sube2 = 0;
lcd.clear(); // Limpia la pantalla
delay(500);
lcd.print(«MECEDORA REPOSO»);
delay(500);
}
if (con1 == 1) {
if (grado2 < 115) {
grado2 = grado2 + 1;
servo2.write(grado2);
delay(50);
} else {
if (grado2 > 115) {
grado2 = grado2 – 1;
servo2.write(grado2);
delay(50);
}
}
if (grado2 == 115) {
aux = 1;
aux1 = 0;
aux2 = 0;
unaVez = 0;
}
if (aux == 1) {
if (grado <= 115 && sube == 0 && con2 == 0) {
++grado;
servo1.write(grado);
delay(50);
if (grado == 115) {
sube = 1;
}
} else {
if (grado >= 65 && sube == 1 && con2 == 0) {
–grado;
servo1.write(grado);
delay(50);
if (grado == 65) {
sube = 0;
}
}
}
}
}
if (con2 == 1) {
if (grado < 90) {
grado = grado + 1;
servo1.write(grado);
delay(50);
} else {
if (grado > 90) {
grado = grado – 1;
servo1.write(grado);
delay(50);
}
}
if (grado == 90) {
aux1 = 1;
aux = 0;
aux2 = 0;
unaVez = 0;
}
if (aux1 == 1) {
if (grado2 <= 130 && sube2 == 0 && con1 == 0) {
grado2 = grado2 + 1;
servo2.write(grado2);
delay(50);
if (grado2 == 130) {
sube2 = 1;
}
} else {
if (grado2 >= 100 && sube2 == 1 && con1 == 0) {
grado2 = grado2 – 1;
servo2.write(grado2);
delay(50);
if (grado2 == 100) {
sube2 = 0;
}
}
}
}
}
if (con3 == 1) {
if (unaVez == 0) {
if (grado2 < 115) {
grado2 = grado2 + 1;
servo2.write(grado2);
delay(50);
} else {
if (grado2 > 115) {
grado2 = grado2 – 1;
servo2.write(grado2);
delay(50);
}
}//fin del else
if (grado < 90) {
grado = grado + 1;
servo1.write(grado);
delay(50);
} else {
if (grado > 90) {
grado = grado – 1;
servo1.write(grado);
delay(50);
}
}
if (grado2 == 115 && grado == 90) {
aux = 0;
aux1 = 0;
aux2 = 1;
unaVez = 1;
sube = 0;
sube2 = 0;
}
}//fin de if(unaVez==0)
if (aux2 == 1) {
if (grado <= 115 && sube == 0 && con2 == 0) {
++grado;
servo1.write(grado);
delay(5);
if (grado == 115) {
sube = 1;
}
} else {
if (grado >= 65 && sube == 1 && con2 == 0) {
–grado;
servo1.write(grado);
delay(5);
if (grado == 65) {
sube = 0;
}
}
}
if (grado2 <= 130 && sube2 == 0 && con1 == 0) {
grado2 = grado2 + 1;
servo2.write(grado2);
delay(60);
if (grado2 == 130) {
sube2 = 1;
}
} else {
if (grado2 >= 100 && sube2 == 1 && con1 == 0) {
grado2 = grado2 – 1;
servo2.write(grado2);
delay(60);
if (grado2 == 100) {
sube2 = 0;
}
}
}
}//fin del if(aux2==1)
}//fin de if(con3==1)
if (con4 == 1) {
if (grado2 < 115) {
grado2 = grado2 + 1;
servo2.write(grado2);
delay(35);
} else {
if (grado2 > 115) {
grado2 = grado2 – 1;
servo2.write(grado2);
delay(35);
}
}//fin del else
if (grado < 90) {
grado = grado + 1;
servo1.write(grado);
delay(35);
} else {
if (grado > 90) {
grado = grado – 1;
servo1.write(grado);
delay(35);
}