TinyTX3 Wireless Sensor Board

TinyTX3 DS18B20
TinyTX3 fitted with a DS18B20 temperature sensor

Since I put the files for the first PCB version of my TinyTX wireless sensor node online in June I’ve heard from people around the world who have had their own boards made which is really encouraging, especially as it was my first PCB design and was mainly done just to learn how to use the Eagle CAD design package (I wish I’d seen these great tutorial videos when I started, it would have saved a lot of time). There is obviously a big demand for this sort of thing.

Like the earlier stripboard versions the first PCB version was designed purely for use with the DS18B20 temperature sensor but if you’ve been following the TinyTX progress you will know that I’ve since found lots of other uses for it.  Having only 2 of the ATtiny I/O pins being available was starting to become limiting though so I wanted to do a respin with additional pads for some of the unused I/O pins and I also took the opportunity to fix the tight clearance between the power connections and the RFM12B, improve some of the layout and add spaces for decoupling capacitors on the ATtiny and RFM12B, I’ve not had any problems without them on the previous version or on the original stripboard design but it is good practice to have them so we might as well have the option of fitting them if required.

The biggest change is at the top where I’ve added space for 6 I/O pins plus ground and Vcc (Row 1) and instead of a fixed space for a pull up resistor I’ve added two rows of standard 2.54mm spaced holes, one row (Row 2) connected to the header row and one unconnected row (Row 3) which will allow for many more configurations. The IO pins are labelled with the equivalent of the Arduino digital pins as used in arduino-tiny, it looks a little odd as the numbers aren’t consecutive but I didn’t think it made sense to do it any other way. 

TinyTX3 Front and Back
Front and rear views of the TinyTX3 PCB

This new arrangement allows sensors to be connected directly to the board as before or a male or female header could be installed on either side of the board, opening up the possibility of adding expansion boards (think mini Arduino shields) above or below the TinyTX3, perhaps an add on board with a step up/boost converter and DHT22 temperature/humidity sensor.

If you wanted to duplicate the original design with the DS18B20 sensor for example you could install the sensor across the pins marked 9 and 10 and GND on Row 1 and put a 4K7 resistor across the pads next to 9 and 10 on Row 2. The original code will then run unmodified.

TinyTX3 DS18B20
Pin numbers refer to Arduino pins when using the arduino-tiny core

Other possibilities include multiple sensors on one board, using resistors to create voltage dividers for reading analogue sensors, eg. thermistors or a voltage divider could be useful for reading the battery voltage when powering the board with a step up/boost converter board as the usual programmatic “readVcc” method won’t work in that case as the board always receives 3V3. I’m sure more uses will develop over time just as they did for the first PCB and as all the existing TinyTX code will still work nothing is lost.

You might notice I’ve soldered the ATtiny84 directly to the board on the one in the pictures above, what do I do if I want to reprogram it you might ask?

TinyTX Programming
IC test clip attached to ATtiny84 chip

These IC test clips are very handy, just wire it up to your programmer (or Arduino using ArduinoISP) and clip it onto the chip to program. If you don’t have test clips you will want to fit a socket to the board instead so you can remove the chip for reprogramming.

Here’s the schematic for the new board:

tinytx3_schematic

You can download the Eagle or Gerber files below if you want to order your own boards, I get mine made at Seeed Studio and for 10 boards it costs $9.90 (with a green solder mask, add $10 for other colours) + shipping, including shipping to the UK that comes to $13.86 in total which is currently £9.01 or 90p each. The guys at Circuits.io were also kind enough to import the Eagle files into their site for me so you can order boards in a pack of 3 from them for $14.67 plus $5 for international shipping. Unfortunately they don’t yet support adding text to the silkscreen so you will lose all the labelling with their boards.

Downloads:
Schematic (PNG format)
Eagle files
Gerbers (one per board) or 2 panelised on one board (you will need to separate them yourself).
Code

The hardware design files are also available on SolderPad here.

Parts List (excluding any sensors):
TinyTX3 PCB
ATtiny84A-PU microprocessor
RFM12B transceiver
14 pin DIP socket (optional if you have an IC test clip)
2 x 0.1uF (100nF) 2.5mm ceramic capacitors (optional)
Wire for antenna, eg. 0.6mm solid core (165mm for 433MHz, 82mm for 868MHz)
Battery holder for 2 x AA or AAA batteries

 

