💬 MyMultisensors
-
Hi, which tool do you use for programming with your pogo pin avr isp ?
Why didn't use pogo pin for FTDI too ?
-
you can also use pogopin for ftdi, why not
for avrisp, i use an usbasp.
-
@scalz Thx but how do you connect your USBASP on the pogo pins ?
I use an usbasp like this http://d1gsvnjtkwr6dd.cloudfront.net/large/AC-PG-USBASP_LRG.jpg but i don't see how to connect him on the pogo pins
-
nothing fancy..with dupont cable.
of course you won't connect the pogo directly on the usbasp.
make a small adapter. simple and cheap
Example with ftdi adapter
-
@scalz Awesome board, really. However, I'm a bit worried about its practical use. You see, the motion sensors are commonly placed near the ceiling or sometimes on the ceiling. This may induce a serious drift in the reported temperature. Ideally, a temperature sensor should be placed in the middle of the wall.
Some people would have the impression that they're wasting energy on heating during winter while others would boost their A/C units during the summer just to read they temperature they feel confortable with. This effect would be mitigate by either concealing the motion sensor at a proper height for temperature reading, or use a reference sensor for calibration and compensate the reported value of an improperly placed sensor, and that's assuming that the seasonal variation is linear.
Anyway, excellent SMD work, I'm still in the PTH ice age
-
@mihai-aldea
thx
of course i won't use temperature/hum sensor on the ceiling. Boards are small i can put them everywhere i want.
On my side, i just need one temp/hum/lum per room, and at least one PIR. This board needs to be well placed of course.
But if i need more PIR only, or temp/hum only... it's also possible. So i don't need to have a dedicated pcb per use. I stencil only what i need
-
I guess ordering the pcb will only get me the pcb. I need to do the soldering etc myself ?
But I really wonder how to solder such a board seemingly being smd soldering. Are there any guides available for someone like me (pretty handy, but not experienced in this hardware stuff) ?
Thanks !
-
@Sander-Teunissen said:
I guess ordering the pcb will only get me the pcb. I need to do the soldering etc myself ?
But I really wonder how to solder such a board seemingly being smd soldering. Are there any guides available for someone like me (pretty handy, but not experienced in this hardware stuff) ?
Thanks !@hek
Speaking of which, I thought there were going to be some mysensors manufacturering partners who would actually make this stuff, including the soldering. When is that going to happen?
-
i've been so busy during december, i'll be back for the new year
About pcba (assembling), it's already possible to use partners in your openhardware account. They may ask for more details if projects need it.
-
@scalz
Would they actually make a quantity 1?
-
@scalz said:
But if i need more PIR only, or temp/hum only... it's also possible. So i don't need to have a dedicated pcb per use. I stencil only what i need
Yeah, makes sense, a modular sensor PCB, a more advanced version than my Si7021 / DS18B20+ or PIR / door-window PCBs.
-
PCBWay have quoted a few fully assembled boards on openhardware.io but the prices is pretty high as they won't stock/produce larger batches.
It's a bit problematic to get low price at low volumes (and low financial commitment).
I suggest hardware contributors to setup some cooperation directly with the manufacturers. You should have a direct channel to them in the closed manufacturing forum here (accessible for all open hardware contributors).
-
@hek Have you considered using the Seeedstudio PCB assembly service? I haven't tried this service as all my PCB's are using old school PTH. But will try them at some point. It says that "Assembly Fee Starts from $25" but there's no mention whether it's a flat fee or it includes some components assembly. The pricing information is rather fuzzy and I wasn't needing the service for time being anyway so I didn't ask.
-
Yes, Seeed Studio have access to quote assembled boards (since a couple of weeks back) on openhardware.io, but they haven't so far as it is a bit more complicated (time consuming) to get a accurate price.
@scalz and I have been in contact with Seed about this particular board. But we've not had time to follow up on some of their documentation requirements.
-
@scalz said:
I stencil only what i need
I know it's a probably a bit late now, but have you considered making a separate board only for the PIR ?
Then the "main" board with other sensors would be (relatively) easy to solder and cheap to produce by PCBA, then people could order the PCBA of the PIR only separately if they need.And it would be pretty useful for every other board maker on this forum also as a low power PIR is not a real option
I'm thinking about stealing your design to make a dedicated PIR child board, but I'm afraid my routing skills and electronic knowledge are not good enough yet to make a stable solution that will not be rigged by false detection problems
-
@Nca78
My best wishes for the new yearI designed this little pir sensor board last month with an optional lux sensor which i think is a nice sensor associated with a PIR. I will post files soon (I'm recovering today, phew!)
https://www.openhardware.io/view/292/Motion-And-Lux-Shield-V1
I also derivated it with MYSX connector, so it could be plugged on some new neat sensebender mk for instanceAnd i've asked a pcba for this sensor board, for curiosity. but i've been busy during december.. let's see what we'll get
But about MyMultisensors. I've designed V2 last month. I didn't need it..just because i wanted to try.
I've improved cost, changed PIR strategy, new mcu, still low power, and size is 30.5x25.5 ! with all sensors, and a new thing too. I stop talking.I should get the pcb soon and i'll show. .
Also, that will be a time2time work on the software part because of the mcu choice.
-
Any news about the enclosure ? Or did i miss a comment
-
Hello, this is really an excellent sensor!
I would like to buy the components for this project, but I do not know which to choose precisely: when I am looking for a capacitor 100n pack 0603 I have 16 V, 20 V, 15%, 20% etc ...
Do you have a list of references to help us?
Thanks !
-
I'll put stl for box soon, i need to check few things, and i'm busy.
As i've no time for the moment to upload a complete list with manufacturer parts etc.. it's a 3.3v board without regulator, so with passive >6V (for the 100uF for instance) you should be fine. So for others, 16v etc is enough. Rule i use in general, is 2x what my boards need
-
Thanks, and is it OK if I buy 16V for the passive too ?
Like this one http://www.conrad.fr/ce/fr/product/457889/Condensateur-cramique-CMS-0603-Kemet-C0603C104K4RAC-01-F-16-V-10-X7R-1-pcs?ref=searchDetail for the 100nF for instance.
-
Yes it's OK to buy 16V. And it should be a rule to buy x7r, so you should be good with those.
But for big values capacitors (used as power reserve), try to take as low voltage as possible on your circuit as leakage is proportionnal to rated voltage.
-
Thank you so much, so I will buy 16V for 1u capacitor or more, and 6.3V for others.
And is there a rule for active ? (Watts, volts, amps...)
-
@particle said:
Thank you so much, so I will buy 16V for 1u capacitor or more, and 6.3V for others.
No, it's the opposite
The higher the voltage rating, the more leakage/losses you will have. It's not important for small capacitors, but for reserve capacitors like 100µF it's better to take as low as possible, basically 2x the voltage used on your board.
Honestly it's not a big issue if you use 16V instead of 6V, but with a board as optimized for battery life as this one, it would be sad not to optimize the capacitors also
-
OK understood, it's clear now !
And yes with the optimization work, I would like to pay tribute to him!
And is there a rule for active ? (Watts, volts, amps...)
-
Hey!
Sorry for being so late, too much pending projects
but here is how looks the custom box for my project. I need to polish a few things, especially sort of mounting plate, then i'll release my stl.
Box is 62x29x 11.6mm
No nails no screws.
i don't like to search my screwdriver or needing screws, or a shorting circuit screw.. So when i can i prefer snaps!And in real
See you soon!
-
@scalz Very good work dude ! What about de V2 ? because i want to build this awesome node but i have read somewhere, you are working on the V2
-
oki.
v2 won't be released soon (not this month sure) because i miss time, also it's not mysensors compatible yet. and not rfm69 too
-
@scalz Oki. And for the nrf24 version ?
-
Unfortunately this circuit and pcb contain a little mistake in reverse polarity protection module. Q1 must be connected as on the following diagram
So just reverse connections of drain and source of Q1, and the next version of your board will contain correct reverse polarity protection
PS
Otherwise your circuit will be powered through mosfet body diode (with a drop to ~0.6V of course) when polarity is crossed.
-
@Koresh thx for feedback Files are now updated and added a note
@tonnerre33 sorry for late reply. yes this will be nrf24 compatible, not rfm69. i'll try to show something soon, time does not help me!
-
@scalz nrf24 for the V1 or V2? Because if V2 isn't mysensors compatible, i prefer use V1 but in nrf24 version
-
So there is no option yet to order complete boards with components in place from manufacturarer? Or am i not getting openhardware correct. Order 10 PCBs will just get me the pcb right?
-
@Yeitso you are right, 10pcbs order will just give you the pcb
-
I'm finalizing the nrf24 version because it's a nice board, that would be too bad for nrf24 user
Did you finish the nrf24 version @scalz ?
-
@tonnerre33 sorry for delay. yep, sure i finished it a while (rev 1.1 nrf), never ordered it, i use rfm for this node. but i'll upload this week oki
-
@scalz Thx a lot ! I tried to replace the transmitter myself but the routing is too hard for me.
I'll try to check the schema before order the board
-
This looks like an awesome unit! Is there a way to buy this with components assembled? Looks like a lot of work to solder all those smds..
-
I also wish I could buy assembled ones.
-
Likewise, to be able to buy assembled would be great
-
@scalz hi, excellent sensor! Do you know if the atmega328 memory is enough? You must have a large sketch for all sensors + signin
-
@alexsh1 thx
memory ok if sketch optimized (radio driver footprint too) and without much debug msg.
V2 will improve memory, cost and device size (will be 9in1 this time so i needed more mem) but for nrf24 networks only. i should release it soon if i can get rid of a little sw bug..
-
How long can you get these running on a single battery?
-
@scalz Would also be very interested in buying assembled modules. But why no more RFM69?
-
@mpp I suppose depends on which battery and what sensors - there are a few options here.
-
@scalz atmega328 is only good for simple sketches nowadays. I am struggling with a simple temp/hum/baro sensor with signing and debug as It runs on low memory and the sensor freezes after a few hours. I suppose we have to move to SAMD.
Do you have the STL file for the box please?
-
@alexsh1 regarding low memory problems, debug is intended for just that; debug. Once deployed, you can disable debug to ensure the longevity of your program. Probably the sketch eventually dies due to stack shortage.
-
@Anticimex Completely agree. Having said that I have a few nodes where I left debug purely for convenience. I do not want to re-flash the node to debug it in case need be. Right now I am in the process of changing the GW and may need to see node's debug.
-
@alexsh1
I agree with you about 328 and 8bits. And that's a while i've done a board for these
I won't use it in v2 though, tiny 9in1... not possible!
I also have custom SAMD boards, missing time to release those one too, but imho these mcu are not ultra low power (SAML is).I'll publish stl this week..
-
@scalz ATSAM D21 is already compatible with MySensors, whereas ATSAM L21 may be in the pipeline. So for now, we all are stuck with SAMD.
Looking forward to your stl
-
Phenomenal!
I have a stupid question.. clicking buy on the page.. what exactly does that buy you>?
-
@Konrad-Walsh You buy PCBs (10 0r 15 of them).
-
I am sorry.. I should have been more clear...
When you say PCB.. Is that a fully assembled product with all the mentioned sensors? Or is it a board and you add sensors to it..Please excuse my ignorance
-
@Konrad-Walsh Click on the link and see it yourself
PCB means a bare board and not a ready product. You have to procure parts and assemble it.
-
@alexsh1 Thank you
-
@Konrad-Walsh said in MyMultisensors:
you
No problem.
@scalz There is a lot of interest from others to have an assembled sensor. Maybe as a suggestion, you would be interested talking to Itead or similar guys to get it arranged?
Personally, I am comfortable assembling an SMD board down to 0605 (though it is more difficult with the fan). My preference would be 0805 and up
-
thx for the interest though
for the moment, the quotation i got was not so great imho.. oki i'll try again with other fabhouse for this one as v2 will cover nrf only
-
@scalz could you give an idea of the price ? I'm curious
-
Where might I find the source code?
-
-
Still very much interested in buying the board with RFM69 footprint! Just saying!
-
@scalz do you mind me asking where you bought PIR lens, eeprom, and most important that fancy small antenna??? Thanks
-
sorry to be so quiet actually
I buy most of my ic at electronic suppliers like Mouser, Digikey, Arrow etc.- the flash is AT25DF512C-MAHN-T . But for coincells, ota+rfm69 is a bit too much power hungry, imho..
- the small pcb antenna is ANT-868-USP but it was for fun, as a simple wire antenna works as well and is cheaper.
- PIR and PIR lens are from aliexpress or ebay. PIR is LHI968. And fresnel type is 8120.
An example of link for the lens:
http://www.ebay.com/itm/10-PIECE-White-Fresnel-8120-PIR-infrared-mini-sensor-lights-small-Lenses-/142190239995?hash=item211b32e0fb:g:WsAAAOSwEHpZJnuW
-
@scalz Thank you. I do shopping at those sites as well if I do a large order, but delivery charge is just killing if I need to order 1-3 items.
I am going to try 2450 with your board. It has 600mAh so I am hoping that using eeprom is fine with this coincell. Regarding 2032, I agree with you. I have a node, which consumes 5-6uA (with watchdog) and I had to disable the LED to use it with coincell. It just drains too much energy from a low capacity battery.
Yes, simple wire would work fine, but ANT-868-USP is just looking very tidy.
-
Just waiting for some components to finalise it
-
@alexsh1
nice assembly oshpark i guess ??
I agree too, for PIR use, CR2450 is a minimum.
Well, with my tinkering and some stock in case, i usually get very quickly the free shipping..
but you can find these flash at Arrow for instance, they just need 20€ min order.
I guess you already have those, but for example,, coincell holders etc are not really cheaper at aliexpress etc..
Time to do some stock for stuff you need perhaps
-
@scalz yes, it is oshpark- I usually use them as the quality is exceptional. And typically I only need 3-4 pcbs anyway.
Unfortunately, I do not have oven and do not use smd stencil, which means the process is very long and manual. A lot of hot air fan work under the magnifying glass, but given this is not a board with too many components, it works.You should get some commission from Arrow. I have just placed my order for eeprom and some parts ;))
-
Good job! Looking forward for a assembled version for buying. (NRF, of course )
-
@scalz I ordered some boards and components which are on the way, but I can't find the source code anywhere?
-
@scalz - I forgot to burn a bootloader onto a blank atmega328p tqfl. Can I burn it using your pogo pads? The only problem is that it my Adruino ISP is running at 5V. I do not have radio soldered. I am not going to damage anything connecting 5V to VCC3?
-
@alexsh1 pogopads are there for this. But SI7021, and others sensors are not 5v tolerant You'll need to use a regulator, and perhaps get a cheap 3v/5v programmer
@Carywin source code depends what you need. you can also use some examples from MySensors website. when i'll get more time (actually busy), i'll upload mine (need to check if it needs some polishing) or some examples.
-
@scalz I did manage with 5V. Just de-soldered SI7021 and uploaded DualOptiboot. Other components are 5V tolerant. Having said that, I recall I did upload a different bootloader at 5V to Sensebender Micro (without nrf24l01+) without damaging SI7021.
R22 has to be changed for 330 Ohm as 1.5k was way too dark and not visible. I like bright LEDs you know :-))
-
@alexsh1 i can see the led with 1k5 i'm using it only for debug on my side. But you're right, if you want more brightness. just be careful to not drain too much if you're using a coincell
-
@scalz I am with you on the battery. I completely switched it off on another node running on 2032. The node is reporting very hour and has got about 4uA consumption while sleeping. Probably will stay alive for a few years. However, when debugging, I like bright LEDs.
By the way, I tested the node - OPT3001 and SI7021 are working fine. Cannot test LHI968 as I still do not have some resistors. I am very satisfied. The only issue is that assembling the board is very tedious - but it is compensated by its size
-
@alexsh1 i'm very glad to hear that I'll try to upload an example for PIR pinchange with my helper lib for blindtime etc asap
-
@scalz I know you are currently developing a similar board on SAMD. Do you have any problems with atmega328p memory? Unfortunately, with signing and a few sensors, I'm running out of memory. On your node, I can have PIR, light, temp/hum and reed. I may struggle to combine all of them under 32kb with signing. Given that I have dualoptiboot (1.5k less) for OTA, it does not help either.
I can see your PIR setup is complex. What is it you are trying to achieve?
-
@alexsh1 my next board won't be for SAMD.
I need to check my code and what's the compil results, i don't remember exactly. but that was tight, 90% perhaps, i usually don't want to go above..
What do you mean by PIR setup is complex?
-
@scalz I can see you created MyPirHelper.h - not sure what your trying to achieve. Could you explain maybe a bit more?
-
@alexsh1 this is a lib for helping to use PIR, could be integrated in nodemanager though, but i generally prefer to keep hands on my code, also because C code is usually more memory optimized.
So this is for handling PIR like some controllers ic do, and pinchange, with weak functions for users functions etc.
How looks my flow:/* ******************************************************************************************************************* * PIR Sensor State Machine * * Flow : sensitivity of pir sensor for noisy environment, limits tx, power saving.. * 1) NODE_SETUP : settle for PIR_SETTLE_TIME. Then 2) * 2) PIR_START : Wait/sleep for the first pulse. Then 3) * 3) PIR_SCAN : If One trigger, wait/sleep for PIR_DEFAULT_PULSES during the PIR_DEFAULT_WINDOWTIME. * If so, the motion is validated. Then 4) * Else 2) * 4) PIR_CANCEL : PIR is disabled for PIR_DEFAULT_CANCELTIME. After, this period it reports new changed state * If LOW, then 5) * Else 4) * 5) PIR_IS_BLIND: Keep PIR sensor insensitive for PIR_DEFAULT_BLINDTIME before 2) * * ******************************************************************************************************************** */
-
@scalz this is exactly what I do not understand. For me PIR is very simple - 1 or 0, HIGH or LOW. Why treating it differently? Maybe this is very Noobs, but this is how I treat my PIRs. I may introduce 10-30 secs delay for it to settle or 30sec sleep after it has been triggered (I do not want to have extra PIR messages to my GW and controller)
-
@alexsh1
sure PIR state is 0 or 1. I'm not changing anything to this. But you can fine tune this.Do you mean you'll update each time there is a CHANGE ?? No intermediate state ??
If so, you'll waste a lot of power in useless radio TX, mcu processing, depending on days and traffic. and your batteries won't last for long!When there are people for an hour in same room, do you update each time it triggers? That can be a lot of waste!
Also why not allowing a blindtime before redecting?
In days with lot of traffic at home for example. If you already know (or the controllers could adjust this dynamically too by custom commands) that a room will be busy. It's useless and will consumes power again, to send 0 if it will retrigger in just a few seconds.So i've done sort of helper for creating intermediate states with timeouts and counters, with user defines etc.
-
I would only update each time there is a first HIGH. Then the node goes to unconditional sleep for 30-60 sec - there is no need to send HIGH again or LOW. After 1 min the status in Domoticz for the PIR is cleared (LOW) and the PIR is ready to send another "HIGH" if triggered.
Can Domoticz really adjust PIRs dynamically?
There is blockly stript, which helps to process "HIGH" from a PIR, but I'm not aware how this can done dynamically.Clearly, you approached this as a programmer. I have a much more simplified approach. Maybe because I'm noobs when it comes to PIRs
@scalz said in MyMultisensors:
@alexsh1
sure PIR state is 0 or 1. I'm not changing anything to this. But you can fine tune this.Do you mean you'll update each time there is a CHANGE ?? No intermediate state ??
If so, you'll waste a lot of power in useless radio TX, mcu processing, depending on days and traffic. and your batteries won't last for long!When there are people for an hour in same room, do you update each time it triggers? That can be a lot of waste!
Also why not allowing a blindtime before redecting?
In days with lot of traffic at home for example. If you already know (or the controllers could adjust this dynamically too by custom commands) that a room will be busy. It's useless and will consumes power again, to send 0 if it will retrigger in just a few seconds.So i've done sort of helper for creating intermediate states with timeouts and counters, with user defines etc.
-
@alexsh1
My domoticz installation does not resets Pirs after a minute or whenever. Are you using the PIR lua scripts or any other?
By default it doesn't do such thing.
-
@alexsh1 i have this option too (ctrl clearing pir state) i thought it could depend on the controller used, so i've tried to make something independant. And i like adding features like setting triggers max for a motion etc. But i agree, your way works too
-
@Sergio-Rius either you have to use lua or there is a much simpler way to do it in Domoticz. Change type to "motion sensor" and then you have an option "off delay". Setup it to 60 seconds and PIR sensor will be off in 60 seconds. Very useful option and yes it is not enabled by default.
-
@scalz can your controller adjust PIRs dynamically?
What controller are you using please?
-
@alexsh1 i just said i have same option as you in my controller My controller is jeedom (french ctrlr)
I've not done it yet (missing time), but i would use some script and scenario if i would like to dynamically adjust this vs some parameters.
-
@scalz How are you dealing with PIR? It is connected to D6 and D7, but sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); can only be used with D2 and D3 or I am mistaken? Maybe you can share your motion sketch please?
-
@alexsh1 I'm using pinchange interrupts. It is not supported in Mysensors out of box regarding sleep, if i remember, i made some change to my functions, but the lib has changed a bit. that would need i check the code and i have no time for the moment, and don't want to release something not up to date. will take a look later, don't know when yet.
But if that can help, below is some parts of code, for enabling your irqs, and the interrupts routine. I think if you're using sleep from MySensors, it will return -1 if triggered by the pinchange, that's all. you'll just need to handle that in your sketch.
ISR (PCINT1_vect) { if (digitalRead(AMBIANT_LIGHT_PIN)) irqLight = false; else irqLight = true; } ISR (PCINT2_vect) { if((PIND & (1 << PIND6)) == 0x40 ) { myPirSensor.pirhCount++; myPirSensor.irqPir = true; } if((PIND & (1 << PIND7)) == 0x80 ) { myPirSensor.pirlCount++; myPirSensor.irqPir = true; } } /* ====================================================================== Function: pirIntEnable Purpose : Enable pin change for PIR interrupt Input : - Output : - Comments: ====================================================================== */ void pirIntEnable() { // Enable pin change for D6, D7 PCMSK2 |= bit (PCINT22); PCMSK2 |= bit (PCINT23); PCIFR |= bit (PCIF2); // clear any outstanding interrupts PCICR |= bit (PCIE2); // enable pin change interrupts for D0 to D7 } /* ====================================================================== Function: pirIntDisable Purpose : Disable pin change for PIR interrupt Input : - Output : - Comments: ====================================================================== */ void pirIntDisable() { // Disable pin change for D6, D7 PCICR ^= bit (PCIE2); // disable pin change interrupts for D0 to D7 } /* ====================================================================== Function: lightIntEnable Purpose : Enable pin change for OPT3001 interrupt Input : - Output : - Comments: ====================================================================== */ void lightIntDisable() { PCMSK1 |= bit (PCINT9); PCIFR |= bit (PCIF1); // clear any outstanding interrupts PCICR |= bit (PCIE1); // enable pin change interrupts for A0 to A5 } /* ====================================================================== Function: Light_IntDisable Purpose : Disable pin change for OPT3001 interrupt Input : - Output : - Comments: ====================================================================== */ void lightIntDisable() { PCICR ^= bit (PCIE1); // disable pin change interrupts }
-
@scalz said in MyMultisensors:
Thank you for sharing it.
I must admit, it does look Chinese to me. I have never come across pinchange interrupts so have to dive in to understand it.
-
My sensor is now fully completed with all sensors and flash. I decided to go for 2450 battery
-
@alexsh1
beautiful !
about pin change interrupt, that would be too bad, to be restricted to D2, D3 only
there are multiple howtos which show how to use them. mcu datasheet section is also interesting. not that hard, don't worry.
you'll need to clean the code above a bit to fit your sketch (variables etc). the counters on pinh and pinl were for tests, you can factorize a bit pir isr and use only one volatile variable for your trigger etc.Have fun
-
Here's my first 5 multi-sensors assembled and they've passed simple hardware tests. Although I think I have 2 that have PIRs that won't settle down. Thanks for the design scalz!
Now to write some firmware for them... Any hints?
-
@Carywin Wow, those look really great, please keep us posted on your progress.
-
I've been slowly poking at these boards and I'm getting somewhere with the firmware, I should have something ready to put out there soon.
In the meantime though I designed a quick snap-together enclosure that I'm sending off for "Dirty" 3D printing:
This is my first time using Fusion 360 and designing something for 3D printing, hopefully it goes okay.
I wanted it to snap together in two halves around the board and be as low-profile as possible, hence why the base plate only covers half of the PCB and is mounted by one screw only. I designed it around using a CR2450 battery. I might also see if I can find a small lens or light pipe to put over the lux sensor so it gets a better read on the light level in the room.
-
Okay, so here's some firmware I wrote for these multi-sensors: https://github.com/carywin/MySensors/tree/master/MyS_MultiSensor_revB
Note that I'm currently using MySensors 2.2-beta from the development branch, to solve the some other problems I was having in my RFM69-based gateway. This sketch should still work fine with the released version of MySensors but I haven't tested it.I'm still testing and refining things here and there, but it should be a working base for people to build from. Of course you will need to change the MySensors #defines to match your network and radio settings.
You'll probably notice that all of the sensors report under the same Child ID as a "Custom Sensor". This is because I'm using OpenHAB via an MQTT broker, so I don't really care if a certain sensor type matches with its provided variable types. If you're using a different controller, you may have to re-jig the Child ID/Variable types to match the known-working sensors on your controller.
PIR Sensor:
The PIR sensor is interrupt driven and will send a message when it receives more than 5 pulses in less than 5 seconds. After triggering, the interrupt is disabled for 60 seconds. If it receives fewer than 5 pulses then approx. 5 seconds after the last pulse it will reset the pulse counter. For the first 30 seconds after power-on, the PIR interrupts are disabled to allow the signal conditioning circuit time to settle. All of these values are configurable in the sketch. Note that I'm using GreyGnome's EnableInterrupt library, which you'll need to get from their Github.Lux Sensor:
The lux level sensor will send a new reading to the controller when the lux reading moves outside a window threshold from the current reading, which is configurable in the sketch. It also takes a new reading after a certain period with no changes in lux, which is also configurable in the sketch.
Note that you'll need the specific version of the OPT3001 library from the above link copied into your libraries folder. I modified the library to spit out raw values and allow the setting of thresholds, so the lux sensor can do most of the heavy lifting with regards to monitoring light levels and flagging an interrupt when it changes. Note that when the lux readings are very low, such as around sunrise and sunset, the threshold values are fixed to prevent excessive lux sensor messages.Door Sensor:
The D3 pin input is set to trigger an interrupt on state change, which will send its new state to the controller on each change. It's pulled high by an on-board resistor so the input pullup is disabled to save energy.Temp & Humidity Sensor:
Temperature and humidity are read at regular intervals (default 10 min), and new values only sent if the they have changed by 0.1 degC or 1% RH. If a certain number of intervals pass with no change (default 3 hours) they will send new values anyway. This way the controller can expire their readings after 3 hours and ignore stale values, and you can get an indication that maybe your sensor has failed. The interval times are configurable in the sketch. I'm using the Adafruit SI7021 library which you can get from their Github.Battery:
Once a day by default the sensor will report battery voltage as a sensor, and remaining capacity as a percentage using the in-built reporting function. The full and empty thresholds as well as reporting interval are configurable in the sketch. Note that the method used to measure battery voltage has a large margin for error, but that this can mostly be calibrated out. For this reason you'll see a VCC calibration value that you should set by measuring each sensor's battery voltage with a multimeter, and comparing with its reported battery volts.WDT:
I'm using the WDT during the time when the code isn't asleep, with a timeout of 2 seconds. This should be more than enough to send all of the sensor messages needed each cycle, but I haven't extensively tested that. I included it because in revision A I was suffering some kind of unknown lock up that would keep the MC awake and drain the coin cell battery in just a few hours. Of course the WDT is used by the library for timing the sleep intervals, so it gets re-enabled each wake up.Because timing how long an Arduino has been asleep is difficult without a RTC, the sleep time may vary somewhat depending on how many interrupts the sensor receives. Each time the MC is woken from sleep by an interrupt, it reduces the amount of time it will sleep next time by 25%. In addition to this, if more than 25 interrupts occur before a new round of sensor readings are taken, then the interval will be declared over and the sensors read again. These are crude methods for timing but so far it seem to be reliable in that the sensor neither sleeps forever nor spams excessively when receiving realistic rates of interrupt.
I welcome any input people have on this project and ways that this might be improved.
-
@Carywin
Good work
I will take a look when i'll have more time.
-
I was wondering why didn't you use a open drain comparator and you could have or-ed your outputs using only one MCU pin ?
-
because there was already enough parts on board, for power consumption and wanted to save as much as i could with this design.
The prototype had it though, but i removed it because that was useless as there are more than enough pins for this on mcu.
-
good answer ! it's not a good one for those of us that are less 'code gifted'. but anyway good work for the design.i would have to study how i can get it to work in code.
-
Does anybody know of a neat way to get this board to operate below 2.7V?
From some reading it seems like the Atmega328 chip doesn't like running a crystal oscillator below 2.7V, but should be happy running from internal clock source. It seems like this might cause problems with libraries or serial comms though. Does anyone have experience with this or can point me towards a bootloader that might work?
So far I've had a couple of these sensors fail after 2 months or so with battery volts around 2.65V. I was hoping for at least 12 months from a CR2450, but some of these sensors are sending >150 messages a day so I'd understand if it was shorter than that. Still, 2 months is not enough I think, and I hope I can tweak something to get it to work down to at least 2.0V, which might squeeze some more time out of it.
Suggested Topics
-
MAX6675
Development • • Mrlynx