Arduino base station and rover project

The Arduino hobby project saw me return to a robot project. The 3rd time, 20 years ago, it started by wire wrapping the processor board based around an Intel 8085, writing the monitor ROM in assembler and communicating via an async port at 9600 to my PC. The basic routines all worked, it could play random tunes at random times all was well-ish. It never progressed beyond the wire wrap board and was never mobile.

Time to play again. I settled on Arduino primarily because Jaycar is within walking distance and they stocked a lot of Arduino based products. First considered a 4 wheel chassis (and it was on sale) but went with the 3 wheel base after reading people having problems with different 4 wheel robots turning on carpet.

Media

Arduino game time remaining corrupt runting teasing an LDR Arduino SMS via web service current time runtime to the tenth of a second pretend to be a Cylon rover chassis current time status web page Arduino temperature Arduino module learning kit wire wrap project

Two projects

The basic idea was to build a little rover that could randomly wander around the apartment, play a tune, say hi, ask to be fed. I then decided to add more sensors and decided to split the project into two; a base station and a rover. Nasa on a tiny scale.

The base station can have an unneccesary number of displays and sensors and can be permantly online. The rover can have basic positional sensors and communciate with the base station via bluetooth.

I've been testing small modules and incorporating them into the main projects as they're working. Nothing hard-wired yet, everything is still breadboarded.

Base station

Testing new components on a 2nd breadboard and integrating as the subunit test works. Had lots of problems getting the 8 x 7 segment LED working in the main project. As a test it could update its runtime 10 times a second for over 24 hours. Integrated into main project displaying text once a second it'll become corrupted. Once it worked for 18 hours then went, other times just seconds.

  1. Arduino Mega 2560
  2. Ethernet Shield 2
  3. Arduino Compatible Real Time Clock Module
  4. Arduino Compatible Temperature and Humidity Sensor Module
  5. Arduino Compatible Photosensitive LDR Sensor Module
  6. Barometric Pressure Sensor Module & temperature
  1. An unnecessary number of I/O to play around
  2. Wired ethernet
  3. Expose status on webpage, that's done, works internally I'll have to get it publically visible
  4. Send sensor readings to IoT website
  5. Act as go between between rover and world

Rover

Basic chassis is bolted together.

  1. Arduino Uno or Arduino Mega 2560
  2. Starting with Wall Dodging Robot
  3. 2 Wheel Drive Motor Chassis Robotics Kit
  4. Arduino Compatible Stepper Motor Controller Module
  5. Arduino Compatible Dual Ultrasonic Sensor Module
  1. It'll need to monitor its battery and ask to be fed
  2. Extra points if it can feed itself
  3. It'll need to know it's plugged in so it won't start moving
  4. Bluetooth comms to base station

Status

  • 2022-07-07 - Removed Ethernet shield, 7-segment still didn't work. Rewired power - better, returned to original library and we're in business
  • 2022-06-22 - Had a good update to the home control system today, perhaps it's time to sort out the issue with the ethernet / LED conflict
  • 2019-02-28 - Had to drop things for now as after work hours was becoming the same as work hours - just coding and no human interaction
  • 2019-02-20 - Displayed hard-coded test alternating "Idle " and " Loop" for 8 days before the 8 x 7 segment display fails to display anything.
  • 2019-02-11 - Displayed hard-coded test for 20 hours, zero problems. Display current time it falls over within the hour. RTC? buffer? snprintf? time_t?
  • 2019-02-10 - Start stress test, 7 segment displaying hard-coded text updating once per second, 5 browsers requesting status page once a minute
  • 2019-02-10 - Found a bug in an RTC library, fn declared as returning a bool returns nothing, might contribute to display corruption.
  • 2019-02-10 - Found bug in my change to fonts causing a buffer overflow, I automatically typed '0x' instead of '0b', might contribute to display corruption
  • 2019-02-09 - War Games 'Game time remaining' algorithm coded earlier in the week displayed on a 128x128 display
  • 2019-02-01 - 8 x 7 segment display moved to main project, sometimes runs seconds, once ran 18 hours before display corrupts then ignores commands
  • 2019-01-31 - Sending commands via async to switch the 7 segment between different outputs, e.g. time, date, runtime, temperature, etc
  • 2019-01-26 - 8 x 7 segment display updating every tenth of a second to display the runtime, sending sensor reading to IoT web site, send SMS via API
  • 2019-01-20 - Ethernet Shield 2 installed, syncing RTC via NTP, return http status page to request on port 80, display date and time on 2x16 LCD
  • 2019-01-16 - Temperature displayed in 8x8 LED grid
  • 2019-01-09 - Picked up Mega 2560 learning kit

Subunit tests

  1. Unpack boxes and try to get an LED to blink, hey it's my first Arduino project. Huh, there's an LED onboard. That was easy.
  2. External LED, brightness fade in and out via hardcoded loop
  3. External LED, change brightness with potentimeter
  4. Ultrasonic proximity test
  5. Temperature and humidity, RTC, EEPROM
  6. Order Ethernet Shield 2 to work with Mega 2560
  7. Run through Ethernet tests, request a page, return a page
  8. Try to connect to https, no can't do that, thimk about things
  9. NTP, as RTC was out about 45 seconds a day
  10. Test calling a website API, yay, sent an SMS
  11. Try to post sensor readings to IOT sensor website, expand to temperature, humidity, air pressure, light level
  12. Display runtime to 1/10 second on 8 x 7 segment LED, works a treat
  13. Integrate 7 segment LED into main project it works for a while then output is corrupted
  14. Test 7 segment LED with different library, nicer library, works a treat, incorporate into main project it fails
  15. Spend too much time getting LED to work, strip project to nothing and slowly introduce components, sometimes it works other times not
  16. Pause
  17. Work out algorithm to display game time remaining from War Games. Switch between 'game time' and 'work time'.
  18. Add TFT display to emulate WOPR game time remaining display - it will be installed on the side of the base station in an out of the way place as it was meant to be.

Robot projects history

  1. 1977 Wooden chassis about the size of R2D2, a few lights and switches and tape recorder
  2. 1981 Based around How to 'Build Your Own Working Robot Pet' by Frank DeCosta.
  3. 1997 Wire-wrap processor Intel 8085 processor board with monitor ROM
  4. 2019 Arduino based boards and kits, I can spend most of my time in software where I belong