La idea es continuar con el sistema de telemetría de a bordo que ya comenté en otro hilo (
http://foro.latabernadelpuerto.com/s...ght=telemetria), y poder ver el máximo de información a través de Internet, de lo que ocurre en nuestro barco, esté donde esté.
La página que resume los datos actuales es
www.olaje.com/telemetria.htm
Bien, pues ya que tenemos en la Red todos los datos NMEA y Sea Talk de a bordo, ahora estoy incorporando una placa con un micro-controlador y diversas entradas/salidas analógicas y digitales, y muy fácil de programar, además de bastante económico.
He empleado la plataforma de la placa Arduino (
http://www.arduino.cc/) que me ha parecido suficiente para las necesidades previstas.
Así, la idea es que podamos medir temperaturas interior y exterior, humedad relativa (casi tenemos una completa estación climática, puesto que los datos de viento ya los obtenemos), un sensor de movimiento que nos avise si alguien entra en nuestro buque y envíe un sms de alerta, medir el voltaje de las baterías, avisarnos si hay agua en la sentina, etc.
Por lo pronto, el prototipo está trabajando y ya lee temperaturas (ext. e interior), humedad, tensión de baterías y detecta intrusos a bordo.
El software para programar la placa es gratuito, y la programación muy fácil, así que es sumamente sencillo acceder al barco desde cualquier lugar.
Yo he comprado el hard en Libelium (
http://www.libelium.com/tienda/catalog/), y por muy pocos n€uros podemos montar el sistema.
Ya colgaré la información completa cuando el prototipo pase a versión usable y esté instalado en el barco, pero si alguno se anima a ir probandillo...
Genera también una sentencia pseudo-NMEA-casero para enviar los datos de la placa Arduino junto con el resto de los equipos de a bordo. En principio, será del tipo $OJMTR (
Ola
Je
Me
Te
R) recién inventado
Este es el código de la primera Beta. Copiar y pegar...y funciona :
#include <SoftwareSerial.h>
//declarar variables
float tempC;
float Humedad;
float Bateria;
float tempCI;
int tempPin = 0;
int tempiPin = 3;
int humPin = 1;
int volPin = 2;
int ledPin = 13;
int interruptor = 4;
int sensorPIR = 5;
int PIRactivo=0;
long contador = 0;
#define rxPin 2
#define txPin 3
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup()
{
Serial.begin(4800);
//opens serial port, sets data rate to 4800 bps
pinMode(ledPin, OUTPUT);
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
}
void loop()
{
tempC = analogRead(tempPin);
tempC = (5.0 * tempC * 100.0)/1024.0;
tempCI = analogRead(tempiPin);
tempCI = (5.0 * tempCI * 100.0)/1024.0;
Humedad = analogRead(humPin);
Humedad = (Humedad * 100.0) / 1024.0;
Bateria = analogRead(volPin);
Bateria = Bateria * 53.2 / 984;
int b = 12;
PIRactivo=digitalRead(sensorPIR); // Lee el sensor PIR
if (PIRactivo==HIGH){
contador=1;
}
if (contador > 0) {
contador = contador + 1;
digitalWrite(interruptor,HIGH);
} else {
digitalWrite(interruptor,LOW);
}
if (contador > 20) {
contador = 0;
}
Serial.print(b, BYTE);
Serial.println("Datos enviados desde Arduino");
Serial.print("Temperatura Exterior: ");
Serial.print(tempC);
Serial.println("C ");
Serial.print("Temperatura Interior: ");
Serial.print(tempCI);
Serial.println("C ");
Serial.print("Humedad relativa .. : ");
Serial.print(Humedad);
Serial.println("% ");
Serial.print("Tension Bateria ... : ");
Serial.print(Bateria);
Serial.println("V");
if (contador >0) {
Serial.print("A L A R M A D E M O V I M I E N T O");
}
mySerial.print("$OJMTR");
mySerial.print(",");
mySerial.print(tempC, BYTE);
mySerial.print(",");
mySerial.print(tempCI, BYTE);
mySerial.print(",");
mySerial.print(Humedad, BYTE);
mySerial.print(",");
mySerial.print(Bateria, BYTE);
mySerial.println();
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
//Pausa de un segundo y parpadeo del led
}
Salu2. Carmelo ( O L A J E )
