Click here for updates.
Hands on article about HamMessenger in IEEE Spectrum magazine here
Arduino blog post on HamMessenger here
Hackaday blog post on HamMessenger here
HamMessenger is a portable, battery powered device that runs on a microcontroller and interfaces with an inexpensive ham radio to send and receive text messages and provide position updates using the APRS protocol. Messages and position updates sent via HamMessenger can be viewed on sites such as aprs.fi. HamMessenger messages are NOT encrypted!
HamMessenger is intended to be used by licensed ham radio operators. For more information you can check out the ARRL website.
The goal of the HamMessenger project is to create a device that uses ham radio as a medium for sending and receiving text messages. HamMessenger exists also to promote amateur radio, electronics, and programming. The project is currently in a beta prototyping stage but does function quite well.
At the core of the the project is the MicroAPRS modem created by markqvist. The primary controller is an Arduino Mega 2560 with the MicroAPRS Modem running on an Arduino Pro Mini. HamMessenger includes GPS functionality supplied by a Neo-6M GPS radio. For peripherals, an M5Stack CardKB keyboard is used for input and an SSD1106 Oled display for output.
I will add some videos and pictures of the device in action asap. Please feel free to contribute to the project. I am very busy outside of this project so any help is greatly appreciated :)
Full instructions on how to operate HamMessenger will go here. For now, just a couple notes :)
HamMessenger will beacon your location and comment according to the 'Beacon Frequency' settings in APRS Settings.
To send a direct message to a station, select 'Messages' on the home screen and press the right arrow on the keyboard. A message will be sent according to the settings in APRS Settings.
Screen navigation information can be found here.
Radio setup instructions can be found here.
Serial interface information can be found here.
hardware:
- design enclosure
software:
- add "quick message" functionality. currently to send a message you highlight 'Messages' on the home screen and press the right key.
- add ability to program the radio once connected for 'plug-n-play' experience (is this possible?)
- add feature to be selective about message acknowledgments. currently any acknowlegment (from a second conversation) will reset the messaging sequencer.
Here are links to the non-standard libraries that I am using for this project. All other libraries are standard and can be installed using the library manager built into the Arduino IDE.
https://github.com/wonho-maker/Adafruit_SH1106
https://github.com/mikalhart/TinyGPSPlus/releases/tag/v1.02b
https://github.com/adafruit/Adafruit-GFX-Library/releases/tag/1.10.10
The easiest way to compile HamMessenger is to use the Ardunio IDE. After all libraries are installed you can use the Verify button to compile or the Upload button to compile and write the binary to the main controller M1.
The Arduino source code for HamMessenger can be found here.
The modem controller does not need to be compiled as the binary files are already made available here.
You can use AVRDude to write the binary to the modem controller. Instructions on how to do that will be coming soon. In the meantime, if you already know how to install and use AVRDude then feel free to make use of the batch file I created and an FTDI serial cable to write to the modem.
Find BOM information on parts here
Find Drawing information on parts here
Find Vendor information on parts here
Arduino:
https://gallery.autodesk.com/fusion360/projects/arduino-mega-2560-r3
Keyboard:
https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/CARDKB
OLED Display:
https://grabcad.com/library/0-96-oled-display-4-pin-1
https://grabcad.com/library/ecran-oled-1-3-1
Modem:
https://github.com/markqvist/MicroAPRS
https://github.com/markqvist/MicroAPRS/blob/master/precompiled/microaprs-5v-ss-latest.hex
https://github.com/markqvist/MicroAPRS/blob/master/documentation/Hardware%20Schematic.pdf
https://unsigned.io/shop
https://unsigned.io/product/micromodem-r23b
GPS:
https://grabcad.com/library/gps-module-ublox_neo6mv2-1
https://grabcad.com/library/ecran-oled-1-3-1
Grove Connector:
https://grabcad.com/library/grove-connectors-stand-and-flat-male-plugs-1/details?folder_id=2820551
Battery:
Panasonic 18650 - don't have a link but you can get them on eBay or Amazon
There is an issue where during transmit the unit will freeze or restart. I did some experimenting and found out that its the cable that connects to the radio. It is not shielded at all. I thought the small ferrites would be enough to combat this but obviously not. I did some experimenting and found that if I use larger ferrites and wrap them once that the issue goes away. Here is a picture of the installation. I will now look at sourcing a shielded cable for this application.
So I started learning 3D modeling so that I can create an enclosure for HamMessenger. Its been a bit of a learning curve but I'm getting the hang of it. I decided that for the first iteration I would go with an open unibody frame. I chose this style for the first version because it is easy and I'd like to have something working while I learn more about 3D modeling.
You can find the Fusion 360 archive file and the stl here. It needs to be printed on its side like this to minimize the amount of support needed during printing. I used 0.2mm layers with 20% infill as well as 5% support infill. The print took about 6.5 hours.
Ok, great news. Revision v1.1 of the HamMessenger board came in from PCBWay and they are great. I built 2 units and was able to encode and decode messages well. I will add some more information later but here is a few pictures for now.
I was able to work through all of the issues with the first version. I placed an order with jlcpcb this time (osh park was great but too expensive). I ordered 20 boards this time and if they work well I will give some away.
I'll update later with how I resolved the issues. For now, going to have a beer :)
Here is an in-depth analysis of the problems with version 1.0 of the board. Also, does any body know how to add correct shielding for the board? I am having issues with the Arduino locking up on transmit sometimes.
- add ground to SD card
- add OE connection to line leveler
- reverse I2C connections
- change GPS I/O to correct serial
- purchase correct GPS (added new link in BOM)
- move SD card away from USB.
- move keyboard grove to bottom of board and out of way
- move 4 pin terminal for cable such that it is out of the way of larger OLED
- ground plane improvements.
still left to do:
- board does not receive (soldering issues?)
- board some times locks up during transmit (ground plane issues?)
20-JUL-2021: Bad news on the boards :( Lots of problems. I will begin immediately working on a revision. Here is a list of the issues:
- SD Card missing ground
- Line leveler missing OE connection.
- I2C connections are reversed.
- GPS is pointing to wrong serial ports (can fix with code but might as well make it right).
- GPS pins do not match board. (worked around this by shifting pins)
- Cannot not receive (don't know why at this point).
- SD card hits Arduino USB. Will move it and the Grove connector to make room.
- Arduino periodically locks up. Seemingly due to RF? Had this issue with prototype board but fixed it with ferrites.
18-JUL-2021: The printed circuit boards from OSH will be arriving tomorrow! I have added all of the parts needed to build HamMessenger here.
04-JUL-2021: Version 1 of the pcb for HamMessenger has be sent for fabrication. The estimated delivery date is the 22nd of July. In the meantime I will be ordering the components to populate the board. As I do that I will make sure to get the links for the components and add them to the BOM in the Eagle folder.