being a fan of old analog radio sets, I decided to collect these related projects starting from a Galena radio receiver that does not need power supply to operate, up to some Arduino experiments… Some analog but digitally driven audio transmission and analog modulation (mostly amplitude). Have fun!
The first is an audio transmitter over LW radio band (734 kHz) in amplitude modulation (AM) which might be easily picked by a once-common radio set.
ARDUINO AM
A little playground to test audio transmission in AM (amplitude modulation) using the Arduino timers to generate the carrier frequency and its internal ADC to modulate the tuned circuit at the antenna side with the amplitude of the input signal.
Here is a simple AM Receiver schematic included for reference and testing, but being the original source, it has to be adapted to the wavelength used in the above project as it is tuned for 88-108MHz or higher (VHF). Extra wire-loops are needed when winding L1 to lower its resonant frequency.
The second experiment is about transmitting encoded data (morse) over the same media.
A third experiment explores the frequency modulation with little success.
// AM broadcasting CW using arduino
// Based on the code from WWW.JONNYBLANCH.WEBS.COM, which was broken
long millisAtStart=0;
long millisAtEnd=0;
const long period_broadcast=8; //period of shortest broadcast (256 port changes)
#define LENGTH_DIT 50
//number of period_broadcasts in one 'dit',
//all other lengths are scaled from this
//Broadcasts on 1337 kHz
// You should put some piece of wire as antenna in digital port 8.
// The experiments at www.mateslab.com.ar show us that a 20cm cable can be tuned with a radio from 2,5 meters. With a 50cm antena you can tune it from 5 meters.
const int length_dit=LENGTH_DIT; //number of periods for dit
const int pause_dit=LENGTH_DIT; //pause after dit
const int length_dah=3*LENGTH_DIT; //number of persots for dah
const int pause_dah=LENGTH_DIT; //pause after dah
const int length_pause=7*LENGTH_DIT; //pause between words
void dit(void);
void dah(void);
void pause(void);
void broadcast(int N_cycles);
void dontbroadcast(int N_cycles);
// ### INC ### Increment Register (reg = reg + 1)
#define ASM_INC(reg) asm volatile ("inc %0" : "=r" (reg) : "0" (reg))
void setup()
{
Serial.begin(9600);
DDRB=0xFF; //Port B all outputs
//Do one dit to determine approximate frequency
millisAtStart=millis();
dit();
millisAtEnd=millis();
Serial.print(millisAtEnd-millisAtStart);
Serial.print(" ");
Serial.print((length_dit+pause_dit)*period_broadcast*256/(millisAtEnd-millisAtStart)/2);
Serial.print("kHz ");
Serial.println();
}
void loop()
{
// Sends SOS
dah();
char_pause();
dah();
char_pause();
dah();
char_pause();
dit();
char_pause();
dit();
char_pause();
dit();
char_pause();
word_pause();
}
// Outputs a dot (.)
void dit(void)
{
for(int i=0; i <= length_dit; i++) // now is 64
broadcast(period_broadcast);
}
// Output a dash (-)
void dah(void)
{
for(int i=0; i <= length_dah; i++) // now is 64*3
broadcast(period_broadcast);
}
// Short pause between chars
void char_pause(void)
{
for(int i=0; i <= length_dit; i++) // now is 64
dontbroadcast(period_broadcast);
}
// Long pause between words
void word_pause(void)
{
for(int i=0; i <= length_pause; i++) // now is 64
dontbroadcast(period_broadcast);
}
// This send something to the air
void broadcast(int N_cycles)
{
unsigned int portvalue;
for (int i=0;i < N_cycles; i++) {
do
{
PORTB=portvalue;
ASM_INC(portvalue);
}
while(portvalue<255);
}
}
// This do not send anything to the air
void dontbroadcast(int N_cycles)
{
unsigned int portvalue;
PORTB=0x00;
for (int i=0;i < N_cycles; i++)
{
do {
ASM_INC(portvalue);
//add some assembly No OPerations to keep timing the same
asm volatile ("NOP");
} while(portvalue < 255);
}
}
Galena
Galena or lead glance, is the natural mineral form of lead sulfide (PbS) being one of the most abundant and widely distributed sulfide minerals. One of the oldest uses of galena was as an eye cosmetic. Galena is a semiconductor with a small band gap of about 0.4 eV, which found use in early wireless communication systems. It was used as the crystal in radio receivers, in which it was used as a point-contact diode capable of rectifying alternating current to detect the radio signals. The galena crystal was used with a sharp wire, known as cat’s whisker in contact with it.
Galena Radio
This is a rather funky project, as it powers itself up from the radio waves it receives, but you will need a very high-impendace headset (> 10KΩ)
Crystal Radio or Galena Radio are “unpowered” radio-receivers sets. They actually power-up themselves by using the captated radio energy via its Antenna. Some technical consideration (like using high-impedance headphones) reduces the energy-losses and maximize efficiency, in order to have a working radio receiver without any power supply, not batteries nor dinamo.