Dog Food Feeder (5 / 8 paso)

Paso 5: Código de Arduino

A continuación es el código de arduino que hemos utilizado.

Mascota de Audiono taladro automático

alimentador del autor Roger Donoghue 28/03/2015 todos los derechos reservados. Sólo para uso personal. No para uso comercial o de reventa. Le permite ajustar tiempos de alimentación 2 y la cantidad como un múltiplo de la cantidad de la alimentación por defecto. Utiliza un reloj de tiempo real DS1307 para mantener el tiempo, con una batería recargable construido adentro (puede utilizar el código de ejemplo RTC de arduino en el IDE para programar el reloj, o utilice el codificador rotatorio como se pretendía)

* / / / incluye el código de biblioteca: #include

#include / / necesario para el RTC biblioteca #include #include / / reloj de tiempo Real biblioteca #include #include #include #include

inicializar la biblioteca con el número del interfaz pernos dor el lcd LCD LiquidCrystal (12, 11, 5, 8, 7, 6);

#define PIN_SERVO 9

Servo feedServo; Servo stirServo; int pos = 0; TurnDetected boolean volátil; volátil hasta booleano; const int PinCLK = 2; Utilizado para la generación de interrupciones con CLK señal const int PinDT = 3; Utilizado para la lectura de DT señal const int PinSW = 4; Utiliza para el interruptor de botón de la codificador rotatorio const int buttonPin = A3; el número del botón pin para alimentación manual 13 int buttonState = 0; variable para leer el manual de alimentación botón estado int feed1hour = 07; variables para la alimentación de tiempos y cantidad int feed1minute = 00; int feed2hour = 17; int feed2minute = 30; int feedQty = 4; velocidad de avance de int = 800; un tipo de pwm los disparadores hacia adelante en el servo 75 int feedReversal = 80; un tipo de pwm que desencadena la inversa en el servo / / jugar con estos números para el servo. El mío es un servo digital Futaba / / que quitó el bote de y el estirón de plástico, para que sea continua.

anular (isr) {/ / rutina de servicio de interrupción se ejecuta cuando se detecta un alto a la transición de bajo a CLK si (digitalRead(PinCLK)) / / Esto guarda un ojo hacia fuera para el codificador rotatorio se convirtió independientemente de donde el programa es hasta = digitalRead(PinDT); / / actualmente exectuting - en otras palabras, durante el bucle principal este ISR estará siempre activada más arriba =! digitalRead(PinDT); TurnDetected = true; }

void setup () {/ / configurar número la pantalla del LCD de filas y columnas: lcd.begin (16, 2); / / configurar el 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 ("Tia & Jordan"); Un poco de diversión sonrisa emoticon

lcd.setCursor(17,1); LCD.Print "(Dispencer del alimento del); para (int positionCounter = 0; positionCounter < 17; positionCounter ++) {/ / desplazamiento de una posición de izquierda: lcd.scrollDisplayLeft();

espera un poco: delay(150); } delay(3000); para (int positionCounter = 0; positionCounter < 17; positionCounter ++) {/ / desplazamiento de una posición de izquierda: lcd.scrollDisplayRight();

espera un poco: delay(150);

} / / fin de la diversión 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 RTC, pone en tmElements tm (agradable trabajar con), y luego muestra. RTC.read(tm); lcd.setCursor (0, 0); printDigits (tm. Hora); llamada a función de dígitos que añade los ceros que pueden faltar lcd.print(":"); de impresión printDigits (tm. Minuto); LCD.Print(":"); printDigits (tm. En segundo lugar); LCD.Print(""); LCD.Print ("cantidad"); 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);

PRINCIPAL BREAKOUT "IF" SECION QUE CONTROLA EL BOTÓN Y ENTRA EN PROGRAMACIÓN SI SE EMPUJA

Si (! () digitalRead(PinSW))) {/ / comprobar si el pulsador está presionado / / en caso afirmativo entonces entrar en la programación lcd.blink() de subrutina; / / enciende 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. hacer {lcd.setCursor(0,0); / / poner cursor en hora delay(500); / retraso saldrá del botón necesario o mismo hacer -mientras que como mientras están comprobando otro push botón! si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectado if (arriba) virtualPosition--; else virtualPosition ++; TurnDetected = false; no repita IF loop hasta Nueva rotación detectado} / / aquí cambio la hora del tiempo - tm. Hora = virtualPosition; RTC.write(tm); lcd.setCursor (0, 0); printDigits (tm. Hora); luego volver a imprimir la hora en la pantalla} 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. hacer {lcd.setCursor(3,0); / / poner cursor en delay(500) minutos de tiempo; / / retraso saldrá del botón necesario o mismo hacer-mientras que como mientras están comprobando otro push botón! si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectado if (arriba) virtualPosition--; else virtualPosition ++; TurnDetected = false; no repita IF loop hasta Nueva rotación detectado} / / aquí cambiar 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} 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. hacer {lcd.setCursor(14,0); / / Coloque el cursor en el QTY delay(500); / retraso saldrá del botón necesario o mismo hacer -mientras que como mientras están comprobando otro push botón! si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectado if (arriba) virtualPosition--; else virtualPosition ++; TurnDetected = false; no repita IF loop hasta Nueva rotación detectado} / / aquí cambiar el feedQty de alimentación qty = 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. hacer {lcd.setCursor(2,1); / / poner cursor en feed1hour delay(500); / retraso saldrá del botón necesario o mismo hacer -mientras que como mientras están comprobando otro push botón! si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectado if (arriba) virtualPosition--; else virtualPosition ++; TurnDetected = false; no repita IF loop hasta Nueva rotación detectado} / / aquí cambiar el feed1 hora 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. hacer {lcd.setCursor(5,1); / / poner cursor en feed1minute delay(500); / retraso saldrá del botón necesario o mismo hacer -mientras que como mientras están comprobando otro push botón! si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectado if (arriba) virtualPosition--; else virtualPosition ++; TurnDetected = false; no repita IF loop hasta Nueva rotación detectado} / / aquí cambiar el feed1minute minuto feed1 = 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. hacer {lcd.setCursor(10,1); / / poner cursor en feed1hour delay(500); / retraso saldrá del botón necesario o mismo hacer -mientras que como mientras están comprobando otro push botón! si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectado if (arriba) virtualPosition--; else virtualPosition ++; TurnDetected = false; no repita IF loop hasta Nueva rotación detectado} / / aquí cambiar el feed1 hora 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. hacer {lcd.setCursor(13,1); / / poner cursor en feed1minute delay(500); / retraso saldrá del botón necesario o mismo hacer -mientras que como mientras están comprobando otro push botón! si (TurnDetected) {/ / realizar esto sólo si la rotación fue detectado if (arriba) virtualPosition--; else virtualPosition ++; TurnDetected = false; no repita IF loop hasta Nueva rotación detectado} / / aquí cambiar el feed2minute minuto feed1 = 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

PARA el MANUAL de alimentación Botón CHECK buttonState = digitalRead(buttonPin); Si (buttonState == HIGH) {feed();} / / Comprobar alimentación de tiempo y de la alimentación si emparejado

Si (tm. Hora == feed1hour & & tm. Minutos == feed1minute & & tm. En segundo lugar == 0) {/ / si no ' comprobar segundos cero feed(); / / entonces te alimente continuamente durante 1 minuto!} si (tm. Hora == feed2hour & & tm. Minutos == feed2minute & & tm. En segundo lugar == 0) {feed();}

} / / Fin de bucle principal

void printDigits (int dígitos) {/ / función de utilidad para la visualización del reloj digital: impresiones lleva 0 si (dígitos < 10) lcd.print('0'); lcd.print(digits);}

void feed() {}

lcd.setCursor(17,0); LCD.Print ("Woooorf."); para (int positionCounter = 0; positionCounter < 16; positionCounter ++) {/ / desplazamiento de una posición de izquierda: lcd.scrollDisplayLeft();

espera un poco: delay(150); }

Sección de servo revolver si no necesita un servo de remover simplemente comente todos fo esto hasta que el taladro gire la sección stirServo.attach(10); No sé si necesito uno bien pero que estoy añadiendo ahora como es más fácil si antes lo construyo! para (pos = 0; pos < = 180; pos += 1) {stirServo.write(pos);

Delay(10); } para (pos = 180; pos > = 0; pos-= 1) {stirServo.write(pos);

Delay(10); }

stirServo.detach();

Gire la barrena feedServo.attach(PIN_SERVO); para (int cnt = 0; cnt < feedQty; cnt ++) {feedServo.write(feedRate); //the velocidad de avance es el delay(600) de dirección y tasa de alimentación //this retardo define cuánto tiempo el servo permanecerá desde el anterior comando feedServo.write(feedReversal); //...until este comando establece el servo una nueva tarea! delay(200); feedServo.write(feedRate);

Delay(600); feedServo.write(feedReversal); Si desea aumentar el aumento de la velocidad de avance general al delantero retrasa (1000 en el momento) delay(200); o mejor aún sólo copia y pasado el hacia adelante y hacia atrás debajo del código a repetir} / / que forma la pequeña ondulación inversa siempre está ahí para evitar atascos de feedServo.detach(); para (int positionCounter = 0; positionCounter < 16; positionCounter ++) {/ / desplazamiento de una posición de izquierda: lcd.scrollDisplayRight();

espera un poco: delay(150);

Artículos Relacionados

Carne de res y pollo arroz comida canina

Carne de res y pollo arroz comida canina

Este alimento es apto para el consumo humano. (t tiene que ser mejor entonces Beneful alimentos para perros, miren aquí http://www.abcactionnews.com/news/national/lawsuit-purina-beneful-dog-food-may-be-killing-dogs) Quien sabe en una situación de eme
PupCakes!

PupCakes!

Bien, esta de uno de mis perras.  Bueno, mis bebés.  Son dos adorables chicas de Boston Terrier.  Dos de los tres amores de mi vida.  Me gusta tratarlos de vez en cuando y me imaginé que yo podría así llegar a algo para ellos, mientras estoy en mi ti
Dog feeding aid

Dog feeding aid

Tener una discapacidad física hace que las cosas cada día un verdadero desafío. Hemos creado un producto que hace más fácil para el dueño a su perro de asistencia. El propietario no era capaz de alimentar a su perro por él mismo.El perro tiene que ti
DiY Anti Mess Elevated Dog Feeder

DiY Anti Mess Elevated Dog Feeder

[youtube]lqm9_wUN6dU[/youtube]
Postre "Finger Food"

Postre "Finger Food"

bien, ya era hora de la fiesta de Navidad en la iglesia, y la esposa del pastor dijo que todos debemos aportar "finger food". Ser uno para el seguimiento de instrucciones, es lo que hizo.  Uno que es muy curioso, y va a una iglesia llena de gent
Chili Dog Pizza

Chili Dog Pizza

esto fue realmente idea de mi novio, pero él no cocina y no en Instructables. Este fue mi favorito de todos de sus ideas, así que decidí hacerlo. Básicamente, es un perro de queso de Chile, pero en forma de pizza!La base es el Chile que mi papá hizo,
The Dog Mansion - or - Knock-Down Dog House

The Dog Mansion - or - Knock-Down Dog House

When I rescued my dog, Mac (5-year old Belgian Malinois/German Shepard mix), I didn't really have a proper "dog house" for him.  Desde el tiempo en aquel momento era suave, tenía un criadero de plástico fuera para él, que parecía funcionar bien
Cómo hacer un USB Hot Dog

Cómo hacer un USB Hot Dog

este instructable le mostrará cómo hacer un Hot Dog USB. Materiales:Arcilla rojaArcilla marrónArcilla amarillaArcilla verde luzArcilla verde oscuroUSBPaso 1: Hacer el rollo Algunos arcilla marrón o bronceado y forma del ladrillo. Que aplanar la mitad
Entender el Meme "Doge"

Entender el Meme "Doge"

"Doge" es argot de la web para "perro." El meme de doge comienza con una foto de un Shiba Inu. La raza se llama "shibe" en argot en línea.Paso 1: fuenteUsted adquiere una imagen de un shibe. Cualquier foto de un shibe hará. L
Duct Tape Dog Panniers

Duct Tape Dog Panniers

Tired of carrying around baggies for poop, baggies of poop, leashes or food? Hacer algunos de estos elegantes conducto cinta perro alforjas y tienen cuatro patas amigo llevar sus propias cosas. Y si tu realmente perezoso, usted puede lanzar un montón
¿Cuál es el costo para cocinar un Hot Dog?

¿Cuál es el costo para cocinar un Hot Dog?

Recientemente, había cavado mi "Presto perrito caliente" fuera de su lugar de descanso profundo en un armario de cocina y comenzó a pensar. (siempre algo peligroso!) El perrito caliente Presto es probablemente el más simple aparato de cocina jam
ASADOR Hot Dog/cecina

ASADOR Hot Dog/cecina

se trata de cómo hacer un perro caliente hot dog barbacoa desigual. En primer lugar, me gustaría señalar que esto fue inspirado por usuario TimAndersons Hot Dog instructable desigual pero con algunas modificaciones. Se trata de una manera simple de h
Pruebas ópticos Feeds en sistemas inalámbricos

Pruebas ópticos Feeds en sistemas inalámbricos

Muchos proveedores de equipo de telefonía móvil están haciendo una transición de cables coaxiales de baja pérdida ópticos feeds en unidades de Radio remota (RRU) y sistemas distribuidos de antena (DAS). El cambio es debido a que el cableado de fibra
Piratería de Microsoft Office Excel para leer noticias stock en vivo RSS feeds

Piratería de Microsoft Office Excel para leer noticias stock en vivo RSS feeds

usted puede conseguir fácilmente a Excel como un vivo lector de noticias RSS stock con un complemento gratuito. Lo genial de esto, en lugar de usar un lector de noticias habitual, es que usted puede tenerlo a actualizar las noticias según el símbolo