Friday, May 12, 2017


Just a brief note for spammers.

Often I receive some comments on some articles of this blog.
Many of them are clearly just spam masked as comment.
I have zero tolerance for spam comments, as soon as I identify one I'm deleting it (if already published) or I can prevent the publication if I recognize it.
On this blog comments must be approved by me, they are NOT automatically published.

So, who wants to post spam here, will have hard time and my total contempt.
Don't bother to post spam.

Wednesday, May 10, 2017

Gnuplot on Raspberry Pi

gnuplot is a program capable to produce graphs starting from set of data.
Ideal to graphically represents sensor readings.

This article assumes to use Raspbian on a Raspberry Pi, specifically in my case the Raspbian version is the one used with Dexter for GrovePi.
Since GrovePi allows to easily connect sensors to the Raspberry, gnuplot is the perfect companion for that environment.


Simple, open a terminal and digit : sudo apt-get install gnuplot

That's it :)


Once gnuplot is installed, is possible to open a terminal and digit the command gnuplot.
An interactive environment command line based will be available.
However the best way is to create a file containing the commands needed to generate a graph and have gplot reading that file to produce the graph as described in these instructions.

Data file

The file containing the data need to be in a specific format.

The time/date in the format of yyyy-mm-dd:hh-mm-ss (see the timefmt line in the command file), then the light value and (in this example) the voltage measured.
Each field is separated by a tab and each line ending with a newline (/r).

Example of data saved in the fhelper_datalogger.txt

# 2016-12-05:10-52-42 - Starting datalogger - time - light - volt 
2016-12-05:10-53-02 758 4.43
2016-12-05:10-53-24 758 4.43
2016-12-05:10-53-44 758 4.43
2016-12-05:10-54-05 758 4.43

Command file

Here an example of a gnuplot file (called testfile) used to display some information collected in the data file.
Specifically the goal is to create a graph showing the data stored in the second column of the file (light)
set title "fHelper light data vs. Time"
set datafile sep '\t'
set xlabel "Time"
set ylabel "Light"
set xdata time
set timefmt '%Y-%m-%d:%H:%M:%S'
set yrange [0:1000]
set style data line
set terminal png size 1500,800 enhanced font "Helvetica,20"
set output 'displight.png'
plot '/home/pi/Desktop/fhelper/fhelper_datalogger.txt' using 1:2
The file is taking a file called fhelper_datalogger.txt (located in the directory /home/pi/Desktop/fhelper) and will produce a file called displight.png.
The file will be saved in the same directory where this file exists and is executed.

To execute it just digit from the prompt : gnuplot testfile

Here a couple of examples of graphs obtained from the log file.
One shows the light reading and the other the voltage reading.
To obtain the voltage reading was enough to change a couple of lines from the command file.
Specifically I changed the Y axis range (0:1000 for light, 0:5 for Volt) and the plot command telling to use the first and third column in the file rather than the first and the second column (plot '/home/pi/Desktop/fhelper/fhelper_datalogger.txt' using 1:3)

Thursday, May 4, 2017

Grove Moisture Sensor bad design

Among many things, time ago I started to play with the Grove Pi system, for a fun project called fHelper, basically a sophisticated alarm to notify when a plant need water.

Basically a Raspberry Pi with a bunch of Grove sensors and among them the Moisture sensor.
Today I found out that who designed this sensor did a very poor job, using a direct current to detect the level of humidity.
The result after months of use is depicted in the pictures below.

Yep. One side is totally corroded !!
No wonder the reading was erratic.


Not sure if it was there when I bought it, but the sensor page now reports that the sensor should be used only for brief tests and not left in the soil because corrosion can happens.
Still I found totally silly to use something to design a system and then not be able to use it in a final design because it destroy itself.
You spend time experimenting with a sensor that can not be used !  Can I say is just stupid ?

Roomba 5xx - repairing a power supply

Time ago I had a Roomba 560 with an Error 5.
The problem was the power supply used to charge the battery.

Time to try to fix it.

It is a classic switch power supply and I did some measurement.
The voltage expected was supposed to be around 22V, but it was around 19V when I measured it.
Even worse, the voltage was slowly decreasing after few minutes.

There are many things that can go bad in a switching power supply, but the symptoms made me think about a bad capacitor.

