Puerta de Coop de pollo automática (10 / 10 paso)

Paso 10: El código de Arduino para la puerta de Coop de pollo automática

Nota: para una mejor visión de las imágenes, partes, diagramas y código, por favor visite:
http://davenaves.com/blog/interests-Projects/chickens/Chicken-Coop/Arduino-Chicken-Door/

Información privilegiada
Para que guardar algún tiempo, voy a dejar el truco que finalmente consiguió esta puerta para trabajar con los niveles de luz, contra rebotes los interruptores y * pollos *. (como verás en el código) Compruebe los niveles de luz cada 10 minutos para evitar las lecturas que despide hacia adelante y hacia atrás entre amanecer/anochecer de oscuro/Crepúsculo/luz durante esos minutos. Entonces, cuando "dark" se ha alcanzado (para mí escogí > = 0 & & < = 3 en base cuando mis gallinas realmente pasaban y me alojé en el tonel) habilitar dir motor abajo > debounce los interruptores > detener. Luego hacer lo contrario para mañana. Estoy seguro que allí son diferentes, tal vez más eficientes métodos, pero este código ha estado funcionando perfectamente durante un tiempo ahora y me siento suficiente confianza para salir de noche sin preocuparse por los depredadores. Aunque de alguna manera todavía encontrar una razón para comprobar la ChickenCam de vez en cuando. (actualmente en espera de mi nuevo servomotores y webcam de visión nocturna para llegar en el correo)

 // libraries <p>// libraries<br> </p><p>#include < SimpleTimer.h > // load the SimpleTimer library to make timers, instead of delays & too many millis statements<br> #include < OneWire.h > // load the onewire library</p>/* (before running the sketch, remove spaces before and after the above ">" "<" characters - the instructables editor wouldn't publish the includes unless i added those spaces) */ /* * Copyright 2013, David Naves (http://daveworks.net, <a rel="nofollow"> http://davenaves.com) </a> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ /* * I'm hoping that if you use/modify this code, you will share your * coop project with me and the world (pictures, whatever) * I'm big on sharing. * Cheers, * //D */ //pins const int photocellPin = A0; // photocell connected to analog 0 const int enableCoopDoorMotorB = 7; // enable motor b - pin 7 const int directionCloseCoopDoorMotorB = 8; // direction close motor b - pin 8 const int directionOpenCoopDoorMotorB = 9; // direction open motor b - pin 9 const int bottomSwitchPin = 26; // bottom switch is connected to pin 26 const int topSwitchPin = 27; // top switch is connected to pin 27 // vars // photocell int photocellReading; // analog reading of the photocel int photocellReadingLevel; // photocel reading levels (dark, twilight, light) // reed switches top and bottom of coop door // top switch int topSwitchPinVal; // top switch var for reading the pin status int topSwitchPinVal2; // top switch var for reading the pin delay/debounce status int topSwitchState; // top switch var for to hold the switch state // bottom switch int bottomSwitchPinVal; // bottom switch var for reading the pin status int bottomSwitchPinVal2; // bottom switch var for reading the pin delay/debounce status int bottomSwitchState; // bottom switch var for to hold the switch state // just need 1 SimpleTimer object SimpleTimer coopTimer; // ************************************** the setup ************************************** void setup(void) { Serial.begin(9600); // welcome message Serial.println(" Checking doCoopDoor: every 10 minutes for light levels to open or close door"); Serial.println(); // coop door // coop door motor pinMode (enableCoopDoorMotorB, OUTPUT); // enable motor pin = output pinMode (directionCloseCoopDoorMotorB, OUTPUT); // motor close direction pin = output pinMode (directionOpenCoopDoorMotorB, OUTPUT); // motor open direction pin = output // coop door switches // bottom switch pinMode(bottomSwitchPin, INPUT); // set bottom switch pin as input digitalWrite(bottomSwitchPin, HIGH); // activate bottom switch resistor // top switch pinMode(topSwitchPin, INPUT); // set top switch pin as input digitalWrite(topSwitchPin, HIGH); // activate top switch resistor // timed actions setup coopTimer.setInterval(600000, readPhotoCell); // read the photocell every 10 minutes } // functions // operate the coop door // photocel to read levels of exterior light void readPhotoCell() { // function to be called repeatedly - per cooptimer set in setup photocellReading = analogRead(photocellPin); Serial.print(" Photocel Analog Reading = "); Serial.println(photocellReading); // set photocel threshholds if (photocellReading >= 0 && photocellReading <= 3) { photocellReadingLevel = '1'; Serial.print(" Photocel Reading Level:"); Serial.println(" - Dark"); } else if (photocellReading >= 4 && photocellReading <= 120){ photocellReadingLevel = '2'; Serial.print(" Photocel Reading Level:"); Serial.println(" - Twilight"); } else if (photocellReading >= 125 ) { photocellReadingLevel = '3'; Serial.print(" Photocel Reading Level:"); Serial.println(" - Light"); } } //debounce bottom reed switch void debounceBottomReedSwitch() { //debounce bottom reed switch bottomSwitchPinVal = digitalRead(bottomSwitchPin); // read input value and store it in val delay(10); bottomSwitchPinVal2 = digitalRead(bottomSwitchPin); // read input value again to check or bounce if (bottomSwitchPinVal == bottomSwitchPinVal2) { // make sure we got 2 consistant readings! if (bottomSwitchPinVal != bottomSwitchState) { // the switch state has changed! bottomSwitchState = bottomSwitchPinVal; } Serial.print (" Bottom Switch Value: "); // display "Bottom Switch Value:" Serial.println(digitalRead(bottomSwitchPin)); // display current value of bottom switch; } } // debounce top reed switch void debounceTopReedSwitch() { topSwitchPinVal = digitalRead(topSwitchPin); // read input value and store it in val delay(10); topSwitchPinVal2 = digitalRead(topSwitchPin); // read input value again to check or bounce if (topSwitchPinVal == topSwitchPinVal2) { // make sure we got 2 consistant readings! if (topSwitchPinVal != topSwitchState) { // the button state has changed! topSwitchState = topSwitchPinVal; } Serial.print (" Top Switch Value: "); // display "Bottom Switch Value:" Serial.println(digitalRead(topSwitchPin)); // display current value of bottom switch; } } // stop the coop door motor void stopCoopDoorMotorB(){ digitalWrite (directionCloseCoopDoorMotorB, LOW); // turn off motor close direction digitalWrite (directionOpenCoopDoorMotorB, LOW); // turn on motor open direction analogWrite (enableCoopDoorMotorB, 0); // enable motor, 0 speed } // close the coop door motor (motor dir close = clockwise) void closeCoopDoorMotorB() { digitalWrite (directionCloseCoopDoorMotorB, HIGH); // turn on motor close direction digitalWrite (directionOpenCoopDoorMotorB, LOW); // turn off motor open direction analogWrite (enableCoopDoorMotorB, 255); // enable motor, full speed if (bottomSwitchPinVal == 0) { // if bottom reed switch circuit is closed stopCoopDoorMotorB(); Serial.print(" Coop Door Closed - no danger"); } } // open the coop door (motor dir open = counter-clockwise) void openCoopDoorMotorB() { digitalWrite(directionCloseCoopDoorMotorB, LOW); // turn off motor close direction digitalWrite(directionOpenCoopDoorMotorB, HIGH); // turn on motor open direction analogWrite(enableCoopDoorMotorB, 255); // enable motor, full speed if (topSwitchPinVal == 0) { // if top reed switch circuit is closed stopCoopDoorMotorB(); Serial.print(" Coop Door open - danger!"); } } void doCoopDoor(){ if (photocellReadingLevel == '1') { // if it's dark if (photocellReadingLevel != '2') { // if it's not twilight if (photocellReadingLevel != '3') { // if it's not light debounceTopReedSwitch(); // read and debounce the switches debounceBottomReedSwitch(); closeCoopDoorMotorB(); // close the door } } } if (photocellReadingLevel == '3') { // if it's light if (photocellReadingLevel != '2') { // if it's not twilight if (photocellReadingLevel != '1') { // if it's not dark debounceTopReedSwitch(); // read and debounce the switches debounceBottomReedSwitch(); openCoopDoorMotorB(); // Open the door } } } } // ************************************** the loop ************************************** void loop() { // polling occurs coopTimer.run(); doCoopDoor(); } 

