This blog post is part of the Johnny Five series. If you haven’t read the first post yet, you can find it here.
In this post, we will explore how to receive data from an electronic device using Johnny Five. Specifically, we will use a water level sensor to monitor the level of coffee in a cup. This will help us determine if we need to refill our cup to sustain our programming endeavors.
To wire the sensor, connect the pins as follows:
- Connect the pin marked as
-
to GND (0V) - Connect the pin marked as
+
to VCC (5V) - Connect the pin marked as
S
to the analog pinA0
Here’s the circuit diagram for reference:
Now, let’s create a sensor.js
file with the following content:
const { Board, Sensor } = require("johnny-five")
const board = new Board()
board.on("ready", () => {
const sensor = new Sensor("A0")
sensor.on("change", function () {
console.log(this.value)
})
})
Whenever the data from the sensor changes, the program will output the new value to the console.
In addition to the change
event, Johnny Five provides various methods for working with the sensor. One method of interest is within()
, which allows us to define a callback that is triggered when the value falls within a specific range. For example:
const { Board, Sensor } = require("johnny-five")
const board = new Board()
board.on("ready", () => {
const sensor = new Sensor("A0")
sensor.within([0, 70], function () {
console.log("Refill your coffee!!")
})
})
In this example, if the coffee level falls below 70, the program will output “Refill your coffee!!” to the console.
To further enhance our coffee monitoring system, let’s introduce a variable called outOfCoffee
to debounce the data gathering. We can use the within()
method to define two separate callbacks. One for when the value is below 70, indicating that we are out of coffee, and another for when the value is above 150, indicating that we have enough coffee to continue our programming endeavors. Here’s the updated code:
const { Board, Sensor } = require("johnny-five")
const board = new Board()
board.on("ready", () => {
const sensor = new Sensor("A0")
let outOfCoffee = false
sensor.within([0, 70], () => {
if (!outOfCoffee) {
outOfCoffee = true
console.log("Refill your coffee!!")
}
})
sensor.within([150, 500], () => {
if (outOfCoffee) {
outOfCoffee = false
console.log("Ok, you can go on programming!!")
}
})
})
With this updated code, if the coffee level crosses the threshold values, the appropriate message will be printed to the console.