UltraTower 2023

Grow vegetables with ultraponics tower

Similar projects worth following
Soilless growing is becoming more and more common with hydroponic systems. The forums are full of information on how to create your own system that allows you to grow plants by circulating water. This principle of culture presents the advantages of consuming less water, to have an accelerated growth and to be able to control and automate the whole system.
Many variants exist of the NFT culture, tidal culture, aeroponic culture but the most extreme and the least documented is the ultraponic culture that we will try to tame.

If you want to see the evolution of the ultraponic tower, do not hesitate to follow the project!

This project is the continuation of this link

Will we run out of water?

There is water almost everywhere on earth but when we talk about fresh water, there is only 2.5% on our planet. Too many people on this planet do not have access to potable water. We have to optimize usage of water in all sectors.

According to WWF: “Agriculture uses 70% of the world’s accessible freshwater, but some 60% of this is wasted due to leaky irrigation systems, inefficient application methods as well as the cultivation of crops that are too thirsty for the environment in which they are grown. This wasteful use of water is drying out rivers, lakes and underground aquifers. Many countries that produce large amounts of food—including India, China, Australia, Spain and the United States—have reached or are close to reaching their water resource limits. Added to these thirsty crops are the fact that agriculture also generates considerable freshwater pollution – both through fertilizers as well as pesticides – all of which affect both humans and other species.”

Full article here:

Mankind faces several problems:

  • Cities will continue to grow, thus moving away from the fields, which require more transportation to bring food to towns.
  • Global warming will cause major disruptions and make the weather unpredictable for farmers
  • Population growth will exacerbate stress on water supplies
  • Other sectors depend on fresh water such as the energy sectors that have become necessary for our civilizations.

Could we make a cultivation system to optimize the consumption of this precious water?

Could we propose a system to allow local scale production of vegetables?

Could we make a system automated enough to run in a "forget it mode"?


The system must meet a few criteria:

  • Closed water circuit: this way, water is reused and contamination of the water table is avoided
  • The least noise possible: this system must be able to works in the apartments of the big cities (those that do not have a garden)
  • Optimization of electricity: energy also depends on water
  • Cheap as possible:  accessible to the greatest number
  • Put the most plants in the smallest space
  • Completely automatic

Hydroponics corresponds to almost all the criteria mentioned above but why did you choose ultraponic?

Why ultraponics?

On paper it is the most efficient technology (with aeroponics) to grow plants. Indeed, the roots receive the minerals through a mist composed of water droplets between 10 microns and 20 microns, thus simplifying the absorption of nutrients by the plant. Ceramic discs that are vibrated at their resonance frequency create this mist. The discs, contrary to aeroponics, are very quiet, allowing the use of this system in an apartment. Real aeroponic systems with high pressure also consume a lot of energy.

Difference between aeroponic and ultraponic system in this log.

You will say that there are several discs with different frequencies! You are right, so which one did we choose?

Different technologies of disks:

We can differentiate the various disks according to their resonance frequencies.

We have on one side the 110 kHz disks and on the other the 1.7 MHz disks.

The temperature of the water is very important for growing plants so we have discarded the 1.7 MHz disks, which heat up the water after prolonged use.

Explanation in this log.

Now that we have chosen the right disk, we can focus our attention on the tower!

The ultraponic tower:

The tower consists in a main reservoir (a plastic box) at the bottom that contains most of the water and recovers it after the watering cycles. The 100mm PVC pipe acts as a root chamber, which can accommodate 12 plants. At the top of this pipe there is a small tank that contains two piezoelectric disks that create the mist. The electronics are at the top of the tower on the small tank,...

Read more »

x-zip-compressed - 1.39 MB - 07/04/2023 at 08:30


