An ultra-low cost, battery optimized dew point calculator and radiation frost predictor built for extreme environmental field endurance. Built entirely on an open-source framework by RikMakersHub.
Hardware routing map for interconnecting the low-power sensing loop, battery regulation, and alerting hardware.
Value-engineered hardware matrix targeting an active field deployment cost under ₹500 ($6.00 USD).
| Component Name | Specification / Type | Cost (₹) | Primary Operational Function |
|---|---|---|---|
| Microcontroller | ESP8266 Core (ESP-12F bare module) | ₹140 | Core logic execution loop and layer-2 radio stack execution. |
| Sensing Array | AHT20 High-Accuracy Temperature/Humidity | ₹110 | Provides calibrated I2C inputs for localized atmospheric tracking. |
| Energy Storage | Reclaimed 18650 Battery Cell + TP4056 Board | ₹90 | Autonomous off-grid power management subsystem loop. |
| System Shielding | IP65 Weatherproof Electrical PVC Junction Box | ₹40 | Protects core tracking nodes from monsoonal conditions. |
| Total Build Cost | Value-Engineered Prototype Framework | ₹380 | ₹380 / $4.55 USD (Success) |
Watchdog-gated production script optimized via RikEcoCode-Pro computational analytics to remove blocking delay() lines.
#include <ESP8266WiFi.h>
#include <espnow.h>
#include <Wire.h>
#include <AHTxx.h>
uint8_t gatewayMac[] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
struct __attribute__((packed)) SensorPayload {
float temperature;
float humidity;
float dewPoint;
bool frostRisk;
};
SensorPayload telemetry;
AHTxx aht20(AHTXX_ADDRESS_X38, AHT2x_SENSOR);
void onDataSent(uint8_t* mac_addr, uint8_t sendStatus) {
WiFi.mode(WIFI_OFF);
ESP.deepSleep(900e6);
}
void setup() {
WiFi.mode(WIFI_STA);
WiFi.disconnect();
Wire.begin(4, 5);
if (!aht20.begin()) { ESP.deepSleep(300e6); }
telemetry.temperature = aht20.readTemperature();
telemetry.humidity = aht20.readHumidity();
float a = 17.625; float b = 243.04;
float alpha = ((a * telemetry.temperature) / (b + telemetry.temperature)) + log(telemetry.humidity / 100.0);
telemetry.dewPoint = (b * alpha) / (a - alpha);
telemetry.frostRisk = (telemetry.dewPoint <= 2.0);
if (esp_now_init() != 0) { ESP.deepSleep(300e6); }
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_send_cb(onDataSent);
esp_now_add_peer(gatewayMac, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
esp_now_send(gatewayMac, (uint8_t *) &telemetry, sizeof(telemetry));
}
void loop() {}