Dispensador de alimentos para mascotas ajustable de Arduino (3 / 4 paso)

Paso 3: código

Este es el código para el arduino. Este código comprueba si el tiempo y compara con las alarmas, si coinciden encima de él dará vuelta el motor, empujando la comida hacia fuera. Para calcular cuánto debe girar el motor para, trabajamos a Cuánta comida queda liberado para cada turno. Una vuelta de un tornillo empujado hacia fuera 10g y cada rotación tarda 11 segundos. Por lo tanto 2 tornillos empujará a 20g cada 11 segundos. Investigamos las porciones de comida de perro y elaborado que un perro necesita aproximadamente 50g de alimento, un tamaño mediano 140g y un grande cerca de 260g. Esto significa que para una pequeña porción que el tornillo gira por 27,5 segundos, una porción media gira por unos 77 segundos y un gran por 141 segundos.

Dependiendo de los alimentos que utilizas puede que desee cambiar esto. Generalmente puede encontrar las porciones correctas en la parte posterior del embalaje. Recuerde que la escala de tiempo en el arduino IDE es en milisegundos. ((Recommended PORTIONS size)/20) * 11 = la longitud de tiempo que la corona debe girar a la biblioteca que puede encontrarse en la Página Web de arduino, se llaman time.h, DS1307RTC.h. Los otros dos ya están instalados en el IDE de Arduino. https://www.Arduino.CC/en/Reference/Libraries

Biblioteca:

#include

#include / / necesario para la biblioteca RTC

#include

#include / / biblioteca de reloj en tiempo real

Instalación de LCD

LiquidCrystal lcd (12, 11, 5, 8, 7, 6);

TurnDetected boolean volátil; Nos permite utilizar & & Estados

volátil hasta booleano;

Configurar pin enteros

const int PinCLK = 2; Utilizado para la generación de interrupciones utilizando señal de CLK

const int PinDT = 3; Utilizado para la lectura de señal DT

const int PinSW = 4; Utiliza para el interruptor de botón del codificador rotatorio

const int buttonPin = A3;

const int motorPin1 = 10;

const int motorPin2 = 13; el número del pin pulsador manual alimentación 13

botón de configuración

int buttonState = 0;

tiempo de suministro de alimentos de configuración

int feed1hour = 10;

int feed1minute = 30;

int feed2hour = 17;

int feed2minute = 30;

alimento cantidad de configuración

int feedQty = 1;

Configuración de LED

int LED1 = 0;

int LED2 = 1;

int LED3 = 9;

tiempo del sistema

int tm. Hora = 1;

int tm. Minutos = 1;

int tm. Hora = 1

isr nulo () {}

Si (digitalRead(PinCLK)) //setup para el haga clic en el codificador rotatorio

alto = digitalRead(PinDT);

otra cosa

arriba =! digitalRead(PinDT);

TurnDetected = true;

}

void setup () {}

tiempo de fraguado

Configuración de LED

pinMode (LED1, salida);

pinMode (LED2, salida);

pinMode (LED3, salida);

fijar número la pantalla del LCD de filas y columnas:

LCD.Begin (16, 2);

configuración del codificador rotatorio

pinMode(PinCLK,INPUT);

pinMode(PinDT,INPUT);

pinMode(PinSW,INPUT);

pinMode (buttonPin, entrada);

attachInterrupt (0, isr, caer); interrupción 0 está siempre conectado al pin 2 de Arduino UNO

lcd.setCursor(17,0);

LCD.Print ("Tom y de Dan perro"); pantalla de inicio

lcd.setCursor(17,1);

LCD.Print "(dispensador de la comida del);

para (int positionCounter = 0; positionCounter < 17; positionCounter ++) {}

izquierda de una posición de desplazamiento:

lcd.scrollDisplayLeft();

espera un poco:

Delay(150);

}

Delay(3000);

para (int positionCounter = 0; positionCounter < 17; positionCounter ++) {}

izquierda de una posición de desplazamiento:

