lunes, 15 de febrero de 2021

DISPENSADOR DE GOLOSINAS AUTOMÁTICO



PROYECTO DE DISPENSADOR AUTOMÁTICO DE GOLOSINAS CON ARDUINO





INFORMACIÓN PRELIMINAR:

Máster Universitario en Profesor de Educación Secundaria Obligatoria, Bachillerato, Formación Profesional y Enseñanza de Idiomas (MUPES)
Universidad de Salamanca

Asignatura: Innovación Docente en la Especialidad de Tecnología

Curso: 2020/2021



TRABAJO REALIZADO POR:

Abel Olmedo Rodríguez 


CONTEXTO ADECUADO:

Este proyecto puede resultar adecuado para cualquier curso de Secundaria en la asignatura de Tecnología, ya sea en 1º de ESO, en 3º de ESO como en 4º de ESO, tando en la modalidad de Académicas como de Aplicadas. 

También puede ser adecuado para  la asignatura de Tecnología industrial I y II, de 1º y 2º de Bachillerato respectivamente.

En particular se propone para el 4º curso de ESO de la asignatura de Tecnología modalidad Académicas para el bloque de Control y robótica.
  

DESCRIPCIÓN DEL FUNCIONAMIENTO:

El funcionamiento se basa en que mediante un pulsador, se dispensan pequeñas gominolas de manera automática. El pulsador hace girar a un servomotor el cual está solidarizado con un pequeño cilindro con una oquedad en un lateral. 

Al alinearse esta oquedad con una perforación en el envase de las golosinas, caen por gravedad al interior del cilindro una cantidad controlada de las mismas. 

Posteriormente, el cilindro gira en sentido contrario para dejarlas caer por una rampa que desemboca en un pequeño recipiente para que las golosinas puedan ser tomadas.

En estado normal podemos apreciar un led RGB que luce con una tonalidad azul y una pantalla LCD que nos muestra la frase "¿QUIERE GOLOSINAS? - SON GRATIS". 

Cuando se acciona el pulsador y el cilindro comienza a girar, el led RGB, que en estado normal luce azul, se torna rojo advirtiendo de que el servomotor está trabajando acompañado a su vez de la pantalla LCD mencionada en la cual en esta ocasión se puede leer el mensaje "EN PROCESO... ESPERE".

El funcionamiento termina cuando el servomotor acaba de realizar todos los movimientos programados y habiendo depositado ya las golosinas en el recipiente final. En este momento en la pantalla LCD se puede leer la frase "AQUÍ TIENE SUS RICAS GOLOSINAS" acompañado de un parpadeo del led RGB, esta vez con tonalidad verde, apoyado a su vez por varios sonidos de un zumbador, advirtiendo de que todo el proceso ha terminado y puede recoger las golosinas.


El proyecto cuenta también con otra posibilidad manual, mediante el accionamiento de un joystick en el eje y. Los movimientos serían los equivalentes a la modalidad automática pero abarcando directamente desde 0 a 90 y 180º , es decir solo en dos movimientos, desde reposo a 90º, giraría a 0º para recoger golosinas y después moviendo el joystick hacia el lado contrario el servomotor giraría hasta los 180 º, dejando caer las golosinas a la rampa inferior.

En este caso no seactivaría ningún otro elemento, pueso que está pensado explusivamente para un accionamiento manunal llegado el caso de que el mecanismo se atascase.



VIDEO:







ESQUEMA DEL CIRCUITO EN TINKERCAD:







COMPONENTES DE ARDUINO UTILIZADOS:

  • Placa protoboard
  • Placa ARDUINO
  • Potenciómetro
  • Joystick
  • Pulsador
  • Zumbador
  • Servomotor
  • Pantalla LCD
  • Led RGB
  • Resistencias 220
  • Cables


MATERIALES UTILIZADOS PARA LA MAQUETA:

  • Tableros DM
  • Tornillería 3x25mm para madera
  • Silicona termofusible
  • Varilla roscada 4mm
  • Arandelas metálicas 4mm
  • Tuercas hexagonales 4mm
  • Poliestireno extruido
  • Bote de galletas saladas
  • Lata de atún


FOTOGRAFÍAS DEL MONTAJE DEL CIRCUITO:





























CÓDIGO ARDUINO:

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


#include <Servo.h>

    Servo Abel;


