The Internet of Dogs: How to Build a $50 IoT Dog Collar That Locates Your Pet

Author profile picture


I run Dev Spotlight – we create tech content material for tech corporations like Heroku, Rollbar, and extra.

I really like facet initiatives. They give me the chance to flex my ingenious muscle mass and tinker with tech just like the Internet of Things (IoT) in new techniques. Fortunately, I did not have to seem a long way for my subsequent one; a not unusual conundrum for puppy house owners fueled this idea for an IoT canine collar.

My canine have been out within the yard for some time. When I determined it used to be time to deliver him again into the home, I could not in finding him any place! After a number of mins of looking and calling his identify, I discovered him snoozing within the color of a tree. If this state of affairs sounds all too acquainted to you, then this put up is for you!

In this instructional, I’ll display you tips on how to arrange the {hardware} you can wish to assemble an IoT canine collar. We’ll additionally stroll by way of tips on how to construct the front-end and back-end internet app that you’ll use to name and find your puppy. We’ll use an Arduino Uno, the Johnny-Five JavaScript Robotics & IoT Platform, Heroku, and a couple of different elements. By the top, you can be a lot more relaxed the use of your JavaScript talents with {hardware}. And optimistically, you can have a ton of a laugh alongside the best way! Ready to start out? Let’s move!

The Hardware You’ll Need

Here’s a listing of the {hardware} and sources you can use to construct your IoT canine collar:

** Prices exchange in fact.

Setting Up Your Front End

A super facet challenge provides you with the liberty to check out issues you could no longer typically do at your activity. Keeping in spirit with this idea, the entrance finish of this IoT challenge is just a button with some textual content to show the buzzer off and on — no wish to use a framework like React or Angular. We’ll write the code with an HTML report, a CSS report, and a natural JavaScript report.

Keeping the entrance finish easy way you’ll customise the general output to how you notice have compatibility. It’s additionally an incredible alternative to return to the fundamentals and take note what all of your code compiles to finally!

Let’s start. Inside your root folder, create the next three information:

  • index.html
  • index.css
  • index.js


We’ll now get started writing the code for the index.html report:

<!DOCTYPE html>
 <hyperlink rel="stylesheet" href="./index.css">
 <name>Find My Dog</name>
 <header>I haven't any clue the place they went.</header>
 <button identity='beeper-btn' kind="button">Activate the noise</button>
 <script src="./index.js"></script>

Pretty simple thus far, proper? The maximum vital factor this is to have that identity characteristic at the button part. Other than that, be happy so as to add extra parts to the web page so it fits your taste.


Now, let’s write the CSS report:

 font-family: 'Lato', 'Trebuchet MS', sans-serif;
