# Welcome to the eChook Nano documentation

The eChook Nano is a data logging and telemetry system for electric cars competing in the Greenpower race series. It consists of an Arduino-based PCB sold through the Greenpower online store and an Android-only app that displays and logs the data. If the phone has a data connection, it can also push data to cloud services, enabling real-time telemetry from the car to the pits - or anywhere with an internet connection.

## Just got your kit? Start here.

The sections of the documentation follow a chronological order of setup, from receiving your kit to viewing live telemetry. The steps below are links to relevant sections in the setup process.

1. Identify your kit and parts in [The eChook Nano Kit](/required-components-bom).
2. Follow the correct build path for your kit version:
   * Kit V1.x (White PCB): [Build Instructions (Kit V1.x)](/build-instructions)
   * Kit V2+ (Black PCB): [Build Instructions (Kit V2+)](/build-instructions-kit-v2+)
3. Program the board from [Programming the Arduino](/programming-the-arduino).
4. Set up your phone app in [Using the App](/using-the-app).

After setup, check [Telemetry (Live Data)](/telemetry-live-data) to verify data is being uploaded and visible for your team.

## The idea behind eChook Greenpower Telemetry

The original eChook Nano board and the eChook app were developed because of a need for data display and logging in our own Greenpower racing teams - the JLR 'Driven' team and the weChook racing team.

Having solid data on a car's performance is incredibly important, both during the race for strategy decisions and for analysis after the race to analyze performance and inform vehicle development. It's also an area that many Greenpower teams do not have the time or knowledge to implement themselves, and where available off-the-shelf solutions tend to be expensive, limited in their inputs and ‘black boxes’ where signal goes in and data comes out.

We have designed a Greenpower specific data logging and telemetry system that has inputs specific to the needs of a Greenpower car, but also uses simple circuits that align with the GCSE and A level Electronics curriculum to promote an understanding of how the whole system works, rather than being a ‘black box’ solution.

## Support

While this documentation aims to make understanding, building, and using eChook as easy as possible, there will always be cases where something doesn't go as expected and some help is needed. eChook has both a forum and in-browser messaging that anyone can use to ask questions and discuss anything eChook, electronics, or Greenpower in general.

They are monitored by the eChook team who will get back to any questions as quickly as possible.