lcd.scrollDisplayRight();

espera un poco:

Delay(150);

}

lcd.setCursor(17,0);

LCD.Print("");

lcd.setCursor(17,1);

LCD.Print("");

}

void loop () {//Main bucle de programa - mayoría de las cosas aquí!

estática virtualPosition largo = 0; sin estática no cuenta correctamente!!!!!!

tmElements_t tm; Este sectionm lee el tiempo de la RT y luego lo muestra.

RTC.read(tm);

lcd.setCursor (0, 0);

printDigits (tm. Hora); llamar a función de dígitos que añade los ceros que faltan de impresión

LCD.Print(":");

printDigits (tm. Minuto);

LCD.Print(":");

printDigits (tm. En segundo lugar);

LCD.Print("");

LCD.Print ("tamaño");

LCD.Print(feedQty);

LCD.Print("");

lcd.setCursor(0,1);

LCD.Print("1)");

printDigits(feed1hour);

LCD.Print(":");

printDigits(feed1minute);

LCD.Print "(2)");

printDigits(feed2hour);

LCD.Print(":");

printDigits(feed2minute);

Si (! () digitalRead(PinSW))) {/ / comprobar si el pulsador está presionado

en caso afirmativo entonces entrar en la subrutina programación

LCD.Blink(); Activar el cursor parpadeante:

lcd.setCursor(5,0);

LCD.Print ("juego");

virtualPosition = tm. Hora; necesario o la hora será cero cada vez que cambie el reloj.

{}

lcd.setCursor(0,0); Coloque el cursor en la hora

Delay(500); Retardo necesario o mismo botón saldrá hacer-mientras que como mientras están comprobando otro push botón!

Si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectada

if (arriba)

virtualPosition--;

otra cosa

virtualPosition ++;

TurnDetected = false; no repita IF loop hasta Nueva rotación detectado

}

Aquí puedo cambiar la hora del tiempo-

TM. Hora = virtualPosition;

RTC.write(tm);

lcd.setCursor (0, 0);

printDigits (tm. Hora); a continuación, volver a imprimir la hora en la pantalla LCD

} mientras que ((digitalRead(PinSW))); hacer esto "" bucle mientras no se pulse el botón de PinSW

lcd.noBlink();

Delay(1000);

AJUSTAR LOS MINUTOS

LCD.Blink(); Activar el cursor parpadeante:

virtualPosition = tm. Minutos; necesarios o el minuto será cero cada vez que cambie el reloj.

{}

lcd.setCursor(3,0); Coloque el cursor en el tiempo minutos

Delay(500); Retardo necesario o mismo botón saldrá hacer-mientras que como mientras están comprobando otro push botón!

Si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectada

if (arriba)

virtualPosition--;

otra cosa

virtualPosition ++;

TurnDetected = false; no repita IF loop hasta Nueva rotación detectado

}

Aquí cambio el minuto de tiempo-

TM. Minutos = virtualPosition;

RTC.write(tm);

lcd.setCursor (3, 0);

printDigits (tm. Minuto); luego volver a imprimir el minuto en la pantalla LCD

} mientras que ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

ESTABLECER la cantidad - cantidad de alimento

LCD.Blink(); Activar el cursor parpadeante:

virtualPosition = feedQty; necesario o la cantidad será de cero.

{}

lcd.setCursor(14,0); Coloque el cursor en el QTY

Delay(500); Retardo necesario o mismo botón saldrá hacer-mientras que como mientras están comprobando otro push botón!

Si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectada

if (arriba)

virtualPosition--;

otra cosa

virtualPosition ++;

TurnDetected = false; no repita IF loop hasta Nueva rotación detectado

}

Aquí cambio la cantidad de alimento

feedQty = virtualPosition;

lcd.setCursor (14, 0);

LCD.Print(feedQty);

} mientras que ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

AJUSTAR la hora Feed1

LCD.Blink(); Activar el cursor parpadeante:

virtualPosition = feed1hour; necesario o será cero para comenzar con.

