Balido de oveja con Attiny85

AttachmentSize
Image icon oveja1.jpg267.34 KB
File oveja.c2.23 KB
Image icon at85-1.jpg523.09 KB
Image icon at85-2.jpg250.27 KB
Image icon at85-3.jpg946.4 KB
Electrónica: 

Esta semana llega el día: mi cuñado tomará de su propia medicina.

Mi cuñado es de los que cuando se levantan todo el mundo tiene que estar levantado. Yo suelo madrugar, pero hay fines de semana que te apetece levantarte a las 9h

Bueno, uno de esos días en que quería levantarme tarde sufrí a mi cuñado... y le dije que un día lo pagaría. Ese día está cerca, muy cerca: este domingo

Para ello nada mejor que una pequeña broma electrónica: utilizando un attiny85 disparar uno de esos circuitos con soniditos a horas intempestivas (llámese sobre las 2h).

En principio el proyecto incluía poner mi voz en el chip, pero ciertamente llevo unos años sin tiempo ninguno y he tenido que recurrir a un circuito con los sonidos... Bueno, esta parte se queda en el TODO

Lo interensante del proyecto es que pongo el chip en modo sleep, y si a eso añadimos que deshabilitamos alguna que otra cosa innecesaria pasamos a consumir uA. Lo que nos da un tiempo más que suficiente para que dure la broma con una pila de botón.

Aquí utilizo el watchdog para ir despertando al Attiny85 a intervalos regulares (cosa que no había hecho hasta ahora en modo sleep).

Tengo dos prototipos que voy a utilizar:

  • uno con pilas AA (la broma puede durar años...)
  • otro con una pila de botón CR2032

¿Por qué utilizar el modo sleep? Principalmente por la pila de botón. Una CR2032 tiene una capacidad típica de unos 200mAh y si nuestro Attiny85 consume unos 2mA (a una frecuencia de 1Mhz, que la que estamos utlizando nosotros) solo por él mismo se comería la bateria en unas 100h (que vienen a ser unos 4 días)... nada, una miseria (no he considerado el carrillón porque solo consume durante unos 5sg, y estimo el consumo en 15mA -no lo medí, mea culpa). Por tanto está claro que tenemos que dormir mientras no hacemos nada.

El Attiny85 puede llegar a valores muy bajos de consumo en este modo (cerca de 1uA) pero yo no lo he desconectado absolutamente todo cuando duerme, por tanto podría estar hablando de unos 20uA. Esto ya es otra cosa: ¡¡estamos hablando de unas 10.000h de funcionamiento con una pila de botón. Más de un año funcionando!! En realidad el cálculo no es así puesto que nos despertamos cada 8sg para hacer unas pequeñás operaciones. Otra vez... no sé los datos exactos pero en el peor de los casos (y exagerando muchísimo) estaríamos hablando de consumir 10mA durante 1ms. Por tanto de media estamos consumiendo unos 30uA (voy a suponer 50uA...) por tanto tenemos una vida útil de la broma de unas 4.000h que son más de 5meses ¿No está mal verdad?

Pues eso no es nada. Para las AA, que son alkalinas tenemos nada más y nada menos que 2x2000mAh ¡¡¡es decir 20 veces más!!!

Aquí la imágenen de los dos prototipos:

Prototipos balido oveja

Aunque hay cosas a mejorar te puede valer como punto de partida para experimentar con el modo sleep y el watchdog.

La verdad creo que no merece la pena poner el esquema porque la conexión depende del circuito carillón que utilices... pero bueno, ahí lo pongo:

Esquema

Vista:

Vista trasera

Para aumentar el volumen, cierro el buzzer con un trozo de celo y el volumen es mucho mayor:

buzzer

P.D. Aunque está escrito con el Atmel Studio lo puedes traducir a Arduino de forma casi inmediata.

Social_buttons: 

Comments

Si puedo, pondré el esquema del circuito... aunque ya aviso que será un dibujo en una pizarra.

He estado revisando el código porque quiero poner unos cálculos de vida de las baterías... ¡¡y creo que el código no es correcto!! Inicialmente, la oveja balaba todos los días a horas intempestivas, pero por consejo de un amigo pasé a hacerlo una vez por semana (tenía razón al decir que todos los días es de ser un poco cabrón), así que cambié el código sin comprobarlo (el código inicial sí pude comprobarlo...).
De todas formas este domingo casi con toda seguridad tendré la respuesta jjj Aún así, cambiaré el código, pero no crea que pueda comprobarlo :-( puesto que no tendré acceso a los dispositivos de la broma...

Me salté dos reglas de programación conscientemente al hacer el programa. Esas dos reglas se resumen en una: ¡¡no seas rata con el tipo/tamaño de las variables!! Pensé que no pasaría nada y que todo estaba controlado... pues no. Al cambiar el periodo de un día a siete es cuando se ha visto que saltarse las normas tiene sus consecuencias. Como se puede ver en el código antes utilizaba variables de 16bits y después cambié a 32bits (por supuesto me olvidé de cambiarlas todas...). Esto hace que el periodo de repetición sea (como efectivamente ya me han confirmado XDDDDD) de 6 días en lugar de cada 7. Un poco de cálculo de colegio: 0xFFFF son 65536 que por 8s = 524288s lo que vienen a ser unos 6 días.
Ahora ya solo falta decirle que tiene unos 4 meses para encontrar el aparatito XDDD