1. Teensy 3.1
2. Solar Sensing device, SolarMEMS,
ISSD60
3. GPS, Adafruit Ultimate GPS
Breakout, MTK333
4. LCD, 20x4
5. SD Card
6. Potentiometer
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.