Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. petoulachi
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    petoulachi

    @petoulachi

    0
    Reputation
    21
    Posts
    579
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    petoulachi Follow

    Best posts made by petoulachi

    This user hasn't posted anything yet.

    Latest posts made by petoulachi

    • RE: Sensebender Micro

      Ok, related to MySensors 1.6 tehen, that explain why I never seen this !

      posted in Announcements
      petoulachi
      petoulachi
    • 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() ?

      posted in Announcements
      petoulachi
      petoulachi
    • RE: Sensebender Micro

      I am adventurous !

      Were can I find the beta version of the sketch ?

      posted in Announcements
      petoulachi
      petoulachi
    • 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 😄

      posted in Announcements
      petoulachi
      petoulachi
    • 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.

      posted in Announcements
      petoulachi
      petoulachi
    • 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 !

      posted in Announcements
      petoulachi
      petoulachi
    • 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 !

      posted in Announcements
      petoulachi
      petoulachi
    • RE: Sensebender Micro

      Ordered 6 board too ! I'm glad to support MySensors project !

      posted in Announcements
      petoulachi
      petoulachi
    • 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,

      posted in Announcements
      petoulachi
      petoulachi
    • 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 ?

      posted in Announcements
      petoulachi
      petoulachi