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.
The old timex DataLink watches did this, but watch out.. it flashed the whole screen so hope you’re not epileptic.
I thought of those, too!
At 14yrs old, after seeing my grandfather’s datalink, I bought a Casio DataBANK… much to my dismay, There was zero PC interface.
>.<
your grandfather’s datalink? man I remember those from like 96 maybe? how old were you then? Granted I’m not that old either.
My grandfather had a 5 language phrase translator and an electronic crossword dictionary, got both of them after he retired though. I don’t think he’s saying, “My grandfather had one since he was a boy scout” :-D
I guess I was 13.
Cuz now it’s 2013. I mowed several lawns, too. I thought it was cool that he could update his watch’s phonebook wirelessly.
You beat me to it. I owned one of those. You had an application on the PC that managed the data, like phone numbers, dates, etc. You then programmed the watch by holding it to the screen, which then flickered to transfer. It was one-way, and the data was flashed every time in totality.
It was decent back in the day before the ubiquity of cellphones in the pager era.
Dammit, should have looked at the comments first, I’ve just sat drooling into space for 10 minutes trying to remember where I’d seen this before, and on what, I’d just got to digital watch with a databank feature and was mentally dickering between timex and casio :-D
:D I did the same. I remembered Casio, databank added keyword screen transfer and google showed up comments page as first result, felt really stupid afterwards :D
Yep – I still have my old data link. Still working fine after all these years!
How about to use a self-clocked protocol?
Or Manchester encode it.
or 8b/10b or some other clock recovery scheme.
or 8b/10b etc etc
Since he can change the wavelength what about FSK? PSK works too and might be less error prone!
THIS IS CORRECT METHOD. I BUILT INFRARED DATA LINK FOR MY THESIS 1986.
Beat me to it with manchester encoding. Simple solution when you’ve heard of it.
As do the Electric Imps.
And in one respect, it goes *way* back in time. Light pens did this to detect where on the screen the pen is pointing.
Here in Germany many banks use the ChipTAN system for online bank transfers, which uses a 4 bit + 1 clock bit displayed as black bars on the screen, see https://www.youtube.com/watch?v=qQfKgxNGfbY&t=0m50s
And here’s a JS-implementation of the host side, just click start: http://6xq.net/blog/2010/flickercodes/flickercode.html
That’s the first thing that came to my mind as well. Multiple Sensors and a clock signal.
Further thought: write a bootloader for this, might be a nice way to get new firmware onto devices made for people who are not that much into micro controllers.
Make them have to do it with a flashlight in morse, can’t let the old skills die.
Shakespear on an Alderson lamp.
2 Sensors where the second serves as a clock signal is how I did something like this once. It worked out pretty well.
i wrote something very similar to this a while back to emulate SPI. complete with commented sourcecode.
VisualSPI
My first thought was this thing I found a long time ago http://www.youtube.com/watch?v=iOGv7_chCLQ&feature=player_embedded
Outstanding!
I did something similar to this for an outreach program to allow them to transfer new waveforms to their little synthesizers. I used BiPhase Mark Code (very similar to Manchester Encoding). Using JS one runs into some issues at higher speed that have to do with javascript being a very bad timer. You can get small improvements by creating a video on the backend that is the transfer. Using multiple light levels/colors is also an interesting concept that I was thinking about implementing, but never really got around to it.
I was just looking at this implementation the other day:
http://www.wayneandlayne.com/projects/blinky/
uses two sensors, one for clock and one for data.
Movie plot device!
Wow, this flashes back to setting up Bloomberg authenticators when I was supporting a commodities trading floor.
This was done by BBC television In the early 80’s to send software for ZX81 and BBC’s etc as part of their computer programs. It did work.
I remember reading about that in a Timex Sinclair magazine out then.
Was it? I thought it was a little different, using the bottom 5 lines of the picture or something…. meaning you needed access to the signal rather than using an LDR/LDT/LDD
That was via Teletext, which used the VBI (lines 22/23?). The computer pages were 700 onwards. I think I’d best get my coat.
I remember that there was a TV show about computers that flashed a white/black square in the corner of the screen for a few minutes – as the program’s were not just for the BBC Micro (the BBC only supported that computer) it must have been the ITV show database – this would have been around 1983/4 in the UK… So nothing new here… :-)
I remember that show. You were supposed to wire a photo-detector to an audio cable. Tape the detector to the screen and plug it into a tape recorder. Converting light to noise. I wonder if anyone actually did it.
I don’t remember the video-based one, but in Making the Most of the MIcro, the last episode featured a small BBC Micro program you were supposed to record onto an audio cassette for use in a tape drive.
I remember watching an American Tech show on NTL cable in the 90’s here in the UK that did something similar, the bottom right corner had a black and white square that flashed out a data transmission for a free software giveaway. It is so long ago that I cant remember the name of the show.
Would it be possible to briefly flash an color in between to signal that the next bit is coming, so black is 0, red is 1, green is the “next bit” signal. I know somewhere very very little about binary, so feel free to ignore me if what im saying is a bad idea or just plain wrong.
I was thinking the same thing. Have a “next bit” color and then using like 4 or 8 colors to transfer multiple bits at a time.
Or just, you know, have a start bit and 8 data bits and have the computer and device agree on a baud rate. It’s just serial data, nothing new :P
I suppose it depends on the accuracy of the sensor, but suppose you have 4 colors: red, green, blue, and white you have from 0b00 to 0b11, either bit could be a clock bit, OR you could transfer 2 bits at a time, and in such a case perhaps return to black in the case of repeating colors.
If it was really clever it would have a QAM16 encoding scheme…
i remember having one of those Tamagachi toys that sync’d via monitor. forget what for, but they would put a square on the screen and the toy have a sensor on the back.
The Remee Googles are also programmed by light.
http://sleepwithremee.com/
http://sleepwithremee.com/config.php
Hey guys, Connor here. Website seems to be having some problems but I should have it fixed soon. I can answer any questions if you have any.
reminding anyone else of those CCD based ones that used the magnetic fields of the yoke to program something?
CCD, charge coupled device, a camera sensor, possibly you mean CRT?
yeah …. fucking flu
Yeah same deal the blinky grid uses. Pretty sure Wayne and Layne (forgive the spelling) developed this. Neat kit they sell.
If it can detect 4 colors then it can have its own clock signal built in. Lets assume white and blue = 0 while black and red = 1. Now whenever you have multiple 1s or 0s it can use the alternative color. The color change always shows the next bit even when the bits are the same.
About 13 years ago I was given a keyring fob that had an alphanumeric LCD, some buttons for selection and a CD with software to put addresses and phone number in. The application then flashed a square on the screen you held the fob up to. I though the idea was neat but the execution was terrible. The thing ended up in the bin not soon after. This was back when everyone was drooling over those overpriced Palm Pilot things.
if you keep it just black and white, it should be trivial to keep the timing in check; start a timer, wait for the color to switch and the time between each change is the data, if it’s longer than threshold it’s a 1 otherwise it’s a zero, rinse and repeat until an end of line character or timeout or something like that. not sure for color, though.
I like what junkbox said. Use another color or two, or even greys to transmit start and stop bits. Or flash the black (like Morse Code) to transfer data.
Blinky Grid does exactly the same.
http://www.seeedstudio.com/depot/blinky-grid-red-p-1134.html?cPath=138
And it works extremely well! I bought one for my girlfriend as practice for her soldering skills.
I did something similar with 2 sensors, 1 for clock 1 for data:
http://www.swharden.com/blog/2011-07-31-pcmicrocontroller-wireless-data-transfer-part-2/
http://www.swharden.com/blog/2011-07-26-pcmicrocontroller-wireless-data-transfer/
“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.”
Actually, the most wide-spread of tranfer data with an LCD is making visual representations of abstract computer systems and then pushing that to the LCD screen, so a human reciever interprets such data.
Bloomberg terminals use this, combined with an online-banking style dongle tied into a finger print, to stop people sharing a terminal using VNC or similar.
Back in the 90’s I had a small keychain “PDA” that kept a list of names, phone numbers and small notes. It had a sensor and an LED on the back with tapered plastic bezels. One was countersunk, the other an outside taper.
IIRC info could be laboriously input directly but the faster method was to use the included Windows program which would then blink a white dot in a black square on the screen.
The reason for the LED and opposite tapers was to hold two of the devices back to back to transmit data between them.
Kind of a neat novelty. Before we know it there will be a sort of pipe for light with light transceivers at each end moving data. :)
Ridiculous, and how do you propose to do this, threads of glass? We’ll have them everywhere, all die of blood loss from the breakages…. and just where the hell are you going to get a nixie tube bright enough that you can make out what number it is through a few feet of glass, eh? Preposterous.
ahh,
the exact words from before amplifing tubes!
you forgot the part about detectors arent fast enough to transmit _*moving*_ pictures! lol
later, after amplifier tubes were invented, the light-sensor TUBE solved this, and mechanical TV was born
PS: a single NEON glow bulb actually WAS the light-source in some early mechanical TV’s… the ONLY way to watch was in complete darkness
Very cool. This would be great if you wanted to exfil data surreptitiously from a terminal in a high security environment. Additionally, if you can get control of things like lights on a router hardware i believe it has been demonstrated you can use them to do something similar. :D
Well considering you can’t get anything out, you probably can’t get anything into it either, so you might as well just OCR a hex dump from your spy camera.
Optical discs use ‘eight to fourteen modulation’ to ensure that there are never too many 1’s or 0’s in a row and so to keep the reading clock in sync with the data. Before starting the actual data transmission, a short bit of fixed data is used to tune the data clock. It might be a little wasteful for this purpose, doubling the size of the data, but should be pretty robust. Wikipedia has an fair explanation of the scheme.
Alternatively Brandon’s 8b/10b encoding might be more efficient choice. Being an optical system, it made me think of an existing optical solution.
You have reminded me of this… http://en.wikipedia.org/wiki/Run_length_limited
I don’t have time to recall the details right now, but I think you can choose an encoding scheme that prevents long strings of 1s or 0s, to make synchronization easier. Also, you can have a microscopic flicker between 1s for synchronization purposes (i.e., on a different timescale)
Naively, let
0 -> 1010
1 -> 0110
So …1010011010101010… must represent 0100 and nothing else…
Also, look into http://en.wikipedia.org/wiki/Non-return-to-zero,_inverted …
You can also measure the deviation from a baseline (median) value to avoid timing issues completely. Delta-UP and Delta-DOWN measured from a baseline value will equal your on and off bits.
I did this recently under VERY imprecise conditions for a group of kids:
https://github.com/Gipper/RasPiBinaryDecoder
:)
CHILDREN! The Worlds of Wonder Action Max system, from 1987 used this, with data from VHS tapes of planes flying around. GET OFF MY LAWN.
Nintendo Zapper anyone?
Modulating the backlight instead of the LCD screen might deliver more bandwidth.
Hmmm if it’s a slowass old LCD with flourescent backlighting, on a cold day, then modulating the scroll lock light on the keyboard might be an order of magnitude faster :-D
Back when I was maybe 8, I got a little plastic pda with a pair of Mudd pants that did this. There was a game or something you could download if you visited the website. It also had an led on the back so you could put two of the devices back to back and transfer data. At 8 years old, that was the coolest thing to me.
I remember that thing!!! I don’t know if I ever got it working.
I wonder if it actually did download game code, or if it just unlocked an existing game? If it was real, it would be an amazing hack.to load custom code onto it.
How about using grayscale and a phototransistor? I put together my thoughts here http://eclsh.blogspot.se/2013/02/gray-scale-lcd-data-transfer.html in case anyone finds it useful.
Wileur
If anyone is here because they had the same vague memory as I did of some PDA toy that transferred data in a similar way via a small square on the computer screen, but it barely worked, back sometime around the late 90’s early 2000s. You’re possibly looking for the Z Touch keychain personal organizer.