Skip to content

A simple device that lets your plant talk with you using emojis!

Notifications You must be signed in to change notification settings

syk-yaman/plantemoji

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Plantemoji: a smart IoT plant caring system

A smart plant caring and irrigation device with a web infrastructure to monitor and control plants environment and explain their living state in emojis. Basically, your plant will have AI and will be able to talk with you using emojis!

System components overview

Plant container Water bucket
System components overview System components overview

Repository Content Summary

  1. 3D Enclosures

    This section includes the 3D printed parts, namely Fusion360 project files and STLs.

  2. Code

    Includes micro-controllers' code, Artificial Intelligence code and various assets used during development.

    • AI

      LSTM.py is the main Python script where the LSTM neural network is developed and trained. This folder also contains the old [Colab experiments](/Code/AI/Colab expirements/), which are obsolete and currently kept for archiving purposes. Finally, the Results folder, which contains experiments' charts for both the LSTM.py and the obsolete Colab experiments.

    • Assets

      Contains .bmp files to be visualised on the screen, in addition to their original Photoshop files .psd

    • ATMega8A

      C program for the AVR micro-controller.

    • ESP32

      C++ code for the main micro-controller, which will replace Huzzah.

    • Huzzah

      C++ code for the old micro-controller. It will replaced by ESP32.

  3. Datasets

    Includes 1 month dataset (the full dataset) and other partial datasets used to train the AI model.

    This section also contains some data analysis.

  4. Docs

    This folder holds different kinds of documentation and images produced during project life time.

  5. PCB

    The electronic side of the project. This section contains Eagle files and CAM outputs sent to PCB manufacturers.

  6. Server

    Docker Composer file for InfluxDB and Grafana. Basically, all data acquisition is being managed by this Docker image.

Project Overview

This conceptual diagram explains how the system is composed, down from reading sensors and understanding their values, and later sending them up to the cloud for further analysis and visualisation.

System components overview

The objectives of this plant monitor are:

  • Interpret sensor data for the end user in a human-friendly way.
  • Take into consideration plant living requirements during the monitoring process.
  • Make comparisons between different soil moisture sensors and the same sensor in different conditions.

Building

Used components and tools

Hardware:

Software:

All the software applications are packed into one Docker image that you can use easily.

Tools:

  • Image2Lcd: converts BMP images to byte arrays stored in MCUs to be displayed on the LCD screen (please follow these settings).

Hardware schematic

Hardware schematic

Highlights

  • Sensors are connected to Arduino now due to the availability of many ADC ports compared to HUZZAH.
  • The LCD screen driver was ported from Arduino to work on HUZZAH, the latter has more memory and capability to drive screens compared to Arduino.
  • New MQTT topics added: moistureCapacitive for the capacitive sensor and mood which is derived from sensor data according to plant profile.
  • Plant profile: a file containing the suitable living environment parameters for the desired plant. The mood of the plant (happy - sad) is determined based on this profile.

Results

Grafana dashboard InfluxDB dashboard MQTT feed
MQTT

See here for more detailed comparisons between sensor types.

Future work

  • Add more plants profiles.
  • Let plant profile can be controlled using HTTP.
  • Add mobile notifications.
  • Do more comparisons with other sensor conditions.
  • Add more emojis to express plant mood further.

Resources and references

Lessons learned

  • Understanding the data from a simple sensor in the real world is not easy due to the effect of environment parameters and setup conditions.
  • Remember: Always print a 3D case and try to be gentle with screens!
  • Visualising the data can make us understand the surrounding environment in a better way.
  • If a serial connection is needed between two devices with different power sources, their GND should be connected together. And of course, they also must have the same baud rate.

License

The software side is licensed under MIT License
MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
The hardware side is licensed under CERN License
This documentation describes Open Hardware and is licensed under the CERN OHL v. 1.2.

You may redistribute and modify this documentation under the terms of the CERN OHL v.1.2. (http://ohwr.org/cernohl). This documentation is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN OHL v.1.2 for applicable conditions