Click HERE for pics
1. Teensy 3.1
2. Solar Sensing device, SolarMEMS, ISSD60
3. GPS, Adafruit Ultimate GPS Breakout, MTK333
4. LCD, 20x4
5. SD Card
1. Teensys are great. They don’t have the USB data pins “broken out” so i had to make a little extension out of the main port so i could have a durable USB-B port on the outside of the box.
2. The Solar Sensor itself was trouble. It says it uses the Modbus standard. NOPE. First the differential A and B lines were swapped AND labeled + and -. The sensor data registers began at 1 instead of 40001 (at least i got an error response). The first bits of the response were always corrupted, but I knew is was static data about the model number so i modified the modbus arduino library to return the correct bytes. phew!
3. I used the TinyGPS library for easily decoding NEMA messages.
ARDUINO GPS WARING. NEMA messages are often more than 64 characters long. Most Arduinos and in my case, Teensys, have a Serial buffer only 64 chars long and need to be configured to be longer. On a Teensy, the Serial core files need to be modified.
Originally the box Is supposed to mounted on the hood of a car, possibly with a suction cup. The box is water resistant in case it rains.
Originally The box was to have internet connectivity and serve its data to a MySQL server. I worked with both WIFI and Ethernet modules but ran into issues with both.
I tried to use a stock ESP8266. After a week of work, I determined the AT commands were too buggy to be reliable. For example doing a AT? type read would change some seemingly unrelated setting. Other people confirmed to have these types of problems, good for a quick project but the ESP8266 needs better firmware, updates may be out by now and more custom firmware exist everyday.
I tried to use my Ethernet and had luck! it was reliable to any type of data stream interruption. however my particular Arduino Ethernet shield knockoff must of had its reset pin zapped! because neither high or low pulses reset the device, only touching the reset pin with my finger made it reset. :)
The protocol called Telnet is the standard for shuttling ascii over internet, since 1973.
The box is powered externally through the USB port. I find this is the most compatible method for any situation. A wall charger, PC USB port, Car charger or USB backup battery can all be used to power the device.
There is a TERRIBLE bug i cannot track down, it only happens when other people are looking at it! The LCD will become completely corrupted. it seems to happen more often in a car where there is a lot of vibration. The only way to fix it is to reset the box. In professional product design for anything that will be in a vibration environment, vibration tests are done using a machine like this.
4. The Fact about LCDs: When displaying things on standard character LCD, the screen needs to be cleared between every update to erase extra chars if a displayed number shrinks in number of chars. However clearing and redrawing a 20x4 screen can take long enough that it flashes annoyingly. The easiest remedy is to increase the data rate. A direct hook up instead of a I2C backpack can increase transfer rate and reduce the flicker. Somebody needs to write a library to manage the screen to avoid having to clear and redraw the whole thing, I can't be bothered to do so though, i'll just will use an OLED screen next time. ¯\_(ツ)_/¯
5. For a microSD adapter slot, you can solder directly to a generic microSD->SD adapter.
ARDUINO SD LIBRARY WARNING. A frustrating “bug” i ran into with the default Arduino library is that it only accepts TEN character filenames. An example is “data.txt” which is 8 characters! I recommend using a different library. I don’t think you need a file name extension as long as you open it with a text editor, example “datasheet” will make a file with no extension which is ok.
6. The Potentiometer changes screens. The code includes historesis to prevent jittering between screens.