0% encontró este documento útil (0 votos)
389 vistas9 páginas

Transmisor y Receptor de Clave Morse

Este documento describe un circuito de transmisor y receptor de código Morse utilizando Arduino. El circuito incluye un pulsador para enviar señales de punto y raya, un buzzer para transmitir el código Morse, y una pantalla LCD para mostrar el mensaje descodificado. El código Arduino detecta las pulsaciones del pulsador, decodifica los caracteres Morse y los muestra en la LCD o los transmite por el buzzer. También puede recibir mensajes a través del puerto serial y convertirlos a código Morse para su transmisión.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
389 vistas9 páginas

Transmisor y Receptor de Clave Morse

Este documento describe un circuito de transmisor y receptor de código Morse utilizando Arduino. El circuito incluye un pulsador para enviar señales de punto y raya, un buzzer para transmitir el código Morse, y una pantalla LCD para mostrar el mensaje descodificado. El código Arduino detecta las pulsaciones del pulsador, decodifica los caracteres Morse y los muestra en la LCD o los transmite por el buzzer. También puede recibir mensajes a través del puerto serial y convertirlos a código Morse para su transmisión.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

TRANSMISOR Y RECEPTOR DE CLAVE MORSE

COMUNICACIÓN DE DATOS II

PAULA ALJEANDRA MARTINEZ CASTILLO

UNIVERSIDAD DE CUNDINAMARCA
EXTENSIÓN CHIA
2020
CLAVE MORSE

Este es un sistema de representación de letras y números mediante señales


emitidas de forma intermitente.
Este sistema es telégrafo eléctrico, eso quiere decir que se transmita por
medio de un cable, este es el alfabeto.

Signo Código Signo Código


A ·— B —···
C —·—· D —··
E · F ··—·
G ——· H ····
I ·· J ·———
K —·— L ·—··
M —— N —·
Ñ ——·—— O ———
P ·——· Q —·—
R ·—· S ···
T — V ···—
W ·—— X —··—
Y —·—— Z ——··
0 ————— 1 ·————
2 ··——— 3 ···—
4 ····— 5 ·····
6 —···· 7 ——···
8 ———·· 9 ————·
. ·—·—·— , —·—·——
? ··——·· “ ·—··—·
! ——··—— CH ————
CIRCUITO ELÉCTRICO

Se realizo un montaje en arduino para realizar el transmisor y receptor del


código morse que se muestra a continuación:

Materiales:
- Arduino Uno o Mega
- Protoboard
- Potenciometro
- 3 Resistencias de 1k
- 1 Resistencia de 470k
- Buzzer
- 2 Pulsadores
- 1 Led

CÓDIGO ARDUINO

#include <Wire.h>
#include <LiquidCrystal.h>

#define SLEUTEL 15
#define BUZZER 14
#define CLEAR2 16

char* letters[] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", //A-I
".--", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", //J-R
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." //S-Z
};
char* numbers [ ] = {"-----", ".----", " ..---", "...--", "....-", ".....", "-....", "--...", "---..", "----." };
int dotDelay = 200;

LiquidCrystal lcd(8,9,10,11,12,13);