So I opened it and started to look for damages on the PCB.
Particularly I was looking for discolorations around the capacitors, usually caused by the heat.
A bad capacitor can generate a lot of heat and thus be damaged.

I didn't notice anything apparent, so I checked out the two main capacitors in the circuit.
A 47uF 200V and a 680uF 35V.
Both seemed OK to a visual inspection.  Since I had around only the 47uF capacitor (but 400V) I decided to change it.  Quite unlikely to be that one the problem since is used as main filter on the 110V but better to try.

And in fact it was not that the cause of the problem.
So I ordered from Mouser some 680uF 35V capacitors and, just in case, a mosfet 500V N-channel to eventually replace the one used in the power supply.

When the component arrived I immediately changed the 680uF capacitor and ... voila' !
22.75V stable.

I was lucky this time. A damaged capacitor on the output.

Reassembled the power supply, it worked perfectly to charge the "just fixed" Roomba 510.

5v Solar Power Supply for Raspberry Pi - Enhanced RPOf

This article describe an idea about a 5v Solar power supply for Raspberry to be used with the fHelper project. Another article describes some tests on the 5v Solar power supply.
in particular this article discuss about the requirements for the Enhanced RPOf (eRPOf).

The goal is to have a 5V solar power supply for Raspberry Pi capable to power up and power down automatically (or forced via a pushbutton) the Raspberry Pi.
The eRPOf will be powered by the same battery, thus it will have a voltage detector circuit to power it up.

Main characteristics

The main goal is to have the Raspberry Pi totally independent for the power supply.
The system should be able to be powered only using the sun.
Because some limits and to reduce the cost, the system will be able to shutdown the Raspberry Pi under determined conditions and re-power it later under a different sets of events.
Here a sum up of the main characteristics
  • Solar powered battery
  • Capable to give 5v 1A
  • monitoring power and shutting off nicely Raspberry before the battery is depleted
  • automatic powering up the Raspberry when the battery is back charged 
  • Push button for manual on/off operation (see RPOf)
  • Other condition to determine when powering up the Raspberry (light or time of the day or other condition)

Block schematic

The key is the eRPOf circuit that is used to turn on and off the Raspberry Pi safely, plus the trigger command can come from the charge level monitor.
If the battery level start to be close to a critical threshold, the monitor send out the off signal to the eRPOf that is removing the power to the Raspberry after sending a shutdown command (see the RPOf article).
The eRPOf in this case however will turn automatically On the Raspberry when there is enough power stored in the battery, or if the manual command is issued (pressing pushbutton) or other conditions are satisfied.
The eRPOf is powered by the same battery. The threshold to cut power to the Raspberry Pi will be set in a way to allow the battery to power the eRPOf using a voltage detector circuit.
i.e. the eRPOf will be allowed to run if the battery will have enough charge.

Let see some blocks.

  • Solar panel - solar controller - battery
    These are the keys for the solar charger.
    The battery is kept charged by the solar panel and the solar controller is capable to power whatever is connected thru the battery or, if in excess, the solar panel.
  • Relay - DC/DC converter
    Control part to power up the Raspberry. eRPOf will connect the DC/DC to the battery.
  • Charge level monitor
    Hardware component to decide when there is enough power to power on the eRPOf.
  • Power level monitor
    Optional - a way to monitor how much power is coming from the solar panel. Can be used to infer if is day or night or cloudy.
  • Other conditions
    Like the block above, a set of other possible conditions to prevent eRPOf to power up the Raspberry


Here a list of components used to build the eRPOf.
The goal is to use as much as possible "ready made" circuits, so I looked at Adafruit.
See the feasibility phase article for more details, here the list :

eRPOf details

The eRPOf is based on the original one, however it has some differences, thus it will be an Enhanced version of RPOf.
For example it must be capable not only to shut down the Raspberry Pi when the battery level is going down too much, but it must be able also to power back automatically the Raspberry when the battery level is enough to sustain the fHelper job and another condition allows that to happen.
Starting from the original RPOf based on the MSP430, here the specifics for the eRPOf.

The eRPOf will be able to:

  • monitor the battery level
  • shutdown the Raspberry Pi
  • monitor if the Raspberry Pi is turned Off (to determine if the Raspberry is already went off)
  • power up the Raspberry Pi in autonomy depending the battery level charge and other conditions
  • power up the Raspberry Pi if the push-button is pressed AND all the necessary conditions are satisfied.
    For example if the battery level is still below the threshold (level 3) pressing the pushbutton will NOT turn on the Raspberry Pi

