Launch and Track Your Model Rockets Using Android App! - Add Built-In Ignition System and ESP32+LoRa Telemetry to Your Model Rockets
by archy587 in Circuits > Electronics
11858 Views, 163 Favorites, 0 Comments
Launch and Track Your Model Rockets Using Android App! - Add Built-In Ignition System and ESP32+LoRa Telemetry to Your Model Rockets
![Launch and Track Your Model Rockets Using Android App!](/proxy/?url=https://content.instructables.com/F51/CVA0/L05ADMEO/F51CVA0L05ADMEO.jpg&filename=Launch and Track Your Model Rockets Using Android App!)
This project started out as a 3D printing project, but along the way I found I was spending more and more time on the electronics package, trying to make it more fun and easy to actually go out and set the thing off. I am calling the results of that effort the rocketFeather model rocket electronics add-on kit, since the prototype payload and receiver were built using Feather development boards from adafruit.
The purpose of this instructable is to demonstrate how to incorporate my electronics kit into your model rocket build. However, for the true DIY'ers out there, I will provide all the info you need to build your own prototype version like I did, from adafruit components.
I am excited to develop this concept into my first product and business venture. If This project interests you and you would like to see more like it, please consider checking out newRetroRockets.com and making a purchase!
Supplies
![_JFS2976.JPG](/proxy/?url=https://content.instructables.com/FTQ/GYHO/KZRDEOD0/FTQGYHOKZRDEOD0.jpg&filename=_JFS2976.JPG)
![_JFS2988.JPG](/proxy/?url=https://content.instructables.com/FF7/TXG1/KZRDEOFR/FF7TXG1KZRDEOFR.jpg&filename=_JFS2988.JPG)
![_JFS2997.JPG](/proxy/?url=https://content.instructables.com/FT0/WYCM/KZRDEPIQ/FT0WYCMKZRDEPIQ.jpg&filename=_JFS2997.JPG)
![_JFS3002.JPG](/proxy/?url=https://content.instructables.com/FAI/T7JY/KZRDEQTC/FAIT7JYKZRDEQTC.jpg&filename=_JFS3002.JPG)
Basics:
Model Rocket Kit of your choice - I suggest 2" diameter tube or greater, D sized motor at a minimum
rocketFeather electronics add-on kit - build your own from adafruit components or purchase the kit from my store
Optional:
Motor Retainer - not supplied with t-loc model rocket kit, maybe other kits include something
Shock cord - also not really supplied with the t-loc kit, but others may be different
Ejection charge baffle - or 3D print attached .stl. Not really necessary but it should help protect your parachute
spent 29mm motor - to use as a motor stop, other kits may include something for this
3D printed 1/4" rail guides (.stl provided) - or use rail guide supplied with your model rocket kit
Other:
~5mm drill bit - to make a hole in your motor mounts for the ignition wire
~1.75" hole saw - to make an access hole in the nose cone for the electronics payload
hand saw
CA glue and activator
spray paint
Build Your Rocket
![full build tutorial | model rocket with built in ignition and ESP32+LoRa telemetry](/proxy/?url=https://content.instructables.com/FBX/SDKB/L06PRS9J/FBXSDKBL06PRS9J.jpg&filename=full build tutorial | model rocket with built in ignition and ESP32+LoRa telemetry)
![_JFS2983.JPG](/proxy/?url=https://content.instructables.com/FYQ/4Z5W/KZRDERCE/FYQ4Z5WKZRDERCE.jpg&filename=_JFS2983.JPG)
![FT0WYCMKZRDEPIQ.jpeg](/proxy/?url=https://content.instructables.com/FEE/A95W/L05ADGFD/FEEA95WL05ADGFD.jpg&filename=FT0WYCMKZRDEPIQ.jpeg)
![FAIT7JYKZRDEQTC.jpeg](/proxy/?url=https://content.instructables.com/FUI/484B/L05ADGFE/FUI484BL05ADGFE.jpg&filename=FAIT7JYKZRDEQTC.jpeg)
![Igniter Test B.JPG](/proxy/?url=https://content.instructables.com/F9R/EZYX/KZZKJ0JL/F9REZYXKZZKJ0JL.jpg&filename=Igniter Test B.JPG)
![Screenshot from 2022-02-27 23-04-14.png](/proxy/?url=https://content.instructables.com/FUK/MMEV/L06PQXWA/FUKMMEVL06PQXWA.png&filename=Screenshot from 2022-02-27 23-04-14.png)
![Screenshot from 2022-02-27 23-05-16.png](/proxy/?url=https://content.instructables.com/FYD/XQ0M/L05AELIH/FYDXQ0ML05AELIH.png&filename=Screenshot from 2022-02-27 23-05-16.png)
![Screenshot from 2022-02-27 23-05-38.png](/proxy/?url=https://content.instructables.com/FPB/03Q9/L05AELIG/FPB03Q9L05AELIG.png&filename=Screenshot from 2022-02-27 23-05-38.png)
![Screenshot from 2022-02-27 23-07-14.png](/proxy/?url=https://content.instructables.com/FO2/VHAW/L05AELIF/FO2VHAWL05AELIF.png&filename=Screenshot from 2022-02-27 23-07-14.png)
![Screenshot from 2022-02-27 23-07-52.png](/proxy/?url=https://content.instructables.com/FVU/GY59/L05AELIC/FVUGY59L05AELIC.png&filename=Screenshot from 2022-02-27 23-07-52.png)
![Screenshot from 2022-02-27 23-09-08.png](/proxy/?url=https://content.instructables.com/FCX/I77M/L05AELIB/FCXI77ML05AELIB.png&filename=Screenshot from 2022-02-27 23-09-08.png)
![Screenshot from 2022-02-27 23-10-54.png](/proxy/?url=https://content.instructables.com/FF7/NSTH/L05AELIA/FF7NSTHL05AELIA.png&filename=Screenshot from 2022-02-27 23-10-54.png)
![Screenshot from 2022-02-27 23-12-05.png](/proxy/?url=https://content.instructables.com/F8J/B9FQ/L05AELI9/F8JB9FQL05AELI9.png&filename=Screenshot from 2022-02-27 23-12-05.png)
![Screenshot from 2022-02-27 23-12-36.png](/proxy/?url=https://content.instructables.com/F1U/FQX2/L05AELI8/F1UFQX2L05AELI8.png&filename=Screenshot from 2022-02-27 23-12-36.png)
![Screenshot from 2022-02-27 23-14-36.png](/proxy/?url=https://content.instructables.com/FFT/R5QG/L05AELI7/FFTR5QGL05AELI7.png&filename=Screenshot from 2022-02-27 23-14-36.png)
![Screenshot from 2022-02-27 23-16-42.png](/proxy/?url=https://content.instructables.com/FBO/DQCA/L05AELI6/FBODQCAL05AELI6.png&filename=Screenshot from 2022-02-27 23-16-42.png)
![Screenshot from 2022-02-27 23-18-38.png](/proxy/?url=https://content.instructables.com/FWQ/OAM2/L05AELI5/FWQOAM2L05AELI5.png&filename=Screenshot from 2022-02-27 23-18-38.png)
![Screenshot from 2022-02-27 23-19-42.png](/proxy/?url=https://content.instructables.com/FCX/UVQS/L05AELI4/FCXUVQSL05AELI4.png&filename=Screenshot from 2022-02-27 23-19-42.png)
![Screenshot from 2022-02-27 23-20-53.png](/proxy/?url=https://content.instructables.com/FRG/HWFQ/L05AELI3/FRGHWFQL05AELI3.png&filename=Screenshot from 2022-02-27 23-20-53.png)
![IMG_20211025_140047839.jpg](/proxy/?url=https://content.instructables.com/FKJ/S60J/L05AEFF9/FKJS60JL05AEFF9.jpg&filename=IMG_20211025_140047839.jpg)
For this tutorial I am adding built in ignition to a T-Loc 2.63 from Loc Precision, but many other model rockets will work just fine. The electronics payload will need to fit inside the nose cone of the rocket with some bubble wrap for protection. The ignition cable will run the length of the inside of your body tube and pass between your motor tube and the body tube. The electronics payload and ignition hardware will add an additional ~50 grams to the total weight of your build. For these reasons, I suggest building a rocket that is 2" in diameter or larger, so there is room for the payload and ignition cable. I have never used this setup on anything smaller than an estes D size motor, but I think its possible to go smaller if you wanted to try it.
The T-Loc 2.63 fits the bill for this build. I like that it has sturdy wood motor mounts and fins that go through the slotted body tube to interlock with the motor mounts. This makes for a very sturdy construction and doesn't have you doing a balancing act trying to glue square fins to a round tube.
For the most part, you will follow the normal build instructions for the kit. The only difference will be putting in some 5mm holes in the wood motor mounts so you can feed the ignition cable through the entire length of the body tube. Because you will be feeding the ignition cable and shock cord through a length of protective 8mm fiberglass sleeve, it makes sense to put the ignition cable hole near to where the shock cord will be secured to the upper motor mount. Make sure the holes are aligned to one another when gluing up the motor mounts.
The ignition cable is in two pieces, the shorter length will be secured to the nose cone and the longer will be secured to the motor mounts. The longer section of ignition cable has dupont connectors without plastic covering at one end. This is the end that should be used to connect to the igniter because plastic covers might melt during launch being so close to the motor exhaust. Cut a length of 8mm fiberglass sleeve to shield the ignition cable in the section between the upper and lower motor mounts and feed the ignition cable through the assembly. You don't want an excessive amount of ignition cable sticking out the bottom of the rocket, but you need to make sure the igniters can easily reach the connectors as well. I install a motor and igniter into the motor tube and connect the igniter to the ignition cable. This will hold everything at the correct location so you can secure the ignition cable and protective fiberglass sleeve at the upper motor mount with CA glue. You want to completely fill in the upper motor mount hole with CA glue so you don't change the pressure characteristics of the rocket, which might effect the reliability of the parachute ejection charge. Cut the 2.5mm fiberglass sleeve to ~1" lengths and slip them over the exposed dupont connectors and through the lower motor mount hole. Secure everything at the lower motor mount hole with CA glue.
Feed the shock cord and ignition cable through the remaining length of 8mm fiberglass sleeve. I taped the shock cord to the plastic connector at the end of the ignition cable and simply fed it through the sleeve, but there may be more clever ways to do that. I soaked some CA glue into the ends of the fiberglass sleeve and hit it with activator in order to prevent the sleeve from fraying. Install the motor mount assembly and fins as normal.
Open a ~1.75" hole in the side wall of the nose cone. A drill press and hole saw works well for this. The nose cone that comes with the T-Loc 2.63 already has a hole at the bottom that allows you to feed in the upper section of ignition cable and secure with CA glue. Make sure you leave yourself long enough leads to make it easy to connect the ignition cable to the electronics payload outside of the nose cone. I pack the top ~2/3 of the nose cone with bubble wrap. When I am packing the rocket for launch, I connect the ignition cable to the electronics payload and then wrap the payload in some bubble wrap and pack into the nose cone, then add some more bubble wrap to keep the payload more or less centered in the nose cone. I use kapton or painters tape to cover the nose cone access hole. Make sure the nose cone still slides smoothly into the body tube. Wrinkles in the tape may make it too tight, which will prevent your parachute from deploying reliably. You may need to sand down the nose cone or the inside of the body tube so you have a good fit.
Glue on the launch rail guides. I like using the 3D printed ones because they have a curve that matches the diameter of the body tube so there is better surface area in contact with the body tube, and they are easy to set in place during glue up. I use the launch rail to hold the rail guides in line with one another while gluing to the body tube. Add some paint and you should be good to go!
The Electronics Payload
![_JFS2984.JPG](/proxy/?url=https://content.instructables.com/F7T/QCDC/KZRDER96/F7TQCDCKZRDER96.jpg&filename=_JFS2984.JPG)
![F9REZYXKZZKJ0JL.jpeg](/proxy/?url=https://content.instructables.com/F7Y/XLWP/L05ADCJ0/F7YXLWPL05ADCJ0.jpg&filename=F9REZYXKZZKJ0JL.jpeg)
![IMG_20211025_135409230.jpg](/proxy/?url=https://content.instructables.com/FVM/N95E/KZRDER97/FVMN95EKZRDER97.jpg&filename=IMG_20211025_135409230.jpg)
The electronics payload for this project is still in a prototype stage, but if there is some interest in the project from the amateur rocket community, I would like to make this into a custom board that would be a smaller, lighter, cleaner and less expensive setup than the current configuration.
The current electronics payload weighs in at ~45 grams and consists of three boards from adafruit: A M0 feather with 900mhz LoRa module, a feather relay board and an Ultimate GPS featherwing. It has a 350 mAh LiPo battery powering the M0+LoRa baord and stacked feather wings. It has a 100 mAh LiPo battery connected to the normally open output of the relay board.
The electronics payload is constantly reading its location from the GPS module and transmitting it, along with status information, over the LoRa module. It will send out ~10hz updates to the receiver, with a range of approximately 1 mile (clear line of sight).
When the payload receives the launch command from the missionControl app and the countdown completes, the relay switches to the closed position and the 100 mAh battery is simply shorted to the motor igniter though the ignition cable that runs through the body tube of your rocket. The ignition cable is firmly secured at the motor mounts and at the nose cone, so a quick disconnect is placed below the nose cone to prevent the ignition cable from being damaged during parachute deployment. The rocketFeather electronics add-on kit also includes a fiberglass sleeve to protect the ignition cable from the ejection charge.
The 350 mAh battery should power the electronics payload for approximately 1 hour. The 100 mAh battery can power at least 3 launches before needing to be recharged. The feather boards have built in battery charging for the LiPo batteries, you need only connect USB power to the feather M0+LoRa boards micro USB connector to charge them.
My arduino code for this configuration is attached. You can follow the adafruit tutorial for setting up your arduino IDE to load sketch files to the feather boards. You will need some additional packages installed in you arduino IDE to read from the GPS module. If you purchase a pre-assembled electronics payload from my store, it will already have the code loaded to it, so you will only need to upload code if you want to customize for your own needs.
Downloads
The Receiver
![image002.jpg](/proxy/?url=https://content.instructables.com/FYL/2RJA/KZY538FC/FYL2RJAKZY538FC.jpg&filename=image002.jpg)
![IMG_20220122_092037372.jpg](/proxy/?url=https://content.instructables.com/FW2/SF66/KZTUS0H0/FW2SF66KZTUS0H0.jpg&filename=IMG_20220122_092037372.jpg)
![IMG_20220122_092041604.jpg](/proxy/?url=https://content.instructables.com/FDV/HT4S/KZTUS0HF/FDVHT4SKZTUS0HF.jpg&filename=IMG_20220122_092041604.jpg)
![IMG_20220121_133250311.jpg](/proxy/?url=https://content.instructables.com/F5E/DJO4/KZTUS0GX/F5EDJO4KZTUS0GX.jpg&filename=IMG_20220121_133250311.jpg)
![_JFS2985.JPG](/proxy/?url=https://content.instructables.com/FN5/CKA7/KZRDETGQ/FN5CKA7KZRDETGQ.jpg&filename=_JFS2985.JPG)
![FSS0A0CKZY540D8.png](/proxy/?url=https://content.instructables.com/F9F/IPLK/L01BV7M5/F9FIPLKL01BV7M5.png&filename=FSS0A0CKZY540D8.png)
![FQM66WMKZY540D9.jpeg](/proxy/?url=https://content.instructables.com/FJA/7YDD/L01BV7M4/FJA7YDDL01BV7M4.jpg&filename=FQM66WMKZY540D9.jpeg)
The receiver board is my first custom made board. It is based on two boards from adafruit: An ESP32 feather and a 900mhz LoRa radio feather board, but strips out the circuitry that will not be needed for this application, such as the battery connectors and charge circuit, since the board will be powered by your phone. It also includes a USB-C connector to easily connect with most newer android phones. It uses a 900mhz omnidirectional antenna with a RP adaptor and should easily have a range of 1 mile with clear line of sight between electronics payload and receiver. I clip mine to my phone with a 3D printed mount (.stl file attached).
The receiver can be programmed using the Arduino IDE just like any other ESP32 based board, and adafruits' tutorial on using the ESP32 feather with arduino can be directly followed if you want to upload your own code to the receiver board. If you purchased the board from my store, the attached rocketFeather_RX.ino code will already be uploaded to the board, so you likely will not have a need to upload your own code.
My arduino code for this configuration is attached. It is simple and is based directly off of sample code from the radiohead library. Any messages it receives from the LoRa radio module are printed out over the serial port. Your android smart phone will serve as the communication host and the missionControl app handles the parsing of these messages. Any messages sent from the app to the COM port are transmitted by the LoRa module to the electronics payload. The arduino code on the electronics payload handles parsing of the messages received. The app lets you easily send commands to launch the rocket, abort the launch, and stop recording of launch data to the electronics payload.
The Android App
![app page.png](/proxy/?url=https://content.instructables.com/F8I/BCA6/KZRDE80L/F8IBCA6KZRDE80L.png&filename=app page.png)
![Screenshot_20220211-223526.png](/proxy/?url=https://content.instructables.com/F60/UJFN/KZRDE817/F60UJFNKZRDE817.png&filename=Screenshot_20220211-223526.png)
![Screenshot_20220216-210409.png](/proxy/?url=https://content.instructables.com/FJQ/XRPV/KZRDE80U/FJQXRPVKZRDE80U.png&filename=Screenshot_20220216-210409.png)
The missionControl app is in open testing phase and can be downloaded for free from the google play store. Currently it is only available for android phones.
The app is very simple and easy to use. The rocketFeather receiver board simply relays LoRa transmissions from the electronics payload to your phone over USB. Once you plug the receiver into your phone, the app will request permission to use the USB port, and if you are receiving transmissions from the electronics payload, the data values will be updated in the app display. A red dot will appear on the map to mark the location of the electronics payload, and a blue dot will show the location from your phone if you have enabled location permissions.
The current version of the app displays 6 data fields. The distance between your phone and the electronics package in meters. The altitude above sea level as reported by the GPS receiver on the electronics payload. The voltage of the 350 mAh battery powering the rocketFeather electronics (not the 100 mAh ignition circuit battery). The strength of the received signal coming from the electronics payload. The 'Mission Status' field lets you know if the ignition circuit is open or closed and the 'Recording' field lets you know if data is being recorded to memory on the electronics payload. The data fields and the locations on the map update with each transmission received from the electronics payload. If the rocketFeather payload and receiver are within range of each other, you should be getting ~10hz updates to the map and data fields.
The app does not record any of the transmissions it receives from the electronics payload. Data can be recorded to memory onboard the electronics payload. Future versions of the app will let you download recorded data from the electronics payload to your phone for plotting, or visualizing the launch in google earth.
That's all there is to it! Once you have a successful lift off, the data values and payload location will continue to update as long as you are receiving transmissions. This can be invaluable when locating a lost rocket. The app should let you walk directly to the last known location of your payload!
Launch!
![Screenshot from 2022-02-27 22-22-07.png](/proxy/?url=https://content.instructables.com/FKL/CIZO/L05AEGUR/FKLCIZOL05AEGUR.png&filename=Screenshot from 2022-02-27 22-22-07.png)
![Screenshot from 2022-02-27 22-32-54.png](/proxy/?url=https://content.instructables.com/FO4/Z5E6/L05AEGXD/FO4Z5E6L05AEGXD.png&filename=Screenshot from 2022-02-27 22-32-54.png)
![Screenshot from 2022-02-27 14-42-20.png](/proxy/?url=https://content.instructables.com/FFZ/PIWP/L05AEGVR/FFZPIWPL05AEGVR.png&filename=Screenshot from 2022-02-27 14-42-20.png)
The National Association of Rocketry has some great resources for finding a good launch site in your area. Remember to follow general safety precautions.
Once you've got your rocketFeather electronics payload wired to the ignition cable and packed safely in the nose cone; you're ready to install an igniter in the motor and bend the igniter leads to meet the connectors at the end of the ignition cable. The ignition cable is terminated with female dupont crimp connectors. These may be a bit loose if you are using regular old estes igniters. If that's the case, I recommend folding back the legs of the igniter to give you a tighter fit and better electrical connection. Once the igniter is connected, you can use a multi meter to measure the resistance of the igniter circuit. If it is ~0.75 ohms you should be good to go. If there is no continuity, your igniter is likely not making good connection at the dupont connector, and if there is 0.1 ohms or less, your igniter is probably shorting out near the tip. Checking the resistance with a meter before attempting a launch can save a lot of headaches! Future versions of the electronics payload will measure the resistance of the ignition circuit and output the value to the app, won't that be nice!
Finally, when you are ready to launch, you can hit the launch button to start the 5 second launch countdown. This countdown timer is actually occurring on the electronics payload, and its value is being reported to the app like all the other data fields, over LoRa transmission. You can attempt to stop the countdown by pressing the abort button that appears while the countdown is running, however, this requires LoRa communication between the phone and the electronics payload not be interrupted, so make sure you are really ready to launch when you send the launch command! Once the countdown timer reaches zero the abort button changes to a flame icon and the ignition circuit closes for 3 seconds. There is no chance to abort ignition at this point. The relay opens the ignition circuit again after 3 seconds, so if you did not get a successful lift off, you can safely check your wiring or the condition of your igniter.
Visualize Your Flight Data
![Figure_2.png](/proxy/?url=https://content.instructables.com/FX7/H7NS/L05AEN67/FX7H7NSL05AEN67.png&filename=Figure_2.png)
![Model rocket GPS flight data overlay on google earth in Chrome browser](/proxy/?url=https://content.instructables.com/FNA/IS59/L05AEH1I/FNAIS59L05AEH1I.jpg&filename=Model rocket GPS flight data overlay on google earth in Chrome browser)
The arduino sketches provided in this tutorial don't do any recording yet, but I would like to update the sketches and the missionControl app to let you seamlessly pull flight data from electronics payload and generate .kml files that would let you visualize your flight in google earth. I did this manually with a different electronics payload that also had a barometric pressure altimeter and accelerometer. The video and plot attached show the results of this. I will leave details of how to make these plots for future instructables.