Sensebender Micro
-
@timropp said:
I've got 3 coming, can't wait to figure out what I'm going to use them for :)
I'm deploying mine all over the house.
in my attics, garage, shed. bedrooms. etc
I've attached motion and lux sensors to several of them already.
I tested / proof of concept adding IR transmitters. but these will likely need to be 5v nano's or something as battery power probably won't work with the IR and staying away waiting for messages from the controller. -
Got 3 up just using the built in temp/humidity, making sure all looks ok. Will slowly add motion.
Any suggested motion sensor for these guys?
-
Got 3 up just using the built in temp/humidity, making sure all looks ok. Will slowly add motion.
Any suggested motion sensor for these guys?
@NotYetRated said:
Got 3 up just using the built in temp/humidity, making sure all looks ok. Will slowly add motion.
Any suggested motion sensor for these guys?
I'm using that HC501 PIR
you can connect to the side pin and use 3v instead of the 5v -
@mvader Can you elaborate how you use 3V on the HC501 ? Which side pin ? Can you post an image ?
-
@mvader Can you elaborate how you use 3V on the HC501 ? Which side pin ? Can you post an image ?
@GertSanders
if you look at this image
on the left side where it says "H" by the 3 pins with the jumper.
i take off the jumper and connect 3v to the H pin
works great.
http://www.bdspeedytek.com/wp-content/uploads/1.1.jpg -
@mvader Thanks !
-
@hek nice, what tool do you use for logging/graphing? Or is it exported and post-processed?
-
Datamine for Vera. The actual data is stored to my NAS (mounted from vera).
-
@hek cool. Can Vera do that now? Vera lite as well? Though the data miner plugin only could use USB mounts.
@Anticimex said:
Can Vera do that now? Vera lite as well? Though the data miner plugin only could use USB mounts.
Na, a little hack
http://forum.micasaverde.com/index.php/topic,14910.0.html -
Hello,
I've just received my sensebender boards and start playing with it.My first goal is to make a door sensor running on battery. I will not use the integrated temp/hum sensor for battery purpose, and use interrupt to have the sensor on sleep the majority of time.
Looking at the sketch given with temp/hum, I have one question;
on the loop function, we have
if ((measureCount == 5) && highfreq) { clock_prescale_set(clock_div_8); // Switch to 1Mhz for the reminder of the sketch, save power. highfreq = false; }But I don't really understand this ; highfreq is initialized to true in the declaration, and never again. So, does this clock_prescale_set is call only once, meangin that the sensor will run at 1Mhz all the time ?
It is the 5 first mesure that are running at normal speed, and then the sensor goes into a "battery efficient" mode ?
Why waiting for 5 mesure to do so, and not doing it at startup ?Thanks for your explanation !
-
@petoulachi said:
But I don't really understand this ; highfreq is initialized to true in the declaration, and never again. So, does this clock_prescale_set is call only once, meangin that the sensor will run at 1Mhz all the time ?
It is the 5 first mesure that are running at normal speed, and then the sensor goes into a "battery efficient" mode ?
Why waiting for 5 mesure to do so, and not doing it at startup ?Thanks for your explanation !
It's waiting with switching to lower frequency, because it is dumping debug information to the serial port. And when you switch to 1Mhz, the baudrate is "screwed".
When that's said, my opinion is that there is not much power to save, with switching to 1Mhz. This is because the MCU is sleeping most of the time, with the RC oscillator switched off. I am thinking that the freq. scaling should be removed in the comming releases
-
Oooh so I guess that also explain why I have strange output on the serial using the default sketch ?
Well, I'll start without touching frequency and see how it behave in the next month. This is the sketch I use (not tested yet !). Sleeping all the time, awake but interrupt. When awake, send the Battery % if different from last mesure.
/** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * REVISION HISTORY * Version 1.0 - Henrik Ekblad * * DESCRIPTION * Default sensor sketch for Sensebender Micro module * Act as a temperature / humidity sensor by default. * * If A0 is held low while powering on, it will enter testmode, which verifies all on-board peripherals * * Battery voltage is as battery percentage (Internal message), and optionally as a sensor value (See defines below) * */ #include <MySensor.h> #include <Wire.h> #include <SPI.h> #include "utility/SPIFlash.h" #include <EEPROM.h> #include <avr/power.h> #define RELEASE "1.0" // Child sensor ID's #define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!) #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway) #define CHILD_ID_DOOR 1 // Id of the sensor child MySensor gw; // Sensor messages MyMessage msgDoor(CHILD_ID_DOOR, V_TRIPPED); // Global settings int measureCount = 0; int sendBattery = 0; boolean highfreq = true; // Storage of old measurements long lastBattery = -100; boolean oldDoorValue; /**************************************************** * * Setup code * ****************************************************/ void setup() { Serial.begin(115200); Serial.print(F("Sensebender Micro FW ")); Serial.print(RELEASE); Serial.flush(); gw.begin(); Serial.flush(); Serial.println(F(" - Online!")); gw.sendSketchInfo("Battery Door", RELEASE); // sets the motion sensor digital pin as input pinMode(DIGITAL_INPUT_SENSOR, INPUT); // Activate internal pull-ups digitalWrite(DIGITAL_INPUT_SENSOR, HIGH); // Register all sensors to gw (they will be created as child devices) gw.present(CHILD_ID_DOOR, S_DOOR); } /*********************************************** * * Main loop function * ***********************************************/ void loop() { gw.process(); sendBattLevel(false); door(false); gw.sleep(INTERRUPT, CHANGE, 0); } // Check if digital input has changed and send in new value void door(bool force) { // Short delay to allow buttons to properly settle sensor_node.sleep(5); bool tx = force; boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; if (tripped != oldDoorValue) { tx = true; oldDoorValue = tripped; } if (tx) { // Send in the new value gw.send(msgDoor.set(tripped ? 1 : 0)); // Send tripped value to gw } } /******************************************** * * Sends battery information (battery percentage) * * Parameters * - force : Forces transmission of a value * *******************************************/ void sendBattLevel(bool force) { if (force) lastBattery = -1; long vcc = readVcc(); if (vcc != lastBattery) { lastBattery = vcc; // Calculate percentage vcc = vcc - 1900; // subtract 1.9V from vcc, as this is the lowest voltage we will operate at long percent = vcc / 14.0; gw.sendBatteryLevel(percent); } } /******************************************* * * Internal battery ADC measuring * *******************************************/ long readVcc() { // Read 1.1V reference against AVcc // set the reference to Vcc and the measurement to the internal 1.1V reference #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ADMUX = _BV(MUX5) | _BV(MUX0); #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) ADcdMUX = _BV(MUX3) | _BV(MUX2); #else ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #endif delay(2); // Wait for Vref to settle ADCSRA |= _BV(ADSC); // Start conversion while (bit_is_set(ADCSRA,ADSC)); // measuring uint8_t low = ADCL; // must read ADCL first - it then locks ADCH uint8_t high = ADCH; // unlocks both long result = (high<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }BTW, what is the F() function ? instead of Serial.print("Sensebender Micro FW "); why using Serial.print(F("Sensebender Micro FW ")); ?
Thanks !
-
Started to solder my 6 sensebender. I've noticed that if I set it to 1Mhz directly, the sensor cannot register itself on the gateway (but unfortunately I dont know why because there's no serial). Putting it at 8Mhz, being detected by the GW with an ID, and I can set it back to 1mhz. Weird.
-
Oh and BTW, which boxes are you using with your Sensebender ? I guess it's maybe the most difficult part of the entire project, finding the perfect box :D
-
@Fabien said:
@5546dug said:
@fabian how is the box working out were there any mods and are the stl files ready yet?
Sorry, my 3D printer is out of service, I'm waiting for chinese parts ... I will post correct STL files in 1 or 2 weeks.
@Fabien @5546dug
Hi, any news on this please? I would be good to get a box by Christmas.

