ALFABETO MORSE.
Fue desarrollado por Alfred Vail mientras colaboraba en 1830 con Samuel Morse en la invención del telégrafo eléctrico. Vail creó un método según el cual cada letra o número era transmitido de forma individual con un código consistente en rayas y puntos, es decir, señales telegráficas que se diferencian en el tiempo de duración de la señal activa.
El alfabeto Morse más popularmente conocido como código Morse, es un sistema de representación de letras y números mediante señales emitidas de acuerdo a unas reglas preestablecidas. Estas señales consisten en una serie de pitidos, cortos (dot) y largos (dash). Un dot es un pitido corto, mientras que un dash es un pitido largo (tres veces más largo), algunos usan otros términos como did y dad, respectivamente. Cada letra está separada por una pausa corta y una palabra está separada por una pausa más larga (tres veces más larga).
Este es el aspecto de lo que es un sencillo manipulador Morse, por supuesto que existe una gran variedad de ellos, aunque el fin primordial es cortar o conectar un circuito señalizador.
Fig. 1 Modelos de manipuladores.
Al parecer de mucha gente, el código Morse le es difícil de aprender de modo que, para facilitar su aprendizaje, se han ideado distintas reglas mnemotécnicas, las cuales permiten memorizarlo mediante un sencillo sistema, consistente en asignar a cada letra, una palabra determinada, que comienza con la letra que se quiere recordar. Luego basta con recordar la palabra de la letra correspondiente y obtener el código que le corresponde. El siguiente es el circuito es el que utilizaremos para el transmisor.
Regla: la palabra elegida para una letra, tiene la peculiaridad de empezar por la propia letra y también tiene tantas silabas como puntos y rayas tenga el código de dicha letra, además, la palabra responde a la combinación de silabas de una o dos letras para designar un punto y silabas de tres o más letras para designar las rayas. Luego, se ha de sustituir cada silaba de la palabra clave por un punto o una raya según la regla establecida anteriormente.
Así por ejemplo: el código de la letra a esta compuesto por un punto y una raya (·-), según esta regla, la palabra elegida es amor. Vemos que se cumple la regla de las silabas a (·) mor (-). Del mismo modo ocurre con la letra n, vemos: que le corresponde (-·), aplicando la regla, la palabra elegida es norte, y de nuevo se cumple la regla de las silabas nor (-) te (·).
Siguiendo este criterio, se han elegido las palabras que se pueden ver en la tabla de abajo. Si usted tiene interés en aprender el código Morse, este sistema le ayudará a memorizar fácilmente el alfabeto en código Morse.
REGLA MNEMOTÉCNICA.
Siguiendo este razonamiento, podemos agrupar letras bajo un criterio, por ejemplo, agrupar pares de letras con las mismas silabas, como puede ser:
Entre otras posibles combinaciones que puede acomodar para su aprendizaje, el propio usuario.
El siguiente sería el código completo de letras y sus palabras mnemotécnicas asociadas para facilitar su aprendizaje al interesado en estas técnicas. Se trata de recordar el nombre asociado a cada letra.
Puesto que hemos descrito como es el código Morse y una forma sencilla de aprenderlo, cabía esperar que puestos en el tema, pensara que se podría completar este artículo añadiendo un código que nos permita hacer practicas con el código Morse, de modo que podamos enviar un texto con un módulo y con otro módulo recibir y descifrar el contenido del mensaje.
Pensando en este proyecto he aquí un pequeño código libre que he visto por la red y de ese modo usted podrá realizar algunas prácticas que reafirmarán sus conocimientos del código Morse, mientras preparo el código que he comentado. Este es el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* LED morse code * * ------------ * * LED conectado a un pin digital parpadea. * Pin 13 de la placa Arduino se utiliza porque * que tiene una resistencia unida a él, necesitando sólo un LED * * Código de la red */int ledPin = 13; // digital pin 13 void setup() { pinMode(ledPin, OUTPUT); // sets pin 13 as output } void loop() { // V digitalWrite(ledPin, HIGH); // dot delay(200); digitalWrite(ledPin, LOW); delay(100); digitalWrite(ledPin, HIGH); // dot delay(200); digitalWrite(ledPin, LOW); delay(100); igitalWrite(ledPin, HIGH); // dot delay(200); digitalWrite(ledPin, LOW); delay(100); digitalWrite(ledPin, HIGH); // dash delay(600); digitalWrite(ledPin, LOW); delay(800); // you get the picture! delay(3000); // wait 3sec before repeat } |
El anterior ejercicio en sí no tiene gran interés, se limita a presentar un mensaje supeditado al momento de crear el propio código, motivo por el cual queda invalidado. Lo ideal sería un código que permita comunicar el monitor serial para interactuar con Arduino u otro dispositivo actual para intercambiar información. Luego ya vendrían los códigos especiales para transmitir datos o información delicada entre interlocutores.
El siguiente programa está un poco mas elaborado, permitiendo introducir un texto con el teclado del computador mediante (COM) y el monitor serial de Arduino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
/* * clavemorse.pde * * El circuito de prueba es muy sencillo, consta de un buzzer * conectado al pin 13 que como se sabe tiene puesta una * resistencia para controlar el consumo del pin. El buzzer permite * oir el sonido de los dot y dash que genere el mensaje que insertemos * por el monitor serial, para obtener una señal óptica podemos conectar * un LED en el mismo pin 13, sin embargo, sería conveniente utilizar un * transistor en la salida para disponer de mayor potencia. * Este código básicamente lo que hace es recibir caracteres por el * puerto COM y los reproduce (luz, sonido o luz + sonido) * * Basado en un código de Adán Silva * * Modificado por V. Garcia el 2015.01.29 IDE ver. 0023 6774 bytes */ #include <LiquidCrystal.h> // LiquidCrystal(rs, enable, d4, d5, d6, d7) LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // es mi config. unsigned short int punto = 70; // Duracion del punto unsigned short int raya = punto * 4; // Duracion de la raya unsigned short int negro = punto * 3; // Duracion del apagado entre rayas y puntos unsigned short int letrayletra = punto * 5; // Duracion del apagado entre letras void playTone(int tone, int duration, int speakerPin) { // enviamos la señal al buzzer. // Sends the signal to the speakerPin for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(speakerPin, HIGH); delayMicroseconds(tone); digitalWrite(speakerPin, LOW); delayMicroseconds(tone); } } void playToneLed(int tone, int duration, int speakerPin, int ledPin) { // enviamos la señal al LED y buzzer. Sends the signal to speakerPin and ledPin for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(speakerPin, HIGH); digitalWrite(ledPin, HIGH); delayMicroseconds(tone); digitalWrite(speakerPin, LOW); digitalWrite(ledPin, LOW); delayMicroseconds(tone); } } // ########## CLASE LETRA ######### class letra { private: char caracter; char* codigo; int ledPin; public: letra (char car, char* cad, unsigned short int pin); void set (char car, char* cad, unsigned short int pin); void mostrar (); void sonar (); void mostrarYsonar (); }; letra::letra (char car, char* cad, unsigned short int pin) { // Constructor caracter = car; codigo = cad; ledPin = pin; pinMode(ledPin, OUTPUT); } void letra::set (char car, char* cad, unsigned short int pin) { // Setter caracter = car; codigo = cad; ledPin = pin; } void letra::mostrar () { // Shows the code in in the ledPin unsigned short int j = 0; while (codigo[j] != 0) { if (codigo[j] == '.') { digitalWrite (ledPin, HIGH); lcd.setCursor(1,2); lcd.print(codigo[j]); delay (punto); digitalWrite (ledPin, LOW); delay (negro); } else if (codigo[j] == '-') { digitalWrite (ledPin, HIGH); lcd.setCursor(2,2); lcd.print(codigo[j]); delay (raya); digitalWrite (ledPin, LOW); delay (negro); } j++; } delay (letrayletra); } void letra::sonar () { // Sounds the code on the speakerPin unsigned short int j = 0; while (codigo[j] != 0) { if (codigo[j] == '.') { playTone (440, 100, 9); delay (negro/3); } else if (codigo[j] == '-') { playTone (440, 100 * 4, 9); delay (negro/3); } j++; } delay (letrayletra); } void letra::mostrarYsonar () { // Sounds and shows the code (ledPin + speakerPin) unsigned short int j = 0; while (codigo[j] != 0) { if (codigo[j] == '.') { playToneLed (440, 100, 9, ledPin); delay (negro/4); } else if (codigo[j] == '-') { playToneLed (440, 100 * 4, 9, ledPin); delay (negro/4); } j++; } delay (letrayletra/2); } // ############################## void setup() { Serial.begin(9600); pinMode(9, OUTPUT); lcd.begin(20, 4); lcd.clear(); //aclara el LCD lcd.setCursor(3,0); lcd.print("Hispavila.com"); lcd.setCursor(0,1); lcd.print("Presiona un boton"); } int letraIN = 0; unsigned short int ledPin = 13; void loop() { digitalWrite(ledPin, LOW); lcd.setCursor(2,2);lcd.print(" "); letraIN = 0; letraIN = Serial.read(); letra let (0, "", ledPin); switch (letraIN) { case 'a': let.set ('a', ".-", ledPin); lcd.setCursor(2,2); lcd.print("a .- "); break; case 'b': let.set ('b', "-...", ledPin); lcd.setCursor(2,2); lcd.print("b -... "); break; case 'c': let.set ('c', "-.-.", ledPin); lcd.setCursor(2,2); lcd.print("c -.-. "); break; case 'd': let.set ('d', "-..", ledPin); lcd.setCursor(2,2); lcd.print("d -.. "); break; case 'e': let.set ('e', ".", ledPin); lcd.setCursor(2,2); lcd.print("e . "); break; case 'f': let.set ('f', "..-.", ledPin); lcd.setCursor(2,2); lcd.print("f ..-. "); break; case 'g': let.set ('g', "--.", ledPin); lcd.setCursor(2,2); lcd.print("g --. "); break; case 'h': let.set ('h', "....", ledPin); lcd.setCursor(2,2); lcd.print("h .... "); break; case 'i': let.set ('i', "..", ledPin); lcd.setCursor(2,2); lcd.print("i .. "); break; case 'j': let.set ('j', ".---", ledPin); lcd.setCursor(2,2); lcd.print("j .--- "); break; case 'k': let.set ('k', "-.-", ledPin); lcd.setCursor(2,2); lcd.print("k -.- "); break; case 'l': let.set ('l', ".-..", ledPin); lcd.setCursor(2,2); lcd.print("l .-.. "); break; case 'm': let.set ('m', "--", ledPin); lcd.setCursor(2,2); lcd.print("m -- "); break; case 'n': let.set ('n', "-.", ledPin); lcd.setCursor(2,2); lcd.print("n -. "); break; case 'o': let.set ('o', "---", ledPin); lcd.setCursor(2,2); lcd.print("o --- "); break; case 'p': let.set ('p', ".--.", ledPin); lcd.setCursor(2,2); lcd.print("p .--. "); break; case 'q': let.set ('q', "--.-", ledPin); lcd.setCursor(2,2); lcd.print("q --.- "); break; case 'r': let.set ('r', ".-.", ledPin); lcd.setCursor(2,2); lcd.print("r .-. "); break; case 's': let.set ('s', "...", ledPin); lcd.setCursor(2,2); lcd.print("s ... "); break; case 't': let.set ('t', "-", ledPin); lcd.setCursor(2,2); lcd.print("t - "); break; case 'u': let.set ('u', "..-", ledPin); lcd.setCursor(2,2); lcd.print("u ..- "); break; case 'v': let.set ('v', "...-", ledPin); lcd.setCursor(2,2); lcd.print("v ...- "); break; case 'w': let.set ('w', ".--", ledPin); lcd.setCursor(2,2); lcd.print("w .-- "); break; case 'x': let.set ('x', "-..-", ledPin); lcd.setCursor(2,2); lcd.print("x -..- "); break; case 'y': let.set ('y', "-.--", ledPin); lcd.setCursor(2,2); lcd.print("y -.-- "); break; case 'z': let.set ('z', "--..", ledPin); lcd.setCursor(2,2); lcd.print("z --.. "); break; case '0': let.set ('0', "-----", ledPin); lcd.setCursor(2,2); lcd.print("0 ----- "); break; case '1': let.set ('1', ".----", ledPin); lcd.setCursor(2,2); lcd.print("1 .---- "); break; case '2': let.set ('2', "..---", ledPin); lcd.setCursor(2,2); lcd.print("2 ..--- "); break; case '3': let.set ('3', "...--", ledPin); lcd.setCursor(2,2); lcd.print("3 ...-- "); break; case '4': let.set ('4', "....-", ledPin); lcd.setCursor(2,2); lcd.print("4 ....- "); break; case '5': let.set ('5', ".....", ledPin); lcd.setCursor(2,2); lcd.print("5 ..... "); break; case '6': let.set ('6', "-....", ledPin); lcd.setCursor(2,2); lcd.print("6 -.... "); break; case '7': let.set ('7', "--...", ledPin); lcd.setCursor(2,2); lcd.print("7 --... "); break; case '8': let.set ('8', "---..", ledPin); lcd.setCursor(2,2); lcd.print("8 ---.. "); break; case '9': let.set ('9', "----.", ledPin); lcd.setCursor(2,2); lcd.print("9 ----. "); break; case '.': let.set ('.', ".-.-.-", ledPin); lcd.setCursor(2,2); lcd.print(". .-.-.- "); break; case ',': let.set (',', "--..--", ledPin); lcd.setCursor(2,2); lcd.print(", --..-- "); break; case '?': let.set ('?', "..--..", ledPin); lcd.setCursor(2,2); lcd.print("? ..--.. "); break; case '"': let.set ('"', ".-..-.", ledPin); lcd.setCursor(2,2); lcd.print("'' .-..-. "); break; } let.mostrarYsonar(); } |
Una vez más, copie y pegue este código en su editor preferido guárdelo con un nombre y cárguelo en su Arduino, para comprobar su efectividad.
A colación con las nuevas tecnologías, viene siendo demasiado habitual que los usuarios de los dispositivos de comunicación en detrimento de la lengua de uso común, por falta de espacio/tiempo vienen deteriorando el preciado lenguaje, puestos a utilizar vocablos o si me apuran letras sueltas, porque no utilizar un viejo y casi olvidado código Q. Se trata de un código muy elaborado y largamente utilizado en el siglo pasado.
Una posibilidad que completaría este sistema de transmitir mensajes en la actualidad, podría consistir en la construcción de un receptor de las señales y presentar en una pantalla el mensaje, lo que posiblemente tuviera una mayor acogida entre los usuarios.
EL CÓDIGO Q.
El código Q consiste en un código de tres letras que fue creado por los británicos sobre el 1909, y adoptado rápidamente como una lista abreviada para su uso por los barcos y estaciones costeras británicas. Este código Q fue adoptado por muchas comunidades debido a que facilitaba las comunicaciones, ya que permitía y sigue permitiendo la comprensión entre operadores de distintas nacionalidades que halan distintas lenguas.
En aquellos tiempos por distintas circunstancias, se utilizaba el código Morse por los radiotelegrafistas para transmitir con tres letras prácticamente todo un mensaje. Posteriormente, fue empleado por la radiotelefonía al igual que los radio aficionados. En la actualidad se podría utilizar con los teléfonos móviles o celulares (en lugar de romper el idioma), reduciendo de esa forma mucho la longitud de las oraciones con el uso del mencionado código Q.
Llegaron a aparecer treinta y cinco códigos en la primera Lista de Abreviaturas para ser usado en comunicaciones por radio, las cuales fueron incluidas en la Tercera Convención Internacional de Radiotelegrafía. Esta conferencia tuvo lugar en Londres y fue firmada el 5 de julio de 1912. Entró en vigor el 1 de julio de 1913.
Códigos Q usados normalmente por los radioaficionados
Tabla código Q
Véase: https://es.wikipedia.org/wiki/Código_Q_de_señales
Esto es todo por el momento, quizás haya un añadido. 26/10/2020 Se han modificado dos tablas por que faltaba la letra W, gracias al aporte de un lector.