Transmitting Photograph through AM Radio Waves using Arduino UNO R3

Hello Arduino Forums,

I am new here, and I am new to using the Arduino. I've recently been interviewed at a company that specializes in radio communications for an internship, and have chosen to do a school project related to this field. My goal is to use the Arduino UNO R3 board to decode a black and white photograph, convert this information into an AM radio wave, and have it decoded and displayed by the receiver on an LCD screen, or perhaps written to an SD card which I can remove, and show it has been transmitted to my class during my project presentation.

I'm a poor college student, and I know a lot of the peripherals are very affordable for the Arduino, but I'd like some guidance on exactly what will be required to accomplish this in order to minimize the money I'll spend. I've attached a very early thought map of how I'd like to go about doing this.

An early problem I speculated occurring is the issue of memory. I've googled the allotted flash memory storage, which said it was 32K bits (5K being used for the bootloader). So I speculate that I will either need an SD card attachment for the Arduino, or will have to do serial communication through a USB cable from my computer because an image is much more than 27K bits. In the thought map, I initially intended to plug my smart phone into the board, but since I have an Iphone I doubt I'd be able to find the correct cable converter. So my first question would be which of these two options is better: An SD card which contains the photo, and will be read directly by the board, or serial communication, which I am not familiar with at all, and question how the process of decoding the photograph would work in this way. I would not mind spending the money for an SD card attachment.


My program which I will upload to the Arduino on the Transmitter side will work in this way:

Row = 0;
while Row < Rowtotal
Row = Row + 1;
while Pixel < Pixeltotal
Pixel = Pixel + 1;
X =
end
end

And X will be passed to the modulator which will alter the amplitude of the wave. The receiver will detect the amplitude of the wave as one of two magnitudes, the higher amplitude signifying a 1(Black) and the lower amplitude signifying a 0(white).

I plan on using a breadboard with DC 5V power source, and using a Texas Instructs IC VCO Oscillator, which will output a 35MHz frequency given the 5V input. This AC current with 35MHz frequency will be passed to the Modulator, and this is the part I am most worried about. I am uncertain about how to incorporate the Arduino's X output into the Modulator. I've researched Modulators and have been unable to find a cheap IC modulator component, so I may have to build this myself from the circuit kit I purchased for my electrical classes.


I assume the only way to have the receiver display the photograph on an LCD screen is to have 2 Arduino boards, one with the transmitting code, and one with the receiving code.

My program which I will upload to the Arduino on the Receiver side will work in this way:

Row = 0;
while Row < Rowtotal
Row = Row + 1;
Pixel = 0;
while Pixel < Pixeltotal
Pixel = Pixel + 1;
Y =
end
end

I think it would be cool to show the LCD screen updating each individual pixel as the Radio wave is received and decoded, but I imagine it would be best to fully decode the photograph to an SD card, and then have the LCD display the photograph.


I am unsure exactly how I will accomplish initially reading each individual pixel of the photograph, and also how I will write each individual pixel during the decoding process.

I plan on decoding the AM signal by using the DC current generated by the detector in a circuit leading to ground which will pass over a resistor. The voltage drop across this resistor will signify if that pixel should be black or white.

I'm sorry this post is so long! And again, my main concern is figuring out exactly what I should need to buy in terms of peripherals for the Arduino to accomplish this process. If anyone has additional information that may simplify this process I would appreciate it a lot!

The Arduino Uno has only about 2K bytes of RAM memory and is totally unsuitable for image manipulation.
The 32K bytes of flash memory are for programs and permanent data.

I am unsure exactly how I will accomplish initially reading each individual pixel of the photograph

This is also a difficult problem for Arduino.

Purely for educational and demonstration purposes, it would certainly be possible to transmit, say, a 16 bit x 16 bit black and white image (single bit pixels, think of a small icon) by radio and display that on a suitable LCD.

jremington:
Purely for educational and demonstration purposes, it would certainly be possible to transmit, say, a 16 bit x 16 bit black and white image (single bit pixels, think of a small icon) by radio and display that on a suitable LCD.

I really like this idea! It simplifies the process immensely. Like I said in my post, I'm very new and uncertain about many limitations of the Arduino. I thought a nice big photograph would be cool, but displaying a smaller 'photo' would serve the same purpose. I know my professor would still appreciate the feat of transmitting a small icon in this way.