Open Source HardwareThis is Open Source Hardware licenced under a
Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) licence.

 

50 thoughts on “TinyTX3 Wireless Sensor Board

  1. Hi!

    Many thanks for your design. I think I will order the PCBs, but I have never done such a thing. If I get it right I can just upload your gerber zip to seeed and go with all the default settings?

    /Eric

  2. Hi Nathan,
    Just want to thank you for your great design and TinyTX code. I’m running several temperature sensors now, talking to a central node which is uploading data to open.sen.se
    Think I’m going to order some of your ttx3 boards. Looks really good!

    Thanks!
    Alexander

  3. Hi,

    I received my PCBs from Seeed a few days ago. Worked great and I only had to upload your zip-archive with Gerbers. Had to rename the archive as the name was already in use (by your order maybe…).

    Now I soldered the first board and also has a open energy rpi board. Seems to work on first try! Packets coming in when watching with minicom on the rpi. Next step to see what I will do with them. Probably follow the open energy route. Thanks again Nathan!

    Here is a pic of my first board:

    http://www.lysator.liu.se/~esn/temp/sa5bke-tinytx-01.jpg

    BR

    Eric in Sweden

  4. Hi Nathan,

    Been following your blog for few weeks now, I must say your work is very helpful. Thanks for all of this.

    Also, it is strange why aren’t you providing pre-made PCB’s, assembly kits and fully-assembled ready to run units for sale, how about crowdfunding?, having them bulk made will also result in lower costs for everyone with money to keep your efforts funded.

    Thanks

  5. I had the 2 per board panelised boards produced by Seeed. Quite difficult to cut the boards but managed it with a Stanley knife. Very nice work and many thanks for sharing your skills.

  6. Yes it requires a bit of patience but I’ve found a Stanley knife the best way too. Experiments with a Dremel didn’t go so well. I believe a wet tile saw, the circular saw type are good but I think it might need a bit more space between the panels for that. I might give it a go anyway.

  7. I did some rough calculations that estimated a couple of years and so far that is looking about right, one of my early ATmega328 based sensors has been running since December 2011 and is now down to 2.8V and the first stripboard ATtiny84 version has been running since February 2012 and now at 3.0V so plenty left to go yet and the code wasn’t very well optimised for low power usage at the start so it should be even better now. Both of those are transmitting every 60 seconds and with ACKs enabled.

  8. Hi Nathan,
    excellent site, big thanks. Just ordered a set of tinytx3s pcbs from seeed yesterday, can’t wait for them to arrive. Just have to get the rest of the stuff now. I notice in the parts list the caps are optional – could you explain what the difference will be if I do/don’t use them?
    thanks
    Ken

  9. Hi Ken, The two capacitors are for filtering noise that could be generated on the power lines between the various parts of the circuit. Perhaps a better phrase than optional would be “you will probably get away without them”, in fact the first tinyTX versions didn’t have them at all and I never had any problems. I just added them to the V2 as it is good practice. For the minimal cost/trouble involved I’d say put them on.

    Cheers,
    Nathan

  10. Hi Nathan,
    Sorry to bother you- I’ve had some TinyTXv3 boards made (took months to get them delivered!), and programmed the ATTiny84 with an Adruino (successfully I believe), but the node does not appear on my RasPi Emoncms inputs list. I have a Funky from MartinH, and receive data from that ok via an RFM12B board.
    I’ve tried a second ATTiny84, but still get nothing. I have +ve battery volts at pin 1 and -ve at pin 14. Frequency/network group/unique node ID, etc. are all set correctly.
    Is there a any way of testing, please? Am I able to connect to the Arduino serial monitor in some way, for instance?
    Thanks in advance- great, inspirational work you’re doing.
    Andy.

  11. Andy, I’ll jump in with an answer anyway, it might get you going sooner.
    one thing you can do is document your tiny84 code with Serial.Print stuff, connect pin 0 of the tinytx board to pin 2 (almost certain) of an arduino proper – i’ve a duemilanova. upload a “blank” (i.e. bare minumum) sketch to the arduino and then it will print out the serial print from the tiny.

    also, have you remembered to changed your fuses on the tiny to 8mhz?

    One thing I noticed on the first one i built was a solder gap between my rfm12b and the tinyboard, so would hang on rfm initialization (built 2 boards at the same time, and of course the one i chose to play with first was the dodgy one – only when i moved the attiny to the other one in a moment of frustration did the thing start to work. – typical!)

  12. BTW, anyone who has the “2-per-panel” done in Seeed, I got good results using a junior hacksaw to separate them.

  13. Andy, Try turning the ACKs off, ie. comment out the “#define USE_ACK” line in the TinyTX code. It’s been a while since I used the RasPi version of emoncms but I think if you have ACK turned on at the TX but not at the RasPi end it will ignore them.

    For debug going through an Arduino like Ken says is good, or an FTDI adapter if you have one. You’ll need to use SoftwareSerial on the ATtiny.

  14. I ordered the tiny tx3’s. Would a waterproof temperature sensor be able to replace the temp/humidity sensor in this module?

  15. Eagle 5.11.0 won’t open your TX2 or TX3 files with complaints
    of “invalid data”. At a guess it’s because it can’t find
    some library it needs – do you have a list of the eagle
    libraries you used? (The version of Eagle might be helpful
    as well). I need the board size to order some boards from
    SeeedStudios.

    Many thanks – Will

  16. Many thanks – I’d avoided updating to 6 in order to avoid any possible
    compatibility problems with my older projects … downloading it now.

    (I’ve ordered some boards from SeeedStudio, using your Gerbers; you
    should definitely ask them for a referral fee!)

    Will

  17. Hi!
    I ordered 10 boards from china and now I am assembling them.
    I already completly assembled 2 boards but when I try them nothing is sent.
    I used TinyTX_TMP36 with:
    #define myNodeID 15 // RF12 node ID in the range 1-30
    #define network 1 // RF12 Network group
    #define freq RF12_868MHZ // Frequency of RFM12B module
    //#define USE_ACK // Enable ACKs, comment out to disable

    In an attempt to identify the problem I mounted tinytx3 in a breadboard and it works! (jpg1). Then I soldered just the RFM12b in the tinytx3 board keeping tiny84 in breadboard and it does not works. It seems that when I solder rfm12 in tinytx3 boards something prevent then from working (jpg2)
    Need help. Thanks!
    By the way, great work!!

    http://tinypic.com/r/287lrp3/8

    http://tinypic.com/r/5ur2g9/8

  18. Yes, it is very odd… The other PCBs include already the tiny84 and I can not test it from breadboard because 2 tiny84 with be using RFM12b. But ok, I will keep trying. Thank you…
    By the way, could you please translate “Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) licence” in simple words for us?

  19. Greetings Nathan. I’ve been trying to find the tiny TX 3 board in Australia. But no luck.
    Can you tell a where i can find this unit.
    Cheers Norm

  20. Looking closely at the boards it seems that the ATtiny84 reset pin is left floating. Might that be a problem, or do you burn the fuses to kill the reset pin?

    Will

  21. @NORM You would need to order the PCBs from somewhere using the Gerber files, I don’t know any PCB fab houses in Australia but Seeed Studio in China (who I use) will ship internationally.

    If you go the main TinyTX page here: http://nathan.chantrell.net/tinytx-wireless-sensor/

    and scroll down to “Ordering boards” you will find a bit on how to order and a link to the required gerber file.

    @Will An oversight but have never seen or heard of it causing a problem in practice and there are a lot of boards out there now… totally amazes me how popular this little project became.

  22. I`m using a TinyTX3 with a dht22 temp/hum sensor (pins 8,9,10,GND – 10K resistor across 8 & 9 ) and like to install a bmp089 (6 pin version )temp/pres on the same board. Could anyb. tell me how to connect the second sensor to the board?

  23. Hi Nathan,

    thank you very much for sharing your knowledge. This is an absolutely fantastic project and shows how to build cheap sensors for e.g. raspberry pi.

    I wonder if it is also possible to send commands from raspberry pi to the tinytx3 sensors, because the RFM12B modul is a transceiver. Do you have an example on github?

    When using raspberry pi as a receiver for tinytx3 is there a tutorial how to setup and configure RFM12Pi on the pi to receive messages from tinytx3?

    Great project! Please go on!
    Best regards,
    Christian

  24. Hi Christian,
    I’m got mine talking to a Raspi, but it’s a bit rusty how I did it. from what I remember, I have a tinytx sitting with an RF12b and it talks serially to the Raspi. I think. Although that may be my power swithces. Will try find out tonite if I get a chance, but it’s definitely doable

  25. OK, had a quick look, but my Pi is suffering from death by SD card corruption, so didn’t get much chance to play with it. The RFM12B is installed as a device in /dev/rfm12b.0.1 (or similar) but I don’t remember how I did that, I followed a tutorial somewhere on the web for sure.
    Hoping to get the Pi resurrected tonight, if I have the time I’ll dig out where I got the info from
    K

  26. Great project, my order for PCB’s is on it’s way to me (one one who still needs PCB’s, let me know).
    I do have a problem compiling the code: when I compile the DHT22 code, I receive an error which seems to indicate that the code is too long to fit into the memory of the tiny84A.

    Is it possible that the code of one of the libaries has been renovated lately, which causes this error?? Any hints how to solve it?
    Anyone who likes to share the compiled DHT22 TinyTX3 code (for 868mc transceivers) with me (allowing me to test the hardware already)?

  27. Hi Peter, yeah I had the same issue compiling my sensor code; i was recompiling it having let my entire system lapse into disarray over the last couple of months; my SD card died in my Raspi. I also wanted to reduce the baud rate from the defaults and lo and behold when I went to recompile it was moaning it was over size.
    Now i’ve got a BMP085 and a DHT22 on the same sensor, and it’s working fine. My code is at home though so I will have to post it this evening if i get a chance.
    The way I did it was to try and reduce the number of variables in use bit by bit. I think I squeeze in by 2 bytes.
    I *did* notice a while ago when I first started playing with this stuff that different versions of Arduino IDE would compile to different sizes, and for one node – maybe my Pressure/Humidity one I had to compile in a different version of IDE than the others. I never really got to the bottom of it, just accepted it
    Hope this helps
    Ken

  28. Hi Ken,

    I tested it home in a Linux environment and it compiled like a charm! So it IS different in a Windows environment. I repeated the exact steps, used the same libraries and settings…. Many thanks for your help: your remark that it compiles just fine in the current version of the IDE made me wonder what could be the diffeernce between your and my environment…

    Regards,

    Peter

  29. wierd, and worrying, that the “same” ide version produces differently sized binaries (and vastly different, as mine was circa 5KB, whereas you were getting errors of size which would be over 8KB.
    Glad you have it sorted so!

  30. I absolutely agree with you, the same IDE version should produce the same code and yes, 5 KB is the size my compilation should be as well. I am almost sure it is a bug in Windows and I think I also know what the problem is. I think the same parts of the Jeelib appear more than once in the code. Anyway the programmer also worked easier under Linux, so no need to go back to Windows..

  31. Hi,
    I am trying to compile the Code for reed sensors, but I get an Error:

    “TinyTX_ReedSwitch.ino: In function ‘void setup()':
    TinyTX_ReedSwitch:55: error: ‘attachPcInterrupt’ was not declared in this scope”

    The Arduino tiny package is correctly installed, I selected the correct chip in the menu.
    Jee-Lib is installed too.

    Can someone help? I am using a Mega2560 with IDE 1.0.6 and Windows 7 x64.

    Thanks.

  32. Admitted: I had a bad start with this project. I built three TinyTx devices and NONE of them worked. I tested the working very basic with a 868Mhz radio receiver, but none of them would generate any radio signal. I checked all contacts on the PCB, suspecting a hardware problem, but all contacts seemed OK. I took a logic analyser and I noticed that the sensors were triggered every minute, but no signals were passed on to the transmitter. I tested several of the TinyTx programs including the transmit test program, but none worked.

    I built two RFM12i interface boards (described on the Jeelib webstore) and started to test transmitting and receiving with Arduino’s, which worked just fine. I had a breaktrough when I tested the Jeelib Blib2 baken test program on the TinyTx hardware, which worked just fine!

    Peter
    Replacing parts of the code between the original TinyTx code and the Jeelib test code, I was able to pin down the problem in the setup section! Replace the original TinyTx setup code by the Blib2 setup code and the TinyTx code starts to work! I have not been able to check why and pin it to a specific line in the code. I expect this is due to a change in the Jeelibcode.

    Hope this helps others.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Notify me of followup comments via e-mail. You can also subscribe without commenting.