Carrotech
Since long, technology has been integral to agriculture and farm management, but with advancements in IoT and tool conception, smart farming now takes a whole new dimension.
In this regard, we decided to create Carrotech, a device that leverages IoT techniques via Low Power connectivity and a sensor network in order to create a reliable smart farming device, capable of sending precise data on humidity, temperature, CO₂ level, luminosity, and light spectrum.
The retrieved and processed data from the device sensors is displayed on a web-accessible interface for users and farmers to monitor plant and greenhouse conditions in real time with the highest possible accuracy and manage their crops accordingly.
Carrotech is the culmination of an engineering school project in IoT and embedded systems and shall serve the greenhouse of the Sorbonne Université research campus in Saint-Cyr, Paris.
Index
I. Name, sensor, and component overview
II. Device design and modeling
III. Sensor communication types and setup, LoraWAN connection setup
IV. Low consumption adjustments and considerations
V. Web interface: server, database, and UI
VI. Tests and theoretical vs experimental outcomes comparison
VII. Final results and conclusion
I.Name, sensor and component overview
Since our project centers around AGRAL students, professors, and other greenhouse technicians for plant study and maintenance, it is only natural we went to them first to jot down all the data and features we must integrate into our device for their perusal and analysis. After a very informative meeting with the AGRAL specialty manager, we’d [now] compiled a list of all the necessary sensors to gather relevant and useful greenhouse data, which we then adapted to our component findings:
One ambient overground temperature, CO2, and humidity sensor to monitor respectively heat circulation in the greenhouse, plant respiration cycles and greenhouse aeration, and general air humidity:
One RGB sensor for light type and temperature detection:
One light color and intensity sensor for tracking the strength at which sun rays circulate within the greenhouse and to validate RGB data:
Two underground humidity sensors, one at a shallow level (5cm) for superficial detection of dirt dryness and irrigation needs, and another buried deep underground (40cm) for more profound monitoring around the roots:
And two underground temperature sensors as well (5cm and 40cm underground), for multiple readings of temperature all throughout the ground:
As such, from the get-go, we knew our device needed to be partially buried deep underground while still maintaining its head and a few components afloat, somewhat akin to a carrot, with its lower lengthy root and its upper leafy top, thus explaining our choice for such a peculiar design and name : CarroTech.
Since sensor data needs to be continuously relayed onto our web interface in an energetically parsimonious way, the most adapted communication network is LoRa, a Long Range, low power, wide area communication protocol that is a robust staple in the IoT industry, and for which a gateway is already installed in the Saint-Cyr greenhouse. We thus needed to avail ourselves with the LoRa-E5 grove module to connect our device to the network :
A paramount requirement in our device was its energetically autonomous nature for ensured off-grid functioning longevity and independence from line voltage. In this regard, a rechargeable battery is indispensable for powering our system, and along with that, a small 20x20cm² solar panel to allow for continuous charging during daytime:
Another often overlooked but essential part of our device is the clarity at which it boots up in a certain mode. We therefore needed a simple yet effective element that signals the user when CarroTech is powered and running : a piezoelectric buzzer that vibrates for a few seconds upon system boot-up:
All the aforementioned sensors and parts finally come together in one compound ensemble piloted by code hosted on a Raspberry Pi Pico 2W, the ideal choice for our project considering its exceptionally low-power functioning capabilities, its wide range of GPIO options and communication protocols (SPI, I2C, ADC, etc.) (with WiFi support as well for OTA log download and micro-code update, although we have not implemented that yet), its powerful dual-core ARM Cortex-M0+ processor for parallel handling of real-time and logic operations, and most of all, its small compact size (21×51mm), a complete and optimal space-efficient pick for our tool:
II.Device design and modeling
Just like a carrot, our device is composed of two main parts, a hollow green spherical bulb and a long orange cylindrical stem (pic). The stem encapsulates the deep inground temperature and humidity sensors, stabilizing them across its length and maintaining them at a fixed depth, while the sphere carries essentially the brain and heart of the device, that is, the Raspberry Pi Pico board running the code for system boot, sensor activation and data transmission, the LiPo battery powering the system, our custom-made PCB with all the necessary resistors and groves to connect the device components together, the buzzer, and the iioutground sensors, namely the SCD40, TCS34725 and TSL2591.
Below the 3D sketches and models for the supporting frame and structure of the device, conceived on Onshape, a free, fully cloud-based and collaborative 3D modeling tool with a smooth and intuitive onboarding experience :
III.Sensor communication types and setup, LoraWAN connection setup
Each sensor has its own supported communication protocol through which it can either be written into for configuration, or write its sensed and collected data into the microcontroller.
Below are listed the different interfaces and protocols used to ensure smooth communication between the board and the parts, all connected via the PCB :
- SCD40 (CO₂, temp, humidity): I²C
- SEN0308 (soil humidity): Analog (ADC)
- DS18B20 (soil temperature): 1-Wire
- TCS34725 (RGB light sensor): I²C
- TSL2591 (light intensity & color): I²C
- Battery level monitoring: Pico’s built-in ADC input
As mentioned earlier, the Pico is also connected to a LoRa module allowing it to establish communication with the LoRa gateway by joining the network. In this effect, prior registration onto The Things Network LoRaWAN server is mandatory in order to receive on its dashboard all the collected data. Here’s how it’s done :
1. Create a TTN Account
Go to https://thethingsnetwork.org and sign up.
2. Create an Application
In the TTN Console, navigate to Applications > + Add application
Fill in the required information, that is, application ID (must be unique), application name/description, handler region (eu1 for Europe in our case)
Click Create application
3. Register Your End Device
In your application dashboard, go to End devices > + Add end device
Choose “Manually” (unless you’re using a known LoRa module that can be auto-filled)
Enter your End Device ID (unique name), Join EUI and DevEUI (from your LoRa module), AppKey (auto-generated or can be set manually)
Choose your LoRaWAN version and frequency plan according to your region
Click Register end device
4. Configure Your Device Code
Add the DevEUI, JoinEUI (AppEUI), and AppKey into your firmware
Configure LoRa parameters : Frequency (EU868, etc.), OTAA join mode, and finally uplink port and data format (JSON, binary, etc.)
5. Connect to a Gateway
Attempt an OTAA join to be accepted by the network and communicate with the gateway via AT commands to check for responsiveness
=> Your device is now registered, you can now transmit and monitor data as you need by having your device send uplink messages into the Cloud and visualize them in real time in your TTN Console > Live data tab (to see incoming payloads)
IV.Low consumption adjustments and considerations
One of the core challenges in deploying autonomous IoT devices is power efficiency, especially in environments where solar energy is variable and grid access is nonexistent. And since our device is meant to continuously self-power and run autonomously with no human intervention to maintain it, it was crucial we implement multiple multi-tiered strategies to cut down on as many power-greedy processes as possible to reduce its global energy expenditure and thus extend its active lifespan.
One of the main drivers for our microcontroller selection, the Raspberry Pi Pico, was its sleep and deep sleep modes, an important power optimization feature that allowed us to reduce the global consumption (by how much?) of the device while dormant (idle, no measurements and data readings in process).
A dynamic boot up and periodic measurement system was also put in place to vary the frequency of sensor activation depending on battery capacity, i.e. the less the battery, the fewer the measurements and readings, in order to grant it more downtime during which to recharge itself.
So immediately upon boot, the pico enters power-saving mode:
- GPIOs, USB, Wi-Fi antenna, and SRAMs are disabled
- Clock speed is reduced (from how much to how much ?) to lower consumption
We then read from flash to check if it's the first boot:
- If yes → run an initialization sequence signaled to the user by a 5-second active buzzer
- If no → activate sensors, collect data, and begin LoRa transmission
The data sending interval adapts based on battery level, allowing us to prolong battery life intelligently :
- >50% → every 20 minutes
- 25–50% → every 30 minutes
- <25% → every 60 minutes
V.Web interface: server, database, and UI
Web Interface: Server, Database & UI
To allow real-time remote greenhouse monitoring and sensor data visualization as is the main intended purpose of the project, a web interface is a must. We built a responsive web interface using a modern and efficient frontend and backend stack, chiefly built on the Nuxt framework and the many features and technologies it offers, all broken down as follows :
Frontend → Nuxt, Vue, Tailwind
Nuxt (based on Vue) was our framework of choice for its server-side rendering, modular structure, and built-in data-fetching capabilities,
A few features that we exploited :
- Hydration to sync the server-rendered HTML with client-side Vue logic after load, improving perceived performance.
- Template cards for each data section and type (temperature, humidity, etc.) to create modular, reusable components.
- <USkeleton> components (from UnoCSS or UI frameworks) to show elegant loading placeholders while data is being fetched.
Vue.js powers the reactive components, making the UI smooth, dynamic, and state-aware,
Tailwind CSS provides a utility-first styling system, allowing us to build clean, user-friendly, intuitive and responsive layouts with minimal custom CSS.
Data Handling → Nuxt’s built-in useLazyAsyncData() and other particular functions to fetch data only when needed, avoiding unnecessary API calls and improving efficiency,
→ Sensor data is fetched from the backend through REST API endpoints, then displayed in real time with periodic refresh.
Backend and Database → MySQL was used as the main database to store timestamped sensor data and battery levels, built according to the following diagramme:
The backend server handles data reception from the LoRaWAN backend, its storage into the MySQL database, and finally the API responses for the frontend.
VI.Tests and theoretical vs experimental outcomes comparison
After assembling our prototype and configuring the sensor network and LoRaWAN uplink, we initiated a testing phase to compare expected (theoretical) outcomes to real-world (experimental) results. This was crucial to validate the reliability, accuracy, and robustness of our setup in actual greenhouse-like conditions.
Sensor Accuracy TestsWe began by validating each sensor’s readings against calibrated laboratory instruments or reliable commercial sensors, under controlled indoor conditions. The comparative outcomes are summarized below:
SCD40 (CO₂, Temp, Humidity):
- Temperature deviation: ±0.3 °C vs. reference
- Humidity deviation: ±2.1% RH
- CO₂ accuracy: within ±50 ppm of other handheld sensors in the greenhouse
TSL2591 & TCS34725 (Light Sensors):
- Light intensity detection aligned well in full sunlight but dropped in accuracy in low light (±12%)
- RGB breakdown consistent with expectations, though saturation occurred under intense artificial light
SEN0308 (Soil Humidity):
- Showed strong correlation with other soil sensors
- Slight non-linearity observed at extreme dryness levels (<10% moisture)
DS18B20 (Soil Temperature):
- Highly reliable, within ±0.1 °C when compared to thermocouple readings at both 5cm and 40cm depths
These results confirmed that our sensors, once properly calibrated and programmed, provided readings close to their datasheet specifications, validating their use in an agronomic context.
Power Consumption and AutonomyOne of our key theoretical objectives was to maintain a fully autonomous power cycle via solar charging. Based on our calculations:
Theoretical active cycle consumption with no particular reductions: ~**572, 1 µA as a whole, summing theoretical estimated consumption of individual parts (that is, 400µA for SCD40 in single shot mode, 10µA for RGB sensor, 10µA for Lux sensor, 1µA per inground temperature sensor, 2, 1µA for LoRa module, and finally 150µA for the Pi Pico)
Sleep mode consumption (optimized): ~**160 µA
In testing, the system ran autonomously for over 2 weeks without external intervention under mixed sun/cloud conditions, confirming the adequacy of our power-saving strategies and the solar charging setup.
LoRaWAN Transmission StabilityUsing TTN’s console and live data tab, we verified:
- OTAA join success rate: close to 100% after initial configuration, occasional fails are due to problems in the LoRa gateway
- Uplink reliability: >98% success rate, occasional loss under metal interference (greenhouse walls)
- Payload formatting and decoding were consistently correct, confirming our encoding logic
In short, the device demonstrated robust and repeatable behavior during tests, largely matching theoretical expectations, with only minor discrepancies due to environmental noise, analog tolerance variations, and dynamic greenhouse conditions.
VII.Final results and conclusion
With the successful integration of all hardware components, optimized firmware handling, and a fully functional web interface, CarroTech proved itself as a viable and reliable smart farming tool designed for real-world deployment.
Achievements- Modular and ergonomic design: CarroTech's two-part structure (stem and bulb) allowed for deep underground sensor embedding while keeping the central electronics safe and accessible.
- Autonomous power management: Thanks to intelligent sensor scheduling and low-power microcontroller modes, combined with solar recharging, our device achieved true energy autonomy.
- Multi-sensor environmental monitoring: The system effectively captures a wide array of environmental metrics: air and soil temperatures, humidity levels, CO₂ concentration, light intensity and spectrum, all crucial for precision agriculture.
- LoRaWAN uplink and real-time web dashboard: Our data transmission via LoRa and its live display on a sleek, responsive web interface ensure actionable information for greenhouse operators.
While CarroTech fulfills its main mission, several improvements could enhance its robustness and versatility:
- Implement over-the-air (OTA) updates for firmware patches without physical access
- Add local data logging for redundancy in case of LoRa failure
- Deploy machine learning models to analyze trends and propose irrigation or ventilation actions
- Create a mobile version of the web interface with notifications for critical thresholds
By blending embedded systems, IoT networking, and sustainable design, CarroTech stands as a tangible, low-cost, and energy-autonomous contribution to modern agriculture. Its deployment in the Saint-Cyr greenhouse marks a promising step toward greener, smarter, and more efficient plant monitoring systems.
Inessa Kechek, Valentin Le Lièvre, Joakim Lagarde, Jana Dagher
Comments