Tentative schematic

Here a tentative for a schematic, in order to do some prototype:

The eRPOF is powered directly from the battery under charge (3.7 V nominal) and the voltage detector controls the MSP430 reset pin.
Still to decide many things, for example if make sense to have the LED for the power button since the goal is to minimize the current used.
Anyway this schematic is just a starting point to experiment and it will be likely be modified.

I/O description

Like the original RPOf, the eRPOf will use two I/O to communicate with the Raspberry Pi.
One line will be used in output mode from eRPOf to inform the Raspberry to start the shutdown sequence.
The other line will be used in input mode on the eRPOf to determine if the Raspberry Pi is running.

Of course it is implicitly assumed that those line are handled on the Raspberry Pi side as well !

One other line will be used to measure the battery voltage and another line will be used to measure the solar panel voltage.
This should allows to determine when is daylight and if there is enough power available to turn on the Raspberry Pi.

Here a detailed description of the I/O used in the project :

  • P1.3 - Reading voltage
    • Direction : Input
    • Mode : ADC
    • Description : It is connected to the battery.
      Via it the MSP430 can read the voltage of the battery
  • P1.6 - push button
    • Direction : Input
    • Mode : Digital - pull up inserted
    • Description : It is connected to the push button. Active low
  • P1.7 - relay control
    • Direction : Output
    • Mode : Digital
    • Description : It controls the relay - active high
  • P2.1 - to GPI0018 Raspberry Pi
    • Direction : Input
    • Mode : Digital - pull up
    • Description : Shutdown control - input
      Reads a line controlled by the Raspberry Pi - active low
  • P2.2 - to GPI0017 Raspberry Pi
    • Direction : Output
    • Mode : Digital
    • Description : Shutdown control - output
      Used to force a signal to the Raspberry Pi.
      When the signal is up, the Raspberry start the shutdown sequence
  • P2.5 - push button LED
    • Direction : Output
    • Mode : Digital
    • Description : It controls the push button LED (active high)

Powering ON

The power ON procedure is more tricky since everything is powered from the same battery.
We can have different states and for some of them a specific hardware solution is the only way.
Let see some states of the battery :

  1. Battery totally discharged
    When this state happens, there is no power to supply not only the Raspberry but also the eRPOf itself.
    The power to the Raspberry (via the DC/DC converter) the eRPOf must be able to run and this means that the it must be blocked if the battery is below a specific threshold
    An hardware circuit must ensure that.
  2. Battery charged (transition from discharged to charged - level 1)
    When the battery voltage is above a specific threshold, the hardware circuit will allow eRPOf to run.
    eRPOf then will execute some tests to determine if there is enough charge to power the Raspberry.
    This threshold is called level 1.
  3. Battery charged (transition from level 1)
    eRPOf will enable the Raspberry activating the DC/DC circuit when the battery charge level will raise above a threshold (higher than the one at level 1, called level 2).
    eRPOf will try to determine if the battery is charged enough before to connect the DC/DC.
    Some suggestions :
    1. verify if is night - if no light is detected or looking at the time, it means the battery is not charging, avoid to start the Raspberry in the night
    2. verify the battery charge to be above the level 2, let call the activation threshold level 3
    3. connect a resistor temporary (via a rele') to give a load to the battery in order to measure the battery voltage with a load
    4. wait some time, at least an hour, from a disconnection before to consider a reconnection
  4. Battery discharged (transition from charged to discharged - level 2)
    The eRPOf will consider the battery as discharged with a voltage level little bit above the one used by the voltage detector.
    Thus the "level 2" is referring to this threshold.
    When this happens, eRPOf will issue a shutdown command to the Raspberry and when the Raspberry will be off, remove the power to the DC/DC.
    At this point eRPOf will determine if there are the conditions to re-apply the power to the Raspberry (see event 3)
One possible way thus is to have three threshold to determine the actions
  • level 1
    battery considered totally discharged, not good even to power up eRPOf
  • level 2
    battery discharged to power up the Raspberry but still OK to power eRPOf
  • level 3
    battery level to be considered as charged enough for eRPOf and Raspberry Pi

Next articles will discuss experiments and modifications of the design of the eRPOf.