Muy buenas esta es mi primera intervencion aqui, en primer lugar tengo un nivel bajo en el tema de la programacion, pero desde luego intento aprender, leyendo y releyendo por estos lares. Os comento mi intento de proyecto, quisiera controlar el nivel de un deposito de agua a traves de dos modulos arduino y dos Xbee S2 a 900Mhz, en estos momentos los modulos Xbee no los tengo, pues como la distancia a cubrir es bastante (alrededor de 2 Kms), estoy haciendo pruebas a traves del puerto Serial del Arduino a traves de cables y con una distancia corta (15 centimetros).
El deposito le colocaré unas boyas distanciadas unas de otras a 25 cmt. con lo cual se va a tratar de interruptores, en total serian 4 interruptores en el modulo emisor y en el modulo receptor colocaria en un futuro una pantalla LCD, pero ahora para iniciar el proyecto van a ser 4 leds. Navegando por la red he encontrado un proyecto de un timbre inalambrico Index of /bwsn_book/code que devuelve una respuesta al enviar el pulso, yo lo he modificado colocando un segundo pulsador (tendria que llegar a 4)
codigo del emisor:
- ********* Doorbell Feedback BUTTON ********
- requires pre-paired XBee Radios
- and the BELL program on the receiving end
- by Rob Faludi http://faludi.com
*/
#define VERSION "1.00a0"
int BUTTON = 2;
int LED = 11;
int PULS = 3;
int LED1 =12;
void setup() {
pinMode(BUTTON, INPUT);
pinMode(LED, OUTPUT);
pinMode(PULS, INPUT);
pinMode(LED1, OUTPUT);
Serial.begin(9600);
}
void loop() {
// envia el caracter D a traves del puerto serial si se pulso BUTTON
if (digitalRead(BUTTON) == HIGH) {
Serial.print('D');
delay(10); // evita colapsar el puerto serie
}
// si se recibe el caracter K se enciende el LED de respuesta
if (Serial.available() > 0 ) {
if (Serial.read() == 'K') {
digitalWrite(LED, HIGH);
}
}
// cuando se suelta el BUTTON se apaga el led
if (digitalRead(BUTTON) == LOW) {
digitalWrite(LED, LOW);
}
// envia el caracter C a traves del puerto serial si se pulsa PULS
if (digitalRead(PULS) == HIGH) {
Serial.print('C');
delay(10); // evita colapsar el puerto serie
}
// si se recibe el caracter l se enciende el LED1 de respuesta
if (Serial.available() > 0 ) {
if (Serial.read() == 'L') {
digitalWrite(LED1, HIGH);
}
}
// cuando se suelta el PULS se apaga el LED1
if (digitalRead(PULS) == LOW) {
digitalWrite(LED1, LOW);
}
}
y este es el codigo del receptor:
/*
- ********* Doorbell Feedback BELL ********
- requires pre-paired XBee Radios
- and the BUTTON program on the receiving end
- by Rob Faludi http://faludi.com
*/
#define VERSION "1.00a0"
int led = 5;
int led1 = 6;
void setup() {
pinMode(led, OUTPUT);
pinMode(led1, OUTPUT);
Serial.begin(9600);
}
void loop() {
// busca el caracter D y si lo encuentra enciende el led
if (Serial.available() > 0) {
if (Serial.read() == 'D'){
//envia la respuesta si el mensaje se recibió
Serial.print('K');
//enciende el led
digitalWrite(led, HIGH);
delay(10);
digitalWrite(led, LOW);
}
}
// busca el caracter C y si lo encuentra enciende el led1
if (Serial.available() > 0) {
if (Serial.read() == 'C'){
//envia la respuesta si el mensaje se recibió
Serial.print('L');
//enciende el led1
digitalWrite(led1, HIGH);
delay(10);
digitalWrite(led1, LOW);
}
}
}
Los problemas que se me presentan son:
- Dado que el emisor se alimenta con una bateria y los pulsadores son en realidad interruptores, con lo cual el emisor siempre estaría emitiendo y con lo cual la vida de la bateria se extenguía en breve (consumo Arduino + Xbee+leds) ¿como se puede implantar una rutina de retardo, para que emita por ejemplo cada 5 minutos? ya que si elevo el valor de DELAY(), segun lo que tengo entendido (y doy fé de ello) el programa se me para y no me envia la señal del segundo pulsador, tambien habría que contar que con dicha rutina de retardo, en el receptor, los leds sigan encendidos indicando el nivel del deposito de agua.
A la espera de sus indicaciones me despido con un cordial saludo.