Starting the electronics part..
This part of the build requires sending temperature data to the internet. This requires 3 things:
- Thermocouples for measuring temperature.
- A microcontroller for processing the thermocouples values.
- A hardware connection to the internet.
The thermocouples simply have a change in electrical resistance dependant on temperature. This can be measured using an analog input on a microcontroller. To get sensor data into the micro I used a library called thermistor.h which gave me the number crunched readings in degrees C. the values I’m getting are currently accurate to around 3 degrees C, so I may need to do some work on the maths here.
I have several microcontrollers sitting in boxes waiting for a suitable project. Without making this a diatribe about buggy software libraries for TI micro controllers, I went with the trusty Atmel 328p aka the Arduino.
The Ethernet module I’m using to connect is the ENC28J60 chip, available very affordably from ebay.
Initially I was using an Arduino pro mini set to 5volts. While the board I bought claimed to be able to be set to 3.3 volts, this was outside the spec for the 16Mhz crystal it uses. Eventually I moved to a 3.3v 8Mhz Arduino which seems the most trouble free, using a 5v Arduino with a level shifter for the 3.3v ENC28J60 was completely unreliable.
So this bug fix by chuyrg resets the ENC28J60 by pulling a normally high reset pin low for a brief period. This hard reset of the ENC28J60 solves for the temperamental connection issues the ethercard Ethernet library seems to give. Interestingly this bugfix was already in the code :/ just needed to uncomment it… placing this reset code in the right place meant I didn’t need to implement a timer interrupt reset on the whole code…
Using the example code for ThingSpeak coupled with some thermocouple code, I used is able to throw up 2 data fields to ThingSpeak with a frequency of around 60 seconds.
Since ThingSpeak doesn’t send emails, I used this method to trigger a pushingbox.com ‘scenario’ to send email. I also added ThingSpeak ‘react’ events for a ‘No Data Check’ at 1 hour and 12 hours, in case I stop receiving data to ThingSpeak.
So now I have a seemingly reliable 5v low power temperature sensor, with hard wired email alerts, all for around $10 worth of parts. I’m happy with this not only because of the low electrical power consumption, but also because it uses low processing power – no RPi needed.
Needing to reset the Ethernet module in code is a somewhat duct-tape style solution and if it works for extended periods of time that will be fine. After all, the internet in many ways is often referred to as a crazy Rube Goldberg machine which somehow usually works. I’m guessing the ENC28J60 is needing a reset possibly due to a buffer issue, which may have been fixed with a different Ethernet library, although I don’t feel like migrating the ThingSpeak code I’ve got over to that library.. it works, it appears solid, now I’ll field test it.