πŸ’¬ Easy/Newbie PCB for MySensors


  • Mod

    just power it from the usb adapter, the pro mini can work at 5V. If you have other HW not 5V tolerant you need to use the RAW pin and let the pro mini regulator to its job. It all depends on what you want to do with the node



  • Dear @gohan !

    Thank for your help!
    Which configuratation should i use? Or do i have to modify one of the above configurations? (3.3V , 5V regulated, or 6-12V) ?


  • Mod

    There is no right answer since without knowing what you want to do, they could be all wrong or even all correct. πŸ™‚


  • Hardware Contributor

    @Tommas 5v + 3.3v pro mini there is no example for this. Add your 3.3v pro mini and radio. Connect 5v to raw and put a jumper/connect both reg and bat.

    If you want to use to for 2xaa please follow the example.



  • @sundberg84 I do have the same problem with my setup. As soon as power drops below 2.8 the radio will have problem connecting to gateway. Sometimes it connect after 10-15 tryes. Is there any way to see if nrf sending or any outer way to test stuff? Any ideas are welcome //HΓ₯kan


  • Hardware Contributor

    @keldandorin - are you using a booster as mentioned above?
    The problem is in that case noice introduces in the radio from the booster (a known issue). I will in the future try to buy me a oscilloscope and diagnose more... but for now, if you add a "bad/cheap" booster it will be this problem. 2.8v sounds really bad though, and most likley a really bad clone.

    You have two options.

    1. Try another booster, and/or try to filter with capacitors.
    2. Load a new bootloader that can handle lower voltages accoring to link above.

    Let me know if I can assist you in any way.



  • Dear @sundberg84 !
    Thank you! ANd which example should i follow with this modification?
    Thanks
    T



  • @gohan

    Dear gohan!
    I would like to power all my nodes from a central power source with 5V . I would like to use 3.3V microcontroller with 3V sensors... because of the voltage drop down caused by the distance (5-15m from the power source). Maybe there will be 1-2 battery powered sensor nodes..
    This is my plan.
    I dont like using battery. It is too hard for me to optimize the sensors for battery...

    Best regards
    T


  • Mod

    In that case you could also go for rs485 bus. Voltage sources could be also 7 or 9v since you will be using the internal regulator anyway. Most sensor can operate at 5v too, so you don't actually need 3.3v. Optimizing for battery isn't that bad too. Since you are powering the nodes you could also use esp8266 nodes



  • Dear @sundberg84

    If i use 5V regulated example, has it got 3.3V output for the sensors?

    Thanks
    T


  • Mod

    if you install the voltage regulator in the top left area, you will have the 3.3v ( if I got your question right)



  • @gohan

    Oh OK! Thank you! The decision is hard for me, which solution i should use:) .



  • @Tommas If you are using 5 volts in and not using a 3.3v pro mini that has the 3.3v regulated output, then you have to add a TO92 case style 3.3v regulator and two capacitors to the board. Here are some that should work. Whatever one you get, make sure you check the pinout against the markings on the board as not all regulators have the same pinout.
    http://www.mouser.com/Semiconductors/Power-Management-ICs/LDO-Voltage-Regulators/_/N-5cgac?P=1z0y3jsZ1z0wa2e&pop=88zz



  • Dear @dbemowsk

    I bought these: https://www.ebay.com/itm/401088383355

    Thank you!


  • Hardware Contributor

    @Tommas - this is the voltage regulator that the board is designed for so the markings/pinout will be right for you. If you put 5v on the PCB input and use 3.3v pro mini though, the only choise you have is to put 5v on RAW and let the onboard voltage regulator on the PCB regulate it down to 3.3v. The voltage regulator on the PCB only regulate the voltage to the radio and are meant for a 5v input on a 5v pro mini. Using raw means there is no need for the LE33.



  • @sundberg84 Is there any way to say if booster is a bad one or not before ordering them?
    The one I ordered was the one on shoping list from aliexpress. Will try I capacitator and see if I can get a new booster from kjell&Comany tomorrow just to try. Build a setup on bread bord where I powered radio with 2 AA and got the same result. Got a fju places where I like to put some sensors with no power so realy need to get this working :). Could the radiomodules be bad to?


  • Mod

    Bad quality from cheap Chinese suppliers, is always an option 😁


  • Hardware Contributor

    @keldandorin - could be a weak clone radio yes.
    Just to get your hopes up, I got booster driven nodes all around the place with Nrf24l01+ radio and they works great!
    I change battery every 1-1.5 years but as I said, the experience is that the radio - booster needs a good teamwork πŸ™‚



  • @sundberg84 Sounds good, Thats what I'm looking for. Have never worked with tinkers like this befor so everything is new. But this place is great thx for taking time.



  • Sorry, I'm a bit slow and maybe a little off-topic: A quicky:

    Can I read somewhere how payment is done when ordering from openhardware.io? On the start page for openhardware.io there is no clue. I've also tried to search this section (easy-newbie-pcb-for-mysensors) for "payment".

    Yes, I've read that the "order" is more like a forward of orderinformation to the supplier, but do I really need to order first and after that ask what payment solution is present?

    πŸ™‚


  • Hardware Contributor

    @pellusfromtellus - to get a 100% right answer we ping @hek but I recommend paypal!


  • Admin

    @pellusfromtellus

    I think most of them handle paypal/card. You can press the "Order" button to find out. Nothing is binding until payment has been done.



  • Is there a drilling and outline file available?


  • Hardware Contributor

    @Paul-Robertson - hi!
    Yes, but this is Eagles output gerber files.

    Drill: SundbergMys9.TXT
    Outline can be found in all other files:

    https://www.pcbway.com/project/share/How_to_generate_Gerber_from_Eagle.html

    0_1505990995661_upload-c5e3c1d3-3dfb-46dc-9e10-e2d5dbfaca0d


  • MySensors Evangelist

    Damn. Just missing the 0,1uF capacitor ..... to complete the 5v build. This will be my smallest build yet πŸ˜‰ using PCB v9



  • This post is deleted!



  • Mod

    If you want to use a lipo battery, you need a voltage regulator


  • Hardware Contributor

    @hiddenuser - well not out of the box as mentioned by gohan. Im not really sure what you want to do. Its not possible to use this instead of step-up booster since it outputs 5v and the step-up needs to output 3.3v. But with a voltage regulator in between maybe? As I said - don really understand so maybe you can explain some more about your project?


  • Mod

    @sundberg84 that tp4056 outputs just the lipo battery voltage



  • Thanks @sundberg84 and @gohan

    I have used made the board for 3.3v set up as per the instruction. I have usd the output from tp4056 into the Battery connector of the board I have a step board from https://www.aliexpress.com/item/New-Electric-Unit-1-PC-NEW-DC-0-8-3-3V-to-DC-3-3V-StepUP/32724361266.html According to the specification given in the same link it is supposed to stabilize to 3.3v above 3v but the sensor reports something else back to the gateway.

    0_1512985662819_a428954d-5f74-4026-8782-e12b51f52bf3-image.png


  • Hardware Contributor

    @hiddenuser - well, what would a battery measurer be if it reported a constant 3.3v boosted voltage? πŸ˜‰
    It all depends on how everything is connected (pictures?) but if you have connected it as battery instryctions the radio and voltage divider that measured the incoming battery are not a part of the booster circuit. This to prevent noice to the radio and to be able to actually measure the battery voltage and not step-up voltage which is the idea behind the board.


  • Mod

    @hiddenuser I'm missing how can you use a booster to get 3.3v from a lipo battery



  • hey, has anyone maybe made a fritzing drawing/component of the board?
    I know, I'm lazy as f but.. since the board is that easy, documenting with it could be easy as well πŸ™‚



  • @sundberg84 interesting question...or maybe stupid question not sure...

    i have a tonn of 3v pro mini's but im thinking of mains powering some for motion sensors.... would i set it up as battery, and then just use a voltage regulator on where the step up usually would be? or is there a better way to handle it?


  • Mod

    there is a voltage regulator footprint on the pcb made for that



  • ahhh thats cool... so use regulated instead and it will pull down the voltage for antenna over that side
    ...and the board can handle the voltage anyway so it should be fine....



  • @gohan The only voltage regulator that I know of on the board is mainly for the radio. Unless you are talking the one on the pro mini.

    @markjgabb If you want to do them from mains power, you might wan t to look at the HLK modules like these
    https://www.ebay.com/itm/1Pcs-Power-Supply-Step-Down-Buck-Isolated-Hlk-Pm03-220V-To-3-3V-Module-New-Ic-N/332047987473?epid=571729397&hash=item4d4f9a3311:g:nyMAAOSw4GVYPa8q
    Otherwise an old phone charger should work.


  • Mod

    @dbemowsk if I remember well the regulator Vout is also connected to the pro mini vcc



  • @gohan Have a bare board right in front of me. Ran continuity and no connection from regulator V-Out to VCC. VCC goes to the REG jumper and V-Out goes to the BAT jumper. VCC ties to the V-In on the regulator.



  • @gohan ayou wouldn't want to run the pro mini and the radio both off of that small regulator anyway. Takes too much from the radio.



  • @dbemowsk cheers for that...yeah i have a tonn of old 5v bricks lying around from old nokia chargers, so was just going to try use some of them up without having to buy anythiing else, as i have all of it on hand.... i have some LE33a's which should take care of any step down issues i think?



  • @markjgabb If you connect your 5V brick to the RAW pin, the onboard regulator on the pro mini will do.



  • @dbemowsk cheers mate, thats awesome...now i can blitz out some room based designs



  • @gohan @sundberg84
    This is my setup. my battery reading is a constant 2.75v, this is not true the multi meter says ~4v

    0_1513062564871_IMG_20171212_180306_1.jpg


  • Hardware Contributor

    @markjgabb @dbemowsk @gohan - I dont have much else to add, thanks for the input here. Using mains power I would also use HLK-PM01 and input the 5v to the pro mini. If you only have 3.3v pro mini you need to input this to RAW. I have made a breakout board for the HLK module if needed as well.

    https://www.openhardware.io/view/504/HLK-PM01-breakout-board


  • Hardware Contributor

    Well it looks like your battery goes to some sort of regulator before the Easy board? If so my guess is that that board is providing 2.7 v regardless of battery voltage? Have a look at @gohan and his posts about solar power and different batteries. EasyPCB is designed for 2xAA and it will not work with other voltages out of the box. The voltage divider is also dimensioned for 3.3v max and will not work with higher voltages. Again @gohan has made some experiments with this. Check his posts out. If you re-dimension the voltage divider it will work with your higher voltage.


  • Mod

    @hiddenuser I don't know why you have a booster in place (unless it is a buck boost) and you need to change the voltage divider resistors if you want to read higher voltages (look at my solar project). In addition I'd put in place a LDO regulator if you want to use a lipo battery since a normal voltage regulator would require a higher Vin than a lipo battery can provide.



  • @gohan said in πŸ’¬ Easy/Newbie PCB for MySensors:

    Thanks @gohan for the feedback. Can I have the link to your solar project!


  • Mod

    @hiddenuser look in the my project section (I'm on mobile now)



  • Hi Sundberg,

    I have read there could be some problem about radio connection if the temperature is ~0C or minus, I have met this issue so I will replace the existing 4.7Β΅ capacitor with a bigger, e.g. ~20Β΅.
    The battery measurement contains a 0.1 uF capacitor, What do you think I do have to replace it with an another bigger one ?
    thanks

    Barna


  • Hardware Contributor

    @barna - i don't know to be honest. As I wrote I had issues last winter but never with that 0.1 cap. I'm running second winter now (have been as low as -8C so far) without issues.




  • Hardware Contributor

    @barna said in πŸ’¬ Easy/Newbie PCB for MySensors:

    Hi Sundberg,

    I have read there could be some problem about radio connection if the temperature is ~0C or minus, I have met this issue so I will replace the existing 4.7Β΅ capacitor with a bigger, e.g. ~20Β΅.
    The battery measurement contains a 0.1 uF capacitor, What do you think I do have to replace it with an another bigger one ?
    thanks

    Barna

    I don't think you need, it's made to stabilize the measured voltage, in the worst case the measured voltage will be a little bit unstable but your node will still run fine.



  • on the subject of batteries i have to say im really impressed with the setup of these boards....
    ive got a DHT and lux resistor measuring every 10 minutes, and i cant even remember how long ago i last changed the batteries...i think its about 3-4 months now....nothing special, just aldi batteries (australian cheap shopping chain)

    last check they are still 65%



  • @markjgabb Don't know if it's the same chain, but we have aldi stores here in the US.
    0_1513550068757_11f86073-b6bf-40a7-be80-0b6115b268af-image.png



  • @dbemowsk It is. It's a german chain though πŸ˜‰



  • @marvin78 Never knew that.



  • Hi everybody. Finally got my newb pcb and I soldered everything needed for the pro mini 3.3v. But I ran into problems.

    I think it's the cheap chinese pdo mini but I want to ask you guys. Problem id that my node doesn't work. But when I debug my node I plug my pro mini in my computer's usb and then it works.

    What I could see is that when it is battery operated I can read a 3.3v value on the vcc pin of the pro mini. When I also connect via usb this value is about 3.5v.

    Could it be that my pro mini requires 3.5v.
    I did solder the capacitor for the radio and i'm using a 3.3v step up converter also.

    Thank you



  • @akamap an you post a picture of your board setup?


  • Mod

    @akamap without knowing how you are powering the node, it is difficult to say.


  • Hardware Contributor

    @akamap - listen to the guys above, let us know with pictures πŸ™‚ Its the best.
    Did you by any chance miss to solder to jumpers?
    The best approach is to measure with a multimeter... put the black to GND and measure your way through the circuit from batteries, booster, jumper, pro mini and radio with the red put on each components VCC (or Vout on booster). Then you know where it goes wrong. Try to follow the schematics or the traces in the pcb to figure out how the current flows.



  • @sundberg84 That's why I wanted him to send pictures. There are a number of variables that need to be in place depending on the configuration that you are using with this board. Is he using a 3.3 or 5 volt arduino, does he have a regulator, are the correct jumpers in place. Any one of these missing factors can make it not work.



  • EDIT : Seeing the pictures this big, I think I know why and it is my fault. I tried to save energy by desoldering the led on the arduino. I followed a post here on mysensors.org. But I just realized I might have desoldered the wrong thing on this arduino. I'm not sure what I desoldered, but it might be what is causing the problems (I desoldered the tiny thing below the led) I'll put a fresh one to see if this is working.

    Thanks

    Original response :

    Ok, thank for all the answers and here is more information.

    I power it via 2AA battery. I did put a jumper on the battery point. And I am using a pro mini 3.3v (Cheap chinese clone). I am using a step up regulator to step it up to 3.3v for the arduino.

    I measured the voltages and they are as follow :

    Without USB programmer (Not working) :
    Battery : 3.00V
    Input step up : 3.00V
    Output Step UP : 3.35V
    VCC and GND on arduino : 3.34V
    VCC and GND on Radio : 3.01V

    With the USB programmer pluggued in (Working) :
    Battery : 3.00V
    Input step up : 3.00V
    Output Step UP : 3.47V
    VCC and GND on arduino : 3.48V
    VCC and GND on Radio : 3.00V

    Another information, I did not solder directly the arduino pro mini (you will see on the pictures). I don't know what the are called but I'll call them "extender". I use them so I can unplug the arduino in case I fried the pro mini.

    Here are some pictures with and without the usb programmer plugged in :

    3_1515614804192_20180110_145714.jpg

    2_1515614804191_20180110_145654.jpg

    1_1515614804191_20180110_145643.jpg

    0_1515614804191_20180110_145634.jpg


  • Hardware Contributor

    @akamap thats just the resistor... should not be the problem.
    I cant see anything obvious. I have some radios without silkscreen and they work....... like a clone. Not the best but most work ok. Try adding a capacitor on the booster - might be a noisy one... I would recommend to try a 0,1uF ceramic if you have. Otherwise just wack in what you have... not to big i think.

    If you power it from the booster/bat you cant power it the same time from USB! Disconnect VCC from the ftdi adapter.
    Connet RX/TX and GND to begin with. RST if you need to upload. Two power sources makes one to much.


  • Mod

    @akamap remember also the cap on the battery measurement side if you want to get good readings. If you want to use batteries you need to remove the voltage regulator from the pro mini, once you done your troubleshooting



  • Thank you everyone. Everythings seems to be working now. I did solder a capacitor on the booster.

    But I don't think this was all that was bad. I also find out that when I touched the capacitor for the radio, I was having mixed result. So I soldered the capacitor directly on the radio.

    Now, everything works fine. I guess I burned the trace or something was creating a short with this part.

    I just need to remove the voltage regulator as suggested by gohan now and I can start testing my battery life.

    Thanks again. Great library, great forum but most of all, great community.


  • Hardware Contributor

    So its coming up for a new revision of the EasyPCB (both Nrf + RFM edition).
    I have had some suggestions from the community so far and some thoughs of myself:

    • ATSHA204A (signing)
    • Change 0,1uF and 10uF capacitor so now 10uF is on the input and 0,1uF on the output
    • Line up MysX connector for a more clean placement of daugherboards.

    Anyone have any other input before i start the work?
    I will not take any suggestions that will make the board heavy or non user-friendly. Still the same goal - only easy to use components, easy to assemble and easy to understand.


  • Mod

    How about a flash chip + 2 resistors for FOTA ? πŸ˜‡


  • Hardware Contributor

    @gohan - interesting. What would be the easiest way to do this do you think? Placement?
    Can I avoid SMD components?


  • Mod

    the flash chip is 8 pins smd unless you choose a specific breakout board, resistors are your choice; they could fit unterneath the pro mini or on the back side

    Also you may need to work on the NRF5x version too πŸ˜„



  • Put the battery measurement components under the Arduino. This makes the board more generic and frees up space on the right side of the board that can be used for more sensors. Expand the prototype area so that more sensors can be installed on the board.
    And if one uses the board for battery only, the whole right section can be cut off but the battery measurement circuit is still there.



  • Now that I think of it, there is a small difference between the NRF and RFM board, the prototype area on the RFM board is not correctly spaced, the holes are a fraction to narrow spaced, one cant fit a header there without bending the pins


  • Mod

    @mickecarlsson said in πŸ’¬ Easy/Newbie PCB for MySensors:

    Now that I think of it, there is a small difference between the NRF and RFM board, the prototype area on the RFM board is not correctly spaced, the holes are a fraction to narrow spaced, one cant fit a header there without bending the pins

    Yes, I noticed that too


  • Hardware Contributor

    @gohan @mickecarlsson
    Thanks for your input! I will probably redo the Nrf version in KiCad since the old in is in eagle so I will line everything up πŸ™‚

    About the battery measurement components under the Arduino - I was thinking of putting the signing chip there.
    If you want to use the battery divider you need the booster as well so therefore its nessecary to have the board uncut. with this in mind I think it does not matter about the voltage divider placement or?

    Im not sure a 8 pin SMD component is right for EasyPCB - It seems a bit to advanced and unclear?
    Maybe I can do this with a MysX shield?



  • If I don’t use the booster and connect both BAT and REG and feed the board with two AA batteries i can use the battery components to measure the voltage of the battery. That is how I use it today.


  • Hardware Contributor

    @mickecarlsson - ahh, I see - good one!
    Let me think and maybe try some in KiCad and i let you know what I descide.


  • Mod

    The flash chip uses pins that are not on the connector.
    I understand that you want to keep it simple, but adding the signing chip and the flash chip to a project it is not very easy either


  • Hardware Contributor

    @gohan - you are right.
    Maybe I can use the back side for the smd parts? Again I will test and see how it works out in KiCad. I might do some testing and post to get feedback. Im really afraid I will lose the easy to use function which the pcb is designed for though and if I feel I do the smd parts will be excluded.

    Maybe I could do a rev 10 which includes more heavy stuff and keep rev 9 as well as the Easy version.


  • Mod

    I don't see it as a complicated thing, since if you don't need it then you just don't use it and you only have a few smd pads unused.


  • Hardware Contributor

    @gohan - valid point!
    What makes it complicated is if you are a new user who sees all these pads and dont understand if they have to be populated or used. But by adding those with clear labels on the bottom side might do the trick.


  • Mod

    @sundberg84 Exactly, maybe a label like "signing" and "FOTA" would make it more obvious to the user (of course it needs to be added to the project page too)


  • Hardware Contributor

    @mickecarlsson said in πŸ’¬ Easy/Newbie PCB for MySensors:

    If I don’t use the booster and connect both BAT and REG and feed the board with two AA batteries i can use the battery components to measure the voltage of the battery. That is how I use it today.

    Why dont you use the internal library to measure the battery voltage? Im thinking about this and can't find a reason to move the voltage divider since without the booster you could just use the internalref and a library to measure the voltage?



  • @sundberg84 said in πŸ’¬ Easy/Newbie PCB for MySensors:

    Why dont you use the internal library to measure the battery voltage? Im thinking about this and can't find a reason to move the voltage divider since without the booster you could just use the internalref and a library to measure the voltage?

    Good point, I have not thought of that. I will test it it. And will probably save some uA in the process. Thanks,



  • @sundberg84 I have now a node running with the BAT link removed, the REG link attached and I have used the Arduino_Vcc library.
    The battery report are consistent with the battery voltage measured with a digital volt meter.
    EDIT: Code below had a bug in it, I have fixed the bug and updated the code. The bug affected the temperature readings
    So, to run the RFM69 board on two AA batteries I have done the following:

    1. Removed regulator and led from Arduino
    2. Burned a new bootloader with a 1.7 volt BOD
    3. Put a link in REG position
    4. Solder radio to board
    5. Solder antenna to board.
    6. Solder BME280 to power and A5, A6
      And that's it.
      Here is my code:
    /**
     * 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.
     *
     *******************************
     *
     * DESCRIPTION
     *
     * This is a sketch I use to measure temperature, battery level and signal level on
     * my Easy/Newbie PCB for MySensors (rev 9)
     * Hardware used:
     * Easy/Newbie PCB for MySensors
     * BME280 (I only use temperature and humidity, all code for barometic pressure removed)
     *
     */
    
    // Enable debug prints to serial monitor
    //#define MY_DEBUG
    #define   MY_SPLASH_SCREEN_DISABLED  // This saves a couple of bytes
    // Enable and select radio type attached
    #define   MY_RADIO_RFM69
    #define   MY_IS_RFM69HW
    #define   MY_RFM69_NEW_DRIVER
    #define   MY_RFM69_FREQUENCY RFM69_868MHZ
    // #define   MY_RFM69_ENABLE_ENCRYPTION
    
    #include <MySensors.h>
    #include <Wire.h>       // Enables the Wire communication protocol.
    // Bosch BME280 Embedded Adventures MOD-1022 weather multi-sensor Arduino code, 
    // written originally by Embedded Adventures. 
    // https://github.com/embeddedadventures/BME280
    #include <BME280_MOD-1022.h>
    // Internal battery measurement https://github.com/Yveaux/arduino_vcc
    #include <Vcc.h>
    
    #define SKETCH_NAME    "Test-4"
    #define SKETCH_VERSION "1.10"
    
    // Battery measurements
    const float VccMin        = 2.0*1.0;  // Min Vcc level, in Volts. Example for 2xAA Alkaline.
    const float VccMax        = 2.0*1.5;  // Max Vcc level, in Volts. Example for 2xAA Alkaline.
    const float VccCorrection = 3.02/3.12;  // Measured Vcc by multimeter divided by reported Vcc
    
    Vcc vcc(VccCorrection);
    
    // VARIABLES YOU CAN CHANGE
    // Send temperature only if it has changed? 1 = Yes 0 = No.
    #define COMPARE_TEMP 0
    // Set this value to the minimum change in temperature to measure.
    // BME280 has +-0.5 degrees precision, so it really doesn't matter that much.
    float tempThreshold = 0.5;
    // Send temperature only if changed? 1 = Yes 0 = No.
    #define COMPARE_HUM 0
    // Set this value to the minimum change in humidity to measure.
    // BME280 has +-3% relative humidity precision, so it really doesn't matter that much.
    float humThreshold = 0.5;
    
    #define TEMP_CHILD_ID       1
    #define HUM_CHILD_ID        2
    #define VOLTAGE_CHILD_ID    3
    
    float lastTemperature = -1;   // Store previous measurement
    float lastHumidity =    -1;   // Stores the previous measurement
    int sendBattery = 6;          // report battery level only after 6 loops = 6*4 mintes = 24 minutes
    int batteryLoop = 0;          // Placeholder for batteryloop
    
    unsigned long FOUR_MINUTE_SEND_FREQUENCY = 4 * 60000;  // Time between send (in milliseconds).
    
    // MYSENSORS COMMUNICATION VARIABLES
    MyMessage temperatureMsg(TEMP_CHILD_ID, V_TEMP);
    MyMessage humidityMsg(HUM_CHILD_ID, V_HUM);
    MyMessage voltageMsg(VOLTAGE_CHILD_ID, V_VOLTAGE);
    
    void setup()
    {
    
    #ifdef MY_DEBUG
      Serial.begin(115200);
    #endif
    
      Wire.begin(); // For the BME280 sensor
    #ifdef MY_DEBUG
      Serial.println(F("Starting ..."));
    #endif
    }
    
    void presentation()
    {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
      // Present the sensors to the gateway and controller
      present(TEMP_CHILD_ID, S_TEMP, "Temperature Test-4");
      present(HUM_CHILD_ID, S_HUM,   "Relative humidity Test-4");
      present(VOLTAGE_CHILD_ID, S_MULTIMETER, "Battery Test-4" );
    }
    
    void loop()
    {
    #ifdef MY_DEBUG
      Serial.println(F("Read BME280 and report it's values."));
    #endif
      GetTemperatureHumidity(); // Get temperature and humidity
    
      if(batteryLoop > sendBattery) { // Is the batteryLoop higher than sendBattery?
    #ifdef MY_DEBUG
        Serial.println(F("Read the battery voltage and report it."));
    #endif
        MeasureBattery();         // Measure and report battery level
        batteryLoop = 0;          // Reset batteryLoop count
    }
    #ifdef MY_DEBUG
      Serial.print(F("Go to sleep for: "));
      Serial.print(FOUR_MINUTE_SEND_FREQUENCY / 60000);
      Serial.println(F(" minutes."));
    #endif
      batteryLoop++;
      sleep(FOUR_MINUTE_SEND_FREQUENCY);        // Sleep for 4 minutes
    }
    
    void GetTemperatureHumidity()
    {
    #ifdef MY_DEBUG
      Serial.println("");
      Serial.println(F("BME280 - Requesting new data from sensor module."));
    #endif
      BME280.readCompensationParams();    // Need to read the NVM compensation parameters.
      // Normal mode for regular automatic samples
      BME280.writeStandbyTime(tsb_0p5ms);         // tsb = 0.5ms
      BME280.writeFilterCoefficient(fc_16);       // IIR Filter coefficient 16
      BME280.writeOversamplingPressure(os16x);    // pressure x16
      BME280.writeOversamplingTemperature(os8x);  // temperature x8
      BME280.writeOversamplingHumidity(os8x);     // humidity x8
      BME280.writeMode(smNormal);
        
    #ifdef MY_DEBUG
      Serial.println(F("Getting new values"));
    #endif
      while (BME280.isMeasuring()) {  // Wait for BME280 to fininsh reading data
    #ifdef MY_DEBUG
        Serial.println(F("Measuring..."));
    #endif
        delay(50);
      }
      Serial.println(F("Done!"));
      // Read out the data - must do this before calling the getxxxxx routines
      BME280.readMeasurements();
      float temperature = BME280.getTemperatureMostAccurate();  // Get the temperature first.
      float humidity = BME280.getHumidityMostAccurate();        // Get the humidity.
    #ifdef MY_DEBUG
      Serial.print(F("BME280 - Temperature = "));
      Serial.print(temperature);
      Serial.println(" Β°C");
      Serial.print(F("BME280 - Humidity = "));
      Serial.print(humidity);
      Serial.println(F(" %"));
    #endif
    
      // Now, let's send the measurements to the gateway.
      // Send temperature if the temperature difference bigger than the threshold
      if (COMPARE_TEMP == 1 && abs(temperature - lastTemperature) < tempThreshold) { 
    #ifdef MY_DEBUG
        Serial.print(temperature - lastTemperature);
        Serial.println(F(" Temperature difference too small, don't send it to gateway."));
    #endif
      } else {
    #ifdef MY_DEBUG
          Serial.println(F("Sending new temperature to the gateway."));
    #endif
          send(temperatureMsg.set(temperature, 1));
          lastTemperature = temperature; // Save temperatures for compare in the next round.
      } 
      // Send humidity if the humidity difference is bigger than the threshold.
      if (COMPARE_TEMP == 1 && abs(humidity - lastHumidity) < humThreshold) { 
    #ifdef MY_DEBUG
        Serial.print(humidity - lastHumidity);
        Serial.println(F(" Humidity difference too small, don't send it to the gateway."));
    #endif
      } else {
    #ifdef MY_DEBUG
        Serial.println(F("BME280 - Sending the new humidity to the gateway."));
    #endif
        send(humidityMsg.set(humidity, 1));
        lastHumidity = humidity; // Save new humidity to be able to compare in the next round.
      }
    #ifdef MY_DEBUG
      Serial.println(F("BME280 - Measurement complete. Putting sensor to sleep."));
    #endif
      BME280.writeMode(smSleep);  // set the BME280to sleep mode, save battery
    } // GetTemperatureHumidity
    
    /*
    *
    * MeasureBattery 
    *
    *
    */
    void MeasureBattery() //The battery calculations
    {
      float Vbat = vcc.Read_Volts();
      int batteryPercent = static_cast<int>(vcc.Read_Perc(VccMin, VccMax));
    
    #ifdef MY_DEBUG
      Serial.print(F("Battery percent: ")); 
      Serial.print(batteryPercent); 
      Serial.println(" %"); 
      Serial.print(F("Battery Voltage: ")); 
      Serial.print(Vbat); 
      Serial.println(F(" Volts"));
    #endif
        sendBatteryLevel(batteryPercent);
        send(voltageMsg.set(Vbat,2)); //send battery in Volt 2 decimal places
    }
    
    
    

  • Hardware Contributor

    @mickecarlsson - nice work! Let us know how it turns out πŸ™‚
    Any pictures of this you can share?

    I did see you put VccMin to 1,2V and this might calculate so the battery will be @ 30% when the BOD hits you. I would put this to 2.0v if you are using a internal 8mhz bootloader. https://forum.mysensors.org/topic/7296/how-to-burn-fuses-so-that-pro-mini-3-3v-would-go-down-to-1-8v-solved/15



  • @sundberg84 Hi, I soldered a board holding a humidity and temperature sensor. That is working fine and reporting to may gateway (mqtt). Only thing which I do not get working ok is the battery level measurement. As I already posted in an other topic here.

    Here are some pictures of my board. The bat jumper is connected with a wire on the bottom. And the code I use on it right now.
    I already changed the pro mini for a fresh soldered one but still getting the the same result. Just ones giving the volt and % and after that only giving 0 volt as output.
    tried to include delay(500) in the sketch but that did not help. So how to solve this?

    
     
    #define MY_NODE_ID 2
    #define MY_PARENT_NODE_ID 0
    #define MY_PARENT_NODE_IS_STATIC
    
    // Enable debug prints
    #define MY_DEBUG
    
    // Enable and select radio type attached 
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    //#define MY_RS485
     
    #include <SparkFunHTU21D.h>
    #include <MySensors.h>  
    #include <Wire.h>
    #include <SPI.h>
    
    // Force sending an update of the temperature after n sensor reads, so a controller showing the
    // timestamp of the last update doesn't show something like 3 hours in the unlikely case, that
    // the value didn't change since;
    // i.e. the sensor would force sending an update every UPDATE_INTERVAL*FORCE_UPDATE_N_READS [ms]
    //static const uint8_t FORCE_UPDATE_N_READS = 10;
    
    #define CHILD_ID_HUM 0
    #define CHILD_ID_TEMP 1
    #define CHILD_ID_BATTERY 2
    //#define CHILD_ID_VOLT 2
    #define CHILD_ID_PRCNT 3
    
    float lastTemp;
    float lastHum;
    
    uint8_t nNoUpdatesTemp;
    uint8_t nNoUpdatesHum;
    boolean metric = true;
    
    
    
    
    void presentation()  
    { 
     // Send the Sketch Version Information to the Gateway                                                                                                                     
      sendSketchInfo("Humidity", "2.0");      
       
     // Register all sensors to gw (they will be created as child devices)                                                                                                     
      present(CHILD_ID_HUM, S_HUM);                                                                                                                                          
      present(CHILD_ID_TEMP, S_TEMP);
       present(CHILD_ID_BATTERY, S_MULTIMETER);                                                                                                                                         
      //metric = getControllerConfig().isMetric;
    
    
       
    }
    
    int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
                                                                                                                                                      
    unsigned long SLEEP_TIME = 60000; // Sleep time between reads (in milliseconds)                                                                                             
    static int oldBatteryPcnt = 0;                                                                                                                                                                        
                                                                                                                                                                   
                                                                                                                                                                            
    //Create an instance of the object                                                                                                                                          
    HTU21D myHumidity;                                                                                                                                                         
    
                                                                                                                                                                                                                                                                                                                                 
    MyMessage msgHum(CHILD_ID_HUM, V_HUM);                                                                                                                                      
    MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);                                                                                                                                   
    MyMessage msgBattery(CHILD_ID_BATTERY, V_VOLTAGE);
    //MyMessage msgBattery(CHILD_ID_BATTERY, V_PRCNT);
    
    
    void setup() {
        myHumidity.begin();
    
         // use the 1.1 V internal reference
    #if defined(__AVR_ATmega2560__)
        analogReference(INTERNAL1V1);
    #else
        analogReference(INTERNAL);
    #endif
    
    
    } 
                                                                                                                                                                                                                                                                                                                                                     
    void loop()                                                                                                                                                                 
    {                                                                                                                                                                           
      float temperature = myHumidity.readTemperature();                                                                                                                         
      //if (!metric) {                                                                                                                                                            
      //    temperature = (temperature * 1.8) + 32.0;                                                                                                                             
      //}                                                                                                                                                                         
      send(msgTemp.set(temperature, 1));
      Serial.print("T: ");
      Serial.println(temperature);                                                                                                                                     
    
      float humidity = myHumidity.readHumidity();                                                                                                                               
      send(msgHum.set(humidity, 1));                                                                                                                                         
      Serial.print("H: ");
      Serial.println(humidity);
    
    
       // get the battery Voltage
         
        int sensorValue = analogRead(BATTERY_SENSE_PIN);
        delay(500);
    #ifdef MY_DEBUG
        Serial.println(sensorValue);
    #endif
    
        // 1M, 470K divider across battery and using internal ADC ref of 1.1V
        // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
        // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
        // 3.44/1023 = Volts per bit = 0.003363075
        int batteryPcnt = sensorValue / 10;
    
    #ifdef MY_DEBUG
        float batteryV  = sensorValue * 0.003363075;
        Serial.print("Child ID ");
        Serial.print(CHILD_ID_BATTERY);
        Serial.print("Battery Voltage: ");
        Serial.print(batteryV);
        Serial.println(" V");
    
        Serial.print("Battery Percent: ");
        Serial.print(batteryPcnt);
        Serial.println(" %");
    #endif
    
        if (oldBatteryPcnt != batteryPcnt) {
            // Power up radio after sleep
                  
            sendBatteryLevel(batteryPcnt);
            oldBatteryPcnt = batteryPcnt;
        } 
                                                                                                                                                                          
      sleep(SLEEP_TIME); //sleep a bit  
                                                                                                                                           
    }
    

    0_1518613859739_IMG_5970.jpg 0_1518613878092_IMG_5971.jpg 0_1518613893620_IMG_5972.jpg 1_1518613931939_IMG_5907.jpg 0_1518613931939_IMG_5906.jpg 0_1518613977125_IMG_5908.jpg


  • Mod

    I don't think it is PCB related, try to make sure it is not a faulty arduino



  • @gohan said in πŸ’¬ Easy/Newbie PCB for MySensors:

    I don't think it is PCB related, try to make sure it is not a faulty arduino

    I already changed the arduino for a fresh soldered one but that did not alter things.


  • Hardware Contributor

    @mr_sensor - I can not see any errors on the pictures you posted.
    Can you measure the voltage on Booster-Vout and also on this pad.

    0_1518627818269_d0a0507b-dcfd-45c0-a8a7-288e718afc3d-image.png



  • @sundberg84 said in πŸ’¬ Easy/Newbie PCB for MySensors:

    @mr_sensor - I can not see any errors on the pictures you posted.
    Can you measure the voltage on Booster-Vout and also on this pad.

    0_1518627818269_d0a0507b-dcfd-45c0-a8a7-288e718afc3d-image.png

    I did measure the parts you mentioned. Booster is 3,36 v and the other pad is 0,00 the input strait from the batteries is 2,80 v

    Also, Just for my info, does it matter how the resistors or capacitors are soldered on the board? My biggest problem is always determine the right resistors value and the right way to solder them (+ -). On the pcb some of them are coded (very handy for me as a beginner) with a G but not all of them?
    So my worry was that I maybe have soldered the "battery measurer" ones in the wring direction? Could that be the problem here?


  • Mod

    Resistors can be soldered either way, but if you read 0v on that capacitor pin it mean you have a problem between the battery and the capacitor, so you have to backtrack the connection that is missing



  • @gohan said in πŸ’¬ Easy/Newbie PCB for MySensors:

    Resistors can be soldered either way, but if you read 0v on that capacitor pin it mean you have a problem between the battery and the capacitor, so you have to backtrack the connection that is missing

    I measured the capacitor again and get a 0,10 output.


  • Mod

    What are the resistor values you used? 0.1v is quite low



  • @gohan said in πŸ’¬ Easy/Newbie PCB for MySensors:

    What are the resistor values you used? 0.1v is quite low

    Maybe I used the wrong capacitor it says 1uf (50v) but now I see it has to be 0,1uf could that be the problem here?


  • Hardware Contributor

    Capacitor value does not change the voltage. The resistors does... I would double check that you use the right resistors. For example it's easy to use a resistor marked 1k instead of 1M. With 3.3v you should have around 1v on the capacitor.


  • Mod

    you are also missing the capacitor on the booster output for better stability



  • @gohan said in πŸ’¬ Easy/Newbie PCB for MySensors:

    you are also missing the capacitor on the booster output for better stability

    Ok, I assumed it was not needed when using a battery. Which one to use there?


  • Mod

    It is needed if you use a booster. Look at project page for details.


  • Hardware Contributor

    @mr_sensor a advice is to measure the resistance again over the resistors.



Suggested Topics

0
Online

11.4k
Users

11.1k
Topics

112.7k
Posts