close-circle
Close
0%
0%

MorseMode

Using inexpensive hardware, create a means of data transfer between machines that can also be accessed by minimally-equipped human beings.

Similar projects worth following
close
280 views
0 comments
0 followers
likes
Morse code may be a useful protocol to address the problem as stated. Use of Morse is a skill that can be learned by most people who choose to do so. The characters of Morse code are arrangements of the "Presence" or "Absence" of a signal; it is an intrinsically digital protocol which should be easy to read and write by machine.

The test hardware is based on Arduino clones. Computers on the "sending" and "receiving" ends of the conversation simply read from and write to their respective serial ports. The computers have and need no knowledge of Morse. An human participant in the conversation needs only the minimum hardware required to access the chosen physical transport medium, with data processing handled by the brain.

Currently the MorseMode hardware works quite well when the two units are connected by wire. The next step is to add an analog front-end to allow interface with my chosen medium: audible acoustic signalling.

MorseMode is a hardware translator between (a subset of) ascii and international Morse code. It is mostly a "just for fun" project, but might have some limited practical application. A zipped copy of the current version of the project source code is available in the Files area of this project.

The challenge can be stated as follows. Using low power, inexpensive hardware, create a means by which data be sent over a open channel (radio, sound through the air, infrared light etc ) in a form that is accessible to both computers and minimally augmented human beings. A data rate slow enough for a person to read in real time is assumed, say 5 to 40 'words' ( groups of five characters each) per minute.

This data rate is no challenge at all for computer-only data transfers. The 'challenge' is that I am also requiring that the transmitted information be accessible to humans without computer assistance. There are old stories (possibly apocryphal, a google search turned up nothing) of phreakers who could read teletype-era modem tones by ear, but even if the stories are true this skill is likely difficult to learn. Alternatively, it might be possible to use voice recognition software on the receiving-end computer. This idea solves the human access problem, but is unlikely to be a practical, general solution in 2017 on "low power inexpensive hardware".

Morse code may be a useful protocol to address the problem as stated. Use of Morse is a skill that can be learned by most people who choose to do so (When I earned a ham license, I went from zero to adequate copy at 20 words per minute in less than six months without extraordinary effort or talent). The characters of Morse code are arrangements of the "Presence" or "Absence" of a signal; it is an intrinsically digital protocol which should be easy to read and write by machine.

Some people may be surprised to learn that Morse is still a 'living' medium. Until 2007 Morse proficiency was a requirement for at least some Amateur Radio licenses and it remains a favored mode of many amateurs. In 2017 there is still one class of FCC Commercial Radio Operator License that requires demonstration of Morse proficiency https://www.fcc.gov/wireless/bureau-divisions/mobility-division/commercial-radio-operator-license-program/examinations

The test hardware is based on some Arduino clones pulled out of my 'old projects' pile uh... resource archive. At one end is an UNO R3 and the other is a 5V 16 MHz pro-mini clone with an FTDI usb-to-serial converter. Computers on the "sending" and "receiving" ends of the conversation simply read from and write to their respective serial ports. The computers have and need no knowledge of Morse. An human participant in the conversation should need only the minimum hardware required to access the chosen physical transport medium, with data processing handled by the brain.

This project is still a work in progress; although most commonly-used ascii characters have direct Morse equivalents, some do not. For now, if ascii characters are sent that have no direct Morse equivalent, they are replaced by underscore characters. No notification of an unrecognised character is presently returned to the sender; also, extensions to Morse code that address languages other than English have not been implemented.

Currently the MorseMode hardware works quite well when the two units are connected by wire. The next step is to add an analog front-end to allow convenient interface with e.g. acoustic, radio or optical links. Sound-through-air is my initial choice of physical transport medium This will allow a convenient way to experiment in a “real” noisy, multipath environment. It is also consistent with the basic concept of allowing an unaugmented human being to directly access the data stream. A human can receive by ear. To transmit, a person would need a switchable sound source of suitable frequency. Mouth-whistling probably won’t work, though a Captain Crunch ‘2600’ whistle might....

Read more »

MorseModeSnapshot_May15_2017.zip

AnalogFrontEnd_V2 contains documentation of the revised version of analog circuitry MorseMode12b contains the latest version of the relevant Arduino source file "MorseMode12b.ino". Under Ubuntu 16.04: ‘shasum MorseMode12b.ino’ yields c6685a0f84b173c7ccf6f346b2e6f2a87d0f09dc ‘md5sum MorseMode12b.ino’ yields a954a42eea4959e4c9db2cb5e47b5cca See MorseModeSnapshot_May15_2017_READ.ME for more information

Zip Archive - 1.26 MB - 05/16/2017 at 01:21

download-circle
Download

AnalogFrontEndConceptualV0r7r0.pdf

MorseMode analog front end concept circuit drawing as downloadable pdf

Adobe Portable Document Format - 64.84 kB - 05/09/2017 at 19:22

