Paso 3: Desarrollo de Software de programación
Pasos para conectarse ATtiny85 Arduino Uno para programación:
- Descargar este archivo: https://github.com/damellis/attiny/zipball/Arduino1
- Descomprime y mete la carpeta "attiny" en la carpeta de "hardware", donde tha Arduino está instalado en su PC. La ruta de acceso tiene este aspecto: documentos > Arduino > hardware > attiny > (otros archivos descargados... etc.)
- Iniciar la aplicación de Arduino y abre el ArduinoISP del archivo > menú de ejemplos
- Cargar el sketch en Arduino Uno.
- Ahora cambiar la configuración siguiente:
- Comprobar la ATtiny85 (8 Mhz) casilla de verificación en la Herramientas > menú tablero.
- Comprobar la: "Arduino como ISP" en la Herramientas > menú programador.
He subido dos versiones del software.
Los primeros trabajos sobre Arduino Uno solo y esto es porque hice el circuito experimental en el Arduino en primer lugar. Ver las fotos para el régimen camponent que hice. Tiene la opción de un montón de pines para las entradas y salidas, por lo que depende de usted cómo los nombre en la codificación. He utilizado el pin A0 para el análogo de la entrada de la LDR y entonces tengo pins 2, 3 y 4 para el resto del circuito.
Puede omitir todos los componentes de conexión para Arduino si prefiere. No es necesario hacerlo, usted puede ir directamente en la programación del ATtiny.
Conocimiento de software básico - leer para ver cómo el SOFTWARE funciona este
El concepto básico del programa es que cada segundo hay una aguja que impulsa la LDR y algunos flujos actuales a través de él y la resistencia variable. Entonces el punto medio entre el LDR y la resistencia variable se mide desde el microcontrolador y la medida (voltaje entre 0 y 5 voltios) es comparada con un valor determinado (2,5 voltios en mi caso) y toma una decisión lógica.
En un caso no pasa nada y la medición continua en y en.
En el otro caso un LED se enciende para mostrar que se ha abierto la puerta. Al mismo tiempo un temporizador empieza a contar segundos y si alcanza el número de segundos (es decir, 10 segundos), luego un pitido hasta que se cierre la puerta. Mientras que los segundos se cuentan hacia abajo y las señales sonoras del sonido, las medidas también se toman para ver cuál es la situación con la puerta. Utilizaremos un Arduinho Uno para programar el ATtiny85.
Para la versión Attiny 02:
/ * Nevera puerta alarma Detector de versión 02 escrita por Pavel Mihaylov y Tatqna Mihaylova 11 de septiembre de 2012 esta versión está preparada para cargarse ATtiny85 microcontrolador usando Arduino Uno como programador. * / int pwr = 1; (Podría ser el pin 3 en Arduino) duro pin 6 ATtiny int alarma = 4; (Podría ser el pin 4 en Arduino) duro pin 3 en ATtiny int puerta = 2; (Podría ser el pin 5 en Arduino) duro pin 7 en ATtiny int LDR = 3; (Podría ser pin A0 en Arduino) duro pin 2 el ATtiny int time_door_open = (3) * 1000; Tiempo que establece la señal sonora de alarma activada después de abre la puerta de la nevera tiempo int = 50; Tiempo retardo int time_tone = 40; Tiempo de retardo para hacer el sonido del tono int time_tone2 = 20; Tiempo de retardo para hacer que el flotador del tono de bip trig = 4.5; Disparador de nivel de flotador LDR LDRval = 0; Inicial el valor de la LDR medición nivel int door_left = 0; Variable para definir si se deja la puerta abierta (1) o cerrado (0) externo volátil sin firmar largo timer0_overflow_count; Esto es necesario para saber cuándo una conversión produce void setup() {pinMode (pwr, salida); pinMode (alarma, salida); pinMode (puerta, salida); pinMode (LDR, entrada);} //Main programa bucle void loop() {if(read_light()) {door_left = 1; timer0_overflow_count = 0; sin firmar largo comienzo = millis(); / / este es el conteo regresivo del tiempo cuando se abre la puerta mientras que ((millis() - Inicio) < = time_door_open) {if(millis() - start < 0) //break mientras bucle si rollover occures {break;} if(read_light() == 0) / / si la puerta está cerrada el programa no hace nada y comienza de nuevo {door_left = 0; break;} delay(time); retardo necesitada} if(door_left == 1) / / si se abre la puerta comienza el pitido sonido! {alarm_sound();} } delay(time); Delay(Time); Delay(Time); } //Function leer el sensor de luz (LDR) y volver a 0 (la puerta está cerrada) o 1 (se abre la puerta) int read_light() {digitalWrite (pwr, HIGH); / / enciende el pin pwr haciendo que la tensión alta para permitir una medición de tomarse delay(10); / / espere algún tiempo LDRval = analogRead(LDR); / leer el sensor valor delay(5); / / esperar algún tiempo digitalWrite (pwr BAJA); desactivar el pin pwr haciendo que el voltaje de baja LDRval = LDRval/1024 * 5; valor del sensor está en el rango 0 a 1023 y necesitamos entre 0 y 5 - este es el cálculo requerido if(LDRval<trig) / / esto compara la lectura para el nivel de activación {digitalWrite (puerta, HIGH); / / encender el LED externo para mostrar que la puerta se abre 1 vuelta; / / abrir la puerta significa} más {digitalWrite (puerta, LOW); / / apagar el exterior LED para mostrar que la puerta está cerrada return 0; / / cerrar puerta de medio}} / * lazo para hacer el sonido hace tres pitidos de 3 primero hace 4 pitidos spunds para siempre si la puerta permanece abierta * / void alarm_sound() {int looop1 = 0; int sound_loop1_skip = 0; while(read_light() & & looop1 < 3 & & sound_loop1_skip == 0) / / esto hace que el bucle un pitido 3 veces un 3-bip {int i; digitalWrite (alarma ALTO); hacer el sonido sonido en delay(time_tone); Delay(time_tone2); digitalWrite (alarma, LOW); hacer la señal parada de sonido delay(time_tone2); digitalWrite (alarma, alta); hacer el sonido sonido en delay(time_tone2); digitalWrite (alarma, LOW); hacer la señal parada de sonido delay(time_tone2); digitalWrite (alarma, alta); hacer el sonido sonido en delay(time_tone2); digitalWrite (alarma, LOW); hacer la señal parada de sonido delay(time_tone2); looop1 ++; read_light(); Delay(290); } //second bucle de sonido ahora comienza looop1 = 0; while(read_light()) {delay(300); int i digitalWrite (alarma alta) //make sonido sonido en delay(time_tone); delay(time_tone); digitalWrite (alarma baja); //make bip stop sonido delay(time_tone2); digitalWrite (alarma alta); //make pitido en delay(time_tone2); digitalWrite (alarma baja); //make bip stop sonido delay(time_tone2); digitalWrite (alarma alta); //make pitido en delay(time_tone2); digitalWrite (alarma BAJA); hacer la señal parada de sonido delay(time_tone2); digitalWrite (alarma, alta); hacer el sonido sonido en delay(time_tone2); digitalWrite (alarma, LOW); hacer la señal parada de sonido delay(time_tone2); Delay(270); } //now por ir sonando si la puerta está aún abierta if(read_light()) {sound_loop1_skip = 1; / / esto hará que el programa salte 3-pitido y continúe la señal sonora 4 sana delay(2000); alarm_sound();} else {sound_loop1_skip = 0;}}
Para la versión ATtiny 03:
Cambios en v02 - básicamente el modo de reposo está activada. Lo ATtiny duerme en cada ciclo durante 4 segundos. Mientras que el consumo de energía el dormir es muy pequeño - en el orden de 7uA.
/ * Nevera puerta alarma Detector de versión 03 escrito por Pavel Mihaylov y Tatqna Mihaylova 09 de octubre de 2012 esta versión está preparado para cargarse ATtiny85 microcontrolador usando Arduino Uno como programador. Para instrucciones completas, consulte: * / / siguiendo líneas son fundamentales para que reposo #include < avr/sleep.h > #include < avr/wdt.h > #ifndef cbi #define cbi (sfr, bits) (_SFR_BYTE(sfr) & = ~_BV(bit)) #endif #ifndef OSE #define OSE (sfr, bits) (_SFR_BYTE(sfr) | = _BV(bit)) #endif volátiles boolean f_wdt = 1; pwr de int = 1; (Podría ser el pin 3 en Arduino) duro pin 6 ATtiny int alarma = 4; (Podría ser el pin 4 en Arduino) duro pin 3 en ATtiny int puerta = 2; (Podría ser el pin 5 en Arduino) duro pin 7 en ATtiny int LDR = 3; (Podría ser pin A0 en Arduino) duro pin 2 el ATtiny int time_door_open = (3) * 300; Tiempo que establece la señal sonora de alarma activada después de abre la puerta de la nevera tiempo int = 50; Tiempo retardo int time_tone = 40; Tiempo de retardo para hacer el sonido del tono int time_tone2 = 20; Tiempo de retardo para hacer que el flotador del tono de bip trig = 3,5; Disparador de nivel de flotador LDR LDRval = 0; Inicial el valor de la LDR medición nivel int door_left = 0; Variable para definir si se deja la puerta abierta (1) o cerrado (0) externo volátil sin firmar largo timer0_overflow_count; Esto es necesario para saber cuándo una conversión produce //Pins configuración void setup() {pinMode (pwr, salida); pinMode (alarma, salida); pinMode (puerta, salida); pinMode (LDR, INPUT); setup_watchdog(8); / / dormir aproximadamente 4 segundos / / 0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms 6 = 1 seg, 7 = 2 seg, 8 = 4 seg, 9 = 8 seg} //Main programa bucle void loop() {/ / si (f_wdt == 1) {/ espere tiempo vigilante / bandera se establece cuando una temporización produce f_wdt = 0; / / restablecer la bandera / / if(read_light()) //In caso la puerta se abre esta declaración sea verdadera {door_left = 1; timer0_overflow_count = 0; sin firmar largo comienzo = millis(); / / este es el conteo regresivo del tiempo cuando se abre la puerta mientras que ((millis() - Inicio) < = time_door_open) {if(millis() - start < 0) break; //break al lazo si rollover occures if(read_light() == 0) / si la puerta se cierra el programa no hace nada y empieza de nuevo {door_left = 0; break;} delay(time); //delay necesitada} si ( door_left == 1) alarm_sound(); Si se abre la puerta comienza el pitido sonido! } //Now poner el sistema a dormir system_sleep(); }} //Function leer el sensor de luz (LDR) y volver a 0 (la puerta está cerrada) o 1 (se abre la puerta) int read_light() {digitalWrite (pwr, HIGH); / gire el pasador de pwr en haciendo el voltaje alto para permitir una medida a tomar LDRval = analogRead(LDR); / leer el sensor valor digitalWrite (pwr, LOW); / / desactivar el pin pwr haciendo que el voltaje de baja LDRval = LDRval/1024 * 5; / / valor del sensor está en el rango 0 a 1023 y necesitamos entre 0 y 5 - este es el cálculo requerido if(LDRval<trig) / / esto compara la lectura para el nivel de activación {digitalWrite (puerta, HIGH); / / encender el LED externo para mostrar que la puerta se abre 1 vuelta; / / abrir la puerta significa} más {digitalWrite (puerta, LOW); / / apagar el exterior LED para mostrar que la puerta está cerrada return 0; / / cerrar puerta de medio}} / * lazo para hacer el pitido hace tres pitidos de 3 primero hace 4 pitidos spunds para siempre si la puerta permanece abierta * / void alarm_sound() {int looop_1_count = 0; int sound_loop1_skip = 0; while(read_light() & & looop_1_count < 3 & & sound_loop1_skip == 0) / / esto hace que el bucle un pitido 3 veces un 3-bip {digitalWrite (alarma alta) //make bip sonoro en delay(time_tone); delay(time_tone2); digitalWrite (alarma BAJA); hacer la señal parada de sonido delay(time_tone2); digitalWrite (alarma, alta); hacer el sonido sonido en delay(time_tone2); digitalWrite (alarma, LOW); hacer la señal parada de sonido delay(time_tone2); digitalWrite (alarma, alta); hacer el sonido sonido en delay(time_tone2); digitalWrite (alarma, LOW); hacer la señal parada de sonido delay(time_tone2); looop_1_count ++; read_light(); Delay(290); } //second bucle de sonido ahora comienza looop_1_count = 0; while(read_light()) {digitalWrite (alarma alta) //make sonido sonido en delay(time_tone) delay(time_tone); digitalWrite (alarma baja); //make bip stop sonido delay(time_tone2); digitalWrite (alarma alta); //make pitido en delay(time_tone2); digitalWrite (alarma baja); //make bip stop sonido delay(time_tone2); digitalWrite (alarma alta); //make pitido en delay(time_tone2); digitalWrite (alarma baja); //make bip stop sonido delay(time_tone2); digitalWrite (alarma ALTO); hacer el sonido sonido en delay(time_tone2); digitalWrite (alarma, LOW); hacer la señal parada de sonido delay(time_tone2); Delay(570); } //now por ir sonando si la puerta está aún abierta if(read_light()) {sound_loop1_skip = 1; / / esto hará que el programa salte 3-pitido y continúe la señal sonora 4 sana delay(2000); if(read_light()) alarm_sound();} else sound_loop1_skip = 0; } / / sistema en el estado de sueño / / sistema despierta cuando es tiempo wtchdog void system_sleep() {cbi(ADCSRA,ADEN); / interruptor análogo a Digitalconverter de set_sleep_mode(SLEEP_MODE_PWR_DOWN); / / modo de reposo se encuentra aquí sleep_enable(); sleep_mode(); / / sistema duerme aquí sleep_disable(); / / sistema continúa ejecución aquí cuando vigilante agotado sbi(ADCSRA,ADEN); / interruptor analógico Digitalconverter on} / / 0 = 16ms , 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms / / 6 = 1 seg, 7 = 2 seg, 8 = 4 seg, 9 = 8 seg void setup_watchdog (int ii) {byte bb; int PD; si ii (ii > 9) = 9; bb = ii & 7; si bb| (ii > 7) = (1 << 5); bb| = (1 << WDCE); ww = bb; MCUSR & = ~ (1 << WDRF); Iniciar secuencia temporizada WDTCR | = (1 << WDCE) | (1 << WDE); definir el nuevo valor de tiempo de espera vigilante WDTCR = bb; WDTCR | = _BV(WDIE); } / / Watchdog interrumpe servicio / se ejecuta al vigilante agotado ISR(WDT_vect) {f_wdt = 1; / / set indicador global}
Para la versión Arduino 01:
/ * Nevera puerta alarma Detector versión 01 escrito por Pavel Mihaylov y Tatqna Mihaylova 11 de septiembre de 2012 esta versión está listo para ser subido al microcontrolador del Arduino Uno usando Arduino Uno como programador. * / int led = 2; int pwr = 3; alarma de int = 4; puerta int = 5; int LDR = A0; int time_door_open = (3) * 1000; valor entre paréntesis es en vez de int segundos = 500; int time2 = tiempo * 2; int time_tone = 80; hacer el pitido tono int tx = 1; esta a 1 Si desea controlar el puerto serie de depuración de información, 0 de otra manera flotan trig = 2.5; Float LDRval = 0; int door_left = 0; Si se deja la puerta abierta (1) o cerrado (0) externo volátil sin firmar largo timer0_overflow_count; la rutina de instalación se ejecuta una vez al presionar reset: void setup() {/ / inicializar el pin digital como una salida. if(tx) Serial.begin(9600); pinMode (led, salida); pinMode (pwr, salida); pinMode (alarma, salida); pinMode (puerta, salida); pinMode (LDR, INPUT);} / / la rutina del bucle se ejecuta una y otra vez para siempre: void loop() {si delay(time) (tx); si (tx) {Serial.print("---\n");} read_light(); if(read_light()) {si delay(time) (tx); si (tx) {Serial.print ("acaba de abrir la puerta! \n");} digitalWrite (puerta ALTO); door_left = 1; int n = 0; timer0_overflow_count = 0; sin firmar largo comienzo = millis(); mientras que ((millis() - Inicio) < = time_door_open) {if(millis() - start < 0) //break mientras bucle si rollover occures {si (tx) {Serial.print ("ROLLOVER producido");} break;} si (tx) {Serial.print ("contando segundos down\n");} si (tx) {Serial.print(millis());} n ++; read_light(); if(read_light() == 0) {si delay(time) (tx); si (tx) {Serial.print ("acaba de cerrar la puerta! \n");} digitalWrite (puerta, LOW); door_left = 0; break;} delay(time); //delay es necesitada} si (tx) {Serial.print ("por mientras bucle! \n");} if(door_left == 1) {si (tx) delay(time); Si (tx) {Serial.print (">>> alarma activada! \n");} alarm_sound(); } else {si delay(time) (tx); si (tx) {Serial.print ("alarma no activado! \n");}}} Else {si delay(time) (tx); si (tx) {Serial.print ("puerta permanece cerrada! \n");}} delay(time2); } //Function leer el sensor de luz (LDR) y volver a 0 (la puerta está cerrada) o 1 (se abre la puerta) int read_light() {digitalWrite (led, alto); / / enciende el LED por lo que la tensión alta digitalWrite (pwr, HIGH); / / enciende el pin pwr haciendo que la tensión alta para permitir una medición de tomarse delay(30); / / espere algún tiempo LDRval = analogRead(LDR); / leer el sensor valor delay(10); / / espere algunos digitalWrite tiempo (led BAJA); Apagar el LED por lo que el voltaje baja digitalWrite (pwr, LOW); desactivar el pin pwr haciendo que el voltaje de baja LDRval = LDRval/1024 * 5; valor del sensor está en el rango 0 a 1023 y necesitamos entre 0 y 5 - este es el cálculo si (tx) {Serial.print ("\nLDR valor en voltios ="); Serial.println(LDRval); } if(LDRval<trig) {volver 1; / / abrir la puerta significa} más {return 0; / / cerrar puerta significa}} / * lazo para hacer el pitido hace tres pitidos de 3 primero hace 4 pitidos * / void alarm_sound() {/ / digitalWrite (alarma alta); int looop1 = 0; while(read_light() & & looop1 < 3) {si delay(time) (tx); si (tx) {Serial.print ("todavía se abre la puerta-ahora beep segunda vez! \n");} int i; digitalWrite (alarma ALTO); hacer sonido de pitido delay(80); digitalWrite (alarma, LOW); hacer sonido de pitido delay(320); digitalWrite (alarma, LOW); hacer sonido de pitido delay(time_tone); digitalWrite (alarma, LOW); hacer sonido de pitido (= 15; i > = 0; i--) {digitalWrite (alarma, alta); //make pitido sonido delay(i); digitalWrite (alarma baja) //make beep sonido} digitalWrite (alarma, LOW); hacer sonido de pitido delay(time_tone); digitalWrite (alarma, LOW); hacer sonido de pitido (me = 18; i > = 0; i--) {digitalWrite (alarma, alta); //make pitido sonido delay(i); digitalWrite (alarma baja) //make beep sonido} digitalWrite (alarma, LOW); hacer sonido de pitido delay(time_tone); digitalWrite (alarma, LOW); hacer sonido de pitido delay(1500); looop1 ++; read_light(); } delay(2000); segundo bucle de sonido ahora comienza looop1 = 0; while(read_light() & & looop1 < 3) {si (tx) delay(time); si (tx) {Serial.print ("todavía se abre la puerta-ahora beep segunda vez!\n");} int i; digitalWrite (alarma, alta); hacer sonido de pitido delay(80); digitalWrite (alarma, LOW); hacer sonido de pitido delay(320); digitalWrite (alarma, LOW); hacer sonido de pitido delay(time_tone); digitalWrite (alarma, LOW); hacer sonido de pitido (= 15; i > = 0; i--) {digitalWrite (alarma, alta); //make pitido sonido delay(i); digitalWrite (alarma baja) //make beep sonido} digitalWrite (alarma, LOW); hacer sonido de pitido delay(time_tone); digitalWrite (alarma, LOW); hacer sonido de pitido (me = 18; i > = 0; i--) {digitalWrite (alarma, alta); //make pitido sonido delay(i); digitalWrite (alarma baja) //make beep sonido} digitalWrite (alarma, LOW); hacer sonido de pitido delay(time_tone); digitalWrite (alarma, LOW); hacer sonido de pitido (me = 18; i > = 0; i--) {digitalWrite (alarma, HIGH); //make pitido sonido delay(i); digitalWrite (alarma baja) //make beep sonido} delay(1000); looop1 ++; read_light(); //now} ir si la puerta está aún abierta if(read_light()) {delay(3000); //time para reiniciar el dos pitido bucles alarm_sound();} else {/ / digitalWrite (alarma baja); si delay(time) (tx); si (tx) {Serial.print ("apenas se cerró la puerta por el chico enojado! \n");} digitalWrite (puerta, LOW);}}