In this tutorial, we’ll cover how to program Sparki to follow or avoid light.
You’ll Need
- A Sparki.
- A source of light (like a flashlight from the Sparki Materials Pack).
How It Works
Sparki has three light sensors that it can use to sense light: Each of Sparki’s light sensors can measure how much light is hitting them. The idea behind this follow light example is that the light is strongest on the sensor nearest to the light. Just like being further away from someone yelling makes it quieter, being further away makes the light dimmer:Strength of light is proportional to distance from the source
The closer the sensor is to the light, the stronger the light from the source. In this example, the light arriving at the left sensor is going to be the strongest, the center sensor will receive the middle-most light, and the right sensor is going to get the least light.Programming It With Sparki
Please remember to check that the batteries are properly connected (and charged!). And as we are going to use the motors here, please check that the On/Off Switch is on. Another important thing to take care of when playing with the robot’s motors is to be careful not to be working over a table. A fall from that table could permanently damage your Sparki. We will have Sparki following light using this idea and if statements. We will conduct three if tests. Each test will determine if the sensor in that test is getting more light than either of the two other sensors. If that sensor is getting more light than the other two, it will move in that sensor’s direction:Sparki will move in the direction of the strongest light source
Following Light
Try out the example code for light following in Examples->Follow_Light menu on your SparkiDuino programming environment. This code uses basic code, integers, the light sensor, the wheel code, and if statements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <Sparki.h> // include the sparki library void setup() { } void loop() { int left = sparki.lightLeft(); // measure the left light sensor int center = sparki.lightCenter(); // measure the center light sensor int right = sparki.lightRight(); // measure the right light sensor if ( (center > left) && (center > right) ){ // if the center light is the strongest sparki.moveForward(); // move Sparki Forward } if ( (left > center) && (left > right) ){ // if the left light is the strongest sparki.moveLeft(); // move Sparki Left } if ( (right > center) && (right > left) ){ // if the right light is the strongest sparki.moveRight(); // move Sparki Right } delay(100); // wait 0.1 seconds } |
Avoiding Light
Of course, the same logic (and nearly the same program) can be used to have Sparki avoid light instead of following it: You can find the code in Examples->Avoid_Light menu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <Sparki.h> // include the sparki library void setup() { } void loop() { int left = sparki.lightLeft(); // measure the left light sensor int center = sparki.lightCenter(); // measure the center light sensor int right = sparki.lightRight(); // measure the right light sensor if ( (center > left) && (center > right) ){ // if the center light is the strongest sparki.moveBackward(); } if ( (left > center) && (left > right) ){ // if the left light is the strongest sparki.moveRight(); } if ( (right > center) && (right > left) ){ // if the right light is the strongest sparki.moveLeft(); } delay(100); // wait 0.1 seconds } |