Notifications
Clear all

For the Hams on Board

73 Posts
5 Users
1 Likes
36.4 K Views
VE1DX
(@ve1dx)
Member
Joined: 5 years ago
Posts: 143
 
Posted by: @robo-pi

I was thinking of hooking up a Morris code key to the transmitter and sending out CQ CQ CQ,

Samuel Morse (not Morris) would be spinning in his grave!  I agree with @codecage, though.  No one would bother you, and likely no one would answer, either.


   
ReplyQuote
Robo Pi
(@robo-pi)
Robotics Engineer
Joined: 5 years ago
Posts: 1669
 
Posted by: @ve1dx

No one would bother you, and likely no one would answer, either

I really wouldn't expect to get an answer for two basic reasons.  First, it's highly unlikely that anyone is monitoring 433Mhz with an audio receiver prepared to answer a CQ.   And secondly, they would need to be extremely close to me since I'm only transmitting with 100 mW.   Or listening very intently for very faint signals.   Maybe some QRP buff might catch it.  But then again it's highly unlikely a QRP buff would be monitoring 433Mhz. 

Although according to Wiki transmitting QRP signals at as low as 100 mW is sometimes done:

There is not complete agreement on what constitutes QRP power. Most amateur organizations agree that for CW, AM, FM, and data modes, the transmitter output power should be 5 watts (or less). The maximum output power for SSB (single sideband) is not always agreed upon. Some believe that the power should be no more than 10 watts peak envelope power (PEP), while others strongly hold that the power limit should be 5 watts. QRPers are known to use even less than five watts, sometimes operating with as little as 100 milliwatts or even less. Extremely low power—1 watt and below—is often referred to by hobbyists as QRPp

I never knew there was such a thing as QRPP.   I'm, a QRPPer. ? 

Someone might respond to a 100 mW signal if transmitted on a frequency that is known to be popular with QRPers.  I used to be interested in QRP when I first got interested in Ham Radio.  I think it's kind of cool to see just how far you can get with a little bit of power.

Posted by: @ve1dx

Samuel Morse (not Morris) would be spinning in his grave!

I'd flunk the Ham test if it wasn't multiple choice and they take off for bad spelling.

DroneBot Workshop Robotics Engineer
James


   
ReplyQuote
Robo Pi
(@robo-pi)
Robotics Engineer
Joined: 5 years ago
Posts: 1669
 

Here's a very simple project on Instructables for Arduino for decoding Morse Code.   So I don't even need to create it from scratch.   I can just use this one and modify the timing to suit my needs.

Arduino Morse Code Decoder

I'm thinking also that if I could find a way to determine the timing of an actual Morse Code radio signal I could modify this Arduino sketch to allow me to set the timing on the fly from the Serial monitor and then the Arduino should be able to decode live Morse Code transmissions.  

It seems to me though that there would still be  problems getting it to start at the correct place.   Getting the timing lined up in the beginning might be a problem.  It will be interesting to see how well this Instructables example works.

DroneBot Workshop Robotics Engineer
James


   
ReplyQuote
VE1DX
(@ve1dx)
Member
Joined: 5 years ago
Posts: 143
 

/*
* Simple Arduino CW program to emulate a Memory Keyer
* with sound and a flashing LED Has 4 pre-defined memories.
* Test is shown on a 0.91" OLED display
* We are using an Elegoo Mega 2560 clone because we need 4
* hardware interrupts
*
* Paul M Dunphy, VE1DX
*
* 1 June 2019
*/

#include "U8glib.h"
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);

char *myMem[] = {
"CQ CQ VE1DX TEST",
"DE VE1DX 5NN 05",
"TU DE VE1DX TEST",
"AGN ?"
};
char mess[100];

const char* MorseTable[] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// space, !, ", #, $, %, &, '
NULL, "-.-.--", ".-..-.", ".----.","...-.-", NULL, NULL,NULL,
// ( ) * + , - . /
"-.--.", "-.--.-", NULL, ".-.-.", "--..--", "-....-", ".-.-.-", "-..-.",
// 0 1 2 3 4 5 6 7
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...",
// 8 9 : ; < = > ?
"---..", "----.", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..",
// @ A B C D E F G
".--.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
// H I J K L M N O
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---",
// P Q R S T U V W
".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--",
// X Y Z [ \ ] ^ _
"-..-", "-.--", "--..", NULL, NULL, NULL, NULL, "..--.-",
// ' a b c d e f g
NULL, ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
// h i j k l m n o
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---",
// p q r s t u v w
".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--",
// x y z { | } ~ DEL
"-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL,
};

