The JeeNode is a wireless micro-controller board designed for a variety of Physical Computing tasks. From measuring and reporting temperature, humidity, and other environmental data to tracking and controlling energy consumption around the house. It was inspired by the Arduino Duemilanove and Uno boards, and by the “Real Bare Bones Board” (RBBB) from Modern Device.
At a glance¶
What’s on a JeeNode v6, from left to right:
- 6-pin FTDI-compatible serial I/O port, used for power, re-flashing, and communication
- 3.3V power regulator which accepts 3.5 … 13V as external power source
- 8-pin combined Power / Serial / I2C / Extended (PSIX) connector
- ATmega328P microcontroller by Atmel, with 16 MHz ceramic resonator
- 2x4-pin combined SPI / ISP connector, with 2 general-purpose I/O lines
- RFM12B wireless RF module for the 433, 868, or 915 MHz ISM band, by Hope RF
- short wire - acts as radio antenna (78, 82, 165 mm long, for 915, 868, 433 MHz, respectively)
And on the long sides of the board: two I/O “ports” each, with one analog/digital I/O, one digital I/O, +3.3V, ground, PWR, and interrupt (IRQ) line. All ports have an identical pinout for use with “plugs”.
- both run the same OptiBoot bootstrap code , and can therefore run Arduino IDE’s sketches (see Bootstrap Versions)
- same ATmega328P micro-controller as the most popular Arduino’s and other “~~duinos”
- there’s a 433, 868, or 915 MHz wireless RF module on board
- completely different physical layout, incompatible with Arduino “shields”
- a JeeNode runs internally at 3.3V, not 5V~~ this also affects all I/O ports & pins
- not all the Arduino pins are brought out on connectors, some pins are assigned fixed roles
- the ISP connector has 2 extra pins, to allow re-using it as SPI bus for 1 or 2 devices
- the TWI bus has been permanently assigned to its own connector
- runs at 16 MHz - but using a slightly less accurate ceramic resonator i.s.o. a crystal
- there are no LEDs, to reduce power consumption when running off batteries
The main reason for creating the JeeNode was that Arduinos are not yet very convenient for 3.3V devices such as the RFM12B module. By including a 3.3V regulator, the JeeNode can be powered from USB with an FTDI cable/board, a DC power adapter, or various types of 3.6 … 12V batteries.
A second reason was to have a unit which includes wireless connectivity by default. The RFM12B module is a low cost option with sufficient power and range to provide reliable communication around the house - a basic packet protocol can be implemented in under 3 Kb of C code.
The third reason is that it is quite common to run out of power and ground connectors when hooking up a few sensors to an Arduino. While there are nice “proto shields” to overcome this, it seemed logical to try and come up with a different connector scheme for the common case of just a few sensors / actuators.
Furthermore, being identical, all four JeeNode ports have the same features and connections, allowing sensors to be re-used and re-combined later on.
Lastly, a key design objective was for the JeeNode to support very low-power use with batteries.
|Maximum frequency:||16 MHz (down to 3.3V)|
|Power consumption:||4 µA .. 35 mA|
|Supply voltage:||3.3V .. 13.0V|
|Dimensions:||85.9 x 21.1 x 9.9 mm|
Connectors & pinout¶
|Port 1||DIO1||-||Digital 4||PD4||pin 6|
|AIO1||Analog-in||Digital 14 / Analog 0||PC0||pin 23|
|Port 2||DIO2||PWM (timer 0)||Digital 5||PD5||pin 11|
|AIO2||Analog-in||Digital 15 / Analog 1||PC1||pin 24|
|Port 3||DIO3||PWM (timer 0)||Digital 6||PD6||pin 12|
|AIO3||Analog-in||Digital 16 / Analog 2||PC2||pin 25|
|Port 4||DIO4||-||Digital 7||PD7||pin 13|
|AIO4||Analog-in||Digital 17 / Analog 3||PC3||pin 26|
Ports 1 .. 4¶
|2||DIO||digital I/O line|
|5||AIO||analog I/O line|
|6||IRQ||interrupt (tied to INT1)|
SPI / ISP connector¶
|1||MISO||master in / slave out||2||+3V||regulated +3.3V|
|3||SCK||SPI clock||4||MOSI||master out / slave in|
|7||SEL0||tied to PB0 (A. pin 8)||8||SEL1||tied to PB1 (A. pin 9)|
|6||RTS||for bootstrap / reset|
|R1||10 kΩ||reset pull-up||10KEBK-ND|
|C1, C2, C3, C4||0.1 µF||decoupling||BC1160CT-ND|
|C5||10 µF||electrolytic, polarity matters!||P966-ND|
|IC1||ATmega328-20||can also use older ATmega168||ATMEGA328P-PU|
|IC2||MCP1702-33||3.3V LDO linear regulator||MCP1702-3302E/TO|
|X1||16 MHz resonator||3-pin, built-in capacitors||X908-ND|
|D1||Diode||v5 only - v6 check bridged on bottom side||Not required for V6|
Construction hints - RFM12B module¶
You will see in the picture at the top that some RFM12B module pins are left unsoldered. This is because those pins are for signals that are not used in this design. For example, the module can output a clock signal to be used with an MPU lacking its own clock generator - that does not apply here. If you look at the zoomed false-color snapshot below, only pads with red traces need soldering (hard to see but this includes ANT and GND). If you want to count the pins carefully, then this method is fine. But soldering them all is fine as well.
It is important to mount the module sitting squarely in position. The pad spacing is necessarily small so if the module is skewed, there is a risk of a solder short between pad positions, hidden just under the edge of the module. A good technique is to solder a single corner pin first, check that the alignment at each pad is good (adjust the skew if required). Next solder the diagonally opposite corner, check again, then solder up at least the remaining required pins.
The antenna (Ant) is required and can be a simple 1/4-wavelength piece of wire soldered at the ANT position:
- for 433 MHz, use a 165 mm wire
- for 868 MHz, use a 82 mm wire
- for 915 MHz, use a 78 mm wire
The wire supplied with the kit is a little longer to allow for trimming - simply bend a cm. or two back on itself at the floating end of the wire and cut to length only when adjustment is complete. Note that the lengths quoted allow for the short PCB track length on the module and some stray capacitance in this area - the actual lengths for best performance are not critical to the last few mm.
Without access to some measurement system, simply trim to the length for the corresponding Band entry shown above - that is close enough for most systems.
If you have access to a field strength meter, or are using the soft NRfMon-nano Spectrum Analyzer , you can adjust this temporary “shortening” for maximum effective output power (take care to not disturb the aerial position between tests for consistency - the radiation pattern is affected by all conductors within about one wavelength of any part of the aerial including hands!)
The ground (GND) connection is not required when using a simple, single wire aerial. The GND pad is reserved for when the aerial is mounted remotely through a length of co-axial cable. Solder the outer sheath of the coax here, leaving the shortest length of unshielded inner white insulation that is practical.
As of mid-Jan 2012, JeeNodes ship with OptiBoot 4.4, which is compatible with Uno boards (the previous bootstrap was for Duemilanove’s). Check you have the correct board type selection in the Arduino IDE (usually the wrong setting generates error avrdude: stk500_getsync(): not in sync: resp=0x00 )
Related weblog posts¶
- All posts tagged JeeNode
- 2009-11-06 - Activity LED
- 2010-09-25 - Meet the JeeNode v5
- 2010-09-26 - Assembling the JeeNode v5
- 2010-11-24 - More box options
- 2010-12-06 - No more diode!
- 2011-05-01 - Meet the JeeNode v6
- 2011-06-08 - How the JeeNode evolved
- 2011-06-21 - MCP1702 current draw
- 2011-06-26 - Current measurements
- 2011-12-03 - Same RFM12B’s, but flatter
- 2011-12-19 - The JeeNode, as seen from 15.24 km
- 2012-01-24 - The PWR vs the +3V pin
- 2013-03-22 - JeeNode v6 reference