My Slim 2AA Battery Node
-
I have ordered these. Hopefully they can get here soon-ish. All my prototyping is done and the WAF is dropping steadily with all the wires and components lying around.
One question on this - separating the individual boards from the panel: dremel tool with cuter blade fine? Or do I need to use some other method?
-
@wergeld I just make two small cuts from each side by a side cutter, then a gentle bend over some sharp edge like the table or a cutting board.
-
-
Just got a notification from DirtyPCB's that mine shipped - placed the order 9 days ago so give it some time. When I ordered mine, they were just re-opening from being closed for a week; I think it was Chinese new year or something.
@drock1985 Right. I waited until a week after Chinese new year to order. Let the hangovers end and the trainstations empty . I am looking forward to finalizing my sensor network with cases as well. I have several old plastic/wood boxes lying around waiting for a less rats-nest setup.
-
now I finally set up my first sensor board, and, as expected, I don´t receive any data from it on my gateway :suspect:
I uploaded the sketch following the instructions from here: https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard using a 16MHz Crystal.
The sketch should run, but it doesn´t. Any ideas how to troubleshoot now?
edit: I opened the serial monitor after I uploaded the sketch using the mwthod mentioned above and I get the message "radio init fail".
The same sketch works on my UNO and I have no radio problem.Do I have to upload the sketch without the 16MHz Crystal to get it work proper?
-
now I finally set up my first sensor board, and, as expected, I don´t receive any data from it on my gateway :suspect:
I uploaded the sketch following the instructions from here: https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard using a 16MHz Crystal.
The sketch should run, but it doesn´t. Any ideas how to troubleshoot now?
edit: I opened the serial monitor after I uploaded the sketch using the mwthod mentioned above and I get the message "radio init fail".
The same sketch works on my UNO and I have no radio problem.Do I have to upload the sketch without the 16MHz Crystal to get it work proper?
-
I just installed the NRF module at it´s desired place as well as the two capacitors and the resistors as described above. The crystal is only used for uploading the sketch to the Atmega328 chip, described here: https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

So a wiring issue should not be the problem. Also, the code should have been uploaded well, because when I put the chip back to the breadboard and fire up my Arduino I at least receive the "radio init fail" message.
I just wonder if you guys upload your sketches the same way or if you use a different setup. I know there is a way to upload the sketch without the 16MHz crystal and I would like to know if this could be the problem.
edit: I´ve re-read your first post and also this thread http://forum.mysensors.org/topic/3018/tutorial-how-to-burn-1mhz-8mhz-bootloader-using-arduino-ide-1-6-5-r5/2 ...
Do I have to burn the bootloader using 1MHz or 8 MHz? I don´t get why this makes a difference, only that the batteries would drain faster the higher the MHz rate is.
I already uploaded a bootloader on my chips with a 16MHz crystal. Could I just re-upload a new bottloader using 1 or 8 MHz and overwrite the 16MHz bootloader?
-
I just installed the NRF module at it´s desired place as well as the two capacitors and the resistors as described above. The crystal is only used for uploading the sketch to the Atmega328 chip, described here: https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

