plant sensing update & wireless tests

This commit is contained in:
nik gaffney 2009-08-13 19:03:19 +02:00
parent 610762c1ee
commit 811274f7e3
6 changed files with 196 additions and 0 deletions

View file

@ -0,0 +1,37 @@
;; send sensor data via xmpp
(module serial->xmpp scheme
(require (planet zzkt/xmpp))
(provide (all-defined-out))
(define serial (open-input-file "/dev/tty.usbserial-A9007Lgy"))
(define (read-serial)
(process (read-line serial))
;(read-serial)
)
(define (scale b t n)
(/ (- t (/ (string->number n) 1024.0)) (- t b)))
(define (process str)
(let ([data (regexp-split #rx"," str)])
(format "vrob light-level=n:~a soil-moisture=n:~a"
(scale 0.9 1 (list-ref data 1))
(scale 0 1.0 (list-ref data 2)))))
;; send via xmpp
(define (send-data)
(with-xmpp-session "plant0000005@fo.am" "plant0000005"
(let sendrec ()
(begin (send (message "plant0000003@fo.am" (read-serial)))
(sleep 0.5)
(sendrec)))))
)

View file

@ -0,0 +1,56 @@
///////////// part of the groworld HPI prototype
#include <stdio.h>
#define lightpin 1 // light sensor on analog pin 1
#define temppin 0 // humidity sensor on analog pin 0
#define power 8 // power for sensors
unsigned long then = 0; // timer which will run for < 50 days
unsigned long interval = 1; // interval between reads in seconds
///////////// set up & send
void setup()
{
pinMode(power, OUTPUT);
pinMode(temppin, INPUT);
pinMode(lightpin, INPUT);
Serial.begin(9600);
}
int lightlevel ()
{
int light = 0;
light = (analogRead(lightpin));
return light;
}
int templevel ()
{
int temp = 0;
temp = (analogRead(temppin));
return temp;
}
///////////// main loop. sends data to pachube and prints values to serial line
char display[64];
void loop()
{
if (millis() - then > interval*1000) {
then = millis();
sprintf(display, "%u,%u,%u\n", (unsigned int)then, lightlevel(), templevel());
Serial.print(display);
}
}
/////////////

View file

@ -0,0 +1,29 @@
///////////// part of the groworld HPI prototype
///////////// serial -> wireless setup
#include <SoftwareSerial.h>
#define rxPin 0
#define txPin 1
// set up a new serial port
SoftwareSerial wireless = SoftwareSerial(rxPin, txPin);
void setup()
{
// wireless serial
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
wireless.begin(4800);
// wired serial output
Serial.begin(9600);
}
void loop()
{
// read, then write
char someChar = wireless.read();
Serial.print(someChar);
}

View file

@ -0,0 +1,74 @@
///////////// part of the groworld HPI prototype
#include <stdio.h>
#define lightpin 1 // light sensor on analog pin 1
#define temppin 0 // humidity sensor on analog pin 0
#define power 8 // power for humidity sensor
unsigned long then = 0; // timer which will run for < 50 days
unsigned long interval = 1; // interval between reads in seconds
///////////// serial -> wireless setup
#include <SoftwareSerial.h>
#define rxPin 0
#define txPin 1
// set up a new serial port
SoftwareSerial wireless = SoftwareSerial(rxPin, txPin);
byte pinState = 0;
///////////// set up & send
void setup()
{
// analogue sensors
pinMode(power, OUTPUT);
pinMode(temppin, INPUT);
pinMode(lightpin, INPUT);
Serial.begin(9600);
// wireless serial
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
wireless.begin(4800);
}
int lightlevel ()
{
int light = 0;
light = (analogRead(lightpin));
return light;
}
int templevel ()
{
int temp = 0;
temp = (analogRead(temppin));
return temp;
}
///////////// main loop. sends data to pachube and prints values to serial line
char display[64];
void loop()
{
if (millis() - then > interval*1000) {
then = millis();
sprintf(display, "%u,%u,%u\n", (unsigned int)then, lightlevel(), templevel());
wireless.print (display);
Serial.print(".");
}
}
/////////////