I suppose doing it this way would remove any need for a USB cable, or SD card on the transmitting Arduino board, as I assume it'd be possible to just write the initial icons 16x16 pixel values into the code as a matrix.

which said it was 32K bits

No it is 32K bytes not bits.

which will output a 35MHz frequency given the 5V input. This AC current with 35MHz frequency will be passed to the Modulator,

It is illegal to make a transmitter in most countries of the world. Where in the world are you? Their are some places which permit very very low power transmitters.

I am uncertain about how to incorporate the Arduino's X output into the Modulator. I've researched Modulators ...

But not very well otherwise you would have known that all you need for an AM modulator is a single transistor.

To have an image of 128 by 128 pixels you need to have 16K of memory, it is possible to have this memory on a display although you will have to pick a display that allows fast single pixel access.

I would advise you to look at ham radio sites, in particular SSTV ( slow scan TV ) that transmits a 128 by 128 grey scale picture in about 8 seconds by representing each pixel as an audio tone. You would therefore store the image on an SD card and turn it into a tone and AM modulate that tone. However the simple tone generated by an Arduino is a square wave which is not suitable for radio modulation unless it is first filtered to remove all harmonics above 3KHz.

I would not use an Arduino Uno but something faster, like a Due or a Zero. Or something even faster like a Teensy. The cheapest option would be to forget about an Arduino altogether and use a Raspberry Pi.

Interesting project. If you are thinking of a black and white photograph consisting of only black or white pixels, then you are describing a FAX image. A digital black and white photograph may have 256 bits to describe one pixel.

I think a FAX image may be doable with an Arduino.

Paul

A digital black and white photograph may have 256 bits to describe one pixel.

No.
One byte maybe that is 256 levels but only 8 bits.

Grumpy_Mike:
No.
One byte maybe that is 256 levels but only 8 bits.

Correct!

I would recommend using license free low power radio modules (e.g. 434 MHz in some countries, 315 MHz in others), along with the very simple Arduino VirtualWire library for data transmission. They have plenty of range for classroom demos.

Grumpy_Mike:
No it is 32K bytes not bits.

My apologies!

It is illegal to make a transmitter in most countries of the world. Where in the world are you? Their are some places which permit very very low power transmitters.

I am in the United States. One of the issues I was worried initially about this process is the receiver picking up random radio wave signals from music stations, and being impossible decipher the AM wave. The IC oscillator I've chosen outputs a frequency of 35MHz, and it seems according to wikipedia most music stations broadcast >75MHz.

The transmitter I'd be making would be very weak, only powered by a 5V source.

But not very well otherwise you would have known that all you need for an AM modulator is a single transistor.

I'm only in an introductory circuits course, and in my defense this project is a little bit past my scope of knowledge at this point, but I enjoy learning new things and I think this project would be a good way to impress the company I'm hopefully going to have an internship with.

If this is the case, and I do only need a single transistor to modulate the AM wave, that make me very happy! The modulator circuits I found on google seemed extremely complicated.

Paul_KD7HB:
If you are thinking of a black and white photograph consisting of only black or white pixels, then you are describing a FAX image.

I think a FAX image may be doable with an Arduino.

I didn't know it, but yes a FAX image is what I am trying to transmit with the Arduino.

Are there black and white photographs that have a certain magnitude of the blackness/whiteness that wouldn't be a FAX image?

I've chosen outputs a frequency of 35MHz, and it seems according to wikipedia most music stations broadcast >75MHz.

You can not just pick any frequency. Anyway music stations are FM which you will not pick up on an AM receiver.

Attached are the regulations from the FCC, they are quite strict as to power and frequency.

FCC regs for self build transmitters.pdf (911 KB)

Grumpy_Mike:
You can not just pick any frequency. Anyway music stations are FM which you will not pick up on an AM receiver.

Attached are the regulations from the FCC, they are quite strict as to power and frequency.

The OP seems to be thinking of what the FCC calls an "incidental radiator". Same as the oscillator in your superhetrodyn AM receiver. A few microwatts. My antenna analyzer generates a couple of microwatts over the range of 1.5 MHz to 150 MHz into what ever antenna I am testing. Perfectly legal. I can hear it in an adjacent receiver, but a neighbor cannot hear it. Even valid on aircraft frequencies.

If the OP stays with this power range and has an AM receiver, that part of the project is reasonable.