So a wiring issue should not be the problem. Also, the code should have been uploaded well, because when I put the chip back to the breadboard and fire up my Arduino I at least receive the "radio init fail" message.
I just wonder if you guys upload your sketches the same way or if you use a different setup. I know there is a way to upload the sketch without the 16MHz crystal and I would like to know if this could be the problem.
edit: I´ve re-read your first post and also this thread http://forum.mysensors.org/topic/3018/tutorial-how-to-burn-1mhz-8mhz-bootloader-using-arduino-ide-1-6-5-r5/2 ...
Do I have to burn the bootloader using 1MHz or 8 MHz? I don´t get why this makes a difference, only that the batteries would drain faster the higher the MHz rate is.
I already uploaded a bootloader on my chips with a 16MHz crystal. Could I just re-upload a new bottloader using 1 or 8 MHz and overwrite the 16MHz bootloader?
@siod The lowered MHz is not to drain battery slower. To save power we want to run wihtout buck- or boost (step-up or step-down) voltage regulators. When we do that, we need to ensure all circuit components work in whole battery voltage range. A good trade-off/design is then to make the Atmega work down to the same lower limit as the nRF24L01+, which is ~1.9V. Unfortunately the Atmega is unstable at high frequencies with low voltages. That why we need a low frequency. An external 4MHz should be low enough, but an easier, cheaper and usually good enough solution is to by the ATmega "fuse settings" activate an 8MHz internal crystal together with a "divide by 8" prescaler.
To fascilitate the use of noob-friendly Arduino IDE and concept of loading sketches and debug through a serial interface, we need to have a "bootloader" on the Atmega. The procedure you're referring to is how you put this bootloader to the ATmega. I would strongly recommend a beginner to start with ready made Arduinos in projects before starting to play with blank/bare ATmegas.
Whether you need the 16MHz crystal, 8MHz or none depends it's current fuse settings. Bootloader and fuse settings determine how you load, debug and run your sketch.
I think the guides, project threads, links and references provided here in the forum should be enough when you've come to the point where you can make it all the way. -
Did anybody tested this board with an ATSHA204A on A2? The ATSHA204A works with 2.0 to 5.5 V.
-
ok guys, I finally set up my first sensor and it´s communicating well. I´ve attached two reed switch which work fine, only my temp snesor DHT11 doesn´t work. Are there any known issues with this sensor?
pls have a look at my setup and my code, thank you:
// Simple binary switch example // Connect button or door/window reed switch between // digitial I/O pin 3 (BUTTON1_PIN below) and GND. #include <MySensor.h> #include <SPI.h> // Define Node ID #define MY_NODE_ID 1 //Kontaktschalter #include <Bounce2.h> #define CHILD1_ID 1 // Kontaktschalter 1 #define CHILD2_ID 2 // Kontaktschalter 1 #define BUTTON1_PIN 5 // Kontaktschalter 1 #define BUTTON2_PIN 6 // Kontaktschalter 2 //Tempsensor #include <DHT.h> #define CHILD_ID_HUM 3 #define CHILD_ID_TEMP 4 #define HUMIDITY_SENSOR_DIGITAL_PIN 4 unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) MySensor gw; //Kontaktschalter Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); int oldValueReed1=-1; int oldValueReed2=-1; //tempsensor DHT dht; float lastTemp; float lastHum; boolean metric = true; //Messages // Kontaktschalter MyMessage msgReed1(CHILD1_ID,V_TRIPPED); // Kontaktschalter 1 MyMessage msgReed2(CHILD2_ID,V_TRIPPED); // Kontaktschalter 2 //TempMessage MyMessage msgHum(CHILD_ID_HUM, V_HUM); MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); void setup() { gw.begin(NULL, MY_NODE_ID, true); //Tempsensor dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); // Setup Kontaktschalter 1 pinMode(BUTTON1_PIN,INPUT); // Activate internal pull-up digitalWrite(BUTTON1_PIN,HIGH); // Setup Kontaktschalter 2 pinMode(BUTTON2_PIN,INPUT); // Activate internal pull-up digitalWrite(BUTTON2_PIN,HIGH); // After setting up the button, setup debouncer debouncer1.attach(BUTTON1_PIN); debouncer2.attach(BUTTON2_PIN); debouncer1.interval(5); debouncer2.interval(5); // Register binary input sensor to gw (they will be created as child devices) // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. // If S_LIGHT is used, remember to update variable type you send in. See "msg" above. gw.present(CHILD1_ID, S_DOOR); gw.present(CHILD2_ID, S_DOOR); //Tempsensor gw.present(CHILD_ID_HUM, S_HUM); gw.present(CHILD_ID_TEMP, S_TEMP); metric = gw.getConfig().isMetric; } // Check if digital input has changed and send in new value void loop() { //Kontakstschalter 1 debouncer1.update(); // Get the update value int valueReed1 = debouncer1.read(); if (valueReed1 != oldValueReed1) { // Send in the new value gw.send(msgReed1.set(valueReed1==HIGH ? 1 : 0)); Serial.println("Button 1 geschaltet"); oldValueReed1 = valueReed1; } //Kontakstschalter 2 debouncer2.update(); // Get the update value int valueReed2 = debouncer2.read(); if (valueReed2 != oldValueReed2) { // Send in the new value gw.send(msgReed2.set(valueReed2==HIGH ? 1 : 0)); Serial.println("Button 2 geschaltet"); oldValueReed2 = valueReed2; } //Tempsensor delay(dht.getMinimumSamplingPeriod()); float temperature = dht.getTemperature(); if (isnan(temperature)) { Serial.println("Failed reading temperature from DHT"); } else if (temperature != lastTemp) { lastTemp = temperature; if (!metric) { temperature = dht.toFahrenheit(temperature); } gw.send(msgTemp.set(temperature, 1)); Serial.print("T: "); Serial.println(temperature); } float humidity = dht.getHumidity(); if (isnan(humidity)) { Serial.println("Failed reading humidity from DHT"); } else if (humidity != lastHum) { lastHum = humidity; gw.send(msgHum.set(humidity, 1)); Serial.print("H: "); Serial.println(humidity); } //gw.sleep(SLEEP_TIME); //sleep a bit } -
ok guys, I finally set up my first sensor and it´s communicating well. I´ve attached two reed switch which work fine, only my temp snesor DHT11 doesn´t work. Are there any known issues with this sensor?
pls have a look at my setup and my code, thank you:
// Simple binary switch example // Connect button or door/window reed switch between // digitial I/O pin 3 (BUTTON1_PIN below) and GND. #include <MySensor.h> #include <SPI.h> // Define Node ID #define MY_NODE_ID 1 //Kontaktschalter #include <Bounce2.h> #define CHILD1_ID 1 // Kontaktschalter 1 #define CHILD2_ID 2 // Kontaktschalter 1 #define BUTTON1_PIN 5 // Kontaktschalter 1 #define BUTTON2_PIN 6 // Kontaktschalter 2 //Tempsensor #include <DHT.h> #define CHILD_ID_HUM 3 #define CHILD_ID_TEMP 4 #define HUMIDITY_SENSOR_DIGITAL_PIN 4 unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) MySensor gw; //Kontaktschalter Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); int oldValueReed1=-1; int oldValueReed2=-1; //tempsensor DHT dht; float lastTemp; float lastHum; boolean metric = true; //Messages // Kontaktschalter MyMessage msgReed1(CHILD1_ID,V_TRIPPED); // Kontaktschalter 1 MyMessage msgReed2(CHILD2_ID,V_TRIPPED); // Kontaktschalter 2 //TempMessage MyMessage msgHum(CHILD_ID_HUM, V_HUM); MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); void setup() { gw.begin(NULL, MY_NODE_ID, true); //Tempsensor dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); // Setup Kontaktschalter 1 pinMode(BUTTON1_PIN,INPUT); // Activate internal pull-up digitalWrite(BUTTON1_PIN,HIGH); // Setup Kontaktschalter 2 pinMode(BUTTON2_PIN,INPUT); // Activate internal pull-up digitalWrite(BUTTON2_PIN,HIGH); // After setting up the button, setup debouncer debouncer1.attach(BUTTON1_PIN); debouncer2.attach(BUTTON2_PIN); debouncer1.interval(5); debouncer2.interval(5); // Register binary input sensor to gw (they will be created as child devices) // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. // If S_LIGHT is used, remember to update variable type you send in. See "msg" above. gw.present(CHILD1_ID, S_DOOR); gw.present(CHILD2_ID, S_DOOR); //Tempsensor gw.present(CHILD_ID_HUM, S_HUM); gw.present(CHILD_ID_TEMP, S_TEMP); metric = gw.getConfig().isMetric; } // Check if digital input has changed and send in new value void loop() { //Kontakstschalter 1 debouncer1.update(); // Get the update value int valueReed1 = debouncer1.read(); if (valueReed1 != oldValueReed1) { // Send in the new value gw.send(msgReed1.set(valueReed1==HIGH ? 1 : 0)); Serial.println("Button 1 geschaltet"); oldValueReed1 = valueReed1; } //Kontakstschalter 2 debouncer2.update(); // Get the update value int valueReed2 = debouncer2.read(); if (valueReed2 != oldValueReed2) { // Send in the new value gw.send(msgReed2.set(valueReed2==HIGH ? 1 : 0)); Serial.println("Button 2 geschaltet"); oldValueReed2 = valueReed2; } //Tempsensor delay(dht.getMinimumSamplingPeriod()); float temperature = dht.getTemperature(); if (isnan(temperature)) { Serial.println("Failed reading temperature from DHT"); } else if (temperature != lastTemp) { lastTemp = temperature; if (!metric) { temperature = dht.toFahrenheit(temperature); } gw.send(msgTemp.set(temperature, 1)); Serial.print("T: "); Serial.println(temperature); } float humidity = dht.getHumidity(); if (isnan(humidity)) { Serial.println("Failed reading humidity from DHT"); } else if (humidity != lastHum) { lastHum = humidity; gw.send(msgHum.set(humidity, 1)); Serial.print("H: "); Serial.println(humidity); } //gw.sleep(SLEEP_TIME); //sleep a bit } -
ok guys, I finally set up my first sensor and it´s communicating well. I´ve attached two reed switch which work fine, only my temp snesor DHT11 doesn´t work. Are there any known issues with this sensor?
pls have a look at my setup and my code, thank you:
// Simple binary switch example // Connect button or door/window reed switch between // digitial I/O pin 3 (BUTTON1_PIN below) and GND. #include <MySensor.h> #include <SPI.h> // Define Node ID #define MY_NODE_ID 1 //Kontaktschalter #include <Bounce2.h> #define CHILD1_ID 1 // Kontaktschalter 1 #define CHILD2_ID 2 // Kontaktschalter 1 #define BUTTON1_PIN 5 // Kontaktschalter 1 #define BUTTON2_PIN 6 // Kontaktschalter 2 //Tempsensor #include <DHT.h> #define CHILD_ID_HUM 3 #define CHILD_ID_TEMP 4 #define HUMIDITY_SENSOR_DIGITAL_PIN 4 unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) MySensor gw; //Kontaktschalter Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); int oldValueReed1=-1; int oldValueReed2=-1; //tempsensor DHT dht; float lastTemp; float lastHum; boolean metric = true; //Messages // Kontaktschalter MyMessage msgReed1(CHILD1_ID,V_TRIPPED); // Kontaktschalter 1 MyMessage msgReed2(CHILD2_ID,V_TRIPPED); // Kontaktschalter 2 //TempMessage MyMessage msgHum(CHILD_ID_HUM, V_HUM); MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); void setup() { gw.begin(NULL, MY_NODE_ID, true); //Tempsensor dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); // Setup Kontaktschalter 1 pinMode(BUTTON1_PIN,INPUT); // Activate internal pull-up digitalWrite(BUTTON1_PIN,HIGH); // Setup Kontaktschalter 2 pinMode(BUTTON2_PIN,INPUT); // Activate internal pull-up digitalWrite(BUTTON2_PIN,HIGH); // After setting up the button, setup debouncer debouncer1.attach(BUTTON1_PIN); debouncer2.attach(BUTTON2_PIN); debouncer1.interval(5); debouncer2.interval(5); // Register binary input sensor to gw (they will be created as child devices) // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. // If S_LIGHT is used, remember to update variable type you send in. See "msg" above. gw.present(CHILD1_ID, S_DOOR); gw.present(CHILD2_ID, S_DOOR); //Tempsensor gw.present(CHILD_ID_HUM, S_HUM); gw.present(CHILD_ID_TEMP, S_TEMP); metric = gw.getConfig().isMetric; } // Check if digital input has changed and send in new value void loop() { //Kontakstschalter 1 debouncer1.update(); // Get the update value int valueReed1 = debouncer1.read(); if (valueReed1 != oldValueReed1) { // Send in the new value gw.send(msgReed1.set(valueReed1==HIGH ? 1 : 0)); Serial.println("Button 1 geschaltet"); oldValueReed1 = valueReed1; } //Kontakstschalter 2 debouncer2.update(); // Get the update value int valueReed2 = debouncer2.read(); if (valueReed2 != oldValueReed2) { // Send in the new value gw.send(msgReed2.set(valueReed2==HIGH ? 1 : 0)); Serial.println("Button 2 geschaltet"); oldValueReed2 = valueReed2; } //Tempsensor delay(dht.getMinimumSamplingPeriod()); float temperature = dht.getTemperature(); if (isnan(temperature)) { Serial.println("Failed reading temperature from DHT"); } else if (temperature != lastTemp) { lastTemp = temperature; if (!metric) { temperature = dht.toFahrenheit(temperature); } gw.send(msgTemp.set(temperature, 1)); Serial.print("T: "); Serial.println(temperature); } float humidity = dht.getHumidity(); if (isnan(humidity)) { Serial.println("Failed reading humidity from DHT"); } else if (humidity != lastHum) { lastHum = humidity; gw.send(msgHum.set(humidity, 1)); Serial.print("H: "); Serial.println(humidity); } //gw.sleep(SLEEP_TIME); //sleep a bit } -
Oh man, one problem solved, next just comes up...
So what can I Do now? Just upload the 8MHz bootloader and just use 8MHz instead of 1MHz?
edit: Ok, tested it, it works with the 8MHz Bootloader!
please explain one more time if I could just use the 8MHz Bootloader, I still could not fully understand why I should use the 1 MHz Bootloader (maybe because of my bad english and also my lack of electronics knowledge). Thank you very much!!
edit2: I measured 0,02 Ampere consumption, isn´t that too much?
-
Oh man, one problem solved, next just comes up...
So what can I Do now? Just upload the 8MHz bootloader and just use 8MHz instead of 1MHz?
edit: Ok, tested it, it works with the 8MHz Bootloader!
please explain one more time if I could just use the 8MHz Bootloader, I still could not fully understand why I should use the 1 MHz Bootloader (maybe because of my bad english and also my lack of electronics knowledge). Thank you very much!!
edit2: I measured 0,02 Ampere consumption, isn´t that too much?
-
OK thx for the hint, I guess I will just add a third AA battery, that should solve my problem...
-
I really don't want to spam this thread...
But from my arduino Uno the nrf24l01 module is also powered by 5V!?!
Edit : ah ok, the arduino is going to regulate down to 3.3v... Then I cant use 3AAs :(