#include "pitches.h"

    int melody[] = {

    NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6};

    int duration = 500;  // 500 miliseconds


const int SW_pin = 4; // digital pin connected to switch output

const int X_pin = A0; // analog pin connected to X output

const int Y = 0; // analog pin connected to Y output


#define BLUE 3

#define GREEN 5

#define RED 6

 

void setup() {

pinMode(SW_pin, INPUT);

digitalWrite(SW_pin, HIGH);

Serial.begin(9600);


Abel.attach(2);

delay(10);


lcd.begin(16, 2);

lcd.print("QUIERE GOLOSINAS");


pinMode(RED, OUTPUT);

pinMode(GREEN, OUTPUT);

pinMode(BLUE, OUTPUT);


digitalWrite(RED, HIGH);

digitalWrite(GREEN, HIGH);

digitalWrite(BLUE, HIGH);

}

 int redValue;

int greenValue;

int blueValue;

 

void loop() {

if (digitalRead(SW_pin) == HIGH)

{

    Serial.print("Switch:  HIGH-->");

    Serial.print(digitalRead(SW_pin));

}


if (digitalRead(SW_pin) == LOW)

{

    lcd.begin(10, 2);

    lcd.print(" EN PROCESO...");

    lcd.setCursor(0, 1);

    lcd.print("     ESPERE     ");


    digitalWrite(RED, HIGH);

    digitalWrite(GREEN, LOW);

    digitalWrite(BLUE, LOW);

    delay(1000);


    Abel.write(90);

    delay(2000);

    Abel.write(45);

    delay(2000);

    Abel.write(0);

    delay(2000);

    Abel.write(45);

    delay(2000);

    Abel.write(180);

    delay(2000);

    Abel.write(90);

    delay(2000);


    lcd.begin(3, 2);

    lcd.print(" AQUI TIENE SUS");

    lcd.setCursor(0, 1);

    lcd.print("RICAS GOLOSINAS");


    for (int thisNote = 0; thisNote < 8; thisNote++)

    tone(13, melody[thisNote], duration);


    digitalWrite(RED, LOW);

    digitalWrite(GREEN, HIGH);

    digitalWrite(BLUE, LOW);

    delay(1000);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, LOW);

    digitalWrite(BLUE, LOW);

    delay(1000);

    for (int thisNote = 0; thisNote < 8; thisNote++)

    tone(13, melody[thisNote], duration);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, HIGH);

    digitalWrite(BLUE, LOW);

    delay(1000);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, LOW);

    digitalWrite(BLUE, LOW);

    delay(1000);

    for (int thisNote = 0; thisNote < 8; thisNote++)

    tone(13, melody[thisNote], duration);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, HIGH);

    digitalWrite(BLUE, LOW);

    delay(1000);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, LOW);

    digitalWrite(BLUE, LOW);

    delay(1000);

    for (int thisNote = 0; thisNote < 8; thisNote++)

    tone(13, melody[thisNote], duration);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, HIGH);

    digitalWrite(BLUE, LOW);

    delay(1000);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, LOW);

    digitalWrite(BLUE, LOW);

    delay(1000);

    for (int thisNote = 0; thisNote < 8; thisNote++)

    tone(13, melody[thisNote], duration);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, HIGH);

    digitalWrite(BLUE, LOW);

    delay(1000);

    digitalWrite(RED, LOW);

    digitalWrite(GREEN, LOW);

    digitalWrite(BLUE, LOW);

    delay(1000);

    Serial.print("Switch:  LOW-->");

    Serial.print(digitalRead(SW_pin));

    lcd.begin(3, 2);

    lcd.print("QUIERE GOLOSINAS");

}


int position_Y= analogRead(Y);

int angulo = map(position_Y, 0, 1023, 0, 180);

Abel.write(angulo);

delay(10);

Serial.print("Switch:  ");

Serial.print(digitalRead(SW_pin));

Serial.print("\n");

Serial.print("X-axis: ");

Serial.print(analogRead(X_pin));

Serial.print("\n");

Serial.print("Y-axis: ");

Serial.println(analogRead(Y));

Serial.print("\n\n");

delay(100);


lcd.setCursor(3, 1);

lcd.print("SON GRATIS");


digitalWrite(RED, LOW);

digitalWrite(GREEN, LOW);

digitalWrite(BLUE, HIGH);

}











No hay comentarios:

Publicar un comentario