The Compost Professor - A Smart Composting System

A set of senors and actuators that make composting simple.

Similar projects worth following
Per the EPA, food scraps and yard waste make up 20-30% of what we throw away. These materials could instead be composted, keeping waste out of landfills and reducing methane gas emissions.

Unfortunately, most do not compost, due to ignorance on the benefits of composting, misunderstanding of what can be composted, or lack of desire to manage compost.

The Compost Professor is a smart composting system that helps to address these issues by making the science of composting simple for today’s home owner. The Compost Professor uses analytics and artificial intelligence to help anyone successfully create compost with minimal effort.

Where possible, the system will act on the user’s behalf to take corrective actions to accelerate the composting process. When human intervention is needed, the system tells the user what should be added to the compost and when the compost bin should be turned. In addition, the system tracks when compost is ready for use.


The Compost Professor is designed to simplify the compost creation process. The system automates much of the compost creation process. When user interaction is needed, the system will tell the user:

  • What to add
  • When to turn the compost
  • When to refill to the internal water reservoir
  • When to replace or charge batteries
  • When compost is ready for use.

The Compost Professor is made up of three units and four services.

Physical Units

  • Compost Unit - A compost tumbler that contains temperature and moisture sensors used to monitor the health of the compost. The bin will also take corrective actions as needed: automating air flow and compost hydration. The sensors are contained within an enclosed compost tumbler, reducing uncomfortable smells that disturb neighbors and attract rodents. The Compost Unit transmits data using radio packets and therefore can be positioned over 300 yards away from the Base Unit (which resides inside the home).

  • Base Unit- This unit relays data from the Compost Unit to the Compost Professor Cloud, which analyzes the data and makes recommendations on actions needed. This unit can be stored in a corner or under a desk.
  • Kitchen Handheld Unit – This is a small, rechargeable, battery-powered touchscreen device that is meant to sit on the kitchen counter. The user can quickly check the state of the compost using the touchscreen. The unit will inform the user if any action is needed (e.g. turn the compost bin, add green materials, add brown materials, replace the batteries).


  1. Compost Professor Dashboard (release targeted for Dec 2016) – The dashboard is a web-based system that provides detailed records on your compost health. The user can review progress and compare his compost creation against other users.
  2. Compost Helper Alexa Skill – This Alexa Skill tells users if a certain item can be composted.
  3. Compost Professor Skill (release targeted for Nov 2016) – This Alexa skill can provide the same information as the Kitchen Unit. It will also be able to proactively notify the user when an action is needed.
  4. Subscription Service – Each Compost Professor unit will come with a “starter kit” of Compost Activator and Sawdust Wood Pellets. Users will have the option of setting up an automatic replenishment of the activator and wood pellets.



Data Flow

Project Phases

The project will be developed in multiple phases:

Phase 1: Sensor Tests (complete)

  • Proof of concept to validate sensors, output to serial print
  • Arduino 101 for Satellite System
  • Raspberry Pi for Base Station

Phase 2: Early Prototyping

  • use LoRa radio to communicate readings between Satellite and Base System
  • Data stored in SQLite database
  • Initial dashboard with simple analytics
  • Base System - move from Raspberry Pi to Intel Edison and add warning indicators
  • Move from breadboard to soldering
  • Improved dashboard and analytics
  • Improved sensors
  • Add solar power

Phase 3: V3 (“Hackaday”) Prototype

  • Make system more "stand alone" (feedback was that the v2 required too much work to configure and install)
  • Incorporate components into Compost Tumbler
  • Tune devices for less power consumption/deep sleep
  • Build GUI for compost data
  • Build better analysis system (move to AWS in order to leverage server-less and machine learning modules)

Phase 4: Minimally Viable Prototype (Dec 2017)

  • Design and manufacture PCBs for MVP
  • Design website and registration process
  • Manufacture custom compost bin with enclosures for sensors and water reservoir
  • Manufacture limited number of units for feedback
  • Incorporate Machine Learning into compost analysis algorithms

Running List of Requirements, Enhancements & Improvements


  1. Build motor to automatically turn compost (added 10/12/2017)
  2. Consider using Radio Packets versus Wifi for Kitchen sensor (as of right now, RFM69 library conflicts with TFT library). If change is made, this increases battery life of Kitchen Unit.
  3. Add Website - Unit Registration and Ordering capability
  4. Add Registration...
Read more »


STL files for 3D prints

x-zip-compressed - 1.73 MB - 10/20/2017 at 04:08


Compost Professor Instructions.pdf

Instructions to use an assembled compost professor system

Adobe Portable Document Format - 805.39 kB - 10/20/2017 at 03:54


Compost Professor Business Case.pdf

Compost Professor Business Case

Adobe Portable Document Format - 531.08 kB - 10/20/2017 at 03:49