{}

lcd.setCursor(2,1); Coloque el cursor en feed1hour

Delay(500); Retardo necesario o mismo botón saldrá hacer-mientras que como mientras están comprobando otro push botón!

Si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectada

if (arriba)

virtualPosition--;

otra cosa

virtualPosition ++;

TurnDetected = false; no repita IF loop hasta Nueva rotación detectado

}

Aquí cambio la hora feed1

feed1hour = virtualPosition;

lcd.setCursor(2,1);

printDigits(feed1hour);

} mientras que ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

ESTABLECE los minutos Feed1

LCD.Blink(); Activar el cursor parpadeante:

virtualPosition = feed1minute; necesario o será cero para comenzar con.

{}

lcd.setCursor(5,1); Coloque el cursor en feed1minute

Delay(500); Retardo necesario o mismo botón saldrá hacer-mientras que como mientras están comprobando otro push botón!

Si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectada

if (arriba)

virtualPosition--;

otra cosa

virtualPosition ++;

TurnDetected = false; no repita IF loop hasta Nueva rotación detectado

}

Aquí cambio el minuto feed1

feed1minute = virtualPosition;

lcd.setCursor(5,1);

printDigits(feed1minute);

} mientras que ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

AJUSTAR la hora Feed2

LCD.Blink(); Activar el cursor parpadeante:

virtualPosition = feed2hour; necesario o será cero para comenzar con.

{}

lcd.setCursor(10,1); Coloque el cursor en feed1hour

Delay(500); Retardo necesario o mismo botón saldrá hacer-mientras que como mientras están comprobando otro push botón!

Si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectada

if (arriba)

virtualPosition--;

otra cosa

virtualPosition ++;

TurnDetected = false; no repita IF loop hasta Nueva rotación detectado

}

Aquí cambio la hora feed1

feed2hour = virtualPosition;

lcd.setCursor(10,1);

printDigits(feed2hour);

} mientras que ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

ESTABLECE los minutos Feed2

LCD.Blink(); Activar el cursor parpadeante:

virtualPosition = feed2minute; necesario o será cero para comenzar con.

{}

lcd.setCursor(13,1); Coloque el cursor en feed1minute

Delay(500); Retardo necesario o mismo botón saldrá hacer-mientras que como mientras están comprobando otro push botón!

Si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectada

if (arriba)

virtualPosition--;

otra cosa

virtualPosition ++;

TurnDetected = false; no repita IF loop hasta Nueva rotación detectado

}

Aquí cambio el minuto feed1

feed2minute = virtualPosition;

lcd.setCursor(13,1);

printDigits(feed2minute);

} mientras que ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

} / / fin del principal inspector de pulsador de codificador rotatorio de IF

VERIFIQUE QUE EL BOTÓN DE ALIMENTACIÓN MANUAL

buttonState = digitalRead(buttonPin);

Si (buttonState == HIGH) {}

digitalWrite (motorPin1, HIGH);

digitalWrite (motorPin2, LOW);

Delay(5000);

digitalWrite (motorPin1, LOW);

digitalWrite (motorPin2, LOW);

}

COMPRUEBE LA ALIMENTACIÓN Y TIEMPO DE ALIMENTACIÓN SI

Si (tm. Hora == feed1hour & & tm. Minutos == feed1minute & & tm. En segundo lugar == 0 & & feedQty == 1) {/ / si no ' comprobar segundos cero

digitalWrite (motorPin1, HIGH);

digitalWrite (motorPin2, LOW);

Delay(5000);

digitalWrite (motorPin1, LOW);

digitalWrite (motorPin2, LOW);

}

Si (tm. Hora == feed1hour & & tm. Minutos == feed1minute & & tm. En segundo lugar == 0 & & feedQty == 2) {/ / si no ' comprobar segundos cero

digitalWrite (motorPin1, HIGH);

digitalWrite (motorPin2, LOW);

Delay(10000);

digitalWrite (motorPin1, LOW);

digitalWrite (motorPin2, LOW);

}

Si (tm. Hora == feed1hour & & tm. Minutos == feed1minute & & tm. En segundo lugar == 0 & & feedQty == 3) {/ / si no ' comprobar segundos cero

digitalWrite (motorPin1, HIGH);

digitalWrite (motorPin2, LOW);

Delay(15000);

digitalWrite (motorPin1, LOW);

digitalWrite (motorPin2, LOW);

}

Si (tm. Hora == feed2hour & & tm. Minutos == feed2minute & & tm. En segundo lugar == 0 & & feedQty == 1) {}

digitalWrite (motorPin1, HIGH);

digitalWrite (motorPin2, LOW);

Delay(27500);

digitalWrite (motorPin1, LOW);

digitalWrite (motorPin2, LOW);

}

Si (tm. Hora == feed2hour & & tm. Minutos == feed2minute & & tm. En segundo lugar == 0 & & feedQty == 2) {}

digitalWrite (motorPin1, HIGH);

digitalWrite (motorPin2, LOW);

Delay(77000);

digitalWrite (motorPin1, LOW);

digitalWrite (motorPin2, LOW);

}

Si (tm. Hora == feed2hour & & tm. Minutos == feed2minute & & tm. En segundo lugar == 0 & & feedQty == 3) {}

digitalWrite (motorPin1, HIGH);

digitalWrite (motorPin2, LOW);

Delay(141000);

digitalWrite (motorPin1, LOW);

digitalWrite (motorPin2, LOW);

}

Configuración de LED

Si (feedQty == 1) {}

digitalWrite (LED 1, elevado);

digitalWrite (LED2, LOW);

digitalWrite (LED 3, bajo);

}

Si (feedQty == 2) {}

digitalWrite (LED 1, bajo);

digitalWrite (LED2, alto);

digitalWrite (LED 3, bajo);

}

Si (feedQty == 3) {}

digitalWrite (LED 1, bajo);

digitalWrite (LED2, LOW);

digitalWrite (LED 3, alto);

}

} / / Fin de bucle principal

void printDigits (int dígitos) {/ / función de utilidad para la visualización del reloj digital: impresiones principales 0

if(digits < 10)

LCD.Print('0');

LCD.Print(digits);

}

void feed() {}

lcd.setCursor(17,0);

LCD.Print ("Extra alimento!");

para (int positionCounter = 0; positionCounter < 16; positionCounter ++) {}

izquierda de una posición de desplazamiento:

lcd.scrollDisplayLeft();

espera un poco:

Delay(150);

}

}

Artículos Relacionados

LEGO MINDSTORMS para mascotas alimentación versión 2.0

LEGO MINDSTORMS para mascotas alimentación versión 2.0

Presentamos el nuevo LEGO MINDSTORMS Pet Feeder versión 2.0! Esta creación es una mejora a su predecesor. Que el mismo dispositivo que conoce y ama, pero ahora es mejor entonces siempre! ¿Qué es nuevo le preguntan? Vamos a echar un vistazo!Novedades:
Guía de alimentos para perros natural (BARF)

Guía de alimentos para perros natural (BARF)

