Arduino Licorice Launcher

Voice Activated, Room Tracking, Catapult Launching, Magazine Reloading, Arduino Licorice Launcher

Similar projects worth following
Voice Activated
Room Tracking
Catapult Launching
Magazine Reloading
Arduino Licorice Launcher

NATO Red Vines Original Standard Issue

Additional notable thanks to @RoboWarner for the RF tracking schematics and code

* * *

A note; yes this should have been a WIFI module how ever I did not have a MKR1000 on premises, thus the Uno and PC connected USB. Should a MKR1000 be made available, it would be altered to suit. In conclusion, pft.

* * *

HUGE shout out to Red Vines who sent this generous swag bag of merchandise. #TeamRedVines


1. *insert romantic music* Shapeoko!

2. Missing from the already poor audio is Jacob (AI)'s obedience.

3. Thx to Red Vines for supporting this project with ammunition.

4. Thx to MakerBar in Hoboken, New Jersey


Daily Planet Episode 23X14

  • 1 × Arduino Uno
  • 4 × High Torque Servo
  • 1 × 1/4" MDF
  • 1 × Wire
  • 4 × 1N4007

View all 15 components

  • Cuhode!

    Vije Miller09/08/2016 at 18:35 0 comments

    Huge shout out to for his RF tracking system which was adapted in to this needless novelty project. Calibration is 10% software and 90% hardware. Pay specific attention to some of the tips on that page because...actually...actually I wouldn't recommend this method at all. It was a nightmare. A g d nightmare...but good to know.

    // Arduino Licorice Launcher @TVMiller
    // RF Tracking @ Warner K.
    #include <EEPROM.h>
    #include <Servo.h>
    // Centering
    // Too small adjusts too frequently
    // Too large will pass over signal
    #define buffering 26
    // Output Pin
    #define ANT_WAVEFORM_OUT 8
    // Input Pin
    // Calibration Pin
    #define CALIBRATE_IN 11
    // Variables
    uint16_t caliset = 0;
    uint16_t voltage = 0;
    int state = 1;
    // Servo Assignment
    Servo turn;
    int turnpin = 6;
    Servo loader;
    int loaderpin = 9;
    Servo fire;
    int firepin = 10;
    Servo arm;
    int arm = 11;
    // LED Pins
    int red = 3;
    int blue = 4;
    void setup() {
      pinMode(red, OUTPUT);
      pinMode(blue, OUTPUT);
      digitalWrite(red, LOW);
      digitalWrite(blue, LOW);
      delay(6000); // Allow Power Up
      pinMode(CALIBRATE_IN, INPUT);
      digitalWrite(CALIBRATE_IN, HIGH);
      // Read EEPROM
      byte HByte =;
      byte LByte =;
      caliset = word(HByte, LByte);
      Serial.print("EEPROM Calibration number: ");
      // Calibration Check and Delay
      // Aim Receiver and Clear Area
      if (digitalRead(CALIBRATE_IN) == LOW) {
    void loop() {
      if (state == 1) {
        // Engage Licorice Weapon
        digitalWrite(red, HIGH);
        // Trigger Position Open
        // Arm Launcher
        // Lock Trigger
        // Load Launcher
        // Stall Position
        // Remove Arm
        // Licorice Launcher is Hot
        digitalWrite(red, LOW);
        digitalWrite(blue, HIGH);
        state = 2;
      } else {
        // Hold for Command from JACOB
        if (Serial.available()) {
          char ser =;
          switch (ser) {
            case 'L':
            case 'F':
    void load() {
      // Load Launcher
    void fire() {
      // Antenna Switching Waveform
      digitalWrite(ANT_WAVEFORM_OUT, HIGH);
      digitalWrite(ANT_WAVEFORM_OUT, LOW);
      digitalWrite(ANT_WAVEFORM_OUT, HIGH);
      digitalWrite(ANT_WAVEFORM_OUT, LOW);
      digitalWrite(ANT_WAVEFORM_OUT, HIGH);
      digitalWrite(ANT_WAVEFORM_OUT, LOW);
      digitalWrite(ANT_WAVEFORM_OUT, HIGH);
      digitalWrite(ANT_WAVEFORM_OUT, LOW);
      // Read Speaker Voltage
      voltage = analogRead(SPEAKER_FROM_WALKIETALKIE);
      // If in Calibration Mode
      // Store to EEPROM
      if (digitalRead(CALIBRATE_IN) == LOW) {
        caliset = voltage;
        byte HByte = highByte(caliset);
        byte LByte = lowByte(caliset);
        EEPROM.write(1, HByte);
        EEPROM.write(2, LByte);
      // Stall Turning
      if (voltage > (caliset - buffering) && voltage < (caliset + buffering)) {
        // Fire
      // Turn Left
      if (voltage > (caliset + buffering)) {
        Serial.print("In, Cal\t");
        // Return Cycle
      // Turn Right
      if (voltage < (caliset - buffering)) {
        Serial.print("In, Cal\t");
        // Return Cycle
      Serial.print("In, Cal\t");
    void launch() {
      // Release Trigger
      // Reset
      state = 1;
    void endprogram() {
    Read more »

  • Ugly Duckling

    Vije Miller09/07/2016 at 16:38 0 comments

    Note the RF receiver on the rear of the magazine; this will allow for tracking.

    Also, to note, I have a thing for spiraling wires. For those who don't know, take a screw driver, wrap said wire around, give a squeeze and slide it off...and boom, a compact and expandable and vaguely clean looking wire.

  • Geared Your Loin

    Vije Miller09/01/2016 at 16:59 0 comments

  • TVShow Trends

    Vije Miller08/29/2016 at 04:12 0 comments

    Made a quaint little side video while working on this project...

  • Framing

    Vije Miller08/27/2016 at 11:48 0 comments

  • Obligatory

    Vije Miller08/24/2016 at 14:46 0 comments

  • Dummies Guide to CNC (TVMiller's Dumb Method)

    Vije Miller08/22/2016 at 12:05 0 comments

    As a tip for those who are new to CNC-ah-ing, I thought I would show you a step by step of how I have come to simply do it -- in what will be surely said to be the wrong way by those obsessed (arrogant) with their advanced software knowledge -- but yet it works, so scowl because, I am the captain now.

    The desktop CNC build at Makerbar uses a Synthetos Atmel TinyG V8 board.

    1. In a graphics program, I use Adobe Fireworks CS6, open a document using 100 pixel per cm or 100 pixel per in and then create your image to be cut out using black lines. If you want some thing of depth milled out, shallow not through, then make that area transparent. Do not make exterior of the object transparent because you likely want to cut not depth cut. Realize that the cut width of your bit should be taken in to account. I found that on path cutting works best in the following program so I will reduce or increase size by 1/16th of an inch based on half of the 1/8th bit used to cut.
    2. Export the image in PNG
    3. Visit Easel
    4. Import > Image Trace
    5. Import your image and adjust the settings to make your image clear.
    6. Your object will appear on the flat surface on the left and on the 3D surface on the right. Adjust the dimensions of your 3D surface on the right. Pick a material and ensure the depth of the material matches yours. Also define the bit size. I use a 1/8th bit so in the size I type 0.125 in.
    7. Select all the pieces of your object on the left and resize to the actual dimensions of your original piece. The import never seems to import to actual size.
    8. Now select each individual line of your object and define the type of cut (choose on me) and select depth of cut and tabs. These tabs prevent the materials from being pulled up when cutting.
    9. Once you have defined all the lines of your object, verify on the right it is what you want as a completed project by hitting Simulate.
    10. Machine > Advanced > Generate GCode
    11. Download GCode
    12. Visit Chilipeppr
    13. Download Serial Port JSON Server
    14. Install and then begin serial-port-json-server.exe. This allows Chilipeppr to speak with your CNC which should be plugged to your computer via USB
    15. Select your CNC in the bottom right.
    16. Now you should be able to control your CNC. You can test this by moving the CNC around on the X Y and Z axis on the upper right.
    17. Drag your downloaded GCode file on to the Chilipeppr work space.
    18. Secure your material on the CNC surface, obviously. Use your head here.
    19. We need to set the machine's zero point (Set Mch Zero) to match where the start point is on the work space. To do this, move the CNC around using the controls above to the point on your material you want as the start point. When close to the material, I typically start the cutting tool and lower the Z axis 0.1 at a time until the first cut can be heard.
    20. Set Mch Zero
    21. Hold on to your butts...
    22. Press the Play Button to load the GCode and begin the cuts.

    Keep in mind, this is the simplest most dullard manner to accomplish this task but for those like me who are disinterested in overly complex software, this works.

    Questions? Comments? Keep them to your self.

  • CNC-ah-ing

    Vije Miller08/20/2016 at 14:35 0 comments

  • CNC vs 3D Printing

    Vije Miller08/17/2016 at 21:59 0 comments

    Leonardo da Vinci, who had no television, would not have the patience for 3D printing. From now on, CNC wood and acrylic, save for minor parts.

    These parts that took days, will be replaced in just a few hours...sigh.

View all 9 project logs

Enjoy this project?



denys wrote 03/03/2018 at 22:14 point

Even though this is an old project...

I hope that is lead free solder! Otherwise, don't make a habit of eating before washing the solder off your hands. Lead is a cumulative poison. And not very nice.

That said, a really neat build :)

  Are you sure? yes | no

Vije Miller wrote 03/04/2018 at 03:31 point

Since you're being such a don't-eat-lead buzz kill -- I held the solder gun in my left and caught the licorice with my left. Now let's talk about the amount I inhaled. was way too much. :)

  Are you sure? yes | no

denys wrote 03/04/2018 at 21:29 point

Yes, I noticed the catch. Well done catching with your left hand :)

(I won't draw attention to the misses... LOL)

I'm a bit concerned as I see soldering is not really regarded as risky. Over the years I've instructed a few students and PCB assemble workers in soldering and have always insisted on washing well before handling food. Coffee in a mug not included. That is a necessary item when assembling many PCBs  ;)
And wearing safety specs. This too is often not seen as an important item, and generally it is pretty safe. But in my over 40 years of professional soldering, there were a few occasions it was worth it, but probably only  one main save there. And it was while trying to remove something. The wire flicked up and splattered a string of solder blobs across my face and glasses.

And speaking about inhaling, the one thing I did not do is to have good ventilation so now I have a lung condition that I believe was at least aggravated by many years of breathing solder smoke. Finally I have built a fume extractor.

It is a bit late, but oh well...

All that said, I do REALLY like your launcher! That is the sort of thing to interest young ones in electronics. It has a great mix of electronics, programming, mechanics and fun.

  Are you sure? yes | no

Vije Miller wrote 03/04/2018 at 21:36 point

Per your new reply (since HaD fumbles on multiples replies) 

The secret is...I am left handed ;)

I am typically safe when soldering - glasses, ventilation, gloves - but for this particular video I was exaggerating for effect so it does not demonstrate normal operation. Tho thx in part to your reply and shd the filming scenario exist again, I will likely practice better habits so as to display this behavior to others. 

Thx for the +1

  Are you sure? yes | no

David H Haffner Sr wrote 10/01/2016 at 08:17 point

I love Red Vines...and this seems to be the only way to eat them!

  Are you sure? yes | no

Adam Fabio wrote 09/30/2016 at 00:01 point

Hey [TVMiller]!  Arduino Licorice Launcher is a featured project on the Hackaday front page! Congrats!

  Are you sure? yes | no

Vije Miller wrote 09/30/2016 at 01:03 point

Sweet! Get it? Sweet? Because...because candy? Ugh, because candy is often times made from sug--

  Are you sure? yes | no

Dimitris Zervas wrote 09/14/2016 at 11:30 point

I NEED this

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates