[Tutorial] Haz un alimentador de mascotas usando Altair


#1

#Alimentador de Mascotas
 
En este tutorial se hará un alimentador de mascotas de ejecución manual, no obstante se podrá modificar para que funcionará de manera automática.
Se hará uso de 1 Altair; Tendrá conectado directamente un alimentador de corriente y un servo.

Las acciones que el Altair tendrá serán

  • Servir Poco
  • Servir Medio
  • Servir Mucho
  • Toggle (Modo Manual)

La única diferencia entre los modos será el tiempo que demora el servo estando abierto y también la apertura del mismo. De manera extra, se creó el modo manual que podría servir para la limpieza del sistema.


El material usado para este tutorial fue:

  • 1 Altair
  • 1 Servomotor
  • 2 Abrazaderas
  • 1 Botella de Agua
  • 1 Cutter
---

##Código usado para el Altair

#include <Wire.h>
#include <Mesh.h>
#include <AquilaProtocol.h>
#include <Servo.h> //Cabecera necesaria para poder hacer uso de las funciones de los servos

Servo a; //Aquí se nombra al servo 'a' para poder referirnos a el.
int pos = 0;
bool isClosed = true; //Esta variable solo es para uso de la función toggle


//Esto aplica para las siguientes 3 funciones: a.write(N) dice que en cuanto se inice la función, el servo, se moverá hasta la posición N (sabiendo que puede moverse desde 0 hasta 180 grados)
//Hecho eso, esperara un delay de M milisegundos; 1000ms = 1 segundo
//Esperado ese tiempo, procederá a escribir una nueva posición al servo, en este caso es 9 ya que es el grado en el que ESTE servo en particular no se forza (no todos cubren sus 180 grados; Escucharás un zumbido si estás excediendo su límite).
bool servir1(uint8_t param, bool gotParam)
  {
    a.write(80);
    delay(1000);
    a.write(9);
  }
  
bool servir2(uint8_t param, bool gotParam)
  {
    a.write(50);
    delay(1000);
    a.write(9);
  }

bool servir3(uint8_t param, bool gotParam)
  {
    a.write(40);
    delay(650);
    a.write(9);
  }  

//La función toggle esta basada en las funciones anteriores salvo porque primero "se pregunta" si el servo esta en posición abierta o cerrada. Sabiendo esto, procederá a cerrar o abrir, según aplique.

bool toggle(uint8_t param, bool gotParam)
{
  
  if (isClosed)
  {
    isClosed = false;
    a.write(80);
  }
  else
  {
    isClosed = true;
    a.write(9);
  }
}

void setup()
{
  a.attach(9); //Servo motor conectado en el pin 9 de Altair
  a.write(9); //Servo motor deja de vibrar en el angulo 9 así que su posición inicial es 9 estando cerrado.

  Mesh.begin();
  Aquila.begin();
  Aquila.setClass("mx.makerlab.test");
  Aquila.setName("Feeder");
  

//El texto entre comillas es lo que aparecerá en el hub
//El texto siguiente es la funcion que llamará cuando se presione el boton en el hub
  Aquila.addAction("Servir Mucho", servir1); 
  Aquila.addAction("Servir Medio", servir2);
  Aquila.addAction("Servir Poco", servir3);
  Aquila.addAction("Toggle", toggle);
  
  Mesh.announce(HUB);
}

void loop()
{
  Mesh.loop();
  Aquila.loop();
}

##Diagrama del alimentador

##Screenshot del Hub


##Fotografías del Prototipo


Recursos para Aquila (Documentación, código, etc.)