ODroid created a fantastic Product with the ODroid GO.
A nice compact device with an LCD, Buttons, Speaker, a ESP32 from Espressif AND an expansion board.
Although the Hardkernel Wiki already gives examples how to use the device for your own hardware projects, it seems that almost all people regard it as a “Gameboy Clone”.
For the Odroid GO Tricorder project I just waited for a device like the GO. The Idea was: Bundle a set of sensors and provide it with some nice interface.
The GO provides 2 Pins at the expansion board that can be used for I2C interfacing. All the sensors for the Tricorder had to have that interface.
The following Sensors are built in:
A sensor that can measure ambient temperature, humidity and pressure.
It can measure light in red, green and blue, white , in lux and as color temperature
Measure UV (A/B) radiation and provide a UV Index
Measure Roll, Pitch, Yaw, Accelleraton in X/Y/Z, Gyroscopic measurements also possible (rotational forces)
It meausures Gas concentrations (ppm, ppb) of CO2 (Carbon Dioxide) and VOC (Volatile Organic Compounds)
A so called “time of flight” sensor that measures distances up to 120cm via laser
An infrared Sensor cabable of measuring temperatures in the range of -70 to 380 degree Celsius
Another Gas Sensor able to detect carbon monoxide, nitrogen dioxide, ethanol, hydrogen, ammonia, methane, propane, iso-butane
I decided to use the VEML 6040 and the VEML 6075 Sensors because their outputs seemed quite reasonable (realistic).
The drawback was that both sensors require I2C address 0x10. Because of this I needed a I2C switch TCA9543A (2 port).
I split up the sensors into two groups (according on how I wanted to place the sensors on a designed PCB for easy routing)
Platform IO (VS CODE)
Programming the ESP32 can be done via the ESP-IDF, an C/C++ SDK from Espressif. I personally regarded it as “too low level”, so I decided to go the Arduino way since I had more experience with this.
Years ago I stared with the Arduino IDE, but then Platform IO crossed my way. You can also code Arduino style with it, but it just looks better. It can be used as plugin for the MS VS Code Editor which I also regard as a very nice one.
For all of the sensors there are libraries that can be used under Arduino. Some of them I had to adapt since most libraries assume that the sensor they are made for is the only device on the I2C bus, and some are not directly able to deal with an ESP32.
It took some while to gather all the sensors from China (EBAY is my best friend now), and for quite some time a prototype on Breadboard was used to develop the software, but from the beginning it was clear that there has to be a PCB for the Tricorder.
Year ago I was searching for a good tool to design PCBs. My choice fell on DesignsparkPCB. You can draw Schematics and derive PCBs from it. A very important thing is to easily create your own Components, since it is very hard to get component libraries for all you need.
The screens for the tricoder had to be drawn as background image. After having tried a few freely available paint programs I stuck with paint.net
The photos were taking with my Samsung S8
Stages of the hardware development
The breadboard was the first stage to put things together easily. In the picture all the sensors are removed already, only the wiring is left.
In this prototype not all sensors were integrated. I just made it to get a feeling of the handling, holding the tricorder in hand.
The PCB (Rev. 1)
As described above, the PCB was designed with Designspark. Since I am not a fan of having a lot of chemistry in my house, I had the PCB made by a company.
To make it cheap, I did not do it with solder resist.
The assembly and a first test revealed that I did a mistake in the PCB design. I actually wanted to have the BME280 on the other side.This cost me one BME280 because it burned being assembled on the wrong side and I had to place the next one on top of the BNO055. Well, not really a big deal.
As mentioned above, my choice to develop the software was PlatformIO as a plugin for the VS Code editor. The code is written in “Arduino” using C++ for some of my own libs to handle the screens.
As a tricorder it should look like Star Trek, so I got me inspired by some screens I found via google, just search for “Star Trek LCARS”
LCARS = Library Computer Access / Retrieval System ( for the non Trekkies)
I devided the Sensors into several screens that can be switched via the A/B buttons of the GO.
The sensors (at least some) need to be initialized before we go. (Uhhh, should have cleaned the screen before making the pictures).
The first screen shows some ambient values (Temperature, Humidity, Barometric Pressure, Light intensity in Lux, UV Index) those Values come from BME280, VEML640, VEML6075
For Light measurements LUX is not the only interesting value. The composition of the light might be interesting (percentage of red, green, blue as bargraph), the color temperature can be derived from that distribution of the base colors.
The various gases are presented here. all of them (except VOC I think) are given in PPM (parts per million).
Since the names of the gases did not fit on the screen I took their chemical formulas.
As described by the datasheet the MICS gas sensor needs a heat up phase before its values become accurate. The Values for C3H8 and C4H14 (Propane and Butan) still are too high. There are no such gases in my home I hope.
The page combines 8 Gases from the Mics and 2 Gases from CCS811 (CO2 and VOC)
The distance is given in centimeter. The VL53LOX is capable to go for 120cm MAX. I must say, the precision is quite accurate accoring to my ruler.
Having the distance given in Inch requires some config or button to switch it. Currently the project is only for mebeing European => The Metric System RULES!
The Temperature is not the one from the BME 280 (Environmental) its the temperature directly ahead of the tricorder. Its more or less like one of those Pistol shaped thermometers.
Units are Celsius.
The display for the orientation is the hardest to design in 320×240 Pixels.
How to display Roll/Pitch/Yaw?
I am not really satisfied with it, but for a first shot it seems ok.