Paso 1: Redback
Comenzó con este pequeño dispositivo wifi de arduino. Se vende por Linksprite.com que fui capaz de conseguir una buena oferta en uno de Ebay.
Puede utilizar un escudo de wifi o cualquier placa de wifi que funcione en Arduino.
Lucho un tiempo conseguir el Redback para trabajar en todo ya que la documentación es inexistente. Ofrecen un tutorial/ejemplos pero no docs real para el código.
Por cable un LED en el pin 9 es el uno que el Redback se usa para mostrar que está en línea, después un rojo led en el pin analógico 2 pero utilizando el código como un pin digital.
Este sensor tiene salidas analógicas y digitales. Sólo estoy usando la digital.
Básicamente Haz iniciado sesión en el router, entonces espere hasta que el sensor de agua es alto y luego ir en un bucle donde mandamos el correo electrónico a una página PHP en mi servidor que enviará el mensaje de texto.
El código PHP es bastante simple que utiliza un "número mágico" como medida de seguridad. El PHP no enviará correo electrónico sin el número adecuado. Este truco poco te permite enviar mensajes SMS vía ATT le podría ser capaz de hacer lo mismo con cualquier proveedor de servicios inalámbrico
Código PHP
<?
$magic=$_GET[magic]; $message=$_GET[message]; $message=urlDecode(stripSlashes($message)); if ($magic=="0000"){ $ok=mail("myphonenumber Detected", $message , "FROM:water
echo "email sent\n ".$message; echo $ok; }
?>
Reemplazar el 0000 con un código que queramos
Reemplace myphonenumber con su numero de celular
en el campo de utilizar cualquier correo electrónico que desea
Este código se guarda en un servidor Web.
Antes de usar el código de Arduino que necesitará las librerías para el RedBack de
Foro de Redback
/*Code (C)2013 Bret Laniusbret http://bretlanius.com
Hardware is running on Redback from linksprite.com using Water sensor bought on ebay
*/
#include
#define WIRELESS_MODE_INFRA 1 #define WIRELESS_MODE_ADHOC 2
// Wireless configuration parameters ---------------------------------------- unsigned char local_ip[] = {192,168,1,35}; // IP address of WiShield unsigned char gateway_ip[] = {192,168,1,254}; // router or gateway IP address unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network const prog_char ssid[] PROGMEM = {"YourSSID"}; // max 32 bytes
unsigned char security_type = 3; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
// WPA/WPA2 passphrase const prog_char security_passphrase[] PROGMEM = {"yourpassword for router"}; // max 64 characters
// WEP 128-bit keys // sample HEX keys prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3 };
// setup the wireless mode // infrastructure - connect to AP // adhoc - connect to another WiFi device unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len; unsigned char security_passphrase_len; //---------------------------------------------------------------------------
const byte waterPin=7; const byte redPin=A2; const byte waterAnalogPin=0; const byte resetPin=5; int beenhere=false;
void printData(char* data, int len) { // Print the data returned by the server // Note that the data is not null-terminated, may be broken up into smaller packets, and // includes the HTTP header. while (len-- > 0) { Serial.print(*(data++)); } }
uint8 bret_ip[]={198,xx,xx,xx};
GETrequest getAlert(bret_ip, 80, "www.yourserver.com", "/wateralert.php?magic=0000&message=Water%20Detected");
void setup() { Serial.begin(57600); Serial.println("StartUp"); WiServer.init(NULL); WiServer.enableVerboseMode(true); Serial.println("Wifi enabled"); pinMode(waterPin,INPUT); pinMode(redPin,OUTPUT);
pinMode(resetPin,INPUT_PULLUP); digitalWrite(redPin,LOW); getAlert.setReturnFunc(printData); }
void loop() { if (beenhere==true){ Serial.println("Back in main loop"); beenhere=false; } int water=digitalRead(waterPin); if (water==LOW){ Serial.println("ALERT"); alert(); }
delay(10); WiServer.server_task(); }
void noAlert(){ noTone(6); digitalWrite(redPin,LOW); beenhere=true; }
void reset(){ Serial.println("Silenced"); noTone(6); delay(500); while(digitalRead(resetPin)==HIGH){ digitalWrite(redPin,HIGH); delay(500); digitalWrite(redPin,LOW); delay(500); } Serial.println("Clearing alarm"); delay(100); noAlert(); WiServer.server_task(); }
void alert(){ tone(6,3000); delay(500); Serial.println("sending email"); getAlert.submit(); while(digitalRead(resetPin)==HIGH){ WiServer.server_task(); digitalWrite(redPin,HIGH); delay(50); digitalWrite(redPin,LOW); delay(50); } reset(); }