Bitmap icons for Kitchen Unit (put in the root folder on the SD card)

x-zip-compressed - 215.74 kB - 10/20/2017 at 03:48



Arduino INO files for the Base, Compost, and Kitchen units

x-zip-compressed - 19.30 kB - 10/20/2017 at 03:48


View all 6 files

  • 2 × Adafruit Huzzah Feather Needed for Base Unit and Kitchen Unit
  • 1 × Adafruit RFM69 32u4 Feather Needed for Compost Unit
  • 1 × Compost Unit 3D prints see GitHub for STl files
  • 1 × Compost Bin any large compost tumbler will do.
  • 1 × Base unit case see GitHub for STL files

View all 37 components

  • API use

    Darian Johnson10/20/2017 at 17:38 0 comments

    Oct 20, 2017

    One last note: Early in my project (and in previous logs) I reference the analysis code that determined actions needed for composting. My final prototype moves this logic off of the microprocessor and into the AWS cloud. I do this for a few reasons:

    • ease of making programming/code updates
    • simplifying the work the microprocessor does (allowing for increased battery life)
    • ability to leverage machine learning capabilities (especially as I get more data about how the system reacts in expanded use)
    • using location information (gathered during the registration process) to get additional weather information (rainfall, sunlight, outside temperature, etc). This reduces the number of sensors needed in the Compost Bin, reducing the overall cost
    • ability to persist data and make this data available to other channels (Alexa, web dashboard, phone app, etc)

    That being said, I strongly believe in this project and I want others to duplicate it, so access to those APIs is free. I will publish data on the APIs shortly, but in the interim, you can use the API calls as-is in the Arduinio code.

    I'll create a registration process in the next month for use (to better track who is using the APIs and restrict the number of API calls to a reasonable amount). If there are any questions on the API use, reach out to be directly (in the comments or Twitter) and I'll provide additional guidance.

  • The Science of Composting

    Darian Johnson10/20/2017 at 04:05 0 comments

    There a a few sites that I relied heavily on when writing the analytics system.. wanted to pass these along:

  • Fritzing Diagrams

    Darian Johnson10/20/2017 at 04:00 0 comments

    Oct 19 2017 -

    Fritzing Diagrams are embedded in the build instructions, but wanted to post them here as well.

    Kitchen Unit
    Base Unit
    Compost Unit

  • 3D Files

    Darian Johnson10/20/2017 at 03:42 0 comments

    October 19, 2017

    I printed my early prototypes, cases, etc on my home 3D printer (a Monoprice Maker Select Plus, which I highly recommend). I used a 3D printing service for my final prototype prints. Pictures below. STL files on thingiverse -

  • Creating a New User Interface

    Darian Johnson10/01/2017 at 05:34 0 comments

    Oct 1, 2017

    Version 2 of Compost Professor used a web-based GUI to inform users of the status of their compost, and actions they needed to take. I initially planned to make the GUI a phone application that would provide information via Bluetooth... however, based on my own experiences, I went a different direction.

    In my house, my kids are responsible for putting our kitchen scraps into the compost bin (it's one of their chores). I can barely get them to do their chores... there was NO WAY that they were going to look at a phone app to determine if they should add "green", water the compost, or stir the compost. 

    So I went with a battery powered "kitchen" unit that provides explicit directions on the screen.

    There are still a few things to work out:

    1. The voltage divider that I use to read the battery status slowly drains the battery. I added a capacitor is series with one of the voltage divider sensors (as recommended on another site), but I don't think it's going to do. Ultimately I think I'll use a transistor to turn "on/off" the voltage divider
    2. I'm using an ESP8266 - primary because of the low cost. I'm thinking of switching to sending data via radio packets (to the "base hub, which has internet and RFM69 capability). I believe this will help with battery management as well.
    3. I put the ESP8266 into deep sleep, but that means it's about 3 seconds to "wake-up" the device. Might not seem like a long time, but it is when you're standing at the counter waiting to take scraps outside after dinner.
    4. The TFT screen back-light stays on even when the ESP8266 is asleep. There weren't great options to deal with that on the prototype TFT screen I am using. Other TFTs require a pin to pull HIGH for the back light to turn on... this would resolve the problem.

  • Starting Final Prototype Build

    Darian Johnson09/26/2017 at 03:44 0 comments

    Sept 25 2017

    Been a while since I last wrote a log... I've successfully ported the code from Arduino 101 to ESP8266 and ATMega32u4 bases. I'm using Adafruit feathers for the prototypes. These are great boards for prototyping:

    • They have feathers/wing for multiple chip types and functions  (I've played with the ESP8266, ATMega and M0 Cortex models, with "add ons" for RFM69 packets and TFT screens)
    • VCC is 3.3 V - this restricts some sensors (namely gas sensors). I'm ok with the trade off, as it reduces battery consumption.
    • There's a wealth of documentation available.

    It hasn't been perfect, there are some challenges - specifically, I struggled to get the RFM and TFT components to work together (though this isn't because of the Adafruit construction - it's due to the way the RFM libraries are written).

    I've also started to design and print the cases for the components (building on the files provided by Adafruit).

  • Major Changes to the MVP

    Darian Johnson08/30/2017 at 03:50 0 comments

    August 29, 2017

    I've started work on the new prototype. Key changes:

    1. Moving from Arduino 101 board to Adafruit Feathers (RFM and ESP8266). The feathers (and their associated wings) have a smaller form factor and lower power requirements (3.3v v 5.0 volts).
    2. Adding a physical compost bin
    3. Adding a physical display (a TFT screen). I may still use a web app/bluetooth phone app, but I thought seeing the feedback as easy as possible made the most sense.

  • MVP - Solar Powered Smart Compost System

    Darian Johnson08/14/2017 at 21:59 0 comments

    Aug 14 2017 -

    It's been a busy few months since my last log. I've updated the solution as follows:

    • communication between devices using radio packets
    • solution waterproof and solar powered
    • solution integrated into Alexa skill
    • solution notifies users of status via a kitchen compost bin

    The good news is that I've tested the logic and feel comfortable with the analysis algorithm. 

    The bad (or good, depending on the point of view) is that the solution still requires work:

    • I originally designed the solution as an "add-on" to an existing compost bin. Based on user feedback, I need to create an "all-encompassing solution", which includes an outdoor compost bin
    • I am unable to power the entire solution (servo, Arduino, and pump) with one rechargeable battery. 

    I'm in the process of making design changes, now. The goal is to have a more robust prototype available for testing by early September.

  • Analyze Sensors and Take Action Code

    Darian Johnson06/11/2017 at 05:10 0 comments

    6/11/2017 -

    I am still waiting for my LoRa sensors to arrive; in the meantime, I've started writing the logic that will interpret the sensor data. This code will run on the base station. The flow is:

    1. Base station requests sensor data
    2. Satellite station returns sensor values
    3. Base station interprets data and sends commands to satellite station
    4. Satellite station takes requested action (water compost, open vent, etc)
    5. Base station saves sensor data to database
    6. Base station saves UI data (warning colors, messages) to database for easy retrieval

    The first pass of the code is below:

    from datetime import timedelta, datetime
    import json
    def main:
        # TODO implement
        #return 'Hello from Lambda'
        tempMessageArray = [
            "Your compost is at optimal levels.", #0
            "Your compost is ready for use. At your convenience, move your sensors to a new compost pile/layer.", #1
            "Your compost heating cycle is complete and is in a 'curing stage'.", #2
            "Your compost has reached an unsafe temperature. Immediately turn the compost and add water.", #3
            "Your compost has reached unhealthily temperature. At your convenience, turn compost and add 'brown' (Carbon-rich) materials.", #4
            "Your compost temperature is slightly higher than optimal. You may want to turn the compost and add 'brown' materials.", #5
            "Your compost temperature is slightly higher than optimal, but is staring to cool off. I will let you know if any action is required.", #6
            "Your compost is at optimal temperature.", #7
            "Your compost temperature is slightly lower than optimal, but is staring to warm up. I will let you know if any action is required.", #8
            "Your compost temperature is slightly lower than optimal, and is continuing to cool. At your convenience, turn compost and add 'green' (Nitrogen-rich) materials.", #9
            "Your compost temperature is slightly lower than optimal, and is continuing to cool. The ambient temperature is low, so you should cover your compost to continue aerobic composting." #10
        moistureMessageArray = [
            "Your compost moisture content is too high. Turn your compost and add 'green' (Nitrogen-rich) materials.", #0
            "Your compost moisture content is too high but is starting to dry out. I will let you know if any action is required.", #1
            "Your compost is at optimal moisture levels.", #2
            "Your compost moisture content is too dry, but is starting to reach optimal moisture. I will let you know if any action is required.", #3
            "Your compost  is too dry and requires your attention. You need to turn and water your compost." #4
        success = "alert alert-success"
        info = "alert alert-info"
        warning = "alert alert-warning"
        danger = "alert alert-danger"
        tempDanger = 175
        tempHigh = 160
        tempOK = 140
        tempLow = 90
        moistHigh = 60
        moistLow = 40
        #get inputs for analysis
        sensorDataJSON = getSensorData()
        trendDataJSON = getTrendData()
        days = handleDateLogic()
        #set variables
        tempF = sensorDataJSON["tempF"]
        tempC = sensorDataJSON["tempC"]
        moisture = sensorDataJSON["moisture"]
        methane = sensorDataJSON["methane"]
        waterLevel = sensorDataJSON["waterLevel"]
        ambientTemp = sensorDataJSON["ambientTemp"]
        tempTrend = trendDataJSON['tempTrend']
        moistTrend = trendDataJSON['moistTrend']
        tempAlert = info
        moistAlert = info
        methaneAlert = info
        waterLevelAlert = info
        OverallMsg = tempMessageArray[0]
        msgPriority = 3 #1 = trumps all other actions, #2 additive
        if days > 35:
            OverallMsg = tempMessageArray[1]
        elif days > 25:
            OverallMsg = tempMessageArray[2]
        else: # the compost is not ready
            #Handle Temperatures
            if tempF > tempDanger:
                tempAlert = danger
                OverallMsg = tempMessageArray[3]
                msgPriority = 1
            elif tempDanger >= tempF > tempHigh:
                tempAlert = danger
                OverallMsg = tempMessageArray[4]
                msgPriority = 1
            elif tempHigh >= tempF > tempOK:
                if tempTrend < 1:
                    tempAlert = warning
                    OverallMsg = tempMessageArray[5...
    Read more »

  • Logic/Alerts/Actions based on Temperature and Moisture readings

    Darian Johnson06/09/2017 at 03:16 0 comments

    6/8/2017 -

    I am in the process of writing the logic that drives alerts and actuators (water pump and vent open/close). I've create a few tables that will help me to write the AI.

    Temperature Logic

    Moisture Logic

View all 15 project logs

  • 1
    Purchase and Assemble a Compost Bin

    For prototyping purposes, I purchased the following bin on Amazon (

    When assembling the bin, I did not add the divider. In addition, I assembled all parts except one of the ends and the bin door.

  • 2
    Assemble all Feather and and Wings

    Following the instructions on Adafruit, assemble the feathers

    Kitchen Unit:

    • Use Huzzah Feather and TFT featherwing; regular headers are fine here (you may need to trim them to fit flush against the TFT)

    Adafruit Huzzah (ESP8266)

    Adafruit Feather HUZZAH with ESP8266 WiFi - with or without headers

    Adafruit TFT Featherwing

    TFT FeatherWing - 2.4

    Base Unit:

    • Huzzah and RFM69HCW Feather. Use short stacking headers for the Huzzah.
    • Note - be sure to choose the correct freuqency for your location (815 - Europe, 900 Americas, 433 - Asia)

    Adafruit Radio FeatherWing - RFM69HCW 900MHz - RadioFruit

    Adafruit Radio FeatherWing - RFM69HCW 900MHz - RadioFruit

    Compost Unit

    • 32u4 Feather with RFM69 and Proto wing; short stacking headers are suitable here as well.

    Adafruit Feather 32u4 RFM69HCW Packet Radio - 868 or 915 MHz - RadioFruit

    Adafruit Feather 32u4 RFM69HCW Packet Radio - 868 or 915 MHz - RadioFruit

    FeatherWing Proto -

    FeatherWing Proto - Prototyping Add-on For All Feather Boards
  • 3
    Download and print all 3D files

    Using the STL files in the GitHib library, print all the 3D files

View all 12 instructions

Enjoy this project?



Al wrote 09/07/2019 at 00:21 point

Any thoughts on adding a servo to rotate the bin? What sort of power would you need?

  Are you sure? yes | no

chris62 wrote 07/10/2018 at 15:12 point


I do not understand how to connect Adafruit TFT Featherwing and Adafruit Huzzah (ESP8266) ? have you a diagram ?

It's Ok I understand !!

  Are you sure? yes | no

Darian Johnson wrote 11/09/2017 at 03:40 point

@alexwhittemore Thanks for the feedback. And yes, you're right, a tagged release with a clear BOM (and better instructions) are on the way. I also need to document use of the APIs...

  Are you sure? yes | no

alexwhittemore wrote 11/08/2017 at 20:55 point

This is awesome! Can't wait to see it mature even more.

  Are you sure? yes | no

Darian Johnson wrote 11/08/2017 at 22:36 point

Thanks. It's come a long way since I started (in April/May). I'm really excited about some new features and advancements that I think will make it even easier for end users

  Are you sure? yes | no

alexwhittemore wrote 11/09/2017 at 01:21 point

What I'd ultimately like to see is a tagged release, with a BOM and cohesive instructions and firmware that can all be expected to work together. Not necessarily instructions my mom could follow, but even like "this is the R1 schematic, here's a picture of it built, here are the STLs," etc. Mainly so that I can sit down and say "okay, do I have the budget to go ahead and build this?" :)

  Are you sure? yes | no

Valery DJONDO wrote 08/25/2017 at 13:28 point

I've made a copy all the material I could take here on a facebook page.
I hope I can make a similar project, borrowing this one.
And I will try to pair the project with a local fablab I'm working with.
I will obviously keep you in touch with my progress.
Thank you

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates