Guest
#6622533
Hello I am completely new to electronics and microcontrollers so please bear with me while I try to explain. My current working project controls my plant grow light depending on the brightness (eg. sun is up/very cloudy/blinds are down). It does so by using an AZDelivery Nano V3.0 with Atmega328 CH340 (Arduino compatible) to poll a light sensor on an analog pin. It then compares that value to a calibrated value to decide whether the plant light should be on or off. This then gets sent by means of serial communication with a ESP-01s over WiFi to my RaspberryPi** which switches a TP-Link HS100 smart switch on or off. Although convoluted, it works fairly well but uses a lot of power as I never put anything in sleep mode and it's constantly connected to WiFi. Now I would like to implement some means of saving power so that I can maybe even run this thing on a 9V battery for, I don't know, weeks at a time? Additionally I would like to compare the value from the light sensor not against a single value because a cloud moving in for a few seconds would unnecessarily switch the light quickly. I thought that maybe I instead use an upper and lower bound and only switch when the value exceeds either, and do nothing in the middle range. I could easily do this in code however with the power saving I thought that maybe there is a nice way to do this with some additional parts. Here are some of the points I'm having trouble with as I have no experience in electronics: 1. I've read that putting the ATmega328 in sleep disables the ADC, enabling the ADC in sleep so that it can be used as interrupt consumes a lot of power. Is there a way to make the lower/upper bound check in discrete* parts (while not using a lot of power?) so that I just use one or two digital pins which can wake up the ATmega328 for processing the brightness change. 2. I've also read that the ESP-01s does not have the means to wake up from deep sleep without soldering to the extremely tiny chip or by doing a reset (RST to GND). I would maybe just trigger a reset by pulling the RST pin of the ESP-01s to LOW through a 330 Ohm resistor and through an ATmega328 digital pin. Does that make sense? 3. Maybe there is even a way to accomplish the whole thing without even having to use the ATmega328***. The ESP-01s has a fairly capable microcontroller that can be programmed and two GPIO pins, so if I was able to do the brightness comparison in discrete* parts and then use one or two GPIO pins of the ESP-01s I could technically read the light level (not the exact value, just whether its below or above the lower and upper bounds) directly on the ESP-01s and then trigger the RaspberryPi** from there. Although that leaves the problem with the ESP-01s not being able to wake up from deep sleep without a reset, or maybe this can be implemented in discrete* logic too? I hope that I have explained my issue in a comprehensible manner and that maybe you guys could give me some pointers what could be possible or even a completely different and more power saving approach. My main concern is the ability to save power to be able to run the whole thing on battery power, although the lower-upper-bound-thing would be a necessary addition in the future anyways. For the lulz I have added a picture of the thing that I've made so you can point and laugh at some shitty beginners project ;) Note that right now I am using USB to supply power as the 9V battery has already drained. Thank you for your time, Gachl \* Excuse my probably misuse of the term "discrete logic" or "discrete parts" - I don't just mean and/or gates and the likes but rather comparators and other parts outside of the two microcontrollers that I am currently using. \*\* I'll probably be able to implement talking to the HS100 directly from a microcontroller so I can even skip having to talk to the RPi first but that should not be of concern right now. The Pi right now is necessary as it contains a real time clock which checks whether the time is between 8am and 8pm because the plant light should not be on outside of these hours. \*\*\* I suppose an even better approach would be to use a variant of the ESP8266 that has more pins available but I already have three ESP-01s so I'd like to stick with them now.