volver a lo básico.Como ustedes probablemente ya saben, los perros son los descendientes domesticados de lobos. (Algunos dicen que hay algunos coyote y algunos otros canidaes allí también, pero vamos a no bajar de ese agujero de conejo de una convers
Dispensador automático de alimentos y agua para mascotas controlado por SMS

Dispensador automático de alimentos y agua para mascotas controlado por SMS

Lo siento por mi inglés. He decidido realizar este proyecto por dos razones: participar en el concurso de innovación animal y para mi gato. Si te gusta este proyecto por favor voten por él.Es un dispensador de comida y agua que se activa mediante el
Feedster mascotas - dividir automáticamente alimento para 2 mascotas en cuencos separados

Feedster mascotas - dividir automáticamente alimento para 2 mascotas en cuencos separados

La necesidad es la madre de la invención. Sin este proyecto, mi gatita coma toda la comida. Gato del muchacho no estaba contento por lo que me ocurrió con esta solución.Si tiene una mascota Feedster y desea dividir la comida bastante uniformemente en
Dispensador de alimento de peces con control remoto

Dispensador de alimento de peces con control remoto

Este instructable fue creado en cumplimiento de la exigencia de proyecto de la Makecourse de la Universidad de South Florida (www.makecourse.com)Esta fue mi introducción en utilizando el microcontrolador arduino y escribir código. Admito que hay much
Evacuación de emergencia para mascotas Pack

Evacuación de emergencia para mascotas Pack

A pesar de la foto de la portada divertida, se trata de un grave Ible. ¿Me he dado cuenta que The Walking Dead raramente muestra animales domésticos, probablemente porque las respuestas a las preguntas "Dónde dirigiría? Lo que les sucedió?"es má
Peces alimentos alimentador automático utilizando Arduino Uno

Peces alimentos alimentador automático utilizando Arduino Uno

En este Instructables voy a mostrarle cómo construir un Alimentador automático de alimentación de peces. Para que no tenga que recordar alimentar a tus peces diariamente porque su Arduino lo hará por usted. También puede configurar contadores en la c
Dispensador de bolsa para residuos de perro bricolaje 15 minutos

Dispensador de bolsa para residuos de perro bricolaje 15 minutos

Espero que disfruten este Instructable. Si encuentra digno, por favor voten por mí.Vamos a cortar la mierda. Literalmente. A veces resulta tentador dejar la caca de su perro donde cae, especialmente si es tu patio o en la naturaleza. Puede parecer ba
Dulces de alijo, juguete para mascotas pequeñas.

Dulces de alijo, juguete para mascotas pequeñas.

Bien, esto es fácil, rápido y barato juguete para mascotas pequeñas.Todo lo que necesitas es toiletpaper roll, alimento de animales domésticos o caramelo y 5seconds de su tiempo.Doble primer extremo del rollo y poner los alimentos de mascotas en. Lue
$0 caja de gato incógnito y almacenamiento para mascotas

$0 caja de gato incógnito y almacenamiento para mascotas

CraigsList es este mágico lugar donde si sabes lo que estás buscando y es paciente, puede encontrar cualquier cosa---gratis.hace 2 1/2 años que estábamos buscando una soluion a nuestros gatos seguimiento basura por todo el lugar. Mi esposo vino a tra
Adaptador para batería de Arduino taladro

Adaptador para batería de Arduino taladro

Este Instructable sirve un par de funciones. Primera y más sirve como una guía aproximada de una batería de litio Dewalt 12 voltios y para convertir con un Arduino y un punto de entrada en el concurso del láser de amplio espectro. En esta compilación
Hacer un Simple recordatorio de alimentación para mascotas con Linkit uno

Hacer un Simple recordatorio de alimentación para mascotas con Linkit uno

¿Se olvida de alimentar a su mascota a veces?Entonces, este Instructable es para usted.Olvidar a su mascota la alimentación es realmente un mal hábito! Porque son también como nosotros y necesitan alimentos para vivir. Para hacer que su mascota feliz
Guante cepillo para mascotas: Una delicia chupo perfecto!

Guante cepillo para mascotas: Una delicia chupo perfecto!

Hola a todos. Es tiempo de primavera otra vez! No más miserables, encerrados en los días de casa, excesivamente fríos. Sol, tiempo es grande y hay pelo de gato por todas partes! Mis dos gatos, Jeckyll y Clyde, vertimiento sus abrigos de invierno y mu
Controlador de temporizador ajustable de Arduino con relé

Controlador de temporizador ajustable de Arduino con relé

este es mi primer post aquí, así que espero todo bien!Tengo un calentador de porche de milivoltios (pila de termopar) de gas que tiene un control manual.  Me cansé de que hacia arriba y hacia abajo encender y apagar, así que decidí hacer un proyecto