Wireless Communication with Audio
This week I worked on sending data wirelessly using regular (human audible) audio frequencies. Data is sent using the Internet 0 click protocol to define a byte (except I am not using stop bits). For my project a click is a burst of sound at a particular frequency.
(picture from here)
Picking out the clicks is done with a simple digital audio filter running on a tiny13. The technique is called synchronous demodulation, and in this simplified case it is done by multiplying the incoming audio signal by a square wave at the frequency you are trying to detect and accumulating the result (the square wave is from -1 to 1). This was, other frequencies will cancel out, and a large result (negative or positive) means the frequency is present. To account for phase shifts, I used two square waves 90 degrees out of phase and accumulated for each of them seperately. This worked pretty well - in close range communications the microphone could eliminate irrelevant audio less than 100hz away.
Sending:
jgspeakb.asm - source for speaker sending out bytes in click language based on potentiometer value.
jgspeak_varpitch.asm - source for speaker varying its pitch based on potentiometer value, for testing audio frequency filter.
jgspeak.sch - schematic
jgspeak.brd - board layout>
Receiving:
mictvb.asm - source for tiny13 that filters audio, gets byte's using the click encoding, and sends them out over serial
mictv.sch - schematic of receiving board with the two tiny13s
mictv.brd - board layout of receiving board with the two tiny13s
video - page describing operation of other tiny13 on this board, which gets serial from the mic tiny and controls the video signal.
edit