For my first electronics project, I've been using an arduino uno along with a sim7000 development board and hologram sim card to create a thermostat that can be triggered via text message. My idea when first starting with this was to supplement the current thermostat at a remote cabin by having the arduino activate relays wired in parallel with the ones already controlling the system. Right now I just have the arduino lighting LEDs to indicate whether it's in the correct heating state based on a setpoint calculated from a potentiometer voltage divider, the current temperature calculated from a thermistor voltage divider, and some timing logic to prevent short cycling and being left on indefinitely. This is all working correctly. So the project can receive a text message, control a furnace, and return its state to the hologram website through TCP.
What I realize now:
I can make this a replacement for the current thermostat, rather than a supplement, with just a bit more functionality.
First, local control of the state. I was thinking of using a rotary or slide switch and a voltage divider to toggle between remote control, off, and heating. Not sure if this would be the best way to go about this though.
Next, better indication of the setpoint and current temperature. I was thinking of using a MAX7219 chip to drive a 3 digit seven segment display to display the temperature to one decimal point precision. I would also like to have this flash the word "set" and then the setpoint when put into a set mode either by the aforementioned switch selector or maybe a pushbutton.
Finally, some logic to prevent the cabin from coming too close to freezing regardless of what state the thermostat is in. This should be pretty straightforward in the software, although trusting this to happen even if everything else fails makes me a bit nervous. Maybe there's a hardware solution that would be better?
Questions I have before I go down this route:
- Is the arduino processor capable of all this?
The compiler tells me my current sketch uses 9174 bytes (28%) of program storage and global variables use 1225 bytes (59%) of dynamic memory, leaving 823 bytes for local variables. This includes a lot of statements for debugging and I'm sure there's lots of room for optimization as this is really my first attempt at anything like this.
- Will I have enough pins?
I'm pretty sure I will. I currently use 2 analog pins for reading the setpoint and temperature and would need one more for the selector switch I envision. I use 3 digital pins for the LEDs and 3 pins for interfacing with the sim7000 board. Two of these have to be pins 8 and 9 because I'm using altsoftserial right now, but eventually this could be moved to hardware serial. Either way I still have all of the SPI pins free and enough for a pushbutton if that's how I decide to go into the set mode.
- How can it all be powered?
I'm currently using an AC/DC wall wart converter that can output 2A at 12V. I haven't actually tested the current capability, but I see closer to 11.5V when I measure that. The voltage dividers have a total resistance in the 10-20k range and the 3 LED's are in series with 10k resistors, so I expect minimal power for these (I ~ 5x 5V/10kohm = 2.5mA => P ~ 12.5mW).
The development board I got off ebay doesn't have the greatest documentation with it and I can't find the link anymore (I think its the same as the one here: SIM7000A 4G Development Board), but I'm powering it through the Vin pin on the arduino. From the sim7000 datasheet (https://simcom.ee/documents/SIM7000E/SIM7000%20Hardware%20Design_V1.05.pdf), I expect a max current draw of 2A at 3.8V, or ~7.6W for the chip itself.
From the Max7219 datasheet (Would link datasheet here, but new users are limited) and being generous with the power dissipation calculation, I get ~540mW needed which at 5V should be ~108mA. Based on this I think that this and the voltage dividers can all be powered from the 5V pin on the arduino, correct?
I haven't yet thought much about how to drive the relays. I got a handful of FOTEK SSR-25 DA from a friend who no longer needed them. (Would link datasheet here, but new users are limited) I haven't been able to check the furnace and fan, each of which will need a relay, to see how much current they draw so I'm not even sure if these will work yet, but assuming they do, what would be a good way to trigger them? Can they be driven directly from an arduino pin? Can an LED also be driven from the same pin? Or will this exceed the 40mA pin maximum?
I'm pretty new to this world so any advice is greatly appreciated.
Thanks in advance!