Here, we will look at the line sensor reading block from the SENSORS > LINE menu. While the detect line block gives us data about whether the sensor is or isn’t over a line, the more light sensor reading block gives us more detailed information:
It provides a value of 0% to 100% that tells us how reflective the material under the Scribbler Robot is for either the left or right line sensors.
Understanding and Measuring Line Reflectivity
- To better understand how this block works, build the following program.
This program uses blocks from the CONTROL, VARIABLES, SENSOR > LINE, and ACTIONS > COMMUNICATE categories. If you're unclear of what these COMMUNICATE blocks do, take some time to predict what will happen when this program runs. If your predictions were not accurate, spend some time to learn about the blocks you didn't understand. Remember, you can also check the Scribbler 3 Block Reference Help if you need a block explained.
Inside the repeat forever block, the values for both the right and left line sensors from the light sensor reading blocks are stored in variables. The values in those variables are then sent to the terminal so you are able to see the measurements.
- Print out the Scribbler Printable Line Following Tracks pdf if you don't have some on hand (make two copies of page 11 for later on).
- Save, compile, load to EEPROM, and run the program. This time the USB cable must remain connected between your computer and the S3 and your BlocklyProp workspace should still be open and visible.
The cable provides a link between the robot and the BlocklyProp Terminal software. When the program begins, the Terminal window will open. When the connection is established with the Terminal, you should see something like this (your numbers may differ):
- Place your Scribbler robot on a flat surface on top of a piece of paper with a printed black line in its center.
- Slide the Scribbler robot from the left to the right - back and forth across the line, very close to the paper.
Now, we can begin the process of understanding the information. See how the percentage values change as S3’s line sensors move relative to the black line? If you want, conduct similar tests with a 3/4” black masking tape line, 3/4” black electrical tape line, or an approximately 3/4” wide Sharpie® marker line - all on white paper or poster board. You can also try white lines on a dark or black surface.
- Make a note of your readings for the various line types and surfaces for future reference.
An example chart is below, with extra spaces for additional line types you might want to try:
*Example readings in the ink jet black/white paper column will be used in the example code illustrations (results shown use black ink jet lines printed from the Line Following Tracks pdf on 24lb, 97 brightness ink jet paper). When the sensors are over the black line the average line sensor reflectivity percentage is 10% (rounded down) - when the sensors are over the white paper surface, the average line sensor reflectivity is 61 (rounded down to 60).
Putting Our Information to Work
Now, you need to find a middle point between the example low reading of 10% and high reading of 60%. The difference between them is 50%, so if you take half of that (25%) and add that to your low reading, you get a value of 35%. This will be the middle threshold for determining whether the S3 is over a line or not. Readings < 35% should be over the line, readings ≥ 35% should be off the line (we use ≥ here so there is no numerical gap between the over a line and off line measurements). Remember that each S3 is unique. When making a line following program that specifies thresholds like this one, you will have to find a low value, a high value, and a middle point that works with your specific robot.
In the previous tutorial, there wasn't much you could customize. Now, using VARIABLES blocks, MATH blocks, and the line sensor reading block which you used to measure the line sensor reflectivity, you can create a line sensing program optimized for your unique Scribbler Robot. The variables are set up below. Remember that creating a new variable creates both a set variable and a use variable block.
Using Light Sensor Variables and Inserts with LED Feedback
To check the function of the variable blocks you just created, let’s add some LED feedback. Using what you've made so far, along with blocks from the CONTROL, FUNCTIONS, and ACTIONS > LEDs categories, construct the BlocklyProp code below:
- Save, compile, load to EEPROM, and run the program.
- Test the variables, inserts, and code by placing your S3 on a flat surface on top of a piece of paper with a printed black line in its center. Slide the S3 from the left to the right, and back and forth.
Do you get the correct LED feedback as the robot moves relative to the black line? If not, recheck your work against the examples and try again. If yes, let's try following a line.
Creating an Advanced Line Following Program
In the following Try This and Your Turn sections, you'll be programming the S3 to follow lines using more advanced BlocklyProp blocks. It may require some experimentation with different settings and different blocks to get the program working. To be successful, and to avoid gettting overwhelmed, make sure you test your program after every change and keep track of what works and what doesn't. When you have things working as you want them to, be sure to save the program.
The most common approach to dealing with a large task you are unfamiliar with is by trying different ideas, failing, and then learning from your mistakes or mis-steps. You may also hear this process referred to as the "trial-and-error approach." BlocklyProp gives you all the tools you need, but you need to learn how to logically work through problems and solve them in small, manageable steps. If you have a pen and paper handy, writing your desired program steps in plain English first can also help you determine how to set it up in the Blockly workspace.
Using the code you created above along with blocks from the ACTIONS > MOTORS category, substitute the change LEDs blocks with drive speed blocks inside the functions (as shown below) to create a more advanced line following program in BlocklyProp.
- Save, compile, load to EEPROM, and disconnect your S3 from the programming cable.
- Piece together pages 11, 2, 8, 3, and another copy of 11 of the line following track from the pdf resource.
- Tape them together on a hard, flat, smooth surface as shown below and place your S3 on top of the black line. Run the program.
How did it work? How might you improve it? If you are like most experimenters, your S3 may have stopped as soon as it reached any gap in the black line. Remember that the S3 processes info very quickly, so as soon as both sensors simultaneously see a value over your middle threshold, it stops.
Placing the printed sheets edge to edge or even overlapping as they are printed will leave gaps in the line. That is because most printers do not print to the edge of the paper. If you want to create a program that does not stop on these gaps, you are going to have to figure out how to program that in or physically work around them.
Here are some possible solutions:
- Remove the stop driving block in the both sensors read a value above 35% condition.
- Eliminate the gaps by trimming the paper, or by filling the gaps using a Sharpie® or black masking tape.
- Improve your program by making it more tolerant of gaps in the line or programing it to find the line again. Such a solution would allow you to useunmodified line follow tracks like page 7 from the pdf resource.
- Try the first two solutions outlined above, in order.
- Run tests and observe how your S3 performs on the line following track for each. How did the solutions work? Which did you prefer?
- Using your code as a starting point, try a different block from the ACTIONS > MOTORS categories for the left and right functions. Can you make the S3 move more smoothly? What did you do?
- Combine the two previous examples to create an advanced line following program with LED feedback.
- Make your own line path with tape (black masking or black electrical tape, or white tape on dark service), or draw your own line, about 3/4" wide, with black markers. Develop your own program using what you have learned.
Hint: You will need to re-check reflectivity and possibly determine a new middle threshold value if you make a line from a different material or ink. You may have already done this in the beginning of this tutorial.
Special thanks to Parallax friend Whit Stodghill for his assistance in writing, editing, and testing material for these S3 tutorials.