Lecciones aprendidas

Lo que he aprendido sobre la puerta, Arduino, luz y construcción:

  • Mejor comprobar los niveles de luz cada 10 minutos para evitar las lecturas que despide hacia adelante y hacia atrás entre oscuro/Crepúsculo/luz durante los amanecer/anochecer minutos
  • Prueba de la puerta con sus pollos para ver si alguno de ellos como colgar fuera de horario
  • Los valores reales de la luz exterior es muy importante (muchas variables involucradas: luz de la casa de su vecino, nubes, interno y externo coop luces etc..)
  • Debouncing de los conmutadores en el código de Arduino es importante (puerta saltar alrededor y mientras lecturas electrónicas varían grandemente por el milisegundo)
  • Llegar para ayuda en los Foros de Arduino antes de sacar el pelo. (estaría bien, hacer su tarea y hacer preguntas muy específicas)
  • Se ha cambiado de micro-switches por reed switches (imanes) porque no quería que la mecánica de los micro interruptores para quebrar con el tiempo

Lo que he aprendido acerca de los pollos:

  • Mantener una luz dentro de la cooperativa puede mantener pollos fuera más largo (creo que b y c del ambiente luz brilla fuera) y que es importante a la hora de automatizar esta puerta, por lo que no obtiene accidentalmente bloqueados.
  • Puede saltar y volar (alto y lejos)
  • Aman a gallinero en seguridad por la noche, pero quieren nada más que al salir tan pronto como es luz