int dotLength = 40;
int dashLength = dotLength * 3;
int CW_pin = A0;
int flashPin = 13;
int freq = 650;
int Pin2 = 2;
int Pin3 = 3;
int Pin18 = 18;
int Pin19 = 19;
volatile int mess_number = 0;
volatile int buttonState = 0;

volatile boolean pressed = false;

void clearOLED(){
u8g.firstPage();
do {
} while( u8g.nextPage() );
}

 

void prompt(void) {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 22, "Press 1-4");
}

 

void showText(void) {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 22, mess);
}

 

void setup()
{
clearOLED();
memset(mess,0,strlen(mess));
pinMode(flashPin, OUTPUT);
pinMode(CW_pin, OUTPUT);
pinMode(Pin2, INPUT_PULLUP);
pinMode(Pin3, INPUT_PULLUP);
pinMode(Pin18, INPUT_PULLUP);
pinMode(Pin19, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(Pin2), ISR_2, RISING);
attachInterrupt(digitalPinToInterrupt(Pin3), ISR_3, RISING);
attachInterrupt(digitalPinToInterrupt(Pin18), ISR_18, RISING);
attachInterrupt(digitalPinToInterrupt(Pin19), ISR_19, RISING);
}

 

void loop()
{
int i = 0;
char ch;

u8g.firstPage();
do {
prompt();
} while( u8g.nextPage() );

if (pressed == true)
{
strcpy(mess, myMem[mess_number-1]);

u8g.firstPage();
do {
showText();
} while( u8g.nextPage() );

ch = mess[i];
while (ch != NULL )
{
i++;
makeDashDot(MorseTable[ch]);
delay(dotLength * 2);
ch = mess[i];
}
pressed = false;
i = 0;
}

}

void makeDashDot(const char * morseCode)
{
int i = 0;
while (morseCode[i] != 0)
{
if (morseCode[i] == '.') {
dot();
} else if (morseCode[i] == '-') {
dash();
}
i++;
}
}

 

void dot()
{
digitalWrite(flashPin, HIGH);
tone(CW_pin, freq);
delay(dotLength);
digitalWrite(flashPin, LOW);
noTone(CW_pin);
delay(dotLength);
}

 

void dash()
{
digitalWrite(flashPin, HIGH);
tone(CW_pin, freq);
delay(dashLength);
digitalWrite(flashPin, LOW);
noTone(CW_pin);
delay(dotLength);
}

void ISR_2()
{
noInterrupts();
buttonState = digitalRead(Pin2);
mess_number = 1;
pressed = true;
interrupts();
}

 

void ISR_3()
{
noInterrupts();
buttonState = digitalRead(Pin3);
mess_number = 2;
pressed = true;
interrupts();
}

 

void ISR_18()
{
noInterrupts();
buttonState = digitalRead(Pin18);
mess_number = 3;
pressed = true;
interrupts();
}

 

void ISR_19()
{
noInterrupts();
buttonState = digitalRead(Pin19);
mess_number = 4;
pressed = true;
interrupts();
}

 

The above code drives an Arduino Mega based mega keyer.  Uses interrupts to "send" one of four pre-set memories.

IMG 3684

   
ReplyQuote
(@pugwash)
Sorcerers' Apprentice
Joined: 5 years ago
Posts: 923
 

@codecage

I need some advice about something that is right up your alley!

I am currently playing around with GPS and one of the values I am getting is "Signal to Noise" ratio. I was wondering whether this is a linear function value or an exponential function value, similar to dB.

I have had some experience with SNR, albeit in a totally different environment, i.e. ultrasonic testing of welds and castings. When we turned the equipment sensitivity right up the baseline looked like grass, it was picking up reflections from metal grain boundaries thus noise, which needed to be suppressed just as a HAM uses the squelch knob.

I was thinking that maybe the inverse square law may have something to do with SNR.

I am looking forward to your answer/comment!


   
ReplyQuote
codecage
(@codecage)
Member Admin
Joined: 5 years ago
Posts: 1037
Topic starter  

@pugwash

I've never put that much that thought into the S/N ratio!  Just lived with the fact that at any given time the S/N ratio was just what it was at that moment.  At some other point in time depending on conditions (atmospheric, local electrical noise, black magic, or whatever else) with the same signal the ratio might be different.  For example if I'm in my shack and listening to my radio on some frequency and the signal to noise ration isn't too bad (I live in a relative high electrical noise area) and my XYL (ham speak for wife - eX Young Lady, where Young Lady means single) turns on the florescent light in the laundry room right next to my shack the noise floor gets raised tremendously.  I'll try to send some screen shots that show the difference.

And wouldn't you know it, the black magic part of the equation was in play this morning.  As I listened to a station this morning, captured a screen shot with the florescent light off, then turned the light on, there seemed to be no difference in the noise floor!

SNR 1

The noise floor I refer to is the jagged line across the bottom of the frequency spectrum on each side of the signal at 14.255MHz in the above pic.  As a general rule squelch doesn't get used at all where the signal levels might not be very high as in listening for DX (distant) stations on the HF frequencies.

@ve1dx Paul, you want to jump in here and help me out, especially if you have a better answer for pugwash

SteveG


   
ReplyQuote
(@pugwash)
Sorcerers' Apprentice
Joined: 5 years ago
Posts: 923
 

@codecage

For example if I'm in my shack and listening to my radio on some frequency and the signal to noise ratio isn't too bad (I live in a relatively high electrical noise area) and my XYL (ham speak for wife - eX Young Lady, where Young Lady means single) turns on the fluorescent light in the laundry room right next to my shack the noise floor gets raised tremendously.

I guess your next mini-project should be to replace all the neon lights in the laundry with LED strips and perhaps add a PIR to automate it. If this reduces the amount of interference you are getting, it is a win-win situation.

If the XYL is not versed in physics and asks why you are doing it, don't bother trying to explain about SNRs, just tell her that it will reduce the electricity bill, she will be pleased as Punch.

My "Trouble and Strife" (cockney rhyming slang for wife) wonders WTH I am doing with all this electrical stuff, I just tell her I am building a tactical nuclear weapon and the response is usually a completely disinterested, "Don't make a mess, then" or "Take it outside, if you are going to play with it".


   
ReplyQuote
Robo Pi
(@robo-pi)
Robotics Engineer
Joined: 5 years ago
Posts: 1669
 

I'm learning how to use graphics in Python so I combined that study with my ham radio study and made a graph of the ham radio hf bands.

Ham HF   Bands

All the labels were done within the Python program.  Pretty cool huh? ? 

DroneBot Workshop Robotics Engineer
James


   
ReplyQuote
codecage
(@codecage)
Member Admin
Joined: 5 years ago
Posts: 1037
Topic starter  

@robo-pi

Really neat!

SteveG


   
ReplyQuote
robotBuilder
(@robotbuilder)
Member
Joined: 5 years ago
Posts: 2042
 

Although I wasn't into HAM radio I did learn to send and receive Morse code.  Naturally when I started programming I had to work on writing programs to translate Morse code into letters and words. It is a case of working out how long the key is down for a dot vs a dash and the difference between the pauses of dots and dashes and letters and words.
Here is a nice arduino project I found on the internet that does the same.
https://www.freetronics.com.au/blogs/news/6368010-convert-morse-code-to-text-with-an-arduino#.XW25higzbIU

 


   
ReplyQuote
Robo Pi
(@robo-pi)
Robotics Engineer
Joined: 5 years ago
Posts: 1669
 

I probably should have mentioned, although it might be obvious.  The width of the vertical color bars is exactly the width of the respective ham bands.  This graph also shows that there is a very large amount of bandwidth that is not open to ham radio operators.    Those areas are most likely reserved for AM and FM broadcast stations, various phone and utility services, emergency and police communications, military, etc.

I should probably also mention that I had to cheat a little bit on the 10 meter vertical color band.  It simply wouldn't show up at all if I set it at the correct width.  So I had to make it at least one pixel wide just to have it show up.   All the other bands are the correct width for the wavelengths they actually cover.

DroneBot Workshop Robotics Engineer
James


   
ReplyQuote
Robo Pi
(@robo-pi)
Robotics Engineer
Joined: 5 years ago
Posts: 1669
 

While I'm at it I did the 3 UHF bands too.   I might do the VHF bands as well just to complete my ham study.

Ham UHF Bands

 

DroneBot Workshop Robotics Engineer
James


   
ReplyQuote
Robo Pi
(@robo-pi)
Robotics Engineer
Joined: 5 years ago
Posts: 1669
 

All done.   This is the VHF bands.

Ham VHF Bands

DroneBot Workshop Robotics Engineer
James


   
ReplyQuote
Page 5 / 5