Ok, related to MySensors 1.6 tehen, that explain why I never seen this !
petoulachi
@petoulachi
Best posts made by petoulachi
Latest posts made by petoulachi
-
RE: Sensebender Micro
-
RE: Sensebender Micro
Thanks !
I took a look at the sketch, I didn't know there was a presentation() method to implement to present the different sensor's ID; is this new ? when is it called? I guess after setup() ?
-
RE: Sensebender Micro
I am adventurous !
Were can I find the beta version of the sketch ?
-
RE: Sensebender Micro
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
-
RE: Sensebender Micro
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.
-
RE: Sensebender Micro
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 !
-
RE: Sensebender Micro
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 !
-
RE: Sensebender Micro
Ordered 6 board too ! I'm glad to support MySensors project !
-
RE: Sensebender Micro
That's why I think i'm going to go with this senseboard.
But I want to be sure that some connectors (D3 ?) support interrupts ? The goal is to have the sensor always in sleep mode, and wake up on interrupts only.Regards,
-
RE: Sensebender Micro
Well I do, but I think that using a Arduino Pro 3.3V will be less effecient, but maybe I'm wrong ?
I'm currently using temp/hum/motion sensors with Arduino Pro 5V, but they are not battery powered. Now I need to make very small sensor with battery, and I thought that maybe this sensebender board is my solution ?