This protocol, which is called "Nocan", enables a lot of interesting features such as:
- Publish/subscribe messaging, which makes it super easy to write connected Arduino applications.
- Automated address assignment for each node in the network.
- Firmware upgrade over the network: just upload your compiled Arduino sketch to any node
The specifications are open source and available at http://omzlo.com/articles/nocan.
The platform currently runs CAN-bus at 125Kbps, which in theory enables communications over up to 400 meters (~1300 feet), according to the formula found in this application report from TI. This seems like a comfortable limit for our applications. In preparation for our Kickstarter, we had successfully tested communications over almost 100 meters (~330 feet). But can we do more?
Well, we just got a brand new box containing 305 meters (1000) of UTP cable: time to do the test!
Communicating over 10 cm (4 inches)
Our network uses 4 lines:
- DC power (12v or 24v)
- CAN bus low signal
- CAN bus high signal
Before testing the full cable we took a quick look at oscilloscope traces on our lab desk, where cables between the controller and the nodes are 10 cm long jumper cables (We didn't even bother adding a 120-ohm termination resistor on the CAN bus as normally recommended).
The screenshot below shows a CAN-bus capture on the oscilloscope.
With our cheap Chinese power supply set to 12v, we measured an actual 11.94V DC power throughout the network.
Communicating over a 305 meters cable.
We then swapped our 10cm jumpers for 305 meters (1000 feet) of UTP cable. These UTP cables are composed of 8 conductors forming 4 twisted pairs. As noted here, we use 3 conductors for DC power, 3 conductors for ground and the remaining 2 for the CAN bus differential signal.
We used an Omzlo One node mounted with an LCD shield and used our web interface to send messages to the node, which then printed them on the LCD, as shown below.
The screenshot below shows a CAN-bus capture with the oscilloscope placed on the node.
The results are rather clean, with a weaker signal amplitude.
Long cables introduce power losses. With a voltage at the source of 11.94V, we measured 11.32V at the other end of the cable. If we change the source voltage to 24V on the power supply, we measure 23.95V at the source and 23.65V at the other end of the cable.
Well, the theory seems correct: our protocol works over 300 meters without any issue.
One of the key motivation of the Omzlo project is to create an IoT network with a single cable that brings both power and networking. It aims to offer an alternative solution in cases you don't want to use WiFi because of signal reach issues or because you don't want to swap batteries on your sensors every few days...