eye
Preview
download-circle
Download

  • Version 2 of the Analog Front End

    rgrigg05/15/2017 at 22:53 0 comments

    The previous version of the analog front end used a high-Q (Q=18) input filter that required software to compensated for distortion of the lengths of tne mark and space intervals that compose Morse code characters.

    This updated version uses lower Q filter (Q=6) which greatly reduces temporal distortion. Improvements to the ability of the circuit to tolerate variations of power supply voltage have also been implemented. The BOM cost has been decreased (previously used four opamps, now only two) .

    An Arduino Uno or similar microcontroller board can directly generate audio frequency signals on its digital output pins, and is capable of providing sufficient signal energy to directly drive a small audio transducer. The MorseMode prototype currently uses a high impedance piezoelectric 'crystal' earphone as an output (transmit) transducer.

    A bit more analog circuitry is required to implement the receive function. The initial input stage is an amplified electret microphone module, Adafruit part number 1063. The 1063 module gain control is adjusted to yield an output signal amplitude in the range of 50 to 100mV when exposed to the MorseMode transmitter audio output. The signal from the 1063 module is fed to an active filter tuned to 1320 Hz (arbitrarily chosen 3x 'concert a' note). This is a four pole bandpass filter with a Q of six(6) and a voltage gain of 100x. The output of the filter is fed to a pnp transistor that acts as a rectifying amplifier (negative excursions of the base voltage increase the magnitude of the collector current). The rectifying amplifier output is fed to a 1uF capacitor paralleled with 3.3kohms to ground. The time constant of the 1uF and 3.3k ohms is about four times the period of the 1320Hz signal passed by the bandpass filter. The voltage across the capacitor will approximate the shape of the envelope of the output of the bandpass filter. Essentially, this circuit is an AM radio operated at audio frequencies.

    A Schmitt trigger circuit is used as a comparator to convert the envelope waveform into a series of high and low 'digital' levels. These levels encode the mark and space states that make up Morse code characters. The MorseMode analog front-end circuit is designed to be powered with rails at 0V and 4.8 to 6.2V (four NiMH cells, arranged with a ‘synthetic ground’ for the opamps tapped between the second and third cells). If these voltage levels are used, the output of the Schmidt trigger circuit can be connected directly to the Morse input (Pin 2) of a 5V-powered Arduino Uno.

    The output of the envelope detector is also sent to a simple one-transistor amplifier used as a controlled-current sink in series with an LED. The LED brightness is proportional to the envelope waveform voltage which can be convenient during signal acquisition.

    An optional open collector output has been added for cases where the companion microcontroller is not able to tolerate or use the nominal 4.8V to 6.2V above-ground swing of the Schmitt trigger output.

    Text Copyright © 2017 R.Grigg Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

    MorseMode Analog Front End Hardware Design Copyright © 2017 R.Grigg This is a free hardware design: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This design is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

  • Analog Front-end OBSOLETE VERSION; Deprecated

    rgrigg05/09/2017 at 19:18 0 comments

    To allow Morsemode to be used without a direct wired connection, access to an alternate physical medium must be provided. I have chosen to use audible sound through air. This is consistent with the requirement for easy access by unaided human persons, but can also potentially simplify access to electronic communication channels (let MorseMode use the same mic and speaker that a person would; no plugs, no wires! ).

    An Arduino Uno or similar microcontroller board can directly generate audio frequency signals on its digital output pins, and is capable of providing sufficient signal energy to directly drive a small audio transducer. The MorseMode prototype currently uses a high impedance piezoelectric 'crystal' earphone as an output transducer.

    Somewhat more analog circuitry is required to implement the receive function. The initial receiver input stage is an amplified electret microphone module, Adafruit part number 1063. The 1063 module gain control is adjusted to yield an output signal amplitude in the range of 50 to 100mV when exposed to the transmitter audio output of a second MorseMode unit (placed an arbitrarily chosen 30cm transducer separation distance for testing). The signal from the 1063 module is fed to an active filter tuned to 1320 Hz (arbitrarily chosen 3x 'concert a' note). This is a four pole bandpass filter with a Q of 18 and a gain of 100x. The output of the filter is fed through a forward-biased diode to a 1uF capacitor paralleled with 3.3kohms to ground. The time constant of the 1uF and 3.3k ohms is about four times the period of the 1320Hz signal passed by the bandpass filter. The voltage across the capacitor will approximate the shape of the envelope of the output of the bandpass filter. Essentially, this circuit is an AM "crystal radio" operated at audio frequencies.

    A Schmidt Trigger circuit is used as a comparator to convert the envelope waveform into a series of high and low digital levels. These levels encode the mark and space states that make up Morse code characters. The MorseMode analog front-end circuit is designed to be powered with rails at 0V and 4.8 to 6.0V. A 'synthetic' analog ground is created at a level of 1.2 to 1.6V. If these voltage levels are used, the output of the Schmidt trigger circuit can be connected directly to the Morse input (Pin 2) of a 5V-powered Arduino Uno.

    The output of the envelope detector is also sent to a one-transistor amplifier used as a controlled-current sink in series with an LED. The LED brightness is proportional to the envelope waveform voltage, which can be convenient during system setup and signal aquisition.

    A pdf copy of this image is available in the 'files' section of this project

    There is an additional signal-processing consideration to address. The bandpass filter has sufficient Q that it "rings" for a significant period of time after the 1320 Hz input signal goes to zero amplitude. This ringing effectively stretches mark states. The length of the ringing interval is primarily dependant on the envelope amplitude at the end of the mark interval. Ring duration is essentially independant of the duration of a mark interval.

    There are several possible approaches to correction of ring-induced mark distortion. The method I have chosen is to make a compensating adjustment in the MorseMode software. A constant time (default 10 milliseconds, can be changed by user) is automatically subtracted from each mark interval, and added to each space interval. This method works fairly well as long as mark interval signal amplitude is reasonably constant. An Automatic Gain Control (AGC) circuit, or even a simple voltage clamp at the envelope capacitor would probably further improve the range of useful input amplitudes.

  • Correction to annotated Arduino Uno image in Project Details

    rgrigg05/08/2017 at 22:03 0 comments

    Corrected picture in "Project Details" that showed incorrect pin for Audio output

View all 3 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates