Rehacer el Mosquito Killer(Arduino) (6 / 7 paso)

Paso 6: programación

Ahora, todas las materias de hardware se ha acabado, tenemos a la programación para el sistema.  El programa es simplemente combinar la biblioteca existente de DS18B y el módulo RTC y hacer algo cambiado. Si usted quiere a DIY este proyecto y alcanza su propósito, sólo necesita cambiar varios lugares.

Ver el cuadro uno, se pueden definir el tiempo de trabajo, tiempo actual y la temperatura de disparo en las varias líneas de primera.

Para el módulo RTC, es necesario inicializar a su tiempo actual. Por favor ver el cuadro 1, en el setup(), ejecutar el setDateDs1307(); Establece la hora actual en el módulo RTC; Esta función es necesario sólo una vez, después de que usted ajuste la hora actual, tiene que comentar esa línea y volver a subir el programa a tu arduino. Puedes ver el tiempo RTC en la ventana de monitor.

Aquí está el código de este proyecto, usted puede descargar el archivo adjunto en el siguiente, o sólo simplemente enfrentar el código de la abajo a tu IDE de Arduino y subir a la crowduino.

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 / / la dirección I2C del minúsculo RTC
definir la hora de salida, por ejemplo, quiero monitoreo Inicio 22:00
#define STA_HOUR 22
#define STA_MINUTE 00
#define STA_SECOND 0
definir el tiempo del final, dejar de monitorear en el 6:30
#define END_HOUR 6
#define END_MINUTE 30
#define END_SECOND 0

definir el momento actual, puede configurar la hora actual en aquí
#define CURRENT_SECOND 0
#define CURRENT_MINUTE 0
#define CURRENT_HOUR 12
#define CURRENT_DAYOFWEEK 3
#define CURRENT_DAYOFMONTH 16
#define CURRENT_MONTH 3
#define CURRENT_YEAR 2013

definir el disparador, sólo la temperatura superior a 22, el relé se activará en el momento de especificar
#define TRIGGER_TEMPERATURE 22

OneWire ds(14);  en el pin 14 de temperatura
Boolean bandera;   A recorde el estado del sensor de temperatura

bytes segundo, minuto, hora, DíaDeLaSemana, dayOfMonth, mes, año;
staTotalSecond largo, endTotalSecond, currentTotalSecond;
Convierte a números decimales normales a binario codificado decimal
decToBcd(byte val) bytes
{
regresar ((val/10 * 16) + (val % 10));
}
Convertir a binario codificado decimal a números decimales normales
bcdToDec(byte val) bytes
{
regresar ((val/16 * 10) + (val % 16));
}

void setup() {}
Wire.Begin();
Serial.Begin(19200);
Bandera = true;
staTotalSecond = long(STA_HOUR) * 3600 + long(STA_MINUTE) * 60 + largo (STA_SECOND); //to caculate el total segundos
Serial.println(staTotalSecond);

endTotalSecond = long(END_HOUR) * 3600 + long(END_MINUTE) * 60 + largo (END_SECOND); //to caculate el total segundos
Serial.println(endTotalSecond);

definir los pines del relé, el escudo de relé tiene 4 relés
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);

digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);

setDateDs1307(); Establece la hora actual en el módulo RTC,
Este código sólo es necesario ejecutar una vez, después de ajustar la corriente de tiempo, las súplicas comentario esta línea.

}
void loop()
{
Float temperatura;
getDateDs1307 (); //get los datos de tiempo de pequeño RTC
currentTotalSecond = long(hour) * 3600 + long(minute) * 60 + long(second);
Serial.println(currentTotalSecond);

Si (currentTotalSecond > endTotalSecond & & currentTotalSecond < staTotalSecond) / / para juzgar si la hora actual en el término de ajuste
{
digitalWrite (5, bajo), //relay de
}
otra cosa
{
temperatura = getTemperature ('c'); //to Haz el teperature
Si (bandera)
{
Serial.println(Temperature);
if(Temperature > TRIGGER_TEMPERATURE) //if temperatura superior de ajuste de temperatura, relé de
{
digitalWrite (5, HIGH); //relay en
}
otra cosa
{
digitalWrite (5, bajo), //relay de
}
}
}
retardo (60000); //detect el tiempo y la temperatura cada 60 segundos
}

