Nota
¡Hola! ¡Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirse?
Soporte Experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Preestrenos Exclusivos: Obtén acceso anticipado a anuncios de nuevos productos y avances exclusivos.
Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones y Sorteos Festivos: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo!
4.1.13 Generador de Código Morse
Introducción
En este proyecto, haremos un generador de código Morse, donde puedes escribir una serie de letras en inglés en la Raspberry Pi para que aparezcan como código Morse.
Componentes Necesarios
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Raphael |
337 |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
- |
|
Diagrama Esquemático
Nombre T-Board |
física |
WiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO22 |
Pin 15 |
3 |
22 |
Procedimientos Experimentales
Paso 1: Construye el circuito. (Presta atención a los polos del zumbador: El que tiene la etiqueta + es el polo positivo y el otro es el negativo.)
Paso 2: Abre el archivo de código.
cd ~/raphael-kit/python-pi5
Paso 3: Ejecuta.
sudo python3 4.1.16_MorseCodeGenerator_zero.py
Después de que el programa se ejecute, escribe una serie de caracteres, y el zumbador y el LED enviarán las señales de código Morse correspondientes.
Advertencia
Si recibe el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulte Si «gpiozero» no funciona.
Código
#!/usr/bin/env python3
from gpiozero import Buzzer, LED
import time
# Inicializar Buzzer y LED en los pines GPIO
BeepPin = Buzzer(22)
ALedPin = LED(17)
# Representación del código Morse para los caracteres
MORSECODE = {
'A': '01', 'B': '1000', 'C': '1010', 'D': '100', 'E': '0', 'F': '0010', 'G': '110',
'H': '0000', 'I': '00', 'J': '0111', 'K': '101', 'L': '0100', 'M': '11', 'N': '10',
'O': '111', 'P': '0110', 'Q': '1101', 'R': '010', 'S': '000', 'T': '1',
'U': '001', 'V': '0001', 'W': '011', 'X': '1001', 'Y': '1011', 'Z': '1100',
'1': '01111', '2': '00111', '3': '00011', '4': '00001', '5': '00000',
'6': '10000', '7': '11000', '8': '11100', '9': '11110', '0': '11111',
'?': '001100', '/': '10010', ',': '110011', '.': '010101', ';': '101010',
'!': '101011', '@': '011010', ':': '111000',
}
def on():
""" Turn on the buzzer and LED. """
BeepPin.on()
ALedPin.on()
def off():
""" Turn off the buzzer and LED. """
BeepPin.off()
ALedPin.off()
def beep(dt): # dt para el tiempo de retraso.
"""
Produce a beep sound and LED flash for the specified duration.
:param dt: Duration for the beep and flash.
"""
on()
time.sleep(dt)
off()
time.sleep(dt)
def morsecode(code):
"""
Convert the input code into Morse code and signal it using the buzzer and LED.
:param code: The text to be converted to Morse code.
"""
pause = 0.25
for letter in code:
for tap in MORSECODE[letter]:
if tap == '0':
beep(pause / 2) # Pitido corto para el punto
if tap == '1':
beep(pause) # Pitido largo para la raya
time.sleep(pause) # Pausa entre letras
def destroy():
""" Clean up resources on script termination. """
print("")
BeepPin.off()
ALedPin.off()
try:
while True:
code = input("Please input the messenger:")
code = code.upper() # Convertir a mayúsculas para la búsqueda de código Morse
print(code)
morsecode(code)
except KeyboardInterrupt:
destroy()
Explicación del Código
Este código importa las clases Buzzer y LED de la biblioteca gpiozero. Estas clases son esenciales para controlar los dispositivos GPIO correspondientes en la Raspberry Pi.
#!/usr/bin/env python3 from gpiozero import Buzzer, LED import time
Inicializa el buzzer en el pin GPIO 22 y el LED en el pin GPIO 17, facilitando el control de estos componentes.
# Inicializar Buzzer y LED en los pines GPIO BeepPin = Buzzer(22) ALedPin = LED(17)
Define la estructura
MORSE, un diccionario que contiene las representaciones del código Morse para los caracteres A-Z, números 0-9 y símbolos como “?”, “/”, “:”, “,”, “.”, “;”, “!”, “@”, donde0indica un punto y1indica una raya.# Representación del código Morse para los caracteres MORSECODE = { 'A': '01', 'B': '1000', 'C': '1010', 'D': '100', 'E': '0', 'F': '0010', 'G': '110', 'H': '0000', 'I': '00', 'J': '0111', 'K': '101', 'L': '0100', 'M': '11', 'N': '10', 'O': '111', 'P': '0110', 'Q': '1101', 'R': '010', 'S': '000', 'T': '1', 'U': '001', 'V': '0001', 'W': '011', 'X': '1001', 'Y': '1011', 'Z': '1100', '1': '01111', '2': '00111', '3': '00011', '4': '00001', '5': '00000', '6': '10000', '7': '11000', '8': '11100', '9': '11110', '0': '11111', '?': '001100', '/': '10010', ',': '110011', '.': '010101', ';': '101010', '!': '101011', '@': '011010', ':': '111000', }
La función
on()enciende el buzzer y el LED. La funciónoff()se utiliza para apagar el buzzer y el LED.def on(): """ Turn on the buzzer and LED. """ BeepPin.on() ALedPin.on() def off(): """ Turn off the buzzer and LED. """ BeepPin.off() ALedPin.off()
Define una función
beep()para hacer que el buzzer y el LED emitan sonidos y parpadeen en un intervalo determinado pordt.def beep(dt): # dt para el tiempo de retraso. """ Produce a beep sound and LED flash for the specified duration. :param dt: Duration for the beep and flash. """ on() time.sleep(dt) off() time.sleep(dt)
La función
morsecode()se utiliza para procesar el código Morse de los caracteres de entrada, haciendo que el “1” del código emita sonidos o luces y el “0” emita sonidos o luces brevemente. Por ejemplo, al ingresar “SOS”, habrá una señal que contiene tres cortos, tres largos y luego tres cortos segmentos “ · · · - - - · · · ”.def morsecode(code): """ Convert the input code into Morse code and signal it using the buzzer and LED. :param code: The text to be converted to Morse code. """ pause = 0.25 for letter in code: for tap in MORSECODE[letter]: if tap == '0': beep(pause / 2) # Pitido corto para el punto if tap == '1': beep(pause) # Pitido largo para la raya time.sleep(pause) # Pausa entre letras
Define una función llamada
destroyque apaga tanto el buzzer como el LED. Esta función está destinada a ser llamada cuando se termina el script para asegurarse de que los pines GPIO no queden en un estado activo.def destroy(): """ Clean up resources on script termination. """ print("") BeepPin.off() ALedPin.off()
Cuando se escriben los caracteres relevantes con el teclado,
upper()convertirá las letras ingresadas a su forma en mayúsculas.print()luego imprime el texto claro en la pantalla de la computadora, y la funciónmorsecode()hace que el buzzer y el LED emitan el código Morse.try: while True: code = input("Please input the messenger:") code = code.upper() # Convertir a mayúsculas para la búsqueda de código Morse print(code) morsecode(code) except KeyboardInterrupt: destroy()