My concern is he has no clue about digital images. Even a FAX transmission needs to have an ID for beginning of FAX, end of line, end of FAX, to be usable. Then he has to be able to bit shift each byte and modulate his oscillator.

Paul

And then a real fax machine doesn't send all the bits. It uses some simple compression by only sending which bits changed on each line. Look up run-length encoding.

Paul_KD7HB:
My concern is he has no clue about digital images. Even a FAX transmission needs to have an ID for beginning of FAX, end of line, end of FAX, to be usable. Then he has to be able to bit shift each byte and modulate his oscillator.

You are right. I don't.

But wouldn't it be possible not to need any sort of 'file type'? If my receiver is hooked up to another Arduino board programmed to read the voltage across the detector output resistor, it would know to write a 1 or 0 into a certain location of a matrix. When this process is complete I can then upload this matrix to the LCD where each 1 or 0 displays black and white, respectively?

Or perhaps I could program the receiver to begin recording this matrix when it receives a voltage of, say, twice the voltage which represents a 1, and end in the same manner.

At this point I've dropped the idea of doing an entire photograph and am planning on a smaller 16x16 bit icon to be displayed on the LCD. If I can get that functioning properly I may increase the size slightly.

Can anyone recommend an LCD display that doesnt take up all the pins on the Arduino? I need my receiver to have enough pins to measure the voltage drop across my detector output resistor so it can tell if the pixel should be black or white, in addition to being plugged into an LCD. Since my AM wave will be transmitting a 16x16 pixel icon, my LCD doesn't need to be a giant monster of a screen.

Look at one of the OLED screens that Adafruit do. They normally use SPI which is about as fast as you can get on an Arduino.

Paul_KD7HB:
The OP seems to be thinking of what the FCC calls an "incidental radiator". Same as the oscillator in your superhetrodyn AM receiver. A few microwatts. My antenna analyzer generates a couple of microwatts over the range of 1.5 MHz to 150 MHz into what ever antenna I am testing. Perfectly legal. I can hear it in an adjacent receiver, but a neighbor cannot hear it. Even valid on aircraft frequencies.

If the OP stays with this power range and has an AM receiver, that part of the project is reasonable.

I think much of the concern in these sorts of instances is that the person building the transmitter hasn't demonstrated the expertise to evaluate the performance of the receiver. On the other hand, in a university environment there should be access to a reasonable level of expertise to evaluate whatever he comes up with. Alternately amateur radio clubs are a good resource to support this sort of thing.

Google Radio Fax or Weatherfax. It's been around for decades. You do need some sort of sync and start signal. I would think you would be better off with teensey it has far better audio capabilities. You can receive weatherfaxes using a standard radio receiver with a headphone output connected to the microphone socket on the PC soundcard and some software.

Would the frequency matter at all for this project? I'm looking at two near identical transmitter/receiver pairs on Amazon. One product transmits on a frequency of 315MHz, the other 433MHz. The maximum distance I'd need this to work at is only about 1-5 meters.

Also, I'm becoming increasingly more aware that the arduino uno may not be suitable for this kind of project. If I want to transmit this 16x16 pixel 'photo', it needs to be able to read the information coming in as a 1 or 0, and then compile that into an image and send the image file to the LCD screen. The transmiting board I suppose doesn't need to do this process, as I can simply write in a matrix of 1's and 0's into the transmitting code itself.

Is there a board that has the capabilities to create an image from this data before sending it to the LCD? I want to ideally have it so a 1 represents a 'square' of pixels, not just a single pixel, so it is easy to see the difference between a "1" square and a "0" square.

I suppose if I cannot figure out how to do this, I'll just have to resort to transmitting a message of characters instead of a picture.

This is the transmitter/receiver I'm looking at (either 315 or 433 frequency):
https://www.amazon.com/SMAKN®-315Mhz-Transmitter-Receiver-Arduino/dp/B00UWBJ7GK/ref=sr_1_4?s=automotive&ie=UTF8&qid=1491101959&sr=1-4&keywords=arduino+transmitter+receiver

This is the LCD screen:

Also, it seems extremely simple to be able to transmit video to an LCD screen, so maybe I'm just overthinking this too much.

Here's a video of webcam being used with the arduino:

Could I simply plug in my arduino uno to my laptop, and use some library code to transmit a photograph to a receiving arduino board hooked up to an LCD?