The laser phone operates pretty much as you would expect it to. Sound is gathered from the microphone, sent through the ADC of the microcontroller and converted to digital pulses. Those pulses are sent through the laser beam to the phototransistor on the reciever, which uses a series of filters and amplifiers to reconvert it into an analog signal.
On the transmitter side, we used a generic microphone, leading into an operational amplifier. The amplifier is important because otherwise the signal from the microphone would be too weak to get an accurate reading from. The amplifier feeds directly into an ATTiny 45 microcontroller, which uses PWM to convert the signal into discrete pulses, output through the laser flickering on and off.
The most important part of this circuit isn't the microcontroller, however. If you examine the schematic, you will notice a series of transistors that route the output current from the microcontroller. These serve to limit the current to the laser diode at a level of 20 mA, and if they were not in place there is a significant chance that the laser emitting diode would be damaged.
Transmitter schematic | Transmitter PCB | |
Looking at the receiver schematic, the first thing you notice is that we use four operational amplifiers. The first two that you see that are inline with the phototransistor are there for basic signal amplification and noise reduction. The second set of two actually compose an analog low-pass Butterworth filter of the 4th oder. It provides up to a -70 db reduction in the 10K frequency range. After the filter is done with the signal, it is sent through an audio power amplifier before it gets routed through the speaker.
Receiver schematic | Receiver PCB | |
The phone is a relatively simple thing to implement in Assembly. The first section is the standard controller initalization, though you will note that I initalize a large number of registers at the very beginning of the file. These are used in the implementation of the digital comb filter. What the comb filter does is smooth out the audio signal sent out from the microcontroller by keeping a moving average y of the inputs according to the formula
y = y - (x-xk)/k
where k is the number of inputs you're sampling across (8 in our application).
Another thing to note in this code is the fact that we're decimating the outputs by a factor of 4. The human voice usually projects at a range of 0 - 4KHz. To help reduce the risk of interference due to intersection between waveforms, we then go and oversample the voice at a rate of 32 kHz. After we recieve and average the samples, we then decimate the output stream back down to 8 kHz by only outputting every 4th result from the comb filter.
Last modified:Mon, Jan 23, 2023.