[Dave] wanted to show off a project at his 4th-grade son’s school during their family science night. We haven’t heard of an event like this before but it sounds like a fabulous idea! He had a new laser he wanted to include in the project, and noticed that his son was learning about how ASCII maps letters to binary number when the idea struck. He ended up building an optical data transfer system that demonstrates binary code.
This presents a fantastic learning opportunity as the project invited the school kids to select encoded strips like the ones seen above to form a secret message. The laser is pointed at a photosensor which is being read by a Raspberry Pi board. The Python code looks for a baseline and then records increases and decreases in intensity. Since the translucent tokens have either holes or black lines for 0 and 1 the baseline approach does away with the need to clock in the data. [Dave] reports that everyone who tried out the experiment was fully engaged at the prospect of pushing pieces of tape through the sensor and watching their secret message appear on a monitor.
He was motivated to write about this project after reading about data transfer using an LCD screen and photosensor.
We love the concept of using an LCD screen to transfer data. The most wide-spread and successful method we know of is the combination of a QR code and the camera on a smart phone. But for less powerful/costly devices data can be transferred simply by flashing colors on the screen. That’s what [Connor Taylor] is testing out with this project. He’s using a TEMT6000 light sensor to turn a white and black flashing monitor into binary data.
So far this is just a proof of concept that takes measurements from the light sensor which is held in front of a Macbook Retina display with different backlight levels. At 3/4 and full brightness it provides more than enough contrast to reliably differentiate between black and white when measuring the sensor with the Arduino’s ADC. What he hasn’t gotten into yet is the timing necessary to actually transfer data. The issue arises when you need to have multiple 1′s or 0′s in a row. We’ve tried this ourselves using an LDR with limited success. We know it’s possible to get it working since we’ve seen projects like this clock which can only be programmed with a flashing screen.
[Connor's] choice of the TEMT6000 should prove to be a lot more sensitive than using just an LDR. We figure he could find a way to encode using multiple colors in order to speed up the data transfer.