Función para programar la hora de currnt, cambio el segundo, minuto y hora para el momento
void setDateDs1307()
{
en segundo lugar = 00;
minutos = 51;
hora = 10;
dayOfWeek = 5;
dayOfMonth = 28;
mes = 2;
año = 13;
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.Write(decToBcd(0));
Wire.Write(decToBcd(Second));    0 a bit 7 empieza el reloj
Wire.Write(decToBcd(minute));
Wire.Write(decToBcd(hour));      Si quieres 12 horas am/pm es necesario establecer
bit 6 (también necesita cambiar readDateDs1307)
Wire.Write(decToBcd(dayOfWeek));
Wire.Write(decToBcd(dayOfMonth));
Wire.Write(decToBcd(month));
Wire.Write(decToBcd(Year));
Wire.endTransmission();
}

Función obtiene la fecha y hora del ds1307 e imprime el resultado
void getDateDs1307()
{
Restablece el puntero de registro
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.Write(decToBcd(0));
Wire.endTransmission();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
= segundo bcdToDec(Wire.read() & 0x7f);
minutos = bcdToDec(Wire.read());
hora = bcdToDec(Wire.read() & 0x3f);  Necesidad de cambiar este si 12 horas am/pm
dayOfWeek = bcdToDec(Wire.read());
dayOfMonth = bcdToDec(Wire.read());
mes = bcdToDec(Wire.read());
año = bcdToDec(Wire.read());
Serial.Print (hora, DEC);
Serial.Print(":");
Serial.Print (minuto, DEC);
Serial.Print(":");
Serial.Print (en segundo lugar, DEC);
Serial.Print("");
Serial.Print (mes, DEC);
Serial.Print("/");
Serial.Print (dayOfMonth, DEC);
Serial.Print("/");
Serial.Print(Year,DEC);
Serial.Print("");
Serial.println();
Serial.Print ("día de la semana:");
}

la temperatura, la paremeter es un char, si es igual a 'f', vuelve celsius fahrenheit, otra vuelta
flotador getTemperature(char unit)
{
byte me;
presente byte = 0;
byte type_s = 0;
datos del octeto [12];
addr Byte [8];
flotador de celsius, fahrenheit;

Si (! {ds.search(addr))}
Serial.println ("no hay más direcciones.");
Serial.println();
DS.reset_search();
Delay(250);
Bandera = false;
return 0;
}
otra cosa
Bandera = true;

Si (OneWire::crc8 (addr, 7)! = {addr[7])}
Serial.println ("CRC no es válido!");
retorno 2;
}
Serial.println();

el primer byte ROM indica que chip
interruptor (addr[0]) {}
caso 0 x 10:
type_s = 1;
rotura;
caso 0x28:
type_s = 0;
rotura;
caso 0x22:
type_s = 0;
rotura;
por defecto:
retorno 3;
}

DS.Reset();
DS.Select(ADDR);
DS.Write(0X44,1);         iniciar la conversión, con la energía del parásito en el final

Delay(1000);     tal vez 750ms es bastante, quizás no
podríamos hacer un ds.depower() aquí, pero el reset se hará cargo de él.

actual = ds.reset();
DS.Select(ADDR);
DS.Write(0xBE);         Bloc de notas de lectura
para (i = 0; i < 9; i ++) {/ / necesitamos 9 bytes
datos [i] = ds.read();
}
convertir los datos a la temperatura real

unsigned int de crudo = (datos [1] << 8) | datos [0];
Si (type_s) {}
materia prima = raw << 3; por defecto de resolución 9 bits
Si (datos [7] == 0 x 10) {}
cuenta siendo da resolución de 12 bits completo
materia prima = (materia prima y 0xFFF0) + 12 - datos [6];
}
} else {}
cfg de byte = (datos [4] y 0x60);
Si (cfg == 0 x 00) crudo = raw << 3;  resolución de 9 bits, ms 93,75
else if (cfg == 0 x 20) crudo = raw << 2; resolución de 10 bits, ms 187,5
else if (cfg == 0 x 40) crudo = raw << 1; resolución de 11 bits, de 375 ms
valor predeterminado es 12 bits de resolución, tiempo de conversión de ms 750
}
Celsius = (float) crudo / 16.0;
Fahrenheit = centígrados * 1.8 + 32.0;
Si ('f' == unidad)
volver fahrenheit;
otra cosa
volver celsius;
}

Artículos Relacionados

Repelente de mosquitos de Arduino

Repelente de mosquitos de Arduino

En este instructable voy a mostrarle cómo construir un repelente de mosquitos con un Arduino. El repelente es en forma de un escudo que se conecta a la placa Arduino y la frecuencia de la repelente puede ser cambiada fácilmente.Este proyecto es ideal
Mosquito Killing estanque - rápido y barato!

Mosquito Killing estanque - rápido y barato!

Propusieron este proyecto ideas cuando yo he atacado a muerte por los mosquitos en mi jardín delantero, este verano.Resulta que los vecinos habían dejado un bote de basura lleno de agua cuando mueve hacia fuera. Mi esposo vierten el agua, pero el dañ
Mosquito Killing Ovitrap

