Introduction: The Hangry Angler: How to Build Super Lo-Fi Sensors
This angler fish can sense what kind of prey it's about to eat! But what's extra special about this project is that it is made with DIY, low-fidelity sensors. Using simple materials like cardboard and circuit paint you can create your own ultra-custom sensors for just about anything you want.
The Hangry Angler is a great project to get started with roll-your-own sensors. Follow along and then remix it for your own sensing project!
- Circuit Paint (i.e. Conductive Ink)
- Conductive thread or stripped wire
- Cardboard Box about 12” x 16” x 2” (a laptop box works well)
- Extra cardboard
- Assorted Resistors
- 2 RGB LEDs
- Jumper Cables
- Twisty Ties
Step 1: The Magic Behind Many Sensors
While building the Hangry Angler, you’ll become acquainted with two important concepts that are the magic behind many sensors: resistance and voltage dividers. We’ll just go over what’s necessary to know for this project here, but for a more in depth understanding, check out these articles on resistance and voltage dividers.
Resistors resist the current in a circuit to varying degrees. Everything has some resistance - wire has nearly 0 but there is still some. In fact, many resistors are just tightly wound wires of a certain type. Less conductive materials have more resistance. Circuit paint is conductive (it's also called conductive ink) but less so than wire, which is why we can easily make our own resistors out of it.
A voltage divider is a kind of circuit that includes two or more resistors. The voltage divider is the concept behind sensors like knobs (i.e., trimpots), sliders, flex sensors and more. It’s is an important concept to electronics, albeit a sometimes confusing one.
The important part to know for this project is that as the resistance level varies in a voltage divider circuit, so does the voltage output. An Arduino Uno can read voltage through the Analog In pins. Therefore you can tell the difference between difference resistors using the Arduino Analog In pin.
For this project we will make our own resistors and attach them to three types of fish. Then we can use them as part of a voltage divider circuit to sense which fish is which!
Step 2: Make Your Own Resistors
To start, we’re going to make our own resistors using circuit paint!
For the Hangry Angler, we want to have three distinct resistance levels. Cut out three 1-inch or so diameter circles on paper. Then draw lines of three different lengths out of conductive ink to make three different resistors. The longer the distance traveled the more resistance. Wiggly lines can allow you to create more resistance in a smaller area. Make sure that the end points are directly across from each other.
Cut out three cardboard fish of varying shapes and sizes. They should be at least an inch in diameter, so that the resistors can fit on the back of them. Attach the three resistors to the backs of the three fish, making sure that one endpoint is at the top of the fish and one at the bottom (see picture above).
Test the resistance of each resistor using a multimeter to make sure it's in a reasonable range. We want the resistors to be distinguishable from each other but not differ by multiple orders of magnitude. For example, one at about 500Ω, 1.5kΩ, and 5kΩ would work well.
Now we will be able to sense the three fish based on their unique resistance!
Step 3: Build the LED Circuit
The Angler has two RGB LEDs that respond to the color of fish that it is about to eat. One for its lure and one for its eye.
Build the circuit outlined in the schematic above. Though the images in this Instructable show one large breadboard, it’s best to use two small breadboards and long jumper wires for more flexibility when placing the LEDs.
Note that the schematic is for a common anode RGB LED. We can use a common cathode RGB LED but it will connect to ground instead of power.
Step 4: Make the Sensing Strip
The sensor strip is where the fish resistors will connect with the Arduino. The sensing strip consists of two long contacts that the resistors on the back of the fish will connect to. Conductive thread is useful here because of its flexibility.
Make two holes about an inch apart in the top of the cardboard box where you would like to place the fish for sensing (i.e. where you will eventually place the NOM! sign.) Make a loop out of a 6-inch piece of thread and push the loop through the hole. Tape it down. Take another piece of thread and do the same with the other hole. Then take a 2-3 inch piece of thread and run it through one of the loops. Tape it down on either end. Do the same with the other loop.
On the underside of the top of your box, there should now be two pieces of thread hanging out. Attach one to an alligator clip and connect it to power (seen in red in the gif above.) Connect the other via an alligator clip to a 1kΩ resistor, which should then be connected to pin A0 (seen in yellow in the gif above.)
Step 5: Write the Code
Clone or download the Hangry Angler code from the colleeninboots Github repo. Upload it to your Arduino Uno or Leonardo.
The code is essentially one conditional statement that checks whether the reading from A0 is in one of three defined input ranges. These are the ranges that our three fish resistors fall into.
To find these ranges, start by connecting attaching one of your fish to the sensing strip and writing the AnalogRead() value to Serial. Note the max and min of outputs that appear - this will define your range for that fish. (Check out the tips below for a neat way to predict this range with math!)
Once you’ve done that for each of your three fish, plug the max and min values into the code. Upload the code to your Arduino and try touching a fish to the sensor strip. The LEDs should turn in the same color as the fish!
Step 6: Finish the Angler Enclosure
Finally, we’ll complete the angler itself and put everything in an enclosure.
Cut the Angler out of cardboard and color it in with colorful sharpies. Cut out holes for the eye and lure out of the Angler as well as the top of the box. Add some kind of material to diffuse the light behind the eye and lure. One option is translucent binder separators like these.
Tape some construction paper to the top of the cardboard box enclosure to make a nice background. Add the holes for the conductive thread and re-tape them to the construction paper surface. Draw the NOM! sign to create a target for the sensing strip.
Lastly, attach the Arduino and breadboards holding the LEDs to the bottom of the box. Punch holes into the bottom of the box on either side of each of the boards, and tie them down by threading twisty ties around the board and through the holes.
Make sure the alligator clips are still attached to the sensing strip and Arduino.
Step 7: Go Fishing!
Your Hangry Angler is ready to eat! Touch the fish to the NOM! sign and watch the lure and eye respond as the Angler recognizes its prey.
Now get creative and remix this DIY sensor project into something entirely your own!
Runner Up in the
3 years ago
Awesome technique you have use.
Reply 3 years ago
3 years ago
This is awesome! :) I want to have one of these at home.
Tip 3 years ago
Here's a few tips that were cut for length:
1) You can also can create lo-fi resistors with a pencil, but make sure it's a certain kind of pencil. Pencil graphite has different grades. The grade 14B works well, but generally graphite of the 10+ “B” grade should work.
2) The unique resistances of the fish will translate to unique readings on the Arduino, which we can predict using Ohm's Law. The analog in pins read a value from 0-1023. To predict the approximate reading the Arduino will read, we can use this formula: 1023/5V=x/Vm. Here x is the expected reading and Vm= 5V*1000Ω/(R + 1000Ω), where R is the resistance of the fish that we measured with the multimeter.
3) Debugging for Step 1: If one resistor is far higher than expected (e.g. 30k - 100kΩ) then there is likely one spot along the line of paint that is too thin. Keep one multimeter probe on one of the endpoints, and slowly move the other probe along the line of paint until the resistance reading jumps. Add a bit of conductive paint to that spot to improve the conductivity.