x-zip-compressed - 63.85 kB - 07/04/2023 at 08:36


  • What's the difference between aeroponics and ultraponics?

    J Gleyzes10/09/2023 at 08:29 0 comments

    I've had some feedback from people who don't understand the difference between aeroponics and ultraponics. I'll try to clarify my choice of ultraponics.

    These two methods are derivatives of hydroponics. They involve suspending plant roots in an environment where a nutrient-rich mist is periodically delivered directly to the root zone. This design ensures that plants receive a highly oxygenated nutrient solution while maintaining optimal humidity levels. The absence of a growth medium reduces the risk of disease transmission and minimizes substrate costs. Compared with traditional cultivation, both systems reduce water consumption, and avoid soil contamination (for crops using pesticides and fertilizers).

    To obtain a nutrient mist, there is either aeroponics, which uses a high-pressure pump coupled with nozzles to create the mist. This system has already proved its effectiveness, but it is often expensive and uses a lot of electricity.

    Ultraponics, on the other hand, uses piezoelectric discs to create the fog. The ultrasonic spraying process consumes relatively little electricity, making it an attractive option for sustainable agriculture. And the disks are very affordable, reducing the cost of the system. But there are far fewer articles on this method. And a lot of questions like: Is the particle size sufficient for the root system?

    That's why I'm working on an ultraponic system inspired by medical inhalation respirators that use mesh discs with a frequency between 100kHz and 130kHz.

    Microchip - Low-velocity aerosol
    Microchip - Low-velocity aerosol

  • Source code for the KMP app

    J Gleyzes10/04/2023 at 03:36 0 comments

    Open source code:

    You can find the source code here :

    - GitHub link:
    - Works with the new ESP32 code:

    Technical choice
    The app is coded with Kotlin Multiplatform (KMP).  It's a library and set of tools that allow developers to create apps for Android and iOS, all using the same Kotlin code. I'd long wanted to try my hand at creating a cross-platform application using Compose and KMP.

    The cross-platform Kotlin app is fully open source and available on GitHub. You can explore the source code, contribute to the project, and even use it as a basis for your own applications.

    The application is under development at the moment, and includes disc settings, pH settings and thingspeak settings. Thermometer and EC probe settings are coming.

    I wasn't able to test the code on IOS because you need a MAC to do so.

    App screenshots:

    Link to learn about KMP:

  • Code UltraTower V2

    J Gleyzes07/04/2023 at 09:23 0 comments

    You can find the new code in the github associated with this project or by following this link.

    The major change compared to the first code is the search for the best frequency to make the discs vibrate.

    I use 16 mm discs with a resonance frequency of 108 kHz +/- 3 kHz.

    The disc may also change frequency slightly as it ages. That's why, at Esp32 start-up, the code now analyzes the current consumption of each frequency in the 108kHz +/-3 kHz interval.

    The code is as follows when the esp32 has found the consumption peak, it will use this frequency until it restarts (forced or automatic every 24 hours) 

    void searchForBestFrequency (int mistPin) {
      int32_t buf[ADC_BUFFER_SIZE];
      int minFreq = frequencyMisterDefault - 3000;
      int maxFreq = frequencyMisterDefault + 3000;
      int freqMaxADC = 0;
      int minADC = 0;
      int maxADC = 0;
      int32_t sample = 0;
     // analogSetPinAttenuation(ADC_PIN, ADC_0db);
      for (int i = minFreq; i < maxFreq ; i += 250)
        ledcAttachPin(mistPin, LED_CHANNEL_MIST_TEST);
        Serial.print("Freq : ");
        for (int j = 0; j < ADC_BUFFER_SIZE; j++)
          buf[j] = analogRead(ADC_PIN);
        sample = getAverage(buf , ADC_BUFFER_SIZE);
        Serial.print("ADC : ");
        if (i == minFreq)
          minADC = sample;
          maxADC = sample;
          freqMaxADC = minFreq;
        } else
          if (sample + OFFSET_ADC < minADC) {
            minADC = sample;
          if (sample - OFFSET_ADC > maxADC ) {
            maxADC = sample;
            freqMaxADC = i;
      Serial.print("MAX Freq = ");
      Serial.print("MIN ADC = ");
      Serial.print("MAX ADC = ");
      if (maxADC <= 80 && maxADC - minADC <= 70) {
        if (maxADC <= 80) {
          Serial.println("ERROR INIT MIST : DISK NOT DETECTED");
        } else {
          Serial.println("INIT MIST : PEAK DETECTED");
        if (mistPin == MIST1_PIN) {
          statutMist1 = MIST_ERROR;
        } else {
          statutMist2 = MIST_ERROR;
      } else {
        Serial.println("INIT MIST : PEAK DETECTED");
        if (mistPin == MIST1_PIN) {
          freqMist1 = freqMaxADC;
          statutMist1 = MIST_OK;
          ledcSetup(LED_CHANNEL_MIST_1, freqMist1 , LED_CHANNEL_RESOLUTION);
        } else {
          freqMist2 = freqMaxADC;
          statutMist2 = MIST_OK;
          ledcSetup(LED_CHANNEL_MIST_2, freqMist2 , LED_CHANNEL_RESOLUTION);

  • PCB V2

    J Gleyzes07/04/2023 at 07:30 0 comments

    Like the previous PCB, you can choose the modules you want. This board has been designed to be modular to suit your needs.

    Update :

    - New alternating current circuit for disks and current control circuit (log)

    - Power supply voltage changeover from 18V to 12V

    - The 5V problem seen in this log has been corrected by adding a second CN3903 3A.

    - Change of layout to avoid mixing voltages

    - Component optimization

    We will look at each module one by one:

    Main module :

    This module is mandatory. It is the brain of the tower with the ESP32 and it is the one that allows the power supply of the board, the generation of the fog and the filling of the small tank thanks to the pump.

    PCB V211.6€
    Lolin 32 Lite12.85€Aliexpress
    CN3903 5V 3A 
    DC-DC Step down
    Capacitor 200V 100nF  1206 30.02€
    Capacitor 200V 4.7nF  1206 20.02€
    DC Charger connector 10.2€
    12V 3A Charger  15.23€
    330uH coil40.32€
    100 ohm resistor20.025€
    10K ohm resistor30.025€
    FDD7N25LZTM   20.3€Onsemi
    Mini JST 2.0 PH  30.088€
    Usb Pump connector 10.3€
    5V Pump110€Aliexpress
    108kHz Disk22€Aliexpress
    1N4001 Diode10.014€
    2 Kohm resistor20.025€
    470 Kohm resistor10.025€
    2 ohm resistor10.025€

    EC module:

    This module allows you to know the mineral concentration of the solution. Optional module.

    330 ohm resistor20.025€
    22nF capacitor10.013€
    Mini JST 2.0 PH  10.088€
    EC probe11€

    pH module:

    This module allows the acidity of the solution to be known, given that a pH between 5.5 and 6.5 is desired. This module is optional.

    BNC connector10.73€Aliexpress
    pH probe111€
    200k ohm resistor20.025€
    10k ohm resistor20.025€
    22K ohm resistor10.025€
    82k ohm resistor10.025€
    4.7k ohm resistor10.025€
    1uF capacitor20.013€
    10uF capacitor20.013€

    Temperature module:

    It provides information on the temperature of the ambient air, the root chamber and the water in the main tank. It also compensates for pH and EC sensor values that are correlated to the water temperature. This module is optional. You can also use a single sensor depending on your needs.

    10k ohm resistor10.025€
    4.7k ohm resistor10.025€


    The electronics of the tower cost 49,5€ with all the modules but it works with only the main module which costs 28,1€. You can reduce the price by recycling an old 12V 3A charger.

    You can find the gerbers in the project files. (PCB_V2)


  • Quick Update 23/01/23

    J Gleyzes07/04/2023 at 05:31 0 comments

    The DC-DC Buck Step Down Converter problem

    I use this module (CN3903 3A) to convert 12V to 5V to power two components: the esp32 and the 5V mini pump.

    However, it is not capable of feeding both at the same time. After several tests, activating the pump causes the esp32 to crash.

    But separately everything works.

    Several solutions are possible: 

    • Put two CN3903 one for the pump and one for the esp32 
    • Take a 12V pump, allowing to power directly to the charger (but it is not a USB connector for the pump anymore)
    • Use a 5V charger for the PCB and then use a boost converter to power the disks at 12V

    For the moment I use solution 1 which allows me to test easily.

    Disc nut optimisation

    The old STL design, was too closed on the disk creating a water droplet retention preventing the creation of fog afterwards. The new design seems to solve the problem.

    New PCB

    I'm still testing the latest version of the PCB, the fog creation is good now I'm waiting to see if the disks don't get damaged over time.

  • Quick Update 21/11/22

    J Gleyzes07/04/2023 at 05:30 0 comments

    I have been testing for several weeks a new circuit to create a better AC current with a current sensor to adapt the frequency.


    By adding coil L7 and capacitor C13, the generation of alternating current is balanced in the negative and positive directions.

    Old circuit:

    New circuit:

    I also added a shunt resistor to measure the current. By changing the frequency we can detect the peak of fog creation which corresponds to the current peak.

    I have ordered the new PCB with the modifications. I will test it before publishing it.

  • Quick Update 03/11/22

    J Gleyzes07/04/2023 at 05:29 0 comments

    I changed the ESP32 code, the new code is in the project github.

    The changes:

    • The pH sensor reading switches from pin 13 to 35 because pin 13 is unusable in ADC when bluetooth is enabled
    • The code for activating the pump has also been changed
    • Other minor bugs fixed

    Water level sensors get damaged very quickly even when using the capacitive function of the esp32. I think I will use stainless steel wire to limit corrosion.

    The root system of plants is quite impressive. The lettuce on the top left has already been cut three times (leaving some leaves on). It has grown back to its pre-cut size in a week.

  • Scalability

    J Gleyzes07/04/2023 at 05:28 0 comments

    The current design is great for a low cost tower and quick to build. But the discs can be used to water more plants. So a tower design with stackable tiers would allow to grow more plants.

    Here is the evolution of an individual tower but for building roofs we can still optimise

    Farm on a building

    The concept is a main reservoir that manages water quality (ph, nutrients, temperature). It is located high above the tower and allows the smaller tanks to be filled by gravity.

    Then there is an indeterminate number of ultratowers depending on the space available on a roof or other.

    The PCB of the towers only needs to manage the activation of the disks, the water level of their small tank and a valve to fill it and stop the filling.

    According to my calculation the cost for a PCB could be around 8~10€ for orders of 100 pieces. 

    There would be a single pump that brings the water from the bottom of the towers up into the large reservoir to close the loop.

    This farm concept would optimise material costs, running costs and electricity consumption.

  • Android Application

    J Gleyzes07/04/2023 at 05:27 0 comments

    The android application is online. You can download it on the google play store :

    This application allows you to change all the parameters of the tower without having to modify the arduino code. It also allows you to configure a data transfer to ThingSpeak. And most importantly, you can calibrate your sensors easily.

    I am not a professional developer, I only know how to develop applications in Kotlin for Android and unfortunately I could not make the application for IOS.

    For non android users I would make an arduino code where you can easily modify the variables.

  • ESP 32 Code upload

    J Gleyzes07/04/2023 at 05:27 0 comments

    I have updated the code on github for the new PCB. 

    In this new version there is :

    • the pH sensor 
    • the EC sensor
    • the temperature sensors
    • the data sending to ThingSpeak

    The entire bluetooth communication routine between an android smartphone and the esp32 is also complete.

    This application, which should arrive this week, will allow you to modify the parameters of the tower (such as the time of the cycles, activate or deactivate the sensors, ...)

    But most importantly, the EC and pH sensors can be easily calibrated through the application.

View all 26 project logs

  • 1
    Step 1: 3D printing

    To build a tower you will need to print the 3D parts shown on the left of the image.

    The "Sensors float" part is optional, print it if you want to use the pH and EC sensors.

    You will need 12 times the part: "Basket". 

    You can download the files here.

  • 2
    Step 2: PVC Pipe

    Materials needed:

    • PVC pipe ø100 mm, 1 m
    • PVC pipe ø40 mm
    • PVC glue


    • Hot air gun
    • Saw


    Make 3 notches of 4cm on each floor. Each notch is 6.5cm spaced. And each floor is 16cm spaced.

    To make the next steps easier you can make the notches 1 or 2 mm longer.


    Here is a video on how to do it:

    Use the 40mm pipe to thermoform the large pipe.

    Bevel it for ease of use:

    Finishing stage:

    Glue 1 cm pieces of the small PVC tube into the holes.

    Now the 3D printed baskets will fit perfectly in.

    You can paint it white to prevent the PVC pipe from heating up too much on sunny days.

  • 3
    Step 3: Assembling the top tank

    Materials needed:

    • PCB
    • 3D part: Cover
    • 3D part: Water level
    • 3D part: Top Tank
    • 3D part: Disk nut *2
    • 108 kHz piezo electric disk *2
    • Small wires

    You must first solder your PCB, put the esp32 on pins to be able to remove it and access the screw below. This PCB is modular, solder only the modules you want (see this log).

    Assemble the cover and PCB with 2 screws.

    For the water level sensor, 2 wires must be glued to the notches. Then simply screw this part into the cover. Then connect the connector to the PCB.

    Finally, the tank must be assembled with the disks.

View all 3 instructions

Enjoy this project?



Alberto wrote 05/23/2024 at 10:30 point

Could you recommend some online service to get the PCB made?
Thanks a lot!

  Are you sure? yes | no

J Gleyzes wrote 06/05/2024 at 08:40 point

You can use JLCPCB, it's always quality work

  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