Optical PC interface

I would like to build an optical link from a computer monitor to an Arduino. Maybe you know the method to transfer data via blinking patterns on the screen. This is used e.g. by banks to generate TANs. Has anyone ever built something like this with an Arduino? I just want to drag short text files to a program icon, this text is converted to blinking binary code, this code is received by photodiodes of an Arduino, and written to a textbox on another computer.

Is there such an application, and under which keywords could I find it?

Is it? What's a "TAN" here?

What is the purpose behind this? Why can't you just use conventional file transfer methods?

Does the blinking happen on a specific part of the screen, and the photodiode(s) is placed over that place?
That shouldn't be hard to do - it's just reading a photo diode.

Getting something to look at an entire screen, and work out where this signalling is occurring would be a lot harder!

I am not concerned with TAN generation, but only with data transmission. And yes, it is rather a simple matter. But I didn't want to reinvent the wheel.
Yes, there should only be a form at a special position on the screen to take over the flashing.
It is meant for a unidirectional transmission. It is an analyzer PC, which must not be connected to the company's network. That is why the data are loaded on USB sticks so far, and processed in the other PC. Since I consider this to be rather tedious and cumbersome, and also not compliant with the security regulations in the company, I am looking for a simple solution that could be automated.

Why not just use a serial link?

Just use a single wire, and you'd achieve the "output only; no input possible" thing?

Having to mess about with an arduino still sounds rather cumbersome.

I guess it's all contingent on finding this TXT-to-blinks app.
Would installing that be in keeping with 'security regulations'?
I suppose it won't look suspicious holding a photodiode assembly to the monitor?

Sometimes you have to resort to psychological tricks to give people an illusion of security.

As soon as I make a galvanic connection between two devices using wires, people with a certain lack of technical understanding are more inclined to think it's an illegal insecure connection that some computer virus could jump across. If it is an optical connection, they are more likely to be convinced of its security. :stuck_out_tongue_winking_eye:

But actually I don't want to discuss here the reasons why I want to use this or that method. Because I have already thought about that before.
I actually just want to know if someone else has already used this method, and might provide me with the appropriate code.
Or that someone has some ideas how to improve my method. I want to say, the method is already fixed, but I am willing to optimize it.

Many years ago I had been involved with self-programmed serial data transfers.
Here in this case I might even use several parallel photodiodes to make the data transfer safer and faster. But since I don't want to spend months on optimization and programming, I just wanted to ask if someone had already done something like this.
For example, I don't know yet which program I would use to create the actual blinking, because I don't have all the possibilities at my workplace, and I might have to program with VB.Net.

IrDA is non-galvanic

You also realize how crazy this is? :wink:

It is a measurement data series of maximum 10 values.
These have 2 decimal places. So we have with CRLF
together 7 bytes * 10 = 70 bytes. If I have more
diodes in parallel I can also save time.

In the time it takes the user to get from the sending PC to the
receiving PC, the data will be there too. :turtle:

I know what you mean, but you also have no idea how often people can't copy simple numbers off the screen correctly. The same goes for typing them in again on another PC. Moreover, in a world of computers, you think it's very strange that you still have to copy data somewhere by hand at all.
I myself find it stupid, of course, when a company wants the analysis results, but puts harassment in the way of the workers with some safety regulations, so that you have unnecessary work.
Today, it is already like in a locksmith's shop, where the locksmith has to ask his boss for a hammer in the morning, so that he can actually do the work that the boss has already given him.

We will see when it is ready

I don’t want to drive this thread off-topic but there was something way back at the dawn of PCs that transferred information via a flashing spot on a TV screen. I haven’t found the right words to get Google to cough it up yet.

Why use Arduino when bar codes exist? Bar codes = 1 way optical data
transmssion using off-the-shelf hardware and software. Find software that
convert ASCII text to bar code image then display the image on the sending PC.
On the receiving PC use a USB bar code reader to read the bar code.

Many years ago we used to embed a bunch of white boxes into the video steams from the camera on our trials aircraft. The boxes appeared across the top of the video picture to indicate a time code in binary. We stuck a bunch of photo diodes (I think...) mounted on a piece of veroboard to the screen and decoded the time stamp.

Similarly to the QR codes used on TV these days to direct the viewer to a web page.

Sparkfun sell a 2D barcode scanner:

EDIT: Maybe there's a library you could use with an ESP32-CAM board to decode barcodes instead.

How will the optical-capture data be transferred to the other PC ?
Is that outside the company's security domain ?

Barcodes are not a bad idea in principle.
And I have already written many applications with barcodes.
In this case, however, I would take a 2D code, which would probably be sufficient to transfer all the data in one go. The only problem here is that you need proprietary program libraries most of the time, because I certainly won't go to the trouble of writing software that generates Data Matrix or QR code.
Our 2D code scanners are wireless and work via Bluetooth.
So if I could find an easy to use library for 2D code generation, preferably for free, I am just thinking that would be a good alternative.

4.3K stars on github.

Thanks, I'll take a look at those things.