Forum - [echook.boards.net](http://echook.boards.net/)

In browser messaging - click the message icon in the bottom right to get in touch.

Email: <info@echook.uk>.

## Feedback

We really appreciate and try to act on any feedback we get. Each page has quick good/ok/bad feedback buttons at the bottom, which is useful, but does not tell us the reason. If you feel a page can be improved, drop us a message (icon bottom right of screen) and let us know - we'll say thanks, I promise.

(For instance this page gets consistently bad ratings but I don't know why so don't know how to improve it!)


# System Overview

There are three subsystems to the eChook Data Logging and Telemetry:

* The Arduino based hardware with sensors on the car to collect the data.
* An Android app to receive the data, log it to file, display it to the driver and upload it.
* A website to display the data in real time to the rest of the team.

## Choose your kit path first

The hardware path depends on your kit version:

* **V2 (current):** The main eChook Nano board is pre-assembled.
* **V1.x (legacy):** The main eChook Nano board is a DIY board build.

If you are not sure which version you have, start with [The eChook Nano Kit](/required-components-bom).

The decision to split the system up like this was primarily cost-based. Once you start adding an SD card slot and SD card, GPS receiver, screen, etc. to the hardware on the car, costs rise rapidly - but we all carry devices with memory, a screen, GPS, and so much more in our pocket every day. By offloading as much functionality as possible to the smartphone, we have been able to create far simpler and lower-cost hardware.

If a team has an existing data logging system on the car, it is possible to add a Bluetooth module to that, connect to the eChook Android app, and use the driver display, data logging, and online telemetry free of charge.

## eChook Nano Board

![](https://lh3.googleusercontent.com/7FLh6EmgoqFBk9Twgt-iS4O559Hd256QkYxNOR44Ojl2a_ssA4CzK5mZhyTLCnsBX6XhAC1IYFK9AWPOva-g4_6PjabCO38x9b5HM0y2MPjtWZUsybBmNco646XR3HOmOY3rDIQhI6QzFgvRTwfHY3f4ILqefgRU7SMkqVYkJehNtMq1w06adJ4Fm_ed0PMgliGXGB09yiJIrBb2sxE6-WbumagtFEnnjxTCSKrMIzWJZL8lphKVgRf7XsHWYOjaXi5ZpQIwB9kZkep0LTyaQ1NtaNaHjJCTFSumcsnoew_8HhzZO04JZwq3aIVhWcz0wHUaYQKMGRDE16yFIiWs5v_THXujNE0GPTq8-ll6LsQ64B2xzGPPLc_wYxpl9B6PwEG_l0JtPFbTa-sINt7yuBCc7SxzdeY1qCXBW1rX98_1sP64lAP3dJ_tSZMtUvjuf5RQ2wPtZC5XO_wUJ3Td45kccnCeSD6RYvgSWONEfL-i_LEpvZJ1BQlovem-s5xgKk4qk_LC7R-g7i8mdI1DReJkR2NkcVQNEhwDUaXtyb44a3slhQAaSSyc9WprRyD5OCocPjRQsE-DMtfk8NChR-wJdg8EQm8CJ7vnbfmBZnMyczb7n_TVQXNfZ6w3VxgvdVdumHdumFNLwIsfPwVQyZl97S2Ap-HUkv_g=w274-h205-no)

### Hardware

The eChook Nano board is a custom PCB with interfaces for sensors, an Arduino Nano to read the sensors, and a Bluetooth module to send collected data to the Android app. The board takes power from the +24V car batteries.

The V1.3 board has been designed using circuits and components covered in the GCSE and A level Electronics Curriculum in the hope that teams can understand the board as much as possible. The PCB also uses through-hole components and generous solder pads to aid teams in soldering up the board in the classroom.

The V2 boards are sold fully assembled.

The PCB and circuit designs are available at [github.com/eChook](https://github.com/echook/echook-nano-pcb). You will need [KiCad ](https://www.kicad.org/)to open and edit these files. It is free for everyone to use.

### Software

The brain of the eChook Nano board is the Arduino. The Arduino platform was chosen due to its massive online following, meaning a large community and loads of support available. While C/C++ coding is often not covered in the UK curriculum, the online support makes the Arduino easy to get started with.

The code for the Arduino Nano on the eChook board is available from [github.com/eChook](https://github.com/echook/echook-arduino-nano). It has been written in a step-by-step fashion and commented every step of the way to explain what each bit of code is doing.

## Android App

The eChook uses the [Omni Telemetry app](https://play.google.com/store/apps/details?id=net.keduro.omni\&hl=en_GB), provided by Banchory Greenpower Team.

The app connects to the Bluetooth module on the eChook Nano board and logs the incoming data. It also augments this data with sensors on the phone - primarily GPS location. The app can also use the GPS to count laps, which is added to the logged data. At the end of the session, there is the option to send a .csv data file through the standard Android sharing system, making it easy to add it to Google Drive or Dropbox, email it to someone, or send it using whichever app you choose.

Finally, if the phone has a data connection, the app can upload data in real time to the internet for telemetry.

## Website

The data.echook.uk website displays data uploaded from the phone in near real-time. Sign up (one login per car), enter the account details in the settings section of the eChook Android app to link them.


# The eChook Nano Kit

Greenpower sell an eChook Nano kit that contains all the hardware and sensors needed to get eChook telemetry running on a Greenpower car. The Android App and Live Data website are free to use, no kit purchase necessary.

## Choose your kit path first

The setup flow is different between the current and legacy kits:

* **V2 (current):** The main eChook Nano board is pre-assembled. Follow the V2 build and setup path.
* **V1.x (legacy):** The main eChook Nano board is a full DIY build. Follow the V1.x build and setup path.

If you are not sure which version you have, check [Versions](/required-components-bom/versions).

### eChook Nano V2 SMD

From December 2024, V2 of the eChook Nano kits are being sold by Greenpower. While there is still assembly and soldering required for sensors, the main board comes pre-assembled. There is a blog post going into more details of the changes [here](https://shop.echook.uk/?p=444).

<figure><img src="/files/BZXKRq8d98pmkdpK1SpS" alt=""><figcaption></figcaption></figure>

This kit contains a fully assembled eChook board, and Arduino Nano Every and Bluetooth module. It also contains PCBs for the current sensor and hall effect (magnet) sensors that require some assembly.

The move to smaller surface mount components and machine assembled boards has allowed a number of improvements, including better labelling of connections on the board, more protective circuitry - if any 5V output is short circuited in the harness it will self isolate, allowing any other sensors and the eChook to remain functional, transient voltages are better supressed and all inputs are now 30v tolerant.

### eChook Nano V1.x

The original eChook is a fully DIY kit containing the eChook Nano board, all components required to populate the board, and sensors for current, temperature (x2), and rotation (wheel and motor shaft).

This kit is no longer available to purchase, but the individual PCBs are - see below.

![](/files/GrgnJ8hiPPQQDbk6kp9P) ![](/files/i5zXo3ZeQmwT6PP69aAS)

### DIYing the eChook Nano v1.x

If you want to source the components yourself, the bare eChook Nano board is available from the eChook shop [here](https://shop.echook.uk). The listing includes links to the full Bill of Materials needed for assembly.

If you want to go totally DIY, or tweak the PCB to your own requirements, the schematics and PCB layouts are Open Sourced and available on [GitHub](https://github.com/eChook/eChook-Nano-PCB).

### V1.x Kit Contents:

<table data-header-hidden><thead><tr><th>Quantity</th><th width="185.33333333333331">Component</th><th>Use</th></tr></thead><tbody><tr><td><strong>Quantity</strong></td><td><strong>Component</strong></td><td><strong>Use</strong></td></tr><tr><td>1</td><td>eChook Nano PCB</td><td></td></tr><tr><td>1</td><td>470r Resistor</td><td>Voltage drop for LED</td></tr><tr><td>12</td><td>1k Resistor</td><td>Protection for Arduino pins</td></tr><tr><td>2</td><td>4k7 Resistor</td><td>Input Resistors for current differential amplifier</td></tr><tr><td>4</td><td>10k Resistor</td><td>Feedback on Differential amp and pull ups for Thermistors</td></tr><tr><td>2</td><td>16k Resistor</td><td>24v and 12v Potential Dividers</td></tr><tr><td>1</td><td>47k Resistor</td><td>Post amp current filter</td></tr><tr><td>2</td><td>82k Resistor</td><td>24v and 12v Potential Dividers</td></tr><tr><td>1</td><td>Green LED, 5mm</td><td>Indicator LED on PCB</td></tr><tr><td>1</td><td>BC547 NPN Transistor</td><td>Amplification stage of PWM output on PCB</td></tr><tr><td>3</td><td>Ceramic Capacitor 1uF</td><td>Low Pass filtering on some sensors</td></tr><tr><td>1</td><td>22uF 50v Electrolytic Capacitor</td><td>Input voltage smoothing for the regulator</td></tr><tr><td>2</td><td>47nF Ceramic Capacitor</td><td>Smoothing Capacitors for current sensor (not on PCB)</td></tr><tr><td>1</td><td>4.7nF Ceramic Capacitor</td><td>Smoothing Capacitors for current sensor (not on PCB)</td></tr><tr><td>1</td><td>0.25A Radial Resettable Fuse</td><td>Over current protection (Short Circuit)</td></tr><tr><td>1</td><td>8 Way DIP Socket</td><td>Socket for Op-Amp</td></tr><tr><td>1</td><td>Microchip MCP6002 Dual Op Amp</td><td>Used in differential amplifier for current input</td></tr><tr><td>2</td><td>15 way SIL 2.54mm Female PCB Socket</td><td>Socket for Arduino</td></tr><tr><td>1</td><td>6 way SIL 2.54mm Female PCB Socket</td><td>Socket for Bluetooth Module</td></tr><tr><td>1</td><td>5v 1A Voltage Regulator (Tracopower TSR 1-2450)</td><td>Take 24v from the car and provide a robust 5v to the Arduino</td></tr><tr><td>1</td><td>Rectifier Diode, 50V 1A</td><td>Reverse Polarity Protection</td></tr><tr><td>2</td><td>NTC Thermistor 10kΩ@25°</td><td>Temp Sensor (not on PCB)</td></tr><tr><td>2</td><td>Hall Effect Sensor (A1101EUA-T)</td><td>Sensor for wheel/motor rpm (not on PCB)</td></tr><tr><td>1</td><td>Current Sensor (LEM HAIS 50p)</td><td>Senses current in the 24v cable from the battery.</td></tr><tr><td>3</td><td>4 pin Pluggable Terminal 5.08mm</td><td>Connectors</td></tr><tr><td>2</td><td>3 pin Pluggable Terminal 5.08mm</td><td>Connectors</td></tr><tr><td>1</td><td>2 pin Pluggable Terminal 5.08mm</td><td>Connectors</td></tr><tr><td>1</td><td>3 pin Pluggable Terminal 3.81mm</td><td>Connectors</td></tr><tr><td>1</td><td>Arduino Nano</td><td>The Brain of the eChook</td></tr><tr><td>1</td><td>USB Cable for Arduino</td><td>Connect Arduino to PC</td></tr><tr><td>1</td><td>HC-05 Bluetooth module</td><td>Send data to phone over bluetooth</td></tr><tr><td>1</td><td>6 way Male-Female PCB Jumper Cable (Dupont Connectors)</td><td>Allows connecting the bluetooth module remotely</td></tr><tr><td>8</td><td>Neodymium Puck Magnets</td><td>Place on hub and motor shaft to trigger hall effect sensors</td></tr></tbody></table>

![Kit Contents](/files/-LChAWoAQ_cKVWBJC6EA)

## Tools and Consumables Required

Some tools and consumables will be required to build the kit and integrate the sensors to the car:

* Soldering Iron and Solder
* Solder Sucker or solder wick (handy correcting any build errors)
* Wire Snips
* Small flathead screwdriver
* Multimeter
* Wire for connecting sensors remote to the board


# Versions

There are separate kit versions and board (PCB) versions

## Kit Versions

### V1.3

First version of the kit sold by Greenpower with PCB v1.3

### V1.4

Introduced in 2022, minor changes to the kit, now includes a second PCB for mounting the current sensor. Still uses PCB v1.3.

### V1.5

Introduced in 2023, minor changes to the kit, replacing the Arduino Nano 328P clone with a genuine Arduino Nano Every development board.

### V2.0

Introduced in 2025, including some major changes. The kit includes the new V2.0, pre-assembled eChook board. It also includes a new magnet sensor board to make mounting and testing the wheel and motor RPM sensors easier.

## PCB version differences

v1.3 is the first production version as sold by Greenpower, earlier versions are prototypes. This guide is aimed at V1.3 but should apply to all boards unless stated below.

### V1.0

Any V1.0 board will already be assembled and partially tested so the ‘build stage’ is not required - you can skip this bit!

The connection outputs and component references changed after V1.0, so the pin out's aren't all compatible!

NOTE: for V1.0 it is important that before power is applied to the board the DCDC converter is set to the right voltage with the Arduino, Bluetooth module and op-amp unplugged. Later boards do not have adjustable power supplies so this instruction no longer applies.

### V1.1, V1.2

These revisions had the following changes:

* Changed to a fixed 5V DC-DC regulator.
* Increased solder pad sizing.
* Moved all components to the same side of the PCB.
* Altered Board layout.
* Added labelled multimeter test points to the bottom of the board.
* Moved the BT module off-board
* Improved Silkscreen.
* Increased tolerances to avoid manufacturing errors.
* Added logo and component values to silkscreen.
* Changed to a white board (solder mask) with black silkscreen.

The initial batch of V1.2 boards had some manufacturing errors, resulting in it being easy to bridge a pad to the ground plane when soldering the board. This drove the change in tolerances, increasing the overlap of the solder mask over the ground plane around component pads. The issue is detailed [here](http://wechook.com/?p=778).

V1.2 was the first board sold in kit form - the V1.3 build instructions apply to V1.2 as well.

### V1.3

The first version of the board sold in kit form through Greenpower for the 2018 season.

Changelog:

* Added current sensor multimeter test point.
* Changed silkscreen to reflect new echook.uk website.

### V1.3.1

The eChook team has moved from using DesignSpark PCB to KiCad for schematic capture and PCB design. It wasn't possible to import V1.3 into KiCad so it was recreated.

* Component placement virtually unchanged.
* Tracks Rerouted.
* Test Point placement improved.
* Silkscreen Improved.

This version is used for any 3D renders in this document and the Virtual iBom build aid - both features enabled by the move to KiCad. There are no current plans to fabricate v1.3.1.

### V2.0

Version 2.0 of the board contains some major changes, but retains the same features. It is the same size as earlier versions, has the same connections, and uses the same code.

It moves away from an assemble-it-yourself kit to a pre-assembled board with predominantly surface-mount components - this has enabled a higher component count and more complex circuits, offering a far more electronically robust board. There is a blog post going into more details of the changes [here](https://shop.echook.uk/?p=444).


# Build Instructions (Kit V1.x)

This section covers assembling the eChook PCB

{% hint style="info" %}
If you have a later V2 board (Black PCB), skip this section and go to the [V2 Build Instructions Section](/build-instructions-kit-v2+).
{% endhint %}

## Before You Start

Use this page only for **Kit V1.x** (white PCB).

Build order for best results:

1. Confirm your board version.
2. Solder components from smallest to largest.
3. Use the graphical BOM and reference photos to verify placement before powering on.

## Build Flow (Kit V1.x)

In its simplest form, building the board consists of soldering all components in their correct places, as shown in the table below.

To make the process of soldering the board as easy as possible, it’s best to start with the smallest components first. All components sit on the top of the board, none on the bottom. The bottom of the board has the eChook logo and board version number printed on it, and the top has the component outline and values.

High resolution photos of a finished board can be found [here](https://goo.gl/photos/QLNfrek9v2v522xa9). Note that this is a slightly earlier board where the Bluetooth wires are soldered directly to the board instead of connected via a header. Also the components appearance may differ slightly to those supplied in the kits, as the suppliers may change between manufacturing runs.

### Glossary of Terms

If you are new to this, here is a little introduction to some of the terms used ahead:

* PCB - Printed Circuit Board, the white board in the kit that components are soldered to.
  * Soldermask - this is the white layer on the PCB. It stops solder sticking to areas it's not wanted (and makes the board look pretty)
  * Silkscreen - this is the black text/logos on top of the soldermask giving component references, values, text and logos.
* Solder Sucker - a tool that sucks up melted solder, good for removing components if they've been soldered in the wrong place.
* Solder Wick - a braided copper wick that can be used to soak up solder as an alternative to a Solder Sucker. Nicer to use but more expensive to buy.

### Video Instructions

Ian recorded the process of building up an earlier v1.2 board - with useful tips along the way:

{% embed url="<https://www.youtube.com/watch?v=PspD6s5LoBA>" %}

## **PCB Component Reference Table**

Each component position on the PCB has a component reference next to it. The table below identifies the component for each reference.

The Graphical BOM and images on the next page direct you through the build process.

| **Ref Name** | **Description**                             | **Value / Type** |
| ------------ | ------------------------------------------- | ---------------- |
| BT           | 6 way Pin Header                            |                  |
| C1           | Electrolytic Capacitor                      | 22uF             |
| C3           | Ceramic Capacitor                           | 1u               |
| C4           | Ceramic Capacitor                           | 1u               |
| C5           | Ceramic Capacitor                           | 1u               |
| Current      | Pluggable Terminal 5.08mm 4pin              | -                |
| D1           | Diode Schottky 1A 40V DO41                  | 1N5819RL         |
| Expansion    | -                                           | -                |
| Ext          | 4 Pin Connector, Pluggable Terminal, 5.08mm | -                |
| FS1          | Polyfuse, 250mA                             | 250mA            |
| MotorPWM     | 2 Pin Connector, Pluggable Terminal, 5.08mm | -                |
| PowerIn      | 3 Pin Connector, Pluggable Terminal, 5.08mm | -                |
| PWM          | LED 5mm                                     | -                |
| Q1           | Transistor                                  | BC547            |
| R1           | Resistor                                    | 82K              |
| R2           | Resistor                                    | 16K              |
| R3           | Resistor                                    | 82K              |
| R4           | Resistor                                    | 16K              |
| R5           | Resistor                                    | 10K              |
| R6           | Resistor                                    | 1K               |
| R7           | Resistor                                    | 10K              |
| R8           | Resistor                                    | 1K               |
| R9           | Resistor                                    | 1K               |
| R10          | Resistor                                    | 1K               |
| R11          | Resistor                                    | 1K               |
| R12          | Resistor                                    | 1K               |
| R13          | Resistor                                    | 1K               |
| R14          | Resistor                                    | 1K               |
| R15          | Resistor                                    | 470R             |
| R16          | Resistor                                    | 1K               |
| R17          | Resistor                                    | 1K               |
| R18          | Resistor                                    | 1K               |
| R19          | Resistor                                    | 1K               |
| R20          | Resistor                                    | 4K7              |
| R21          | Resistor                                    | 4K7              |
| R22          | Resistor                                    | 10K              |
| R23          | Resistor                                    | 10K              |
| R24          | Resistor                                    | 47K              |
| RPM          | Pluggable Terminal 5.08mm 4pin              | -                |
| Therm        | Pluggable Terminal 5.08mm 3pin              | -                |
| Throttle     | Pluggable Terminal 5.08mm 3pin              | -                |
| U1           | Arduino Headers                             | -                |
| U2           | Voltage Regulator, 5v 1A.                   | TSR\_1-2450      |
| U3           | Dual Op Amp                                 | MCP6002          |

Once the board is fully populated there will be a few components remaining. These are the sensors that fit to the car. Your kit will also have a few spare components - mostly spare resistors.

### Current Sensor Breakout Board (Kit v1.4+)

From kit v1.4 a PCB breakout board for the LEM current sensor is included. This carries the two 47nF capacitors, the 4.7nF capacitor and the current sensor as shown below:

![](/files/IaPn88ro4XchRYybLnFT) ![](/files/zo8c5pshfaz9CVKu2Gha)

{% hint style="info" %}
Pin-outs for the connectors on the eChook can be found in the [Connecting the eChook to the Car](/connecting-the-echook-to-the-car) section of the documentation.
{% endhint %}


# Build Steps Photos

Here is a sequence of photos showing the building up of a v1.3 eChook board.

As a general rule it is easier to solder components that protrude least from the board first and work your way up. This is because when you place the component in the board and turn it upside down to solder it, the board rests against the tallest component, holding it in place.

### Soldering

If you are new to soldering it may be worth looking for some guides online before starting. Here is a good (possibly slightly over the top detailed) soldering tutorial from EEVBlog that could be worth a watch:

{% embed url="<https://www.youtube.com/watch?v=fYz5nIHH0iY>" %}

### Interactive Build Viewer

{% embed url="<https://echook.github.io/eChook-Nano-PCB/v1.3.1/ibom.html>" %}
Click to open
{% endembed %}

The Interactive BOM linked above is a very useful aid for building the board linking components to their location on the board. Use it in conjunction with the steps below which show a recommended build order and point out any components that need to be placed with a specific orientation.

### Build Video

Here is a video of soldering the kit together:

{% embed url="<https://www.youtube.com/watch?ab_channel=weChook&v=PspD6s5LoBA>" %}

### Build Steps

![PCB and all components laid out](/files/-LG-GHafM8iz0MZw3Gy7)

Start with the resistors - these are the smallest components.

{% hint style="info" %}
If the resistors aren't labelled, use the[ resistor colour codes](http://www.instructables.com/id/How-to-read-color-codes-from-resistors-1/) or a multimeter to determine their values
{% endhint %}

![All resistors soldered in place](/files/-LG-IMiKsjS9tbyw9ToQ)

* Ceramic Capacitors and the Diode next

{% hint style="info" %}
Ceramic Capacitors (1μF) - these have 105 printed on them. The first two digits indicate the value, the third digit is the number of zeros following that value, to give the capacitance in pico Farads.

105 translates to $$10 \times10^5$$ pF or 1,000,000pF, 1000 nF or finally, 1μF
{% endhint %}

{% hint style="danger" %}
**Diode** - The grey end of the diode goes to the end pointed to by the ‘arrow’ diode symbol on the silkscreen.
{% endhint %}

![Diode and 1µF capacitors in place](/files/-LG-Ispi0oYyFIsk7M2v)

* Transistor: This looks similar to the hall effect sensors but is larger and has 'BC547' printed on it. There will be a few mm of leg between the transistor and the PCB.
* LED: The LED is labelled as PWM on the board as this is the signal it shows by default.

{% hint style="danger" %}
Both the **LED** and **transistor** need to be placed in the correct orientation - the 'D' shape of the component matches the outline on the board.
{% endhint %}

![Transistor and LED added](/files/-LG-RnR96WvpfRdD3nZn)

* Tracopower Voltage Regulator

{% hint style="danger" %}
**Voltage Regulator** is orientation specific. The dot on the printed face lines up with the square solder point, with the printed face to the outside edge of the PCB
{% endhint %}

* Electrolytic Capacitor (22μF)

{% hint style="danger" %}
**Electrolytic Capacitors** are orientation specific. The -ve leg is marked with a grey stripe on the capacitors body and hollow '-' symbols. The PCB indicates which side the +ve leg is with a '+' sign.
{% endhint %}

* Header Socket for the Arduino
* Header Socket for the Bluetooth Module

{% hint style="info" %}
If you are intending to print or buy the eChook designed case, the wires for the bluetooth need to be soldered directly to the board, there is no space for the bluetooth headers.
{% endhint %}

* 8 pin DIP Socket for the Op-Amp

{% hint style="danger" %}
The **DIP Socket** is orientation specific. There is an indentation on the silk screen image, this lines up with the indentation on the socket.
{% endhint %}

{% hint style="info" %}
For larger components with 3+ pins it can be helpful to solder one pin in first then make sure that the component is flat with the PCB. To adjust it, simply melt the solder on the single pin and move the component until you are happy. Now solder the remaining pins.
{% endhint %}

![DCDC regulator, 22uF Capacitor, Header and DIP Socket added.](/files/-LG-TmWonDM8nIqDETPK)

* Polyfuse
* Connectors

![Polyfuse and Connectors added.](/files/-LG-XXJmlMl3O8XXgXi4)

\
All soldering on the PCB is now done.

{% hint style="warning" %}
**Complete the power on tests** described on the next page **before** plugging in the Arduino, Bluetooth Module and Op-Amp as shown below.
{% endhint %}

{% hint style="danger" %}
When connecting the Bluetooth module, ensure that it is plugged in the right way round using the silkscreen labels on the PCB and bluetooth module.
{% endhint %}

![](/files/-LG-ZRDrlaK7NZgDfp6r)

The remaining components are fitted to the car itself, as described in the 'Connecting the eChook to the Car' section.

{% content-ref url="/pages/-LChARU1dpnTkWnw3R-5" %}
[Connecting the eChook to the Car](/connecting-the-echook-to-the-car)
{% endcontent-ref %}


# First Power On

This page is for initial board safety checks and first power-up **before** fitting the Arduino, Bluetooth module, and op-amp.

## Pre Power On Tests

The Arduino, Bluetooth Module and Op-Amp have not been connected yet as these are the components most susceptible to being damaged by an error with the board. Before plugging in these final components or powering up the board it is sensible to carry out some simple checks.

#### Visual Inspection

Visually inspect the soldering, looking for any areas where the solder has bridged connections, creating short circuits, especially on the closer op-amp, Arduino and Bluetooth pins. If any shorts are found, fix them. A small magnifying glass can be useful for identifying issues here.

#### Test Points / Multimeter Inspection

On the back of the PCB there are multiple 3mm silver circles, each with a label ending in 'TP'. These are test points, designed to give easy multimeter access for testing the board.

Use the following test points as your continuity-check references:

<table><thead><tr><th width="202">Label</th><th>Signal</th></tr></thead><tbody><tr><td>GND</td><td>Ground</td></tr><tr><td>PWR5VTP</td><td>+5v Power</td></tr><tr><td>BattTotalVTP</td><td>24V battery signal after potential divider circuit (0-5v)</td></tr><tr><td>Batt1VTP</td><td>12V battery signal after potential divider circuit (0-5V)</td></tr><tr><td>ThrottleTP</td><td>Input voltage from the throttle (0-5v)</td></tr><tr><td>CurrentTP</td><td>Output from current differential amplifier circuit / Current signal into to Arduino</td></tr><tr><td>Temp1TP</td><td>Temperature 1 input to the Arduino</td></tr><tr><td>Temp2TP</td><td>Temperature 2 input to the Arduino</td></tr><tr><td>BrakeTP</td><td>Signal in from Brake switch</td></tr></tbody></table>

To see exactly where these test points are in the circuit, take a look at the [Circuit Schematics](/circuit-schematics).

The multimeter tests check that there are no short circuits on the board. Place the multimeter into continuity mode (aka beep mode) and check that there is no continuity between any of the pads. The most important checks are that no other test point has continuity to the ground test point, and that no other test point has continuity to the 5V test point. There should also be no continuity between any of the other test points.

## First Power On

Follow this order for first power-up:

1. If a bench power supply is available, use this as the safest power source.
2. Set the supply voltage to 24V and current limit to around 0.3A.
3. Attach power to the 24v and ground pins on the power connector.
4. If a bench supply is not available, a pair of Greenpower batteries can be used, but there **must** be a fuse inline between the battery and board, close to the battery. Preferably 1A, but 5A is sufficient.

The pinout for the power socket can be found here: [Connecting the eChook to the Car](/connecting-the-echook-to-the-car#connector-pin-out).

Once connected, assuming the current limiter hasn’t been hit, use the multimeter to check that the 5V rail on the board is reading 5V. If it is not, check the soldering of the power module and ensure that 24V is reaching it.

## Plug in the Final Components

Once you have completed the above checks, plug in the Arduino, Bluetooth module and op-amp.

* The Arduino plugs in with the USB connection to the outside edge of the PCB.
* The op-amp has a dot on one corner, this goes with the notched end of the 8-pin socket.
* The Bluetooth module can connect directly to the 6-pin header on the PCB, or through the included 6 way jumper cable. Ensure that it is plugged in the right way round using the silkscreen labels on the PCB and bluetooth module.

Power up and you should get some flashing LEDs on the Arduino and the BT module. This is now a complete, but unprogrammed eChook Nano board.

At this point, the board is assembled, powered, and ready for Arduino programming.

If you want to proceed with fitting the sensors to the car and wiring it all up before programming the Arduino, jump ahead to '[Connecting the eChook to the Car](/connecting-the-echook-to-the-car)'.


# Build Instructions (Kit V2+)

The V2 board comes preassembled, however there is still a little assembly needed to attach the Bluetooth module and some soldering on the sensor boards.

## Before You Start

This page is for **Kit V2+** boards. The main PCB is preassembled, but the Bluetooth module and sensor boards still require assembly.

## Bluetooth Module

On V2, this gets attached to the board rather than on a length of wire. In the bag with the module there should be a 3D printed plastic 'y' shaped support and a small Philips head screw.

Assemble in this order:

1. Bend the header pins on the HC-05 Bluetooth module to be vertical. Do this carefully, one pin at a time to avoid putting too much force through the PCB.
2. Slide the 'Y' support over the module, with the bottom of the Y pointing in the same direction as the pins.
3. Insert this into the 6 pin BT header on the main eChook board, pressing the bottom of the support into the hole in the board.
4. Secure the support from the bottom of the board with the included screw.

## Magnet Sensing Boards

The Magnet Sensor boards come preassembled, other than the magnet sensor (Allegro A1101 hall effect sensor) itself, which is a small 3 pin component, requires soldering to the board.

1. Bend the pins. Place the top of the sensor, chamfered edges up, inline with the PCB through hole mounting point with it's legs over the end of the board, and bend the legs down 90 degrees. This ensures the legs are bent at the right point.
2. Bend the legs apart slightly so that they fit into the three mounting holes, with the sensor body over the white 'eC' marked square on the board. The flat side of the sensor goes against the board, the chamfered side faces away from the board.
3. Solder the three legs in place.
4. A spot of hot glue, or a wrap of electrical tape should be used to secure the sensor to the board to avoid damage from vibration in the car.

## Current Sensor Board

{% embed url="<https://youtu.be/21s8vgiA-Jw>" %}

In the bag with the LEM HAIS-50-P current sensor is a small PCB, three capacitors, and a connector and wire.

Solder the components from smallest to largest - start with the three capacitors. The two 47nF capacitors are marked 473, and the 4.7nF capacitor is marked 472. They are not polarity sensitive, so it does not matter which way around they go.

Next, mount the connector header, with the 'gap' side towards the edge of the board. Solder only one pin initially and check that it is fitted flush and square with the board. If it is not, reheat that one joint and adjust its position. Once correct, solder the remaining three pins.

Finally, fit the current sensor. It only fits in one orientation. As with the connector, solder one of the larger mounting pins first, check and correct its position if necessary, then solder the remaining mounting pin and 4 smaller connections.

## Arduino

Finally, plug in the Arduino to the two 15-pin sockets with the USB plug at the board edge and you're all done!

At this point, the V2+ assembly is complete and the board is ready for Arduino programming.


# Programming the Arduino

This section takes you through the programming process, from downloading the code, to flashing it to the Arduino.

Follow these steps in order:

1. [Download the eChook Arduino Code](/programming-the-arduino/download-the-echook-arduino-code)
2. [Install Arduino IDE](/programming-the-arduino/install-arduino-ide)
3. [Programming the Arduino](/programming-the-arduino/programming-the-arduino)

New kits typically use the Arduino Nano Every. Any clone-specific requirements are covered in the step pages above.

After upload is complete, continue to [Setting up the Bluetooth](/setting-up-the-bluetooth).


# Install Arduino IDE

The goal of this step is to install Arduino IDE and open it successfully.

Arduino IDE (Integrated Development Environment) is the software used to write and upload code to the Arduino. It is available from here:

{% embed url="<https://docs.arduino.cc/software/ide-v2>" %}

If you already have the IDE installed, make sure it is up to date.

Follow this order:

1. Download the latest Arduino IDE from the official link above.
2. Install it.
3. Open Arduino IDE after installation.
4. Approve the first-run prompts for drivers and libraries.

When complete, the IDE should open and look similar to the image below:

<figure><img src="/files/8IKL8hmoMk5Xgaq9VFKl" alt=""><figcaption></figcaption></figure>

After this, continue to the programming step.


# Arduino Drivers

New kits come with a genuine Arduino Nano Every, earlier kits come with an Arduino compatible Nano clone. The driver installation for each is different - select the correct one below.

<figure><img src="/files/Pfp8Mi72BmiRWUlZfsp6" alt=""><figcaption></figcaption></figure>

{% tabs %}
{% tab title="Arduino Nano Every" %}
Within the Arduino IDE, go to the Tools menu, then Boards, then Boards Manager.

In the Boards Manager, search for megaAVR and install it.

<figure><img src="/files/WEPUlOVpXCMDDG8oz6aZ" alt=""><figcaption><p>Arduino megaAVR Boards installed</p></figcaption></figure>

All done - continue to the next page.
{% endtab %}

{% tab title="Nano Clone" %}
The Arduino Compatible Nano uses a different USB Serial interface and requires a driver to be installed that isn't included with the Arduino IDE.

Sparkfun have written an excellent installation guide, linked below. Ensure you download the drivers directly from sparkfun, not via the WCH website. There is a bug in the newer (2019+) version of the drivers from the WCH Website.

{% embed url="<https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all#drivers-if-you-need-them>" fullWidth="false" %}

Alternatively, download the drivers directly (still via sparkfun) [here.](https://cdn.sparkfun.com/assets/learn_tutorials/8/4/4/CH341SER.EXE)

During the install process, check the driver date - the 2014 drivers work, later ones have been known to cause issues when uploading code to the Arduino.

<figure><img src="/files/uc8QTRpg0YSE07Iz9EXr" alt=""><figcaption><p>Left: Good 2014 drivers. Right: Buggy later drivers.</p></figcaption></figure>

Once drivers are installed continue to the next page.
{% endtab %}
{% endtabs %}


# Download the eChook Arduino Code

There are two aspects to the eChook code - the code itself, and any code libraries that the main code references. The eChook code is dependent on one library called "Bounce2", which is used to debounce the switch inputs.

## Downloading Libraries

Download the Bounce2 library with the built-in Arduino IDE libraries manager:

<figure><img src="/files/IHd9C7PJcG8Sv69tmNeY" alt=""><figcaption></figcaption></figure>

If the install button isn't visible, you may need to make the app fullscreen or enlarge the side panel.

The Bounce2 library is used in the eChook code to debounce button inputs.

## Downloading the eChook Code

The eChook code is hosted on GitHub. Download the latest version from the link below and extract it to a suitable working directory, for example: ...\My Documents\eChook.

{% embed url="<https://github.com/eChook/eChook-Arduino-Nano/releases/>" %}
Link to eChook code releases for the eChook Nano
{% endembed %}

<figure><img src="/files/0W9mwQtsjUo1VuSkd8E7" alt=""><figcaption><p>Under the Assets heading, click "Source code (zip)" to initiate download.</p></figcaption></figure>


# Programming the Arduino

Before starting, make sure you have downloaded the eChook code and installed Arduino IDE.

Follow this order:

1. Locate and open the ‘eChookCode.ino’ file downloaded in the previous step. This will open all files in the Arduino IDE.
2. Set the correct board in the IDE. Go to **Tools > Board**.
   * If you are using an Arduino Nano, select **Arduino AVR Boards > Arduino Nano**, then go to **Tools > Processor** and select **ATmega328\***. The bottom right of the Arduino IDE should now read “Arduino Nano, ATmega328”.
   * If you are using an Arduino Nano Every, go to Boards Manager and search for "megaAVR", then install the megaAVR boards package. Then go to **Tools > Boards > megaAVR Boards > Arduino Nano Every**.
3. Compile the code by clicking the "tick" button on the top left of the Arduino IDE window. A progress bar will appear at the bottom of the window - this step will likely take a couple of minutes the first time. When done, the message bar will read "Done Compiling". If you have a problem at this point, take a look at the suggestions at the bottom of this page.
4. Assuming the code compiled successfully, it can now be uploaded (flashed) to the Arduino. Before plugging the Arduino in, go to "Tools > Port" and take note of which COM ports are listed. Now connect the Arduino via the mini USB cable. The computer will assign it a COM port. Go back to "Tools > Port" and select the new COM port, which will be the Arduino.

{% hint style="info" %}
If you are using the older Arduino Nano Clone, it is important to **disconnect** the Bluetooth module from the eChook board before attempting to flash code. This isn't required for the Arduino Nano Every, it can be programmed with everything connected.
{% endhint %}

Press the ‘Upload’ button to compile and flash the code to the board. The TX and RX lights on the Arduino will flash rapidly while the upload is ongoing. When finished the Arduino IDE will show “Upload Complete” if it has all worked.

## Upload Errors

It might not work first time. Don't panic!

### Common Errors

#### *Out Of Sync*

If an error occurs it will show up in the Output window at the bottom of the IDE. The most common error seen is an out of sync error, which will show something like the following:

```
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
```

There are some common causes for this:

1. The Bluetooth module is plugged in at the same time as you are trying to program the Arduino. Unplug it and try again. (Does not apply to the Arduino Nano Every)
2. The wrong COM port is selected - does the port disappear from the Tools > Port menu when you unplug the Arduino?
3. You have the wrong Arduino or wrong processor selected in the IDE.
   1. Ensure the correct Arduino is selected.
   2. If using an Arduino Nano Clone, go to **Tools > Processor** and make sure **ATmega328P** is selected. If the error still appears, try selecting the **ATmega328P (Old Bootloader)** instead.
4. You have the wrong version of the CH340 driver installed. Check the driver date and version in device manager matches below. If not, go back to the [driver install page](/programming-the-arduino/arduino-ch340-drivers) for the correct link.

<figure><img src="/files/kPR0HbdKKKxqUSjjkaSV" alt="" width="375"><figcaption></figcaption></figure>

#### *Access is denied*

A more recent common error is 'Can't open Device' and will show something like the following:

```
avrdude: ser_open(): can't open device "\\.\COM3": Access is denied
```

This happens when the COM port is already open in another process. With Arduino IDE 2.x it seems that this other process is often the IDE itself. If you are seeing this error there doesn't seem to be one fix that works for everyone, but here are a few things to try:

1. Open Serial Monitor (Square button top right of the IDE), then close it again. This makes the IDE close the serial port if it has it open. Now try to upload the code again.
2. Unplug the Arduino, close the IDE, re-open the IDE, plug in the Arduino and hit upload the moment Windows recognises it.
3. Check the driver version - as in point 4 of the out of sync error section above.
4. A little drastic, but try another computer! This generally works.

**Oct 2024 Update:** Windows 11 now appears to re-write the CH340G drivers for the Nano Clone boards on start-up, requiring an uninstall and reinstall of the correct drivers each boot. All new kits come with an Arduino Nano Every and will not encounter this issue, but it is certainly annoying for teams with the older Arduino. Any eChook Nano board will work with the newer Arduino Nano Every.

#### Any other Issues

If you are seeing other issues, or compilation errors rather than upload errors you'll have the errors listed in the console window. Some errors are more helpful than others, but to make them as useful as possible, go into preferences and enable verbose logging:

<figure><img src="/files/r5MNGOqKpeJht5g6Xw5r" alt=""><figcaption></figcaption></figure>

Now try the upload again - it will still fail, but should give more information on why. Feel free to give google a try, but if you can't make sense of the log, use the chat feature on this page or head over to the [support forum](http://echook.boards.net) and start a new thread with a copy of the errors - we'll give you a hand deciphering it.


# Updating the Arduino

If you are just setting up your eChook for the first time, skip this page.

Over time, there will be updates to the eChook Arduino code, and new releases will be shown on the eChook GitHub page here:

{% embed url="<https://github.com/eChook/eChook-Arduino-Nano/releases/>" %}

To update your eChook to a new release, download the zip file from the link above, extract it, open it in the Arduino IDE and follow the steps on the last page to upload it to the Arduino.

### Updates and Calibrations

Between code version 1.x and 2+ there has been a change in how calibrations are stored on the Arduino. In v1.x, the calibration was hard coded into the calibration.h file, and values from this file need to be manually copied across to the newly downloaded release before uploading it.

From v2.0 onwards, the calibrations are stored in a separate memory location (EEPROM) on the Arduino, and are changed via the web interface at [configure.echook.uk](https://configure.echook.uk). This means that the calibrations are maintained on the Arduino and aren't affected by reprogramming.

**Updating from V1.x to V2**

This is the most involved update. The recommended route is to keep a copy of your old calibration.h file, upload the new V2 release to the Arduino without changing any values in code, then proceed to the [configuration website](https://configure.echook.uk) and enter your previous calibrations through the new interface.

**Updating from V2 to newer V2 releases**

Just download the new release and flash it - your calibrations will remain on the Arduino.


# Setting up the Bluetooth

This is a process that should only need doing once for each Bluetooth module. It comes programmed from the factory as "HC05" and set to a baud rate of 9600. Before use, we need to set the baud rate to 115200, and change the name - potentially to that of the car it will be fitted to.

## Before You Start

This setup is typically done once per Bluetooth module, after Arduino code upload.

There are two steps to the process:

1. Enter the Bluetooth name you want and save that to the Arduino.
2. Use the Arduino to send the configuration to the Bluetooth module itself.

### Setting the Bluetooth name

As of eChook Arduino code version 2.0, you can set the name by going to configure.echook.uk in either Chrome or Edge browsers and connecting your eChook. For more information see the [Calibrating the eChook](/calibrating-the-echook) section.

Alternatively, the old method still works. When the eChook Arduino code is open in the Arduino IDE there will be a tab called `calibration.h`. The first parameters in this file are the Bluetooth settings.

```
//Bluetooth Settings
const String CAL_BT_NAME     = "your-car-name-here";
```

Save and upload the new code to the Arduino.

### Configuring the HC-05 Bluetooth module

These steps differ between versions of the board. If you have a V2 board and have cut the JP3 jumper on the back of the board, this disables the automatic configuration, and you need to follow the V1.x procedure.

{% tabs %}
{% tab title="PCB V2 (Black)" %}
{% hint style="danger" %}
We are aware of a few of the eChook Nano V2.0 kits from early 2025 being sent out with incompatible Bluetooth modules. If you have a V2.0 kit, and are having issues getting data in the app, please see the [Bluetooth Troubleshooting Section](/troubleshooting/bluetooth).
{% endhint %}

V2 of the board automatically configures the Bluetooth module each time it is first powered on. Once you have set the Bluetooth name, disconnect the USB, wait a couple of seconds and reconnect it. The red LED on the Bluetooth module should come on for \~1s, turn off, then start flashing. This indicates a successful configuration.

To see more information on the process, open the Arduino IDE, and start the serial monitor, connected to the Arduino Nano Every COM port. Now perform the power cycle described above, and the eChook will print debug information to the serial monitor.
{% endtab %}

{% tab title="PCB V1.x (White)" %}

1. Insert the Arduino into the eChook board and unplug the HC-05 Bluetooth module.
2. Power the eChook board. If using an Arduino Nano Clone, use a power source *other than the USB* on the Arduino and ensure that the USB is unplugged for this procedure. The Arduino Nano Every works with USB power.
3. Press the small button next to the ‘EN’ pin on the Bluetooth module and hold this down while plugging it into the eChook Nano board. Release once plugged in.
4. The Bluetooth module LED should now be blinking slowly. Two seconds on, two seconds off. If this is not the case repeat step 3.
5. Press the reset button on the Arduino. The "L" LED on the Arduino should blink quickly 3 times and the LED on the Bluetooth module should resume flashing quickly, signifying it is waiting for a connection. The module will now appear on a phone under the specified name.
6. If the Bluetooth module LED keeps blinking slowly the configuration has failed. Go back to step 3 and repeat the process.
   {% endtab %}
   {% endtabs %}

The board is now ready to be paired with a phone. Continue to [Pairing with a phone](/setting-up-the-bluetooth/pairing-with-a-phone).


# Pairing with a phone

Follow these steps in order.

#### 1) Install the app

Install the [Omni Telemetry](https://play.google.com/store/apps/details?id=net.keduro.omni\&hl=en_GB) app from the Google Play Store.

The app requires two permissions and won't work properly unless they're allowed at first start up. Access to device media storage is required to save a log file to the phone, and access to Location is required for lap counting, logging GPS speed, and with the in-house telemetry, displaying car location on track.

#### 2) Power up the eChook

Power up the eChook with the Bluetooth module plugged in. The LED on the Bluetooth module should be flashing rapidly, indicating it is disconnected from a phone.

#### 3) Pair the phone and eChook

On the phone, go to Bluetooth settings and scan for devices. It may take a while to resolve the name, but the configured eChook name should appear. If needed, set or check this name using the [Calibrating the eChook](/calibrating-the-echook) section. It is recommended to change from the default name, as there may be multiple 'eChook' Bluetooth devices at a race day! Pair with it using the "1234" passcode.

#### 4) Select the paired device in Omni Telemetry

Open Omni Telemetry, then open the three-dot menu in the top-right corner and select Settings. Choose your newly paired eChook device from the Bluetooth device list.

#### 5) Verify connection

On exiting settings, the app will attempt to connect to the eChook board and the Bluetooth icon in the top right should turn green. At this point, the only data will be the supply voltage.

{% hint style="warning" %}
If the app can’t connect, the Bluetooth icon will be red, and it will try to reconnect regularly. This will happen if the BT module has lost power, but it **will also happen if the data being sent from the eChook stops**. If the Arduino isn’t programmed properly and is not regularly sending out data, the Bluetooth link can appear to fail to connect.
{% endhint %}

Next, continue to the "Using the App" section.

{% content-ref url="/pages/-LChARUEXpG0Of-w97\_\_" %}
[Using the App](/using-the-app)
{% endcontent-ref %}


# Connecting the eChook to the Car

Now that the board is sending data to the phone, it needs to have some useful data to send. All of the external connections to the board go through pluggable terminal connectors. This makes it easy to wire into the vehicle’s harness with the screw terminals, and makes the board easy to remove from the car if necessary.

{% hint style="info" %}
There is a post with some guidance to building a Greenpower car wiring harness on the eChook forum [here](http://echook.boards.net/thread/26).
{% endhint %}

The image below shows the external interfaces to the board numbered, with details on each connection in the table.

![eChook Nano v1.3.1 Board Bottom View with connector pinouts](/files/1yHjUknnPz8xOKRamJ4P)

{% hint style="info" %}
Label the connectors on the harness side to make it easier to identify them in future.
{% endhint %}

## Connector Pin Out

<table data-header-hidden><thead><tr><th width="150">Connector</th><th width="150" data-type="number">Pin</th><th width="183.25880551301682">Signal</th><th>Use</th></tr></thead><tbody><tr><td>Power In</td><td>1</td><td>24v</td><td>Power and 24V monitoring</td></tr><tr><td></td><td>2</td><td>12v</td><td>Monitoring the lower battery voltage.</td></tr><tr><td></td><td>3</td><td>Ground</td><td>Main grounding point for the board.</td></tr><tr><td>Motor PWM</td><td>1</td><td>5V PWM Output</td><td>A PWM output. Could control the drive motor, or a fan etc.</td></tr><tr><td></td><td>2</td><td>Ground reference</td><td>Ground for PWM line</td></tr><tr><td>RPM</td><td>1</td><td>5v Supply</td><td>5V supply for the Hall Effect Sensors</td></tr><tr><td></td><td>2</td><td>Motor RPM</td><td>Pulsed 5v signal from motor hall effect sensor</td></tr><tr><td></td><td>3</td><td>Wheel RPM</td><td>Pulsed 5v signal from wheel hall effect sensor</td></tr><tr><td></td><td>4</td><td>Ground reference</td><td>Ground for Hall Effect Sensors</td></tr><tr><td>Therm</td><td>1</td><td>Temp 1 - Line to thermistor</td><td>Connection to thermistor 1. Thermistor connects between here and ground</td></tr><tr><td></td><td>2</td><td>Temp 2 - Line to thermistor</td><td>Connection to thermistor 2. Thermistor connects between here and ground</td></tr><tr><td></td><td>3</td><td>Ground reference</td><td>Ground connection for thermistors</td></tr><tr><td>Throttle</td><td>1</td><td>5v Supply</td><td>5v supply for the throttle</td></tr><tr><td></td><td>2</td><td>0-5v throttle input</td><td>Analogue input for a variable throttle, or digital for a push button.</td></tr><tr><td></td><td>3</td><td>Ground reference</td><td>Ground reference for throttle</td></tr><tr><td>Ext Buttons</td><td>1</td><td>Ground reference</td><td>Ground reference for buttons</td></tr><tr><td></td><td>2</td><td>Brake Switch</td><td>Brake input for logging brake use</td></tr><tr><td></td><td>3</td><td>Button 1 Active LOW digital Input</td><td>Input for 'Race Start' button needed for lap counting</td></tr><tr><td></td><td>4</td><td>Button 2 Active LOW digital Input</td><td>Input for 'Switch Screen' button.</td></tr><tr><td>Current</td><td>1</td><td>5v Supply</td><td>5V to current sensor</td></tr><tr><td></td><td>2</td><td>Current Reference Analogue input</td><td>Input from current sensor reference pin</td></tr><tr><td></td><td>3</td><td>Current Sensing Analogue input</td><td>Input from Current Sense pin</td></tr><tr><td></td><td>4</td><td>Ground reference</td><td>Ground reference for current sensor</td></tr></tbody></table>


# Power and Voltage

Power Connector

## Power to the Board - 24V and GND <a href="#docs-internal-guid-c4233111-09ca-8d5a-7c1c-1dfc2e9d0636" id="docs-internal-guid-c4233111-09ca-8d5a-7c1c-1dfc2e9d0636"></a>

To power the board in the car, connect the GND pin on the ‘Power In’ socket to ground, and the +24v pin to the 24v battery supply on the car.

There is no need for an external 5V supply.

For safety (and to comply with Greenpower regulations), it is suggested to take power from after the isolator switch and the board must have it’s own fuse, located as close to the battery in the harness as feasible. nominally 5A, although 1A is more than adequate.

The 24V input is logged by the eChook as 24v battery voltage.

## 12v Input

This monitors the voltage of the ‘lower’ battery, allowing the system to monitor and log the voltages of both 12v batteries. This will show if one of the batteries is in a worse condition than the other.

The 12v monitoring requires a wire from the positive terminal of the lower battery, as shown by the wire\_12V label in the diagram below:

![](/files/-LChAVNe6eX1YMOVmHOu)

As this is a wire from the battery it requires a fuse of it’s own, a low value (<1A) is recommended but 5A is sufficient. As this is simply a reference wire, no current will be drawn through it, so a thin wire can be used, however **ensure that the wire is able to carry a higher current than the fuse that it is protected by**.

## 5v Outputs on other connectors

All 5v connections on the board are **Outputs Only** and will be connected as needed.

* **V1.x boards -** all 5v outputs are connected to the same voltage rail, and a short circuit on one of these outputs will pull the whole eChook 5V rail to ground. It will not cause lasting damage, but will shut down the board until the short circuit is fixed.
* **V2.x boards -** Each 5v output has individual overcurrent protection. (Throttle, Current Sensor, RPM Sensors, Bluetooth Module, and expansion header). Each 5V output is individually limited to 300mA (1.5W), and if too much current is drawn, a red fault LED, marked with an '**!**', will illuminate next to the relevant connection. The rest of the board will continue to operate without interruption.

**CAUTION: Applying a higher voltage to the 5v rail&#x20;*****will*****&#x20;cause damage to the eChook board and the Arduino Nano.**


# Current Sensor

Current is probably the most useful data to have on a Greenpower car as it gives the best indication of how quickly the batteries are being discharged.

{% tabs %}
{% tab title="Kit V1.4 +" %}
From Kit version 1.4 a PCB breakout board for the current sensor is included to carry the LEM sensor, three capacitors, and a connection to the vehicle harness.

![](/files/IaPn88ro4XchRYybLnFT)

From V2.0 onwards, a JST connector and wiring pigtails have been included as connections to the current sensor PCB.
{% endtab %}

{% tab title="Kit < V1.4" %}
The current sensor needs two 47nF capacitors and one 4.7nf capacitor soldered to it, as close to the pins as possible as shown in the[ datasheet](http://docs-europe.electrocomponents.com/webdocs/142e/0900766b8142e844.pdf) diagram below:

![](/files/-LChAXKE09dsSLd1KWoE)

Solder the wires and the capacitors directly to the current sensor pins. It is advisable to add some form of stress relief so that if the wires are pulled, the solder joints don't take the force. This can be achieved with some hot glue around the connections, cable ties (as shown below) or tape etc.
{% endtab %}
{% endtabs %}

### Connecting the sensor to the eChook board

The four outputs from the current sensor PCB, labelled 5V, GND, Ref and Sense (Out on early boards), match the labels of the four pins on the eChook board current sensor - although the pin order is different.

| Current Sensor | eChook board current connector |
| -------------- | ------------------------------ |
| +5v            | 5V                             |
| Ref            | Ref                            |
| Sense/Out      | Sens                           |
| GND            | GND                            |

If possible, avoid a long harness between the eChook board and the sensor to limit interference on the current signal.

### Positioning the sensor in the car

This sensor needs to be placed around the main 24V cable from the battery. A convenient location is often next to the circuit breaker. The orientation of this sensor is important; if it is the wrong way around it will not read a current. The correct orientation is shown below - note the lip around the right hand side of the sensor aperture, and if you have a PCB mounted sensor, the mounting direction is printed on the bottom of the board.

![](/files/-LChAXKXwN8fdc1PO7nc)


# Throttle Input

Throttle input is useful to log because it shows how the car is being driven. Since throttle systems vary between cars, there are several safe ways to interface throttle signals to the eChook.

Throttle input is also needed for the app lap counter feature, because this uses throttle signal to detect race start.

The eChook can also take a variable throttle input and generate a PWM output for a higher-power motor driver circuit. The green LED on the eChook board is connected to this output.

## Throttle Configuration

There are two common ways to use throttle input with the eChook, depending on whether a separate motor control system is used (from simple relays to a controller such as a 4QD).

* Logger only - motor control is handled by another system and the eChook only logs the throttle input.
* Motor control - eChook PWM output is used to control the motor based on throttle input and any eChook processing.

#### Logger only

The eChook must share the same ground reference, normally battery negative, as the motor control system. Only the throttle signal is fed into the eChook board.

| Throttle                            | eChook Throttle Connector |
| ----------------------------------- | ------------------------- |
| Not Connected                       | 5V                        |
| Throttle Signal to Motor Controller | In                        |
| Not Connected - shared GND          | GND                       |

{% hint style="danger" %}
**If using a 4QD controller DO NOT connect the 4QD Ground to the eChook Ground.**

4QD controllers have built-in reverse polarity protection (unless you have a variant that explicitly states it does not). This can create a small voltage offset between 4QD ground and chassis/eChook ground. If these grounds are connected and the motor runs, significant current may flow through the ground wire, potentially melting wiring and damaging the eChook board.
{% endhint %}

#### Fully connected

The eChook provides 5V power and ground reference while reading throttle output.

| Throttle               | eChook Throttle Connector |
| ---------------------- | ------------------------- |
| 5V Power (If required) | 5V                        |
| Output Signal          | In                        |
| GND                    | GND                       |

These tables apply to each throttle type described below.

### Throttle Types

As well as different connection methods, there are multiple throttle types used in Greenpower racing, and each has different wiring requirements:

{% tabs %}
{% tab title="5V Variable Throttle" %}
This is the input type the eChook is designed for. It is common on eBike/eScooter hall-effect throttles and potentiometer-based throttles. Most variable throttles are already in this voltage range, but confirm with a multimeter before connecting anything.

This type of throttle can be connected directly to the eChook as per the tables above, depending on whether the eChook is acting as a logger only, or for motor control.
{% endtab %}

{% tab title="Push Button Throttle" %}
There are a few push-button throttle configurations. On cars using relay-based motor control, the button often switches 24V, and sometimes 12V. This is above the 5V range expected by the eChook input.

* `V1.x` boards need a potential divider to reduce button voltage to a safe 5V at the eChook input:

  ![](https://lh5.googleusercontent.com/KW_L3b9ZulcJHl2DW7X59uPfOaAb0Wx-hhOOY05LV8JsQ-45gsAX87I-p3_iwrGjc9t9DdA0AJs7RcMXF0zFeOA8yvB3myBPQoFCtgvISXY-wqJguEm9DNX9WkTusLDgDmWt9u7F)

  \
  For a button switching a 24V signal, set `R1 = 82k` and `R2 = 16k`. This drops 30V to 5V and provides margin for battery voltages above 12V per battery.\
  Resistor values for other voltages can be calculated by the formula below, where V\_out is the feed to the eChook board, and V\_in is the output from the throttle button.

$$
V\_{out } = V\_{in} \*( R\_2/{R\_1+R\_2})
$$

* `V2+` boards include overvoltage input protection, so up to 30V can be connected through a single inline resistor to limit current. Recommended resistor value is `1kOhm` to `10kOhm` inclusive.

**eChook Configuration**

To configure eChook for a push-button throttle, connect to the calibration web interface and select `Throttle Type: On/Off`.
{% endtab %}

{% tab title=">5V Variable Throttle" %}
If the car has a variable throttle that can exceed 5V, use a potential divider to reduce the maximum output to 5V. See the Push Button Throttle tab for divider design, then wire throttle and ground as shown in the tables above.
{% endtab %}
{% endtabs %}


# External Buttons and Brake

There are three button inputs on the eChook board. Two of these are to interface with the app as using the touchscreen is generally inconvenient when driving and wearing gloves. One button cycles through the map and data screens on the app, while the other activates ‘launch’ mode to trigger lap counting. The final button input is to detect if the brakes are applied.

**NOTE: With the Omni app, the 'launch' button is no longer needed.**

A push to make button (not included in kit) is required for each input, and is simply wired between the relevant button connection and a ground reference. This can be the ground on the ‘EXT’ (PCB V1.x)/ 'Buttons' (PCB v2.x+) connector, or ground elsewhere on the vehicle.

## Braking signal from brake light

As it is not always practical to attach another switch to the brake lever for logging purposes, it is also possible to connect the eChook to the brake light on the car instead. This requires a potential divider to step down the voltage driving the brake light voltage to 5v. To design the potential divider, follow the same guide as for connecting the throttle, and simply connect the output to the brake input. Depending on the car the brake light could be switched on the +ve side (i.e. 24v side) or the ground side. Ensure that the connection to the eChook is made on the switched side of the light, as shown below for a 24V brake light system.

![](https://lh4.googleusercontent.com/V9i01vwxJSmsg6HIEdEN-fDVn4EpTTwEAoKph0fRIcXXVdiyJ8_yV-685Dqug5seFBuX_EMQA9VhIa_k5-lMQ6drWDLhKY50Kt7-IPJhLIe6O4urHIDyd4UJt6qDwfbRr9VQf6p_)

eChook logs for the circuit on the left will show high (100) when the brake is pressed and low (0) when it is not pressed. The circuit on the right will give the inverse of this. It will still be apparent when the brake is on and off, however could be neatened in the eChook Arduino code.


# Temperature Sensors

There are two temperature sensor inputs on the board, and two thermistors supplied with the eChook Nano kit. Each thermistor can be placed anywhere on the car for monitoring the temperature at that spot. The temperature sensed on the ‘Temp 1’ input is displayed on screen in the app, and the other input is just logged, not displayed.

As such Temp 1 will normally be used for motor temperature so it can be monitored through a race by the driver. If possible it is best to secure the sensor directly to the motor rather than to a heatsink for the most accurate reading. Be a little delicate with the thermistors as they are not hugely robust, but have proved fine once secured in place.

One leg of each thermistor goes to ‘Temp 1’ or ‘Temp 2’, and the other leg to ground (0V). They are a purely resistive component, so polarity isn't important.

{% hint style="info" %}
It may be easier to calibrate the thermistors before fitting them to the car. See the 'Calibrating the eCook > Temperature' section of the documentation
{% endhint %}

{% content-ref url="/pages/-LChARUBYjyIrERRSRNo" %}
[Temperature](/calibrating-the-echook/temperature)
{% endcontent-ref %}


# Wheel and Motor RPM

Knowing the Wheel and Motor RPM, especially for cars with multiple gears, is very useful for determining gear ratios used around the track and ensuring the motor is run in it’s most efficient RPM range.

Two non-latching hall effect sensors are included in the eChook kit. For the pin out, google the name printed on them to find the data sheet. They will require 5V, GND and have one output. This output goes to the Motor RMP or Wheel RPM input on the eChook. No specific pin out is given here as different sensors have been used through the various eChook hardware iterations.

Positioning the sensor on the car is the more difficult part. The hall effect sensor is triggered by magnets that need to be attached to the motor shaft/wheel. The eChook kit contains 10 5mm puck magnets for this.

The tapered side of the hall effect sensor is the ‘sensing’ side. This will only pick up one pole of the magnet, **so check magnet polarity!** If you use the app you can watch the RMP as you wave a magnet over the sensor to determine the correct polarity - it will give a speed or RPM reading only when the polarity is correct.

{% hint style="info" %}
Make a useful little tool - once you've identified the correct polarity, glue another magnet to a lolipop stick or similar so that it is attracted to the sensor side of the fixed magnet. You can use this tool to quickly check all your magnets are in the correct orientation.
{% endhint %}

Magnets need to be securely mounted and evenly spaced on the motor shaft and wheel, the suggested number is three on the motor shaft and 6 on the wheel. Increasing the number will give a higher resolution reading. The number of magnets used needs to be specified in the calibration.h file. Whilst not pretty, we have found electrical tape effective in securing magnets to the motor shaft, and have used 3D Printed mounts to secure magnets to the wheel.

The hall effect sensor needs to be mounted very close to the magnets, with the tapered facing them. The distance between magnets and sensor needs to be 1-3mm for the small 1x3mm disc magnets. We have used both folded sheet aluminium and 3D printed brackets to hold the hall effect sensors. Larger magnets may allow for a larger sensing gap.


# PWM Output

This output will most likely not be used. It provides a 500Hz, 5V PWM output with the duty cycle mirroring the throttle input percentage.

This can be used as an input to a custom motor driver circuit such as the one used on the Driven and weChook cars, or as an input into some 4QD motor drivers.

An example schematic for a custom motor controller is below. Built well it should be reliable, and we can give advice, but attempt this at your own risk, and a backup relay (as shown below) is recommended!! The most important thing to note is that the copper on a PCB can not handle the current required for the motor - we used large aluminium bus bars bolted on top of the PCB.

![](https://lh5.googleusercontent.com/3pW04xyPngyTtoq86KlSpStIkefsHWNe5GYhydUF1aXQbb3hvtONRAx4F8aLCk-sMGE9HXBWJxQmkSKZ48EOJFgjw-_s3rADhfrZxiAv-pmPF7jSbnq84uhIN7_AKJrLfaOeZKhX)


# Calibrating the eChook

From the default calibration values, a correctly assembled eChook board will give reasonably accurate data. This section takes you through calibrating each input in turn. Each calibration routine involves taking some readings with external equipment - generally a multimeter - some simple calculations, and updating a calibration variable on your eChook Nano.

On earlier versions of the board (with Arduino code below version 2.0, released in Jan 2024), updating the calibration requires editing the calibration.h file, then reflashing the Arduino with the new values. Boards running V2 (Arduino code version 2.0 or later) can be connected to a computer, and the calibrations can be read and updated via a web interface.

The signals that will benefit most from calibration are speed, motor RPM and temperature, followed by voltages, and then current.

## Choose your calibration path

* **V2 (Arduino code version 2.0 or later):** use the web interface at `configure.echook.uk`.
* **Legacy (Arduino code below version 2.0):** update values in `calibration.h`, then reflash the Arduino.

### Calibration Web Interface

The calibration web interface is available at [configure.echook.uk](https://configure.echook.uk). Please note it requires either Chrome or Edge desktop browsers. There is no mobile browser support.

Use the web interface in this order:

1. Unplug the Bluetooth module (unless you have an Arduino Nano Every) and connect your eChook to your computer.
2. Navigate to the [configuration webapp](https://configure.echook.uk) and click connect.
3. In the browser menu, select the eChook's COM port from the list and press connect.
4. After a few seconds, the screen below should open.

<figure><img src="/files/dYCWj6GGyTuqOqZV6Znu" alt=""><figcaption></figcaption></figure>

5. Enter the new number in the corresponding box. Any changes are highlighted, and the bottom-right button will reflect how many changes you have entered from the configuration saved on the eChook.
6. To save the changes to the eChook, press the bottom-right button. These will be reflected immediately in the values being read out on screen.
7. Once you have a configuration you are happy with, it is recommended to take a backup using the 'Backup Config' button. Keep this somewhere safe.

The next few pages describe the legacy `calibration.h` workflow. For V2 (Arduino code version 2.0 or later), enter the numbers into the web app instead.

### Issues?

If you hit any issues, please feed back on the forum, or via email to <info@echook.uk>.


# Wheel Speed and Motor RPM

There are two factors that affect the wheel speed reading taken by the eChook: the number of magnets on the wheel, and the circumference of the wheel.

* **V2 Arduino code (code version 2.0 or later):** enter these values in the calibration web app at [configure.echook.uk](https://configure.echook.uk).
* **Legacy Arduino code (below version 2.0):** both values are set in `calibration.h`.

Set the values in this order:

1. Count the number of magnets on the wheel.
2. Measure wheel circumference as the distance travelled in one full wheel rotation (the outermost circumference of the tyre, not simply 2πr for a 16” wheel).
   * You can measure this with a flexible tape measure, or by marking the tyre contact point on the floor, rolling one full rotation, and measuring between the two marks.
   * Use meters for the units.
3. Count the number of magnets on the motor shaft for motor RPM.
4. Enter the values:
   * For V2 code versions, enter them in the web app.
   * For legacy code versions, enter them in `calibration.h` and re-upload the code to the Arduino.

```
const int       CAL_WHEEL_MAGNETS        = 6; //Number of magnets on wheel
const int       CAL_MOTOR_MAGNETS        = 3; // Number of magnets on motor shaft for hall effect sensor
const float     CAL_WHEEL_CIRCUMFERENCE  = 1.178; //Outer circumference of tyre, in meters (distance travelled in one revolution)
```


# Temperature

These are the most involved sensors to calibrate, primarily due to the response of the thermistors being non-linear. A typical 10kΩ thermistor resistance vs temperature graph is shown below:

* **V2 Arduino code (code version 2.0 or later):** enter the calculated calibration coefficients in the calibration web app at [configure.echook.uk](https://configure.echook.uk).
* **Legacy Arduino code (below version 2.0):** enter these values in the `calibration.h` file and re-upload the code.

![](https://lh4.googleusercontent.com/z8hZ8SvbFAUlVafoLBIffR0ba-W5_rT01rHz17n3Jz-88D0F088MpPB4ndDL4eUz13awJpIQm42ru8HbgTlM9KoGhY0lbiR4WjP_GLsFwfe0UgLFJYWsLyTQnudFe_yAKh3eBetC)

Note that the 10k refers to the resistance at room temperature (25°), and that the resistance decreases as temperature increases. This is called a negative temperature coefficient, or NTC. The eChook board uses a 10k NTC thermistor.

On the board, the thermistor completes the lower half of a potential divider circuit with a 10kΩ resistor, so the voltage at the output of the potential divider falls as the temperature of the thermistor increases.

To translate this voltage to a temperature, the resistance curve of the specific thermistor being used is needed. Due to tolerances, this is subtly different even between identical thermistors. To do this the eChook uses the [Steinhart-Hart](https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation) equation, which uses three coefficients calculated from the thermistor to convert the resistance seen to an accurate temperature reading.

Use this process:

1. Take three measurements of thermistor resistance at different known temperatures.
2. Open the online calculator [here](https://www.thinksrs.com/downloads/programs/therm%20calc/ntccalibrator/ntccalculator.html).
3. Enter your three temperature/resistance points.
4. Copy the calculated A, B, and C coefficients.
5. For legacy code versions, enter the coefficients in `calibration.h` and re-upload.
6. For V2 code versions, enter the same coefficients in the web app.

The calculator looks like this:

![](https://lh3.googleusercontent.com/fmYhUC_dDDkDMKbMWPzaOq1qHJJ6kehtJjfd_UuTrWpTaNHCxvm0np7ymCy6kjwasyXHZBpfv9XZsvGpLbHzfyuvvEAgYeeR0o73np7Ed0G2BduqZFHUd_0shGBJHHU87K6xzmo4)

For legacy code versions, enter the three temperature and resistance measurements and copy the A, B and C coefficients from the calculator into the `calibration.h` file.

```
//Board and Sensor Specific Calibrations
const float CAL_THERM_A = 0.001871300068; //Steinhart-Hart constants - See documentation for calibration method
const float CAL_THERM_B = 0.00009436080271;
const float CAL_THERM_C = 0.0000007954800125;
```

To get the default calibration we used a pan of water, digital thermometer, and a multimeter. We wrapped the thermistor in cling film to prevent the water conducting across the legs and altering the reading.

![](https://lh5.googleusercontent.com/cVGjJGnzkw4fELwLeoUsbL1wRIbfxg9ShtPin4vQp295qGxoxqu-XWsv05iU2n1yzrnvnpRBeRwRGEf7CMH_0qYRvcDK2pwizRB5UPe5qGjYkv-VZHLpt2PxpqGkLz1eYNpcp3vz) ![](https://lh6.googleusercontent.com/DYPsAZI06tujDdSmxQke3xke5Z_tgahJoDsP99CsDfkumKsD59r77cL5TzyJ3I-dQHReJ4HWH6pJXnPTffWaae55WwsRAcyi-LeArY35kcROvp_0QCg4Sd_nd4dUlVw8wbuDazzY) ![](https://lh5.googleusercontent.com/nShVV70e4TSh-BrVYO2JbfnnTc5gbaRies6huphxmKOkN3AnkHvvtmZI7KSS8se9C5wNRq2h0OMcqNMBYDlFHbNL8ViQqILDi12tUruWA_lmbL5I-AtS9YxtZoe9M_XH7DdlgQyC)


# Voltage

* **V2 Arduino code (code version 2.0 or later):** enter these calibration values in the calibration web app at [configure.echook.uk](https://configure.echook.uk).
* **Legacy Arduino code (below version 2.0):** update these values in `calibration.h` and re-upload the code.

## Calibrating 24V

Due to resistor tolerances in the divider from 24V to an Arduino-readable level (0-5V), each board needs a slightly different calibration. The step-down is linear, so one measurement pair is enough.

Follow this order:

1. Connect the +24V pin to a power source and use a multimeter to measure supply voltage. For this example, use 23.5V.
2. Measure the voltage on the other side of the potential divider (the 24V test point on the PCB and pin A0 on the Arduino). For this example, use 3.6V.
3. Calculate the ratio between them:

$$
{V\_{Supply} / V\_{Arduino}} = 23.5/3.6 = 6.53
$$

4. For legacy code versions, enter this figure into `calibration.h` as `CAL_BATTERY_TOTAL`. Reflash the Arduino for the calibration to take effect.
5. For V2 code versions, enter the same value in the web app.

```c
const float CAL_BATTERY_TOTAL       = 6.53;
```

## Calibrating 12V

Calibration is by the same method as 24V above:

1. Measure the voltage at the 12V input.
2. Measure the voltage to pin A7 of the Arduino.
3. Divide the former by the latter to obtain a multiplier to use in the code.

$$
V\_{input}/V\_{pin\_A7} = calibration Value
$$

4. For legacy code versions, open `calibration.h` and update `CAL_BATTERY_LOWER` with the result.
5. For V2 code versions, enter the same value in the web app.

```c
const float CAL_BATTERY_LOWER       = 3.071;
```

## Reference Voltage

```c
const float CAL_REFERENCE_VOLTAGE   = 5;
```

This calibration option is a throwback to when eChook boards had adjustable DC-DC regulators and having exactly 5V powering the Arduino wasn't guaranteed. With the fixed 5V Tracopower DC-DC regulators, the output should be exactly 5V, and as such, this setting should be left at 5V.


# Current

The current sensor is calibrated during manufacture. Any inaccuracies in the measurement are introduced by tolerances in the differential amplifier. Resistors with a 1% tolerance have been used here. As such the default calibration should be very close and re-calibrating the current sensor should not make a huge difference to the readings.

* **V2 Arduino code (version 2.0 or later):** enter the current calibration multiplier in the calibration web app at [configure.echook.uk](https://configure.echook.uk).
* **Legacy Arduino code (below version 2.0):** update `CAL_CURRENT` in `calibration.h` and re-upload the code.

Use this process to calibrate current:

1. Use a bench power supply **with a current limit** function.
2. With the power supply off, feed a length of wire through the current sensor, then connect it across the +ve and -ve terminals of the power supply as a short circuit - doing this might feel very wrong!
3. If the power supply does not have a current readout, connect a multimeter set to measure current in series with the wire. Note the maximum current on the multimeter (normally 10A) and be sure not to exceed this later.
4. Turn the current limit down to 0 and switch on the power supply. Slowly increase the current limit to control the current flowing through the sensor. Due to the very low voltages involved the wire will not get too hot, even when passing considerable current, however make sure to keep an eye on the wire temperature.
5. Calibrating at around the expected current draw of 20 to 30 Amps during a race is sensible, but few power supplies will be able to provide this amount of current. Coil the wire through the sensor multiple times - the detected current is multiplied by the number of times the wire passes through the sensor. If the power supply is outputting 2A, a wire coiled through the sensor 5 times would give the eChook a reading of 10 Amps.
6. Note the current being output by the power supply - multiplied as required if the wire passes through the current sensor multiple times. Now use a multimeter to measure the voltage on pin A2 of the Arduino. There is a linear relationship between current and voltage so this is enough to calculate the ratio between them.

$$
(I\_{supply} \* Num.PassesThroughSensor)/V\_{A2} = Multiplier
$$

For legacy code versions, open `calibration.h` and update `CAL_CURRENT` with the result of your calculation.

```
const float CAL_CURRENT = 37.55;
```


# Using the App

There are two app options for the eChook: **Omni Telemetry** and the **eChook app (legacy)**. Both apps log data locally and can upload data to the eChook Live Data website.

For most teams, Omni Telemetry is the recommended default.

A quick comparison:

<table><thead><tr><th width="376"></th><th width="192">Omni Telemetry</th><th>eChook App</th></tr></thead><tbody><tr><td>On Google Play Store</td><td>Yes</td><td>No</td></tr><tr><td>Logs data to csv locally</td><td>Yes</td><td>Yes</td></tr><tr><td>Display data to driver</td><td>Yes</td><td>Yes</td></tr><tr><td>Upload to eChook Live Data</td><td>Yes</td><td>Yes</td></tr><tr><td>Upload to dweet.io public channels</td><td>Yes</td><td>Yes</td></tr><tr><td>Upload to custom Server URL</td><td>Yes</td><td>Yes</td></tr><tr><td>Lap Counting</td><td>Yes - auto start</td><td>Yes - Manual start</td></tr><tr><td>Works with Screen Off</td><td>Yes</td><td>No</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

A huge thanks to Keith and the Banchory team for sharing their app!

#### Installing the OMNI Telemetry app

Omni Telemetry is available from the Play Store - <https://play.google.com/store/apps/details?id=net.keduro.omni&hl=en_GB>

#### Installing the eChook app (Legacy)

The eChook app is no longer on the play store.

As a lot of teams use older phones for the app we have always kept it at the lowest API level allowed by the play store. This has now come back to bite us as the play store requirements have jumped, and the changes needed to the app to bring it back up to compliance are quite major. If further development occurs on the app it will be provided as a downloadable APK.

Please use the download from [APKPure](https://apkpure.com/echook/com.ben.drivenbluetooth), and follow their [installation instructions](https://apkpure.com/how-to/how-to-install-xapk-apk).


# Pair eChook to Phone

Ensure the eChook board is powered, and the bluetooth module plugged in. The LED on the Bluetooth module should be blinking, indicating it is ready to receive a connection.

Enter the bluetooth settings on the Android phone (system settings, not within the eChook app). Scan for new devices. The HC-05 module should show up, although it can be slow to resolve the name and show as a MAC address in the form of XX.XX.XX.XX for a while. This should eventually change to the name you specified in the configuration.h file. Pair with the it using the passcode “1234”.


# Setting up the App

Omni Telemetry is the standard app path. The eChook app instructions are kept for legacy/fallback use.

{% tabs %}
{% tab title="Omni Telemetry" %}
Enter app settings through the three-dot menu in the top-right corner.

Select the paired eChook Bluetooth device from the Bluetooth devices menu.

Select which (if any) data upload service to use from the Data Upload menu (you may need to dismiss the "waiting for throttle" notification to see the "Upload To" option).

Note that the Omni app continues running when exited. To exit the app, select 'Close' from the three dot menu. When running in the background a notification is displayed to inform you.
{% endtab %}

{% tab title="eChook App (Legacy)" %}
The app needs a little configuring before it is ready to log data. Open the app and go into the Settings menu.

First select which bluetooth device to log data from. Tap ‘Select Bluetooth Device’ and select the eChook you just paired from the list:

![](https://lh4.googleusercontent.com/0fcERsnDiOh8gwiviShl6VkA5J02BN9nO7cvUQvSF18ySnlY94RSfV2Hu51TrA-pbZAaHlHqmfoDWkAIJRNtT823fafFztlEsxj5Qzu-neZZFWxoeTRkwDV_sgIl9AITX6k8aCWN)

Now enter the car name. This will be added to the log files.<br>

![](https://lh6.googleusercontent.com/LwBKw6g2Q682w7FpkR3qWOjdPKIHjOXHelr1qPBJvD2wN-yw06mThy0yx7yYPiD7jy0cfV1bT_b4_mKGmSbc0JQJOtD856524fK9A7VpX4InZQZc42hKdvjWbjIwXtKAe0nJaSXF)

If the car is running gears, enter the number of teeth on the motor sprocket and the number of teeth on each gear on the wheel side. The app will calculate the possible gear ratios and try to identify and log which the car is running on. If the RPM and speed data is too noisy or too low resolution, this feature may not work very well.

While you are here you can enable Location tracking, which will enable logging of GPS speed, location and altitude and is needed in order for the app to detect laps.
{% endtab %}
{% endtabs %}


# Logging Data

{% tabs %}
{% tab title="OMNI Telemetry" %}
The app automatically creates a new logfile each time it starts, and any data received is saved to the logfile.

To share the logfile at the end of a session, use the three dot menu and select 'Share'.

Old logfiles are stored in device storage at /Android/data/net.keduro.omni which is blocked by some phones for security reasons, but are accessible if you plug your phone into a computer via USB and use a file explorer.
{% endtab %}

{% tab title="eChook App" %}
Once set up, press the blue connect bluetooth button. If successful, a notification will confirm this across the top of the screen and logging will start automatically, shown by a green tick next to the ‘save’ icon in the top right of the screen.

{% hint style="info" %}
The size of the logfile shown on top left of the screen will only update once logging is stopped.
{% endhint %}

To export the data, go to app settings and the first option is to share the data through whatever service you would like, as well as the option to clear the saved data.

Data is saved in a .csv file in the phone's downloads folder so can also be retrieved via a file manager app, or via a USB connection to a computer.
{% endtab %}
{% endtabs %}


# Lap Counting

Lap detection requires that Location is enabled in settings and that the throttle signal is wired into the eChook.

{% tabs %}
{% tab title="OMNI Telemetry" %}
On start-up, the app is waiting for 30%+ throttle input to start lap detection (dismissible via the notification at the bottom of the screen).

The lap detection is automatic from here - no more configuration required.
{% endtab %}

{% tab title="eChook App" %}
Before the race an ‘observer’ position needs to be set on the map, somewhere in the middle of the racing circuit. To do this move the map so you can see the centre of the circuit (or a best guess if the circuit isn’t shown) and tap where you want the observer to be. A pin will be dropped with prompt to click to confirm. Tap again to confirm location. A prompt will now appear asking to confirm if you are racing in a clockwise or anticlockwise direction. This is shown below, unfortunately nowhere near a race track.

![](https://lh4.googleusercontent.com/ELcx8VIJh70IqE_Hvh8jAgMxzxmKkgDGAm9PCp0vCwxtNl_ZizVJ_ii0aGgTfXy74kKWgK64IaF3mtXZ--2C1vcbw4We66jHoK1xVNWOh7V6IuqtnJSe3gYNAIFWe_XPAuc6TltH)

Pressing the Launch button starts launch detection. Now once the throttle is pressed (>20% for a variable throttle) the app starts the lap timer, and notes the cars bearing in degrees to the observer position set earlier. Every time the car passes this position in the race, a lap is counted.

### How It Works

Each GPS update, the app calculates the bearing from the observer to the car in degrees. During the race the car moves in circles around the observer. When the throttle was initially pressed in launch mode, that bearing was recorded. During the race every time the car passes that original bearing, a lap is recorded.
{% endtab %}
{% endtabs %}


# Telemetry (Live Data)

One of the benefits of using a smartphone to log the data is it’s internet connection. With the exception of some tracks with poor signal, this provides an excellent opportunity to get the logged data back to the rest of the team in near real time.

The app provides three different ways to send data out.

### eChook Private Live Data

This is our own in house system available at [data.echook.uk](https://data.echook.uk). Each car has a login, only people with that login can see your data. This is a free service provided by eChook to anyone using the app - it can also be used with custom hardware so long as it sends the correct data to the app (See [Bluetooth Communication](/bluetooth-communication) section).

### dweet.io (Discontinued)

Unfortunately as of the start of 2025 the dweet.io servers have been shut down and the service discontinued. There is no direct replacement for this, however if you used dweet for the node-red integration, there is a solution using the eChook live data server - see the [Node Red Integration](/telemetry-live-data/node-red-integration) page for more details.

### Custom URL

You can enter a URL, username and password into the app and it will send data to your server in the format of:

```
https://username:password@example.com/../{Stringified JSON}
```

### Data available in telemetry:

| **Data**              | **Identifier** | **Unit**          | **Comment**                                                   |
| --------------------- | -------------- | ----------------- | ------------------------------------------------------------- |
| Total Voltage         | Vt             | Volts             | Combined voltage of both batteries - \~24V expected           |
| Lower Battery Voltage | V1             | Volts             | Upper battery voltage can be calculated on freeboard by Vt-V1 |
| Current               | A              | Amps              |                                                               |
| Motor RPM             | RPM            | RPM               |                                                               |
| Vehicle Speed         | Spd            | Meters per second | Multiply by 2.23694 for MPH                                   |
| Throttle              | Thrtl          | Percent           |                                                               |
| Temperature 1         | Tmp1           | °C                |                                                               |
| Temperature 2         | Tmp2           | °C                |                                                               |
| Amp Hours Used        | AH             | Amp hours         |                                                               |
| Lap Number            | Lap            | -                 | Current Lap number as counted by the app.                     |
| Gear                  | Gear           | -                 | Current gear as calculated by app                             |
| Brake Applied         | Brk            | -                 | 100 if brake is applied, 0 if not.                            |
| Longitude             | Lon            | Degrees           | GPS Longitude. (Not available through dweet.io)               |
| Latitude              | Lat            | Degrees           | GPS Latitude. (Not available through dweet.io)                |


# eChook Live Data

An intro to the eChook Private live data website.

The eChook Live Data website is [data.echook.uk](https://data.echook.uk).

Data is sent from your phone to the website privately over an encrypted connection and can be viewed only by people with your login. It is designed for each car to have it's own login, so if your team is running more than one car, you'll want an account per car.

<figure><img src="/files/RjTWJ769ptAmeAjidZrh" alt=""><figcaption><p>Login Screen</p></figcaption></figure>

On first use, register your car and use a password that can be shared with anyone who might want to see the data.

Now in the eChook Android app settings, enter this login in the 'eChook Private Data' section. *After entering* the data, toggle the 'Enable eChook Private Data' setting to on. In some cases you may need to fully close (recent apps, swipe closed) the app and restart it for this setting to take effect.

<figure><img src="/files/TqOFaPkr7mRbJDoUtHdC" alt=""><figcaption><p>eChook Android App Settings Screen</p></figcaption></figure>

With the app connected to your car (or generating test data - option in settings) you should now be able to log onto the website and see this data. There will be a few seconds delay between the phone screen and the website.

<figure><img src="/files/AdszBlfgXsSk8jEegoah" alt=""><figcaption><p>Overview of data website</p></figcaption></figure>

### Known Issues:

We have recently discovered that the language setting on a phone can alter the data. The only known language to not work at the moment is Dutch, but this may affect others.

If you log in and see lots of 'NaN' instead of Numbers for voltage, temperature etc setting the phone language to English (UK) will solve the issue until the app is updated. If other lanugates are confirmed to work/not work please let us know with the messaging button at the bottom left of the screen.

Similarly, if more issues are found as more teams start using the systems please let us know and we will do our best to resolve them.


# Node-RED Integration

{% hint style="warning" %}
This page assumes knowledge of Node-RED and JavaScript. If you are familiar with Node-RED, then eChook is simple to integrate. If you have not used it before, the best path is to go to [nodered.org](https://nodered.org/) or your search engine of choice to get started, and return once you are up and running.

There is a Node-RED getting started guide here: <https://nodered.org/docs/getting-started/>
{% endhint %}

### Connecting Node-RED to eChook Live Data

This section assumes that Node-RED is already installed and running.

1. Create an account for your car at [live.echook.uk](https://live.echook.uk/) and go to settings > API and copy the Get Live Data (polling) url that is provided and includes your unique car ID.
2. In the Omni app, select upload to eChook Private Live Data enter your login details.
3. For Node-RED setup, download the JSON file below and import it to your Node-RED dashboard by right-clicking on the background > insert > import, then selecting the downloaded file.

{% file src="/files/dbjcGkjgcpDdFVSX7zii" %}

You should now have a dashboard that looks like this:

<figure><img src="/files/F1uUqmXdIFapJ0XVBpaY" alt=""><figcaption></figcaption></figure>

Double click the http request block, and enter the URL you copied in step 1, then deploy the changes.

#### How it works

Every 2 seconds the inject block on the left triggers the HTTP request. This asks the server for the latest data from the car, which is formatted into a JSON object by the JSON block, and then split out into separate flows in the 'eChook Data Split' block. Mouse over the output connectors to see what data each provides. The output data is in the format of '{name:xyz, value:123}, so is accessible in later blocks using msg.payload.value and msg.payload.name.

{% hint style="warning" %}
PLEASE PLEASE PLEASE - stop Node-RED, or disable the inject node when you are not using it. Node-RED runs continually in the background, and it would be very easy to leave it pinging the eChook server 24/7 unnecessarily, which will just increase its load, increase my costs, and degrade the service for everyone.
{% endhint %}


# DIY Web Dashboard

If node-red isn't for you, it's also possible to access the data from a traditional website. To help with this we have created an example website with the JavaScript code (using Vue.js) in place to fetch all the data from the eChook server, leaving the html and css up to you to build the interface.

{% embed url="<https://echook.github.io/echook-demo-site/>" %}

### How to use

We suggest making a github account and forking the repository for the demo site. From here clone it to your computer and develop as you wish.

#### Hosting your Website (for free!)

Within the github settings tab of your forked repository, scroll down to the Github Pages section. Change the 'Source' dropdown from 'None' to 'Master Branch'. Github will then give you a URL to your newly hosted telemetry website.

## This is all new to me - Where do I start?

The above instructions are very simplistic and assume a basic knowledge of git and web development. If you are just starting out the [NetNinja tutorial series on Youtube](https://www.youtube.com/channel/UCW5YeuERMmlnqo4oq8vwUpg/playlists) are excellent:

Git: [NetNinja Git and Github for Beginners](https://www.youtube.com/watch?v=3RjQznt-8kE\&list=PL4cUxeGkcC9goXbgTDQ0n_4TBzOO0ocPR)

HTML: [NetNinja HTML for Beginners](https://www.youtube.com/playlist?list=PL4cUxeGkcC9ibZ2TSBaGGNrgh4ZgYE6Cc)

CSS: [NetNinja CSS for Beginners](https://www.youtube.com/playlist?list=PL4cUxeGkcC9gQeDH6xYhmO-db2mhoTSrT)

JavaScript: [NetNinja JavaScript for Beginners](https://www.youtube.com/playlist?list=PL4cUxeGkcC9i9Ae2D9Ee1RvylH38dKuET)


# Using the Data

It’s time to get the data off the phone and onto a computer for some useful analysis.

## Retrieving data from phone

In the eChook app settings, the top option is to share data. Tap this to display a list of ways to send the data file to via service you wish.

Alternatively, the data is saved in a .csv file in the phone's downloads folder so can also be retrieved via a file manager app, or via a USB connection to a computer.

## Opening the Data

Open the arduino.csv file in a spreadsheet programme such as Excel. Data identifying names will be along the top, and the data below. The one bit of data that is not immediately readable is the timestamp, as this is recorded in [Unix Time](https://en.wikipedia.org/wiki/Unix_time), as milliseconds since 00:00:00 1st January 1970.

This needs to be converted in excel using the following formula:

`=A2/(1000*60*60*24)+"1/1/1970"`

Create a new column for Time and set the cell number format to Time. Enter the formula above, replacing ‘A2’ with the timestamp cell on the same row. Once the cell shows a legible timestamp, select it and double click the bottom right corner of the cell to propagate the calculation down the whole sheet.

This converts milliseconds to days (the multiplication) and adds them to the start point of Unix Time. This is now a value that excel will recognise as a time and date when the cell format is set to time.

![](https://lh3.googleusercontent.com/jIqXy8nnbeA0GAnkM9vsIVyZVOtupkB5ZFSBlOhHQITRr30Bi7VPci9UwKNB8gqG6S8jBHSXbglZ-cJTD6mTFXAP6u8ZtIOHtFBheuZfx_9AXf1sHQN0Z6yoInT1ycdAZAHPh88A)

## Graphing the data <a href="#graphing-the-data" id="graphing-the-data"></a>

To start looking at the data in a meaningful way, graphs are needed. To start with, select the columns Time, Voltage and Current, then go to Insert>Charts>Scatter with Smooth lines. This will give a voltage and current over time graph. Add and remove data to see what you want!


# Circuit Schematics

This section explains the circuits on the PCB for the V1.3 board, and how each signal is adapted to one that the Arduino can read. The full schematic is shown below.

If you're building a kit, this section is mainly for understanding how it works. You have already soldered these components in the *Build Instructions* section.

![](https://lh6.googleusercontent.com/SXjFbX8bDlfKE0VODAfj_d66mGtRyzMlGTBV3yTJdEY_7hOw0RdNYhe0L4ZAfgwq7jyyWLpS7EBbUkiAnd-zgr9pi21ULzmu6KMaitzdlwpdrJA6QmWo774MKbJcPVKEzIg_H0lN)

For V2 boards the schematic and PCB files are available in [KiCad](https://www.kicad.org/) format for newer versions, and in [DesignSpark PCB](https://www.rs-online.com/designspark/home) format for legacy files. Both are free software formats, and the files are available at [github.com/eChook](https://github.com/eChook/eChook_Nano_PCB).


# 12 and 24V Inputs

![](https://lh4.googleusercontent.com/3dqEng96hjpyZ2TGc14n3yMBvOySjo-OmNm2KM1m6NvkkP55jNfYTt651rU0modOr0cWeWOQhuywFpl-0hR0gtRoK-O_QZEt2r7qXEDnJOVWC9U_HNJWF7WJr8MN1OHGIE6hJPDr)

Each battery voltage needs to be stepped down so that, in the worst case, the voltage seen at the Arduino does not exceed 5V. To achieve this, a potential divider was chosen to step 30V down to 5V. Each voltage input uses the same component values.

Resistors R1 and R2 above form the potential divider.

C3 is a ceramic capacitor that forms a low-pass filter with R1 and R2 to remove high-frequency components from the voltage signal. On a Greenpower car, the motor produces small high-frequency voltage spikes as the brushes connect and disconnect from the commutator. The low-pass filter removes these from the signal reaching the Arduino.

BattTotalVTP represents the multimeter test point on the back of the PCB, giving easy access to check the voltage output from the potential divider with a multimeter or oscilloscope.

The circuit to the right is identical, but takes the lower battery voltage as an input.


# Temperature Inputs

The thermistors form part of a potential divider. The resistance of each thermistor changes with temperature. As that resistance changes, the output voltage of the potential divider changes.

![](https://lh3.googleusercontent.com/dTmzH5MYW5Xj8Isw-SGnR_1u34sVLL_O2zmYcV4i6zEg_g0cZvfmK9op8tlo9R-367dwLYHgWkTaj_tbzzKKVIL-V53UfUgbPXsXuf8nvqEdvdpMYQDzUSF-5Muqz2rjxG4wXN-r)

In the diagram above, the 'Therm' component to the left represents the three-pin connector on the eChook board. Thermistor 1 is connected between pins 1 and 3, and Thermistor 2 is connected between pins 2 and 3, completing potential dividers with R5 and R7 respectively.

R6 and R8 are in place to protect the Arduino. The Arduino can be easily damaged by too much voltage, and without these resistors the pins would be directly connected to an external connector, making them vulnerable. The 1k resistor provides a little protection, although 24V applied to the connector will still damage the Arduino. They also do not affect the temperature reading, as the current flowing into the Arduino's analogue-to-digital converter (ADC) is so negligible that it can be assumed to be 0mA. The voltage drop across the resistor can be calculated using Ohm's law, (V = I \* R). In this case, the voltage drop is effectively 0V.


# Bluetooth Module

![](https://lh5.googleusercontent.com/drJulUQK-VxiQhLCqhcUAoMzjaHLJePQhftTRypqf4hIis-hgxWCYsgSz-iE9W_tTwa9KfIrHYu-IJAUXF3T0PT-fjYzbBsrtuwI1y9FjlHYtFwEXpbVGb55lxwbzWeUZ4b7lU23)

This module is connected directly to the Arduino `TX` and `RX` pins, plus `5V` and `GND`.


# Throttle Input

![](https://lh5.googleusercontent.com/ZZ80DKpSIDq_BIzbv4uH4nYnioSEmAR0fajAoG0SSrN1zo3pzzHG_jTPJiBhohvIJzJBwHMSHbvjjYH8JP9PpJ3dIKFYpEjQlw3OQqrrHCl8tW_lE26jNz0cC21xKX3Nmvy_BNIr)

The throttle connector provides 5V and ground for the external throttle, plus a signal connection to the Arduino through a 1k protection resistor.

This resistor helps limit fault current into the Arduino input pin during wiring mistakes, but it is not a full overvoltage clamp.

For wiring methods and voltage-limiting guidance, see [Throttle Input](/connecting-the-echook-to-the-car/throttle-input).


# Current Input

![](/files/-LChAY-FkCxeNH6moJlI)

This is the most complex input circuit on the eChook, but once broken down it is still fairly simple. The main component above is an operational amplifier (op-amp). More information on op-amps can be found [here](http://www.electronics-tutorials.ws/opamp/opamp_1.html) or through Google.

The op-amp above is configured to be a differential amplifier; the output is the voltage difference between the two inputs, multiplied by a gain.

The gain is set by the feedback resistors (R22 and R23) and the input resistors (R20 and R21). In this circuit, both feedback resistors are equal and both input resistors are equal, so the gain can be calculated as below, where V2 and V3 are the voltages on connector pins 2 and 3 in the schematic.

$$
V\_{out} = (R\_{22}/R\_{20})\*(V\_3 - V\_2)
$$

More information on solving differential amplifiers can be found [here](http://masteringelectronicsdesign.com/solving-the-differential-amplifier-part-1/).

At the current sensor's maximum calibrated current (50A), the difference between the reference and sense outputs is about 2.5V. The gain doubles this to the maximum voltage readable by the Arduino, giving higher sensitivity to the current readings.

## Filter

The current signal is very noisy, primarily because small current spikes are created each time the motor brushes make a new connection with the coils. R24 and C5 create an RC low-pass filter with a 3Hz cutoff frequency to remove these high-frequency spikes and smooth the signal.


# Button Inputs

![](https://lh3.googleusercontent.com/QkESSnELnVaSQTFz1OA3l0BqIw6B_e8qOUoBOfRm7dB0My6WqQ0wDafpT_GJH4IksH6tGdPijOBXk-maseAGTlRa4RhWaQzMLvcKZD2k1zZq5ff6wOV1DG9bkGXmJPw0V_0V3KUX)

Each button signal is connected directly to a digital input on the Arduino through a protection resistor.

This keeps the circuit simple while adding a basic layer of input protection between external wiring and the microcontroller pin.


# RPM Inputs

![](/files/-LChAXU8UlgWOkN-HSMl)

The RPM connector provides 5V and GND for the hall effect sensors, then takes two signals, one from each sensor.

The hall effect sensors act as switches. When no magnet is detected, there is no connection between the signal pin and ground. When a magnet is sensed, the signal pin connects to ground. To turn this into a signal readable by the Arduino, we need to pull the signal line up to 5V when there is no connection, and allow it to drop to 0V when the magnet is sensed. R16 and R17 are pull-up resistors that do this. R18 and R19 are protection resistors to prevent too much current reaching the Arduino in the event of a wiring mistake.


# PWM Output

![](https://lh4.googleusercontent.com/mk6F9d-bMzF6-ahLecNQvt065uJKWdKmUQIoep-Y10aA3uWrqFt35Vax9ZluOVd9H3RqlNEyfwfk1cHga_LHQJCUswCi6vR_9bd1ienbtBoaVx3HHcQwB75tm-sYYiwiT3G6Mlc5)

The PWM output directly from the Arduino is unlikely to provide enough current to drive a motor controller some distance away, so a transistor-based PWM buffer is implemented.

R13 provides a strong pull-down to the PWM output when the transistor is off. R14 adds termination for the line between the eChook and the driven device. Ideally this is tuned to the specific harness and load.

The LED indicates PWM state: fully on at 100% duty cycle and dimmer at lower duty cycles. R15 limits LED current.

For connector-level wiring details, see [PWM Output](/connecting-the-echook-to-the-car/pwm-output).


# Power Regulator

This schematic shows the resettable polyfuse, reverse polarity protection and the 5V regulator.

![NOTE: The regulator is a TSR-1-2450. The reference to TSR-1-24120 below it is the PCB footprint used, which is the same.](/files/-LGPbSRbBF5a7TJdXfbp)

## Resettable Polyfuse

FS1 is a 250mA polyfuse. If the eChook board draws more than 250mA at 24V, the resistance of this fuse increases from milliohms to a few megaohms, effectively cutting power to the eChook. If there is a short circuit, this cuts off the power supply and limits potential damage. It also plays a role in reverse polarity protection, described below.

Once power is removed from the fuse, it resets within a few seconds.

## Reverse Polarity Protection

This protects the board against the +24V and ground being connected the wrong way around. Diode D1 is placed in reverse bias - under normal operation no current flows through it. However, if the input polarity is reversed, it becomes a conductor, creating a low-resistance current path from the ground rail to the 24V rail. This current passes through the polyfuse and is considerably above its 250mA cut-off current, which causes it to break the circuit immediately.

## 5V Switching Regulator

Component U2 is the TRACOPOWER switching regulator. It takes any input voltage between 6.5V and 36V and provides a stable 5V output of up to 1A. C1 is a 22uF smoothing capacitor for the input voltage to the regulator, as specified in the datasheet.


# Expansion Port

![](/files/-LChAWFXnP524SQZzKnM)

This is not a circuit block, but it is the connection point for expanding the eChook board. It exposes Arduino pins that are unused by default: 6 digital I/O pins and 2 analogue input pins. Note that A1 can be used for digital I/O, but due to internal Arduino wiring, A6 is *only* an analogue input.

On the PCB, the expansion port pads are counted anticlockwise from the square pad: pins 1-7 down one side, then 8-14 back up the other.


# All about the Arduino Nano

This section takes a deeper look into the Arduino and programming it. As the eChook kit uses an Arduino Nano, that will be the focus however much of it is relevant to other Arduinos.

## **Introduction to the Arduino Nano**

The Arduino is a very popular microcontroller board with a large hobbyist and developer community online. It allows simple coding and quick prototyping of systems. It is also an open source project, one perk of which is that it is possible to get very cheap clones or ‘Arduino Compatible’ boards, mainly from China. These are some of the reasons it was chosen as the ‘brain’ for the eChook Nano board.

The Arduino Nano is based on an Atmel AVR ATMega328 microprocessor. Further information on the Nano can be found [here](https://www.arduino.cc/en/Main/ArduinoBoardNano). For interest, the datasheet and reference manual for the ATMega328 microprocessor can be found [here](http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf).

### Arduino Nano Variants

Two variants of the Arduino Nano were made, one with an ATMega168 processor and one with a ATMega328 processor. It is rare to find one with the ATMega168 processor, but this is clocked at half the speed (8MHz) and has significantly less memory, so is not recommended.

Many of the cheaper Nanos available to buy on the internet use an alternate USB to Serial interface chip. This will be the CH340, and is due to this chip being cheaper than the one specified in the official Arduino design. This does not change the functionality of the Arduino for the user, however does require a different driver. The CH340 Driver Installer can be downloaded from [here](https://drive.google.com/file/d/0B8NB2ERSryMSdlQxNFpPM1BGenc/view?usp=sharing).

NB: Personally I have never experienced any problems with cheap nano’s ordered from China, however I know people have had issues with them not working out the box. Occasionally they have been recoverable by reflowing some solder or reflashing the bootloader.

One issue that does seem consistent with cheap nanos is that the pins aren’t soldered in at a perfect 90° so a pair of pliers is required to straighten them before they will fit into bread board or a socket.


# The eChook Nano Code

The Arduino code for the eChook Nano has been written with the aim of being as easy to understand as possible with clear comments throughout, however due to the number of things the Arduino needs to do, there is a lot of code to sort through. This section aims to break each area of code down into manageable chunks.

N.B. Due to the nature of the project the code may have been updated, and the extracts in this document may not perfectly match.

The code for the eChook Nano is available [here](https://github.com/eChook/eChook-Arduino-Nano).

## Constants

A large section of the code is dedicated to defining constants. The first batch are pin assignments. These give a function related name for each pin, otherwise it would be necessary to remember which pin number is connected to which input and output.

The second batch of constant definitions are values used in timings and calculations.

## Setup

The setup function contains the first code run on the Arduino after power on. As such it contains all the one-off setup procedures.


# Bluetooth Communication

## Bluetooth Hardware

The HC-05 Bluetooth module takes a serial (USART) input and transmits any incoming data to a paired phone. This is compatible with any microcontroller with a hardware (or emulated) serial port. On Arduinos, this is accessed using `Serial` in your code.

The HC-05 modules are cheap to buy - generally under £5.

## Communication Schema

Sending data over Bluetooth takes time and power. To minimize both on the eChook, a very compact packet system is used. Each sensor update is sent in a packet that is 5 bytes long:

`[{][id][data_1][data_2][}]`

The \[ ] indicate each byte.

**{} -** These braces indicate the start and end of a packet. This allows for basic error detection, because the receiver expects a `}` 4 bytes after `{`.

**id -** This is the data identifier. It is a single character that can be looked up in a table to identify what sensor the data in the packet is from.

**data 1 and 2 -** These two bytes contain the value from the sensor.

## Encoding the data

Encoding data into 2 bytes requires limiting how values are represented. Any value at 127 and below is sent to an accuracy of 2 decimal places, and any value above 127 is sent as an integer.

If the value being sent is 127 or below, the **data1** byte contains the integer portion of the value and **data2** contains the decimal portion to two decimal places. If the value is above 127, **data1** contains the hundreds and thousands portion and **data2** contains the tens and units.


# Bluetooth Packet Encoding

This is the C/C++ code used to construct the packets on the Arduino:

```
/** ================================== */
/** BLUETOOTH DATA PACKETING FUNCTIONS */
/** ================================== */
/** The two functions in this section handle packeting the data and sending it over USART to the bluetooth module. The two functions are
 *  identically named so are called the in the same way, however the first is run if the value passed to it is a float and the second is
 *  run if the value passed into it is an integer (an override function). For all intents and purposes you can ignore this and simply call
 *  'sendData(identifier, value);' using one of the defined identifiers and either a float or integer value to send informaion over BT.
 *
 * identifier:  see definitions at start of code
 * value:       the value to send (typically some caluclated value from a sensor)
*/

void sendData(char identifier, float value)
{
  if (!DEBUG_MODE) // Only runs if debug mode is LOW (0)
  {
    byte dataByte1;
    byte dataByte2;

    if (value == 0)
    {
      // It is impossible to send null bytes over Serial connection
      // so instead we define zero as 0xFF or 11111111 i.e. 255
      dataByte1 = 0xFF;
      dataByte2 = 0xFF;

    }
    else if (value <= 127)
    {
      // Values under 128 are sent as a float
      // i.e. value = dataByte1 + dataByte2 / 100
      int integer;
      int decimal;
      float tempDecimal;

      integer = (int) value;
      tempDecimal = (value - (float) integer) * 100;
      decimal = (int) tempDecimal;

      dataByte1 = (byte) integer;
      dataByte2 = (byte) decimal;

      if (decimal == 0)
      {
        dataByte2 = 0xFF;
      }

      if (integer == 0)
      {
        dataByte1 = 0xFF;
      }

    }
    else
    {
      // Values above 127 are sent as integer
      // i.e. value = dataByte1 * 100 + dataByte2
      int tens;
      int hundreds;

      hundreds = (int)(value / 100);
      tens = value - hundreds * 100;

      dataByte1 = (byte)hundreds;
      //dataByte1 = dataByte1 || 0x10000000; //flag for integer send value
      dataByte1 += 128;
      dataByte2 = (byte) tens;

      if (tens == 0)
      {
        dataByte2 = 0xFF;
      }

      if (hundreds == 0)
      {
        dataByte1 = 0xFF;
      }
    }

    // Send the data in the format { [id] [1] [2] }
    Serial.write(123);
    Serial.write(identifier);
    Serial.write(dataByte1);
    Serial.write(dataByte2);
    Serial.write(125);

  }

}

/** override for integer values*/
void sendData(char identifier, int value)
{
  if (!DEBUG_MODE)
  {
    byte dataByte1;
    byte dataByte2;

    if (value == 0)
    {
      dataByte1 = 0xFF;
      dataByte2 = 0xFF;

    }
    else if (value <= 127)
    {

      dataByte1 = (byte)value;
      dataByte2 = 0xFF; //we know there's no decimal component as an int was passed in
    }
    else
    {
      int tens;
      int hundreds;

      hundreds = (int)(value / 100);
      tens = value - hundreds * 100;

      dataByte1 = (byte)hundreds;
      dataByte1 += 128;   //sets MSB High to indicate Integer value
      dataByte2 = (byte) tens;

      if (tens == 0)
      {
        dataByte2 = 0xFF;
      }

      if (hundreds == 0)
      {
        dataByte1 = 0xFF;
      }
    }

    Serial.write(123);
    Serial.write(identifier);
    Serial.write(dataByte1);
    Serial.write(dataByte2);
    Serial.write(125);
  }

}
```

If you adapt it to any other languages, we would be keen to show the code here!


# Bluetooth Packet Decoding

If the output to the Bluetooth module is viewed on a computer, it is not human-readable, so the packets need to be decoded. Instead, you will see something similar to below:

![](https://lh6.googleusercontent.com/I2sMeDueTuUThXxbOMM2WJRbVZcitf5ixVKBwcTFVNBEBjfYEplq_lqGAyZ6SL6bjpJsDJ8julGr-rbbjAfqIpjnOa5CQIJCQ1Q4daYPHTr_Vc2RGQJsHeiYkN0WfttuthohwvaY)

If you want to view the output on a computer, there is a Python script to do that at <https://github.com/eChook/Python-Serial-Interpreter>. This requires Python 3.x with pySerial and tkinter installed.

The interpretation code used in the Android app is available [here](https://github.com/eChook/eChook-Android/blob/master/app/src/main/java/com/ben/drivenbluetooth/threads/BTStreamReader.java).


# Experimental Section

A section for new developments where beta testers are needed :)


# GUI Calibration

There is a new code release for the Arduino: V2.0-alpha1.

This is the first major code change for the eChook Nano GPT in years. The code has been completley restructured, breaking it down into individual files by function, but the major change is that the calibration variables are now stored in EEPROM (on board non-volatile memory) rather than being hard coded in the calibration.h file.

This also comes hand in hand with a new web page that connects to your eChook either over USB or Bluetooth (No mobile support, desktop/laptop only).

This is an alpha pre-release. It may be a bit buggy, but the more people who try it, the quicker those bugs will be found and fixed! If you do find a bug please report it here: <https://github.com/eChook/eChook-Arduino-Nano/issues>

#### Flashing the new firmware:

Download the latest release from here: (at the time of writing, v2.0-alpha1)

{% embed url="<https://github.com/eChook/eChook-Arduino-Nano/releases>" %}

Open this in the Arduino IDE and flash/upload it as per normal. Don't worry about copying your old calibrations over at this point - they will come in later.

#### Loading your calibration:

Head over to the shiny new calibration page here:

{% embed url="<https://calibration.echook.uk>" %}

{% hint style="info" %}
This web page uses the WebSerial API which has limited browser support. You can use either **Chrome, Edge or Opera**. No mobile browsers support WebSerial.
{% endhint %}

Now either connect your eChook via USB (bluetooth module needs to be **disconnected** for USB Serial communication to work), or pair your computer to the bluetooth module. Press the big connect button and a browser menu will appear for you to select the correct serial port.

<figure><img src="/files/dYCWj6GGyTuqOqZV6Znu" alt=""><figcaption></figcaption></figure>

The page should now display every measurement being taken by the eChook, updating live, along with the relevent calibration values. If you already have a calibration, enter the values from your old calibration.h file into the relevent text boxes - the interface will highlight any changes you've made - and click the 'Send x Changes' button in the bottom right. The readings will update to reflect the new calibrations within \~1 second.\
If this is the first time you're calibrating your eChook, refer to the '[Calibrating the eChook](/calibrating-the-echook)' section of this document, but enter the calculated values on the web page.

I strongly recommend using the backup button once you've finished your initial setup, and keeping the downloaded file somewhere safe.

That's all there is to it! Please let us know how you get on, either with the web chat on this page, the forum or an email to <info@echook.uk>.

### Known Bugs

**Issue**: Sometimes when you press connect on the website, it loads but displays 'Not Calibratable' on each line.\
**Fix**: Refresh the page and connect again.\
**Cause**: Undetermined.


# eChook Accessories

No good electronics project is complete without some 3D Printed Accessories!

I'll add to this collection over time, all models will be uploaded to Printables for anyone to print, and for those without printers will also be available to buy at [shop.echook.uk](https://shop.echook.uk) (Currently UK only, feel free to get in touch for international purchases)

If anyone has eChook, or just general Greenpower related models they would like to share I've started a 'collection' on Printables: [Greenpower / eChook Models Collection](https://www.printables.com/social/456424-echook/collections/503732). I will be adding to this over time, but if anyone wants to contribute, send me the link to your model on Printables and I'll gladly add it!

### eChook Nano Case

<figure><img src="/files/IyUdWNTfyxS8Y2m8eF0L" alt=""><figcaption></figcaption></figure>

The first problem to solve was reliably and neatly mounting the eChook to the car. This case provides convenient M5 mounting points, a hinged lid - which when closed ensures the connectors can't pull out, and internal mounting for the Bluetooth module.

To keep the overall size down there are a couple of modifications needed to the eChook board for it to fit - the wires for the Bluetooth module need to be soldered directly to the board, rather than on the header connector, and the ICSP header (6 pins sticking up) on the Arduino need to be removed - either de-soldered or snipped.

For more information see the listing at [shop.echook.uk](https://shop.echook.uk/?product=echook-nano-v1-3-case), and for print files go to [eChook Nano GPT Case on Printables](https://www.printables.com/model/401059-echook-nano-gpt-case)


# DIY eChook

Buying a kit isn't everyone's cup of tea. In fact, we see the eChook kit as a first stepping stone to instrumenting a car and hope teams will be able to move on to custom designs to satisfy their needs.

Everything we have created except for the telemetry is open source. This means you can use as much or as little of it as you want in your designs.

If you have PCB etching facilities then designing your own PCB, potentially reusing the eChook circuit schematics to create a custom system might be an excellent project, or if you have an existing data logging board, you may be able to connect a bluetooth module and be able to use the eChook app and telemetry to get some good real time data in the pits. See the Bluetooth Communication section for more details.

For insurance reasons (ugh) we can't give you modifications to make to the eChook if you have bought one of the kits, but we are always happy to answer electronics questions - pop over to the [forum](http://www.echook.uk/support.html) or message us here.

## Purchasing the PCBs

If you would like to buy just the PCBs and source the rest of the components yourself, you can now buy these through the eChook store: [shop.echook.uk](https://shop.echook.uk/?product_cat=greenpower).


# Spare Parts

What do you do when the magic smoke escapes?

Electronic parts can be delicate, and a greenpower car, especially in the rain, isn't the friendliest environment. Every now and then new components will be needed. Unfortunately Greenpower doesn't stock them, but they are cheap and readily available online from sites such as Amazon, eBay and if you can wait a couple of weeks, even cheaper from AliExpress.

The parts most likely to need replacing are the Bluetooth Module and Arduino. Below are some recommendations for how much parts should cost and where to find them

Spare parts that are specific to eChook and not available elsewhere can be purchased at [shop.echook.uk](https://shop.echook.uk/?product_cat=greenpower).

#### Bluetooth Module

Search for *HC-05 Bluetooth Module*.

Amazon: Expect to pay £6-£8

eBay: Expect to pay £3-£6 from UK sellers, <£3 from China

#### Arduino Nano

Search for *Arduino Nano 328.* There are two variants of the nano, the 328 and the 168. Both will work, however the 328 is the variant this documentation covers. For more info check the ['About the Arduino Nano'](/all-about-the-arduino-nano) section.

Amazon: Expect to pay around £7

eBay: Expect to pay around £4 from UK sellers, £1.50+ from China

If you need any help or advice sourcing parts feel free to ask on the forum or give us a message.


# Troubleshooting

This section contains troubleshooting articles for known issues as they become apparent.

Start by opening the page that matches your issue, work through the checks in order, and then contact us if the guides do not resolve the problem.

If you still need help, please get in touch on the forum or the webchat as soon as possible.


# Power

## Fault LEDs

If the 24V fault LED is lit, the board is trying to draw more than 300mA from the 24V supply. This usually indicates a short circuit on the PCB. Also check for any conductive items under the PCB. A failed (hot) arduino can also cause this to light.

If any of the 5V fault LEDs are lit, there is likely a harness fault causing a short circuit in the harness attached to the connector nearest the lit fault LED. This can also indicate a failed sensor if it has failed short-circuit.

## 24V

#### Power not getting to the Tracopower DCDC Module

If 24V is present at the input but is not seen at the pins of the DCDC power module, the most likely cause is that the rectifier diode is installed in the wrong orientation. This triggers short-circuit protection when the voltage supply is correct: the diode creates a short circuit between 24V and ground, causing the polyfuse to activate and stop voltage reaching the rest of the board.

To fix this (V1 boards only), reverse the diode on the PCB and verify its orientation against the board marking before powering up again.

## 5V

If there is 24V at the input pin to the DCDC power module but no voltage on the 5V rail, the most likely cause is a short to ground on the 5V rail. This causes the short-circuit protection on the DCDC power module to activate.

Use a multimeter in continuity mode to check between the 5V rail and ground:

* If it beeps, you have a short circuit.
* If it does not beep, check that you have 24V going into the DCDC power module.
  * If not, refer to the 24V section above.
  * If you do, the power module needs replacing.

First, unplug all connectors where 5V goes out to the wiring harness and check whether the 5V rail recovers on the eChook board. (On V2.0+ boards, the red error LED will illuminate next to the relevant connector if there is a short in the harness, and it will not affect the eChook board.)

If the 5V rail doesn't recover, move on to removing the Bluetooth module, Arduino then op-amp (U3 chip, PCB V1.x only) from the board.

If there is still an issue, there is a short directly on the PCB. This could be an assembly issue, or physical damage to the PCB.

If you need further help, contact us on the forum or webchat.


# Arduino

## Arduino Failure

Occasional Arduino failures have been reported on eChook V1 boards, and we suspect they may be more common than currently reported. A key indicator is the Arduino chip becoming hot to the touch.

If you see this, please email <info@echook.uk> with supporting details, including your eChook PCB version, Arduino model, purchase date, duration of use, and the circumstances under which the failure occurred.

If the Arduino is getting hot to the touch (too hot to comfortably hold a finger against) a new Arduino is required.

## Arduino Compiling and Uploading

While we have tested the code we provide, there are many factors that can stop it compiling and uploading on different computers.

The error log given in the Arduino IDE is not much help by default. Go into preferences and [enable verbose logging](/programming-the-arduino/programming-the-arduino#compilation-errors) to get more detailed logs.

The most common issues can be addressed with the following checks:

* Install the latest [Arduino IDE](https://www.arduino.cc/en/Main/Software).
* Install the [CH340 Drivers](/programming-the-arduino/arduino-ch340-drivers).
* Select the [correct board and COM port](/programming-the-arduino).
* Install the [Bounce2 Library](/programming-the-arduino/download-the-echook-arduino-code).
* Re-download the [eChook code](https://github.com/eChook/eChook-Arduino-Nano) to ensure no local changes have been made.

If it still fails, take a copy of the errors and post it on the [forum](https://echook.boards.net), or contact us on webchat, and we'll help you decipher it.


# Bluetooth

{% hint style="danger" %}
**We are aware that a number of V2.0 kits were supplied with an incompatible Bluetooth module in 2025! See the steps in the 'No Data being sent to app' section below to determine if your kit is affected, and for next steps if it is.**
{% endhint %}

## Pairing

If the Bluetooth module is not appearing as the name you have configured when you attempt to pair it to your phone, and it is showing up as 'HC-05' or similar instead, the configuration of the HC-05 Bluetooth module has failed.

See [Setting up the Bluetooth](/setting-up-the-bluetooth) for more information on configuring the module.

## No Data being sent to app

This section assumes the module is paired and connected to your phone, you select the Bluetooth device in the Omni app, and no data appears.

**Does the Omni App crash?** If so, this is the first indicator of an incompatible Bluetooth module.

#### Check if data is being transmitted

To do this, install a Bluetooth Serial Terminal app, such as [Bluetooth Serial Terminal by Kai Morich](https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal\&hl=en-US).

Open the app. In settings, change the display mode to HEX, then in the devices menu, select the Bluetooth module. There are two tabs in the devices menu, one for 'Bluetooth Classic' devices and one for 'Bluetooth LE'. Your eChook board should appear in the Bluetooth Classic tab.

*If it appears in the Bluetooth LE tab, you have an incompatible Bluetooth module. Go to the Incompatible Module section below.*

If your module appeared in the Bluetooth Classic tab, tap it to connect to it. If data is being transmitted you will see something like this:

<figure><img src="/files/u5gem24EkEdpi8EF8SFA" alt="" width="188"><figcaption><p>HEX Data being received</p></figcaption></figure>

**If you see data as above:**

If you are running unmodified eChook Arduino code, the eChook board is working as it should and the issue is app-related. Double-check that the correct Bluetooth device is selected in the Omni app. If that does not fix it, try reinstalling the app.\
If you have modified the eChook Arduino code, re-flash the latest release from GitHub.

If neither of these fixes your issue, contact us on the forum or webchat for further help.

**If you don't see data as above:**

The Arduino is not sending data out. Re-flash the latest Arduino code release from GitHub and try again. If the issue persists, contact us on the forum or webchat for further help.

## Incompatible HC-05 Bluetooth Modules

As of late 2024, a new 'HC-05' compatible module has started being sold. It's being advertised as a standard HC-05 module, but is actually a Bluetooth Low Energy device. This uses a completely different wireless communication protocol than HC-05 modules and as such, is incompatible. Suppliers selling this module appear generally (and genuinely) unaware, and are still marketing it as a Bluetooth 2.0 device. These new Bluetooth Low Energy devices look very similar to the compatible HC-05 modules so easily slip under the radar.

Unfortunately, the batch of HC-05 modules I bought for the V2.0 kits appears to have been a mix of good modules and Low Energy modules. The random ones I sampled before kitting were all good, and at the time I was not aware of the incompatible versions existing, but two teams (as of 05/2025) have reported receiving incorrect modules.

If you have purchased an eChook Nano V2.0 kit from Greenpower and have verified that your module is a Bluetooth Low Energy device in the Bluetooth Serial app, as described above, email <support@greenpower.co.uk>, cc'ing <info@echook.uk> with a screenshot showing the eChook appearing in the Bluetooth LE tab of the Bluetooth Serial App, a picture of the Bluetooth module, and an invoice of your original kit purchase.


# Current Sensor

## Current Sensor Troubleshooting

If you are not receiving a current reading from the eChook, or are getting an obviously wrong reading (for example, multiple amps when no current is flowing), first isolate where the problem is in the system:

1. Test the current sensor.\
   With no current flowing (ideally no cable passing through the sensor) and the eChook powered from 24 V, measure the voltages on the eChook board connector to the current sensor, relative to ground. You should see 5 V on the 5 V supply connection, and very close to 2.5 V on both the Reference and Sense wires.\
   If the Ref and/or Sense wires are not reading 2.5 V, disconnect the affected wire from the eChook board (just that single wire, while keeping power to the current sensor) and measure the voltage again.
   1. If the voltage returns to 2.5 V when disconnected, there is a hardware issue on the telemetry board.
   2. If the voltage is unchanged when disconnecting the wire, the current sensor has failed and requires replacing. Continue testing to check that there is not also a cascade failure on the board.
   3. If both wires read 2.5 V as expected, the current sensor is most likely working. If you can pass a known current through it and check the voltage readings, you should see the Sense voltage rising above the Reference voltage.
2. Test the op-amp circuit.\
   The op-amp circuit (component U3 on the telemetry board) compares Reference and Sense voltages from the current sensor and outputs the voltage difference multiplied by 2. This output can be checked by measuring the voltage between GND and the Current Test Point on the bottom of the board.\
   With the current sensor plugged in and no current flowing, after verifying that the Ref and Sense connections show \~2.5 V, measure the voltage at the Current Test Point. If this is not very close to 0 V (there will normally be a few mV present), the op-amp has failed and needs replacing. The required component is a [Microchip 6002 PDIP](https://octopart.com/mcp6002-i%2Fp-microchip-96737).

If you have experienced a current sensor failure, we would be very interested to know the circumstances (when the kit was purchased, how long it has been in use, what was happening when the failure was noted, etc.). We are aware of a few failures and are trying to gather as much data around them as possible. Please email us at <info@echook.uk>, or contact us on the forum or webchat.


# Incorrect Data

## Slightly wrong values being shown

If values move as expected but are slightly off, they likely need calibration.

{% content-ref url="/pages/-LChARU9CrTohXih0WNn" %}
[Calibrating the eChook](/calibrating-the-echook)
{% endcontent-ref %}

## Very wrong values being shown

If obviously wrong values are being reported in the app (for example, voltage when the batteries are not plugged in, or high current when the motor is off), the most likely cause is an incorrect resistor value in the circuit for that sensor. Use a multimeter and compare the resistor values to the schematics [here](/circuit-schematics).

If a value is far higher than expected, power off the board quickly. An incorrect circuit could be sending more voltage to the Arduino than it is designed for, with potential to cause damage.

These issues are unlikely on the V2 pre-assembled boards.

If you need help identifying the fault, contact us on the forum or webchat.


# Contributing

eChook is an open source project and we welcome contributions!

## Arduino code policy

The only code area we are careful about changing is the Arduino firmware for the eChook. It must remain compatible with all supported board versions and stay easy to read.

We are happy to review pull requests that align with that requirement. Feature work that is not suitable for `main` can still be linked from the README or kept in a dedicated feature branch.