Artículos Relacionados

Puerta de Coop de pollo automática simple

Puerta de Coop de pollo automática simple

En este Instructable te está presentando como un abridor de puerta de coop de pollo automática fácil de hacer.Para quien mantiene pollos, la siempre presente amenaza de animales depredadores como zorros es siempre una preocupación. Recientemente tuvi
Auto puerta para alimentador de pollo

Auto puerta para alimentador de pollo

Cualquier persona que tenga pollos probablemente ha experimentado de ratas o ratones en algún momento. Les encanta meterse en la comida de pollos en la noche y hacer un lío. La mayoría de las ratas han capturado en las trampas y hayan sido, pero sé q
Controlador de Coop de pollo Arduino

Controlador de Coop de pollo Arduino

En los últimos años que mi familia ha estado guardando las gallinas de batería - son cerca de 18 meses de edad y han vivido toda su vida dentro de un entorno enjaulado. Tanto como amamos los paquetes pequeños de alegrías y de huevos puede ser un drud
Abrelatas de la puerta automática pollo con PICAXE

Abrelatas de la puerta automática pollo con PICAXE

Utilizando el excelente PICAXE 08M 2 chip armé un abrelatas de la puerta automática coop (llamado Cluck-O-Matic) así que no tengo que levantarme tan temprano en la mañana para los pollos de la coop. Este pollo barato abrelatas de la puerta sólo se ab
Puerta de garaje automática (puerto n autom tico)

Puerta de garaje automática (puerto n autom tico)

Nota: Las fotos son 3D, en formato anaglifo y en par cruzado.Hace unos años hice este engendro, y puedo decir es una de las cosas mejor resultado me han dado. La automatización del portón del garaje es una excepción a la regla dice la comodidad se co
Arduino domótica, puertas automáticas d.

Arduino domótica, puertas automáticas d.

Tuve una idea para hacer un abridor de puerta simple y fácil de usar con un motor a un par de años atrás. En ese momento no tengo el conocimiento para hacer un abrelatas de la puerta. Esta vacaciones de invierno me sentí optimista y le dio un tiro. E
Chook (gallinero) con puerta automática

Chook (gallinero) con puerta automática

Un par de años hemos construido un gallinero.No tan diferente se podría decir, pero este viene con una contador de tiempo controlados puerta automática accionada por el sol.El prototipo utiliza un taladro de batería reciclada, el cargador y las bater
Actualización de software de v2 de controlador de Coop de pollo

Actualización de software de v2 de controlador de Coop de pollo

Fotos del anterior controlador de Coop de pollo Arduino y su primo nuevo (arriba).En los últimos 18 meses he estado usando mi Arduino basada en controlador de Coop de pollo con gran éxito con algunas personas por ahí listo para construir sus propias
Eclosión huevos - cómo empollar huevos de gallina con una incubadora automática - procedimientos de incubación

Eclosión huevos - cómo empollar huevos de gallina con una incubadora automática - procedimientos de incubación

Pollo huevos para incubar es sencillo con algunos conocimientos!Antes de la incubación de huevos:¿Qué es la incubación Natural de pollos?Recolección de huevos de gallina en gallina coop o gallinero. Comprar un candler del huevo y huevos de Candling a
LUZ nocturna automática de energía SOLAR

LUZ nocturna automática de energía SOLAR

Hola amigosGracias por su apoyo para mi proyecto anteriorHoy que voy a hacer la vida hack "instructable" puede ahorrar tiempo y dinero. Este es el tutorial de "cómo hacer una luz nocturna automática de energía solar". Este dispositivo
Cómo hacer una K'NEX pistola semi-automática de goma

Cómo hacer una K'NEX pistola semi-automática de goma

En este tutorial usted aprenderá cómo hacer una banda de goma semi automática pistola de K'NEX.Dependiendo de las bandas de goma usa, la pistola puede contener hasta 8 rondas de munición. Se dispara un tiro para cada tirón del disparador.En un anteri
Interruptor del obturador de cámara automática

Interruptor del obturador de cámara automática

La mayor parte de casas encantadas y los paseos del parque de atracciones es llegar a ver fotos de tus amigos gritando de terror. Para obtener este tipo de fotografías requiere sincronización perfecta. La mejor manera de conseguirlo es con un circuit
Luz gabinete noche detección automática

Luz gabinete noche detección automática

Hola,InstructableRs!Estoy seguro que hay algunos lugares alrededor de su casa que no están bien iluminadas, así que cuando usted está buscando algo en allí tienes que mantener una luz de la antorcha en su boca mientras que cava dentro. Si no tienes u
Slaveflash de cámara automática con pre-flash

Slaveflash de cámara automática con pre-flash

todo el mundo que tiene una pequeña cámara digital sabe el problema de la utilización de esclavos debido a la pre-flash que la cámara se utiliza para ajustar la exposición: el predestello provoca el flash esclavo que así se dispara antes de que el ob