header, primary {
 text-align: heart;
 font-size: 36px;
 background-color: rgb(255, 0, 0);
 border: unset;
 font-size: 24px;
 margin-top: 24px;
 padding: 12px;
button:hover {
 background-color: rgba(255, 0, 0, 0.5);
 font-size: 24px;

If you did not make any edits to the index.html and index.css information, your web page must appear to be this:

If you probably did make edits, then your output would possibly glance somewhat other. No worries, even though — that is one of the most efficient facets of facet initiatives! You can use one thing minimum, like the instance proven above, or you’ll get somewhat fancier and take a look at out some cool CSS options.


Now it is time to write some elementary JavaScript. The absolute best section? You do not wish to set up any dependencies!


const beeperBtn = report.querySelector('#beeper-btn');
 let isBeeperActivated = false;
 const toggleBeeper = () => {
 isBeeperActivated = !isBeeperActivated;
 isBeeperActivated ? 
 fetch('http://localhost:3000/api/get startedBeeper')
 beeperBtn.addEventListener('click on', toggleBeeper);

This report best does three issues:

  1. It provides an “onclick” tournament listener to the button from index.html.
  2. It units a state variable referred to as “isBeeperActivated”.
  3. When the button is clicked, it adjustments the state and calls the correct back-end endpoint.

I’ll be fair… it took me slightly some time to bear in mind tips on how to get my JavaScript report to paintings with my HTML report out of doors of a framework. This is one more reason why facet initiatives are so superior. Not best do they come up with a possibility to be informed new issues, however in addition they can help you observe one of the crucial fundamentals you could no longer have used shortly.

Setting Up Your Hardware

If you have got made it this a long way, congratulations — you have got finished all of the entrance finish of this challenge! Now, let’s deal with the {hardware}. In this phase, we will stroll by way of tips on how to arrange your breadboard with the Arduino Uno, speaker, and different elements.

First, let’s be sure your Arduino Uno is able to paintings with the Johnny-Five platform. You’ll wish to add the Standard Firmata comic strip on your board. The highest approach to do that is throughout the Arduino IDE. If you have got by no means labored with an Arduino prior to, do not be concerned; it is a straight-forward click-through form of add. Here’s an incredible walkthrough of this procedure. It will display you tips on how to in finding the instance Standard Firmata comic strip that incorporates the Arduino IDE and the method to add the comic strip on your Arduino.
Next, you can wish to get your Arduino running with the HC 05 Bluetooth Module. Here’s the educational I used for this section. You’ll see the schematic for wiring the HC 05 to the Arduino and a comic strip you’ll have to add to make the HC 05 be in contact with the Arduino’s serial port. After that step is entire, re-upload the Standard Firmata comic strip and connect with Johnny-Five.

Once you have got arrange your board, you’ll upload energy to it with the battery pack and attach your piezo-buzzer. Connect the crimson twine of your battery pack to the board’s Vin pin and its black twine to one of the board’s GND pins at the Power facet. Your HC 05 Module must be hooked up to the 5V pin and every other GND pin. Finally, you’ll attach your piezo-buzzer to pin 13 and a GND pin.

Want to stay your wiring cleaner? Try the use of a breadboard and jumper wires to provide help to practice your connections. Note: This will exchange the scale of your casing. Speaking of which…

After you have got cobbled your elements in combination, you’ll put them into your casing. Make certain your battery pack is out there so you’ll flip it off and on. I selected to place mine in somewhat bag in a field. Is this one of the simplest ways to regard {hardware}? Heck no! But take note, no person else goes to look this a lot except for you. So be happy to get tremendous ingenious. I selected to move with a SweetTarts field. (It represents my canine’s persona completely.)

Setting Up Your Back End

Whew! If you have got made it this a long way, give your self a pat at the again — you have got simply finished the {hardware} phase! Wasn’t too exhausting, used to be it? Now let’s get to the remaining piece of code for this IoT challenge: the Node again finish.

Now open a terminal and take a look at that the Heroku CLI put in as it should be with the next command:

heroku --version

Next, you can wish to login on your Heroku account with the command:

heroku login

This will redirect you to a internet web page the place you’ll login together with your GitHub credentials. Now you might have the whole thing set as much as deploy this app without delay to Heroku.

But first, you can wish to set up a couple of programs to get this running. Inside the foundation folder, create the next new information:

  • server.js
  • Procfile

Now, open a terminal and get able to put in the entire programs you want. I want npm however be happy to make use of yarn.

npm set up cors categorical johnny-five

These are the one programs you can want, and it is identical to putting in place some other Node app.


You’ll wish to create two endpoints to keep watch over when the beeper is on or off. These are the endpoints you referenced at the entrance result in the ones fetch requests. Open your server.js report and upload the next code:

const { Board, Led } = require('johnny-five');
const cors = require('cors');
const categorical = require('categorical');
const PORT = procedure.env.PORT || 3000;
const app = categorical();
app.use(categorical.urlencoded({ prolonged: false }));
const board = new Board({
 port: "COM4",
let beeper;
board.on("able", () => {
 beeper = new Led(13);
app.get('/api/get startedBeeper', (req, res) => {
 message: 'on'
app.get('/api/forestallBeeper', (req, res) => {
 message: 'off' attention(PORT, () => {
 console.log(`endpoints operating on port ${PORT}`);

This code units up a regular categorical app and connects it to localhost:3000. It additionally creates a brand new example of the Board object so you’ll attach on your Arduino and claim a variable representing the beeper. You’ll wish to get the Bluetooth deal with and use it within the port choice for the board. This will can help you attach on your board after you deploy to a Heroku server. It then begins up the Board with the on manner and the able choice. Inside this code block, you’ll ship a message to the console so the board must be on.

Lastly, you want to set the worth for beeper. I outlined it as an LED as a result of we best want a easy “prime/low” sign despatched to the board to make it paintings. When it involves {hardware}, it is incessantly higher to stay issues easy. Beeper could also be hooked up to pin 13, very similar to its bodily counterpart.

The remaining a part of the again finish is writing the two endpoints. Since we are toggling a beeper off and on with the button click on at the entrance finish, one endpoint turns it on, and the opposite turns it off. 

I generally do not depart console.log in my code, however those can actually lend a hand with debugging. Sometimes, the {hardware} works right away. Other occasions, somewhat tinkering could be vital to get all of it running in combination. This code prepares you for each eventualities and is the whole thing you want for the beeper to paintings. You technically do not even want the entrance finish in case you take note the endpoint names!

Johnny-Five does some magic with the Board object. When you name the board.on() manner, it mechanically unearths and connects to the Bluetooth deal with of the HC 05 module so long as there’s energy to it and the Arduino. Once the code is attached to the bodily board, Johnny-Five then seems for the bodily beeper in response to the pin quantity you handed to the LED object. When you click on the button at the entrance finish, it calls the corresponding endpoint sending both a prime or low sign to pin 13, which turns the beeper on or off.


Finally, input the next within the Procfile. This is a report in particular utilized by Heroku that specifies the instructions to be finished through the app on startup. In this example, we outline our internet procedure as our server.

internet: node server.js

Now, you’ll after all deploy your app so you’ll in finding your canine any place, any time.

Deploying the IoT Dog Collar App

We’re virtually performed! By this level, you have got most certainly put a couple of hours into this IoT challenge, so let’s profit from it. Since canines can disappear any place, it is prudent to deploy your app so you’ll get admission to it any place. 

I selected to attach my app to Heroku through deploying throughout the Heroku CLI. Heroku supplies nice, easy directions for briefly getting issues arrange and are living. There are a number of issues you want to you’ll want to exchange, which come with:

  • The API calls you make within the root index.js report must now reference the URL and port you’re the use of in Heroku.
  • You will wish to upload a bundle.json report to the foundation of your challenge and you’ll in finding the code for it beneath. This is how Heroku will know the way to run your app in manufacturing.
 "identify": "dog-locator",
 "edition": "0.1.0",
 "scripts": {
 "construct": "npm set up",
 "dev": "npm run construct && npm run get started",
 "get started": "node server.js"
 "dependencies": {
 "similtaneously": "^5.1.0", 
 "cors": "^2.8.5",
 "categorical": "^4.17.1",
 "johnny-five": "^1.4.0",
 "trail": "^0.12.7"

Once you might have the settings you want in position, you’ll deploy your app. The app will seek for the HC 05 and in finding the Bluetooth deal with to make use of for the relationship. Make certain that your Arduino and HC 05 have energy prior to you deploy or you could run into some mistakes with the preliminary connection.

Now open a terminal and get able to make use of the Heroku CLI. Since you have already got it put in and you have got logged in, you must have the ability to run the command to make a brand new, empty application on Heroku:

heroku create

Then run the next command to deploy the challenge without delay to Heroku:

git push heroku grasp

After pushing the challenge within the remaining line, you must see one thing on your terminal very similar to this after which your challenge might be are living!

To be fair, I love deploying facet initiatives in this platform as a result of CI/CD is one of my vulnerable spots, and that is just right observe! And having this app are living makes it simple for me to search out my canine any place I’m going. 

What Will You Build Next?

Congratulations! You now have an absolutely functioning IoT canine collar that allows you to in finding your puppy any place! Now put it to the check. Play hide-and-seek… Run across the yard… Throw some frisbees round… Do no matter you’ll typically do together with your canine. The maximum vital factor this is to ensure that your new collar works for you and your puppy’s way of life.

Now that you’ve got finished your IoT canine collar, there may be best one query left: What will you construct now? These endeavors take time, endurance, and perseverance, alternatively, the method is incessantly a laugh and rewarding. I am hoping this facet challenge has given you some concepts about what to paintings on subsequent.

In case you might be construction one thing new off this challenge or simply wish to overview the code, you’ll in finding it right here. And if you want inspiration in your subsequent IoT challenge, I extremely suggest those sources:



The Noonification banner

Subscribe to get your day-to-day round-up of height tech tales!