void setup() {
pinMode(SLEUTEL, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
Serial.begin(115200);
lcd.begin(16,2);

float StreepDuur = 200.0;


boolean PrevS = false;
long tStartTeken, tStartPauze;
boolean S;
String kar = "";
void loop() {
S = !digitalRead(SLEUTEL);

if (S) {
if (S != PrevS) {
tStartTeken = millis();
DecodeerPauze(tStartPauze);
}
digitalWrite(BUZZER, HIGH);
}
else {
if (S != PrevS) {
tStartPauze = millis();
Decodeer(tStartTeken);
}
digitalWrite(BUZZER, LOW);
}

if (abs(millis() - tStartPauze) > StreepDuur * 10) {


DecodeerPauze(tStartPauze);
}

PrevS = S;

/*traductor de pc a morse INICIO LOOP*/


char ch;
if (Serial.available()) // ¿hay algo que leer del USB?
{
ch = Serial.read(); // leer una letra
if (ch >= 'a' && ch <= 'z')
{
flashSequence(letters[ch - 'a']);
}
else if (ch >= 'A' && ch <= 'Z')
{
flashSequence(letters[ch - 'A']);
}
else if (ch >= '0' && ch <= '9')
{
flashSequence(numbers[ch - '0']);
}
else if (ch == ' ')
{
delay(dotDelay * 4); // espacio entre palabras
}
}
/*traductor de pc a morse FIN LOOP*/
}

void Decodeer(long starttijd) {


char teken = '?';
long tijd = abs(millis() - starttijd);
float PuntDuur = StreepDuur / 3.0;

if (tijd <= 4) return;

if (tijd <= PuntDuur) teken = '.';


else if (tijd > StreepDuur) teken = '-';
else if ((tijd > (StreepDuur + PuntDuur) / 0.3) && tijd <= StreepDuur) teken = '-';
else teken = '.';

if (teken == '-') {
if (tijd > StreepDuur) StreepDuur++;
if (tijd < StreepDuur) StreepDuur--;
}
else if (teken == '.') {
if (tijd > StreepDuur / 3.0) StreepDuur++;
if (tijd < StreepDuur / 3.0) StreepDuur--;
}
kar += teken;
//Serial.println(teken);
}

void DecodeerPauze(long starttijd) {


if (kar == "") return;

char teken = '?';


long tijd = abs(millis() - starttijd);
if (tijd > StreepDuur - StreepDuur / 40) {
DecodeerKar();
//Serial.print();
}
if (tijd > StreepDuur * 10) {
DecodeerKar();
Print(" "); Serial.print(" ");
}
//else DecodeerKar();
//Serial.println(teken);
}

void DecodeerKar() {
static String letters[] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-",
".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "E"
};
int i = 0;
while (letters[i] != "E") {
if (letters[i] == kar) {
Print((char)('A' + i));
Serial.print((char)('A' + i));
break;
}
i++;
}
if (letters[i] == "E") {
Print(kar);
Serial.print(kar);
}
kar = "";

int y = 0, x = 0;
void Print(String &s) {
for (int i = 0; i < s.length(); i++) {
upd();
lcd.print(s[i]);
}
}
void Print(char s) {
upd();
lcd.print(s);
}
void Print(char *s) {
for (int i = 0; i < strlen(s); i++) {
upd();
lcd.print(s[i]);
}
}

void upd() {
lcd.setCursor(x, y);
x++; if (x >= 20) {
x = 0;
y++;
}
if (y >= 4) {
lcd.clear();
x=y = 0;
}
if(CLEAR2 == HIGH){
lcd.clear();
}
}

/*traductor pc a morse INICIO*/


void flashSequence(char* sequence)
{
int i = 0;
while (sequence[i] != NULL)
{
flashDotOrDash(sequence[i]);
i++;
}
delay(dotDelay * 3 ) ; // espacio entre letras
}
void flashDotOrDash(char dotOrDash)
{
digitalWrite(BUZZER, HIGH);
if (dotOrDash == '.')
{
delay(dotDelay);
}
else // debe ser una -
{
delay(dotDelay * 3 ) ;
}
digitalWrite(BUZZER, LOW);
delay(dotDelay); // espacio entre destellos
}
/*traductor pc a morse FIN*/

¿QUÉ HACE EL CÓDIGO?

El código tiene un pulsador principal para interpretar la clave morse, el


arduino lee las pulzaciones e interpreta las letras y las imprime en la LCD, el
segundo pulsador sirve para limpiar la LCD. Aparte por puerto serial desde el
software de arduino mandamos el mensaje y el arduino interpreta y traduce a
clave morse y lo muestra en el buzzer y el led.
Aquí le enviamos el mensaje por el puerto serial:

En esta imagen la muestra el mensaje por medio de buzzer y el led:


Luego probamos enviar la clave desde el pulsador para que el arduino la
detecte y la muestre en la lcd:

También podría gustarte