Soil is a result of the Space Apps Challenge London 2013. It's aim is to provide an open, extremely cheap and easy to use system to collect soil data, manage it and make it globally available.
JavaScript CSS Python PHP Ruby Processing Other
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
text-message-and-database-api @ 0b785b5

People of the Soil

(co-winners of the London Nasa Space Apps Challenge 2013)

During the Space Apps Challenge 2013, at the Google Campus in London, we have developed Project Soil: an extremely cheap and easy to use system to collect and manage soil data.

People of the Soil in London

We kept in mind that not all the world is as lucky as us and there are plenty of places where internet is slow or completely absent and where there is much less money around.

Project Soil is an open system that includes:

  • an extremely cheap (~3£) digital soil testing kit to collect data, and eventually send it
  • a light protocol to send the data using web, apps or even SMS and collect it on a centralised database
  • an API to disseminate information via SMS or web
  • a wonderful and light web application that can run on old and recent phones and gives access to the data with a simple and nice interface.

Project Soil

We spent the first part of the challeng looking at all our different backgrounds and skills and reformulating the challenge in a series of smaller ones that we feelt we could face.

First drafto of Project Soil

As you can see from the image below, Project Soil is made by three big interlaced projects, each of them with a particular focus: acquiring data, collecting it and make it available.

Project Soil in bites

The probe

In this part of the projected we aimed to create a proof-of-concept soil testing kit that could be miniaturised and mass produced. This can then upload recorded soil data, taken over a period of several weeks, to a central database via a phone application or computer interface.

The Probe v0.1

The hardware team realized in an amazingly short time a working prototype of probe to collect soil data. In the first version an Arduino was collecting data from various sensors and sending it to a Rasperry Pi programmed to forward it to our database.

Testing the Probe v0.1

In addition, the aim was to create a PCB schematic and layout to implement this system realistically and cost such a device. CAD models were created to aid development and concept presentation.

The project uses a DS18B20 temperature sensor and a transistor amplified simple moisture sensor.

Moisture is displayed as an estimated percentage volume of water to soil. Completely soaked soil will hold up to around 50% water content and so a measurement of resistance of pure water is taken as the calibration mark for 50% and the probe held in air is taken as the calibration for 0%.

The hardware prototype is a proof of concept, a final device should use a much cheaper MPU such as an ATMEGA48A-MU 4K memory, 8-Bit MPU. This can be sourced (in bulk) for less than 80p per unit.

The probe and its price breakdown

In fact, from that prototype the hardware team engineered a small and cheap device that you can simply plug in the field and leave alone collecting the data. Afterward it is enough to have a USB connection to collect the data and send it to our servers.

The Probe v.1.1 - PCB

For whom may be interested, the price of the final device can be overestimated as follows:

  • ATMEGA48A £0.80
  • Resistor £0.10
  • DS18B20 £0.85
  • CR2032 Coin Cell £0.39
  • Coin cell holder £0.20
  • PCB manufacture £1.00

Total £3.34

The SMS service

Keeping in mind that not all the world is covered by internet, we used the twilio API to create a service to send the data directly through SMS. This makes it good for use in more developing regions of the world.

A small screenshot of the webapp and the SMS service

Send a text to 01952 787011 containing a list of readings for the following parameters pH, temperature, moisture, lat/latitude and long/longitude and then will be added to the dataset. The list of key, values can be separated by whitespace or , delimited and the order doesn't matter

pH = 7.2, lat=51.9972, long=-0.7421, temp=35

You will receive back a message confirming the data your sent and that it had been saved to the database.

Data collection

While the SMS data goes directly to the database, all the rest of the communication is made by means of MQTT, a machine-to-machine (M2M)/"Internet of Things" connectivity protocol designed to be extremely lightweight. In this way we can move all the management of the data to our server and consume as less power and bandwith as possible on the clients.

Web App

Again keeping in mind to consume as less bandwith as possible, we designed and developed an extremely intuitive and nice application, completely based on HTML and CSS, and with nearly no image. In this way people can access the data using any device, not just the last generation of smartphones, consuming nearly no bandwidth!

Web App

You can already test our web app going to Project Soil App

Ideas for the future

The possible implications and improvement for the future are the most variuos. Here there is a small list of what we could and would like to achieve:

  • Implementations of more chemical and pH sensors could be made extremely cheaply and in bulk by using thick film printing processes. This could be an avenue for further development although the technology is still heavily in it's infancy.
  • Improve the probe to make it cheaper, stronger and with longer battery life.
  • Add wifi/bluetooth/NFC capability to a bigger version of the probe that would not require laptop, smartphones or raspberry pi to send the data.
  • Create an easy to use application to collect and send the data from probes that cannot be connected to wifi or bluetooth networks.
  • Make the system independent from us and working on a global scale.
  • Add some finer controls on the database to avoid fake data.
  • Implement a robust and flexible API to make the soil data available to researchers and any other in need.
  • Improve the Web App to include data analysis, comparisons and infographics.
  • Add support to other languages.
  • Go to other planet (see below).

More to come on the web app

Project Soil on other Planets

And with our small collaboration with solsola we are ready to fly on the space and collect extra terrestrial soil data!

Solsola and Project Soil on Mars

More Images and Informations

Look what we did going to the Git Hub page, looking for our hashtag #pplofthesoil on Twitter, watching our presentation or reading our "storified" weekend story

Our Team

Additionally you can read:

Congratulation to all the winners of the 2013 International Space Apps Challenge. We didn't win but we've got a Honorable Mention on the Global Impact category!!!!

Honorable Mention for Project Soil

And thanks to Ben's committment, we have a new, nice and cheap printed Soil PCB: We have a new printed version of the Soil Probe - Thanks Ben

The Git repository contains:

  • The presentation of our work: SOILPres-v3.pdf
  • The full implementation of the probe (hardware and software) and the PCB schematic to build a cheap and effective probe: probe folder
  • The interface to the MQTT service that translates the data and sends it to the DB: MQTTinterface folder
  • The DB and SMS service (hosted on another Git repo): text-message-and-database-api folder
  • The mobile app to have access to the data: mobileapp folder
  • A folder img with the pictures used in this README files

The project is released under Eclipse Public License 1.0

Something more technical for us and potential collaborators

Data structure

Data readings are of the form

   "id": "182791",
   "time": "13:56:13 20/04/2013",
   "lat": "97.03125",
   "long": "107.2890",
   "altitude": "10",

and must be sent to

  • MQTT Broker:
  • Topic: /pots/soil

id, time, lat, long MUST be present and not NULL, otherwise the data is sent directly to /dev/null

It can be done as simple and boring as using
Or you can let your hardware prepare the data and send it using (more or less) any programming language: