JeeNode v6 - JN

Hardware Reference

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:

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”.

Arduino compatibility



Design choices

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.


Microcontroller: ATmega328P
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
Weight: 12 g

Connectors & pinout

Port/pin mapping

Port Name Extras Arduino Signal Chip
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

Pin Name Description
1 PWR external power
2 DIO digital I/O line
3 GND ground
4 +3V regulated +3.3V
5 AIO analog I/O line
6 IRQ interrupt (tied to INT1)

SPI / ISP connector

Pin Name Description Pin Name Description
1 MISO master in / slave out 2 +3V regulated +3.3V
3 SCK SPI clock 4 MOSI master out / slave in
5 RST reset 6 GND ground
7 SEL0 tied to PB0 (A. pin 8) 8 SEL1 tied to PB1 (A. pin 9)

FTDI connector

Pin Name Description
1 GND ground
2 N.C. not connected
3 PWR external power
4 RX serial receive
5 TX serial transmit
6 RTS for bootstrap / reset

PSIX connector

Pin Name Description
1 +3V regulated +3.3V
2 RXD serial receive
3 GND ground
4 PWR external power
5 SDA TWI/I2C data
6 SCL TWI/I2C clock
7 TXD serial transmit
8 RST reset

Parts list

Part Value Details Digi-Key#
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.

RFM12B pin/pad layout

The antenna (Ant) is required and can be a simple 1/4-wavelength piece of wire soldered at the ANT position:

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.

Bootstrap Versions

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