Mosquito Killing Ovitrap

Este pequeño dispositivo es barato para crear y ha sido utilizado por los E.E.U.U. militares de bases en zonas de malaria con resultados fantásticos. Hay muchos tipos de Ovitraps usted puede crear, algunos son más fáciles que otros pero requieren ven
DIY aire enfriador / filtro

DIY aire enfriador / filtro

El bricolaje refrigerador / limpiadorFondo:En mi país - Singapur, es verano todo el año con ninguna otra estación. Te imaginas temperatura 30C o 86F fácilmente durante el día. En primer lugar, es maldito caliente! En segundo lugar, las razas mosquito
Control remoto de Arduino DIY y Lego RC vehículo!!!!

Control remoto de Arduino DIY y Lego RC vehículo!!!!

Actualizar (29/08/13): lectores gracias por sus palabras de entusiasmo y tipo con respecto a este proyecto! Ha sido un viaje tremendo desde que comencé este proyecto en marzo, pero estoy muy contento con el producto resultante y el entusiasmo con que
Controlar una cucaracha con Arduino de bajo $30

Controlar una cucaracha con Arduino de bajo $30

Hace unos años VI cucaracha controlada de patio cerebros smartphone, y solo sopló mi mente! He intentado a mi mamá para que me deje comprarlo, pero la mención de las cucarachas convenció de lo contrario. :) Comencé a realizar proyectos con Arduino un
Simplificado de medición de corriente CA Arduino usando el Sensor de efecto Hall ACS712

Simplificado de medición de corriente CA Arduino usando el Sensor de efecto Hall ACS712

Este es un simplificado enfoque mi Instructable previo con respecto a la corriente con el sensor de corriente ACS712 medición AC... enlaceSimplificaciones son:Eliminando el especial circuito de acondicionamiento de señal - en lugar de ello vamos a ut
Cómo medida actual de AC usando el Sensor de efecto Hall con Arduino u otros microcontroladores comunes

Cómo medida actual de AC usando el Sensor de efecto Hall con Arduino u otros microcontroladores comunes

Un nuevo enfoque más simple consulte aquíObjetivo: Este Instructable muestra cómo hacer una caja de interfaz que, al empalmar un cable de extensión, permite a los microcontroladores comunes como Arduino a medida AC actual como una señal de voltaje DC
Puerta de garaje teléfono controlado, desarrollada por Intel Edison Blynk & Arduino

Puerta de garaje teléfono controlado, desarrollada por Intel Edison Blynk & Arduino

Productos automatizados se ha vuelto más común y existen soluciones que son baratas en algunas áreas, un ejemplo podría ser el rayo interior o automáticos temporizadores. Pero si quieres una puerta que puede abrirse con un teléfono y no quiere pagar
Brazo de Robot Arduino

Brazo de Robot Arduino

me había prometido en un post anterior para compartir con ustedes un proyecto del brazo robot arduino en una fecha posterior. Bien, esa fecha es hoy! Sin embargo, en lugar de usar un joystick para controlar el brazo del robot arduino, voy a programar
Hyduino - automatizado hidropónicos con un Arduino

Hyduino - automatizado hidropónicos con un Arduino

Por lo tanto, usted se estará preguntando... ¿Qué es la hidroponía?Básicamente, hidroponía está creciendo plantas sin el uso de un medio tradicional de la suciedad mediante el uso de una solución de agua rica en nutrientes. Los medios utilizan para "
Repelente de mosquitos avanzada y matamoscas

Repelente de mosquitos avanzada y matamoscas

Hola, en este tutorial voy a mostrarte cómo hacer un mosquito electrónico Ahuyentador y matamoscas controlada por arduino. Cada vez que usted se sienta cerca de su escritorio nadie gustaría oír sonidos de estallido de matamoscas pero un repelente de
Controlador USB NES con un arduino!

Controlador USB NES con un arduino!

ACTUALIZACIÓN 22/12/2014Usuario de Instructables mattpbooth ha actualizado el código y lo aloja en github:https://github.com/mattpbooth/ArduinoNESController...Gracias mate!ACTUALIZACIÓN 12/03/2011Sustituido un println con impresión (derp).ACTUALIZACI
Arduino R/C Lawnmower (painted)

Arduino R/C Lawnmower (painted)

What this is:Este instructable le mostrará cómo hacer que tu Arduino en una interfaz de R/C que puede utilizar para cualquier cosa que requieran un control remoto. También mostraré cómo construí un cortacésped de R/C con mi Arduino, un par de transmi