ပူးပေါင်းဆောင်ရွက်ခြင်း
အနုပညာ
အလှအပနှင့် ကျန်းမာရေး
လက်မှုအနုပညာ
ယဉ်ကျေးမှုနှင့် သမိုင်း
ဖျော်ဖြေရေး
ပတ်ဝန်းကျင်
အစားအစာနှင့် အချိုရည်
ပြောင်းပြန်အင်ဂျင်နီယာပညာ
သိပ္ပံပညာများ
အားကစား
နည်းပညာ
ဝတ်ဆင်နိုင်သောပစ္စည်းများ
Pocket Morse Code Learning Board - v.3
Admiral OOM

ဖန်တီးသူ

Admiral OOM

10. နိုဝင်ဘာ 2026NO
၁
၀
၀
၀
၀

Pocket Morse Code Learning Board - v.3

The pocket Morse decoder with no circuit board to order. A 3D-printed card the size of a bank card carries Dave Nathanson's decoding chart engraved in its face, with an SMD LED behind a window at every letter. Press the key short for a dot and long for a dash, and the letter you have reached lights. Everything inside is hand-wired with enamelled copper wire to an Arduino Pro Mini, running on one CR2032 coin cell. The design has not been built yet.
အဆင့်မြင့်
About 1 day, plus printing

ညွှန်ကြားချက်များ

1

LED current and keying speed

Jupyter မှတ်စုစာအုပ် ဖွင့်နေသည်…
2

The same decoder on a circuit board

That version needs a board made to order. This one is printed and wired by hand.
3

Read the chart

Dave Nathanson (KG6ZJO) drew his decoding chart in 2010: "Start with your finger at "Start Here". Then move your finger to track the Morse dots & dashes. You will arrive at the correct letter!" On this card the LEDs do the tracking: yellow-green at the dots, red at the dashes.
4

Print the card body

The card, 85.6 x 54 x 7.5 mm, with the chart engraved 0.5 mm deep, a window and LED pocket at each letter, the key hole, four screw bosses and the key-ring hole. Print it face down on a smooth bed: PLA, 0.12 mm layers, no supports.
ဒီဇိုင်း ဖိုင်STLCC0 - Free
5

Print the lid

The 1.2 mm back lid with four countersunk screw holes and the credit and instructions engraved. PLA, 0.12 mm layers, engraved side down.
ဒီဇိုင်း ဖိုင်STLCC0 - Free
6

Fit the LEDs

Press a 1206 LED into each pocket from the back, lens towards the window: yellow-green at the 14 dot rings and at Start, red at the 12 dash marks. Note each LED's cathode mark, then fix it with a tiny drop of glue at its edge, keeping the pads clean.

ဤအဆင့်အတွက် ကုန်ကြမ်းများ:

ချစ် LEDချစ် LED27 ခု
အမြန်ကပ်စေး (ဆိုင်ယာနိုအခရီးလိတ်)အမြန်ကပ်စေး (ဆိုင်ယာနိုအခရီးလိတ်)1 ခု

လိုအပ်သော ကိရိယာများ:

ထိပ်ချွန်ညှပ်ထိပ်ချွန်ညှပ်
မှန်ဘီလူးမှန်ဘီလူး
မာလ်တီမီတာမာလ်တီမီတာ
7

Wiring table

The 27 LEDs share six lines, D3 to D8, each LED between two of them. Wire each LED's + (anode) and - (cathode) pad to the lines below; the firmware expects exactly this. | LED | Code | Colour | + (anode) to | - (cathode) to | |---|---|---|---|---| | Start | (none) | yellow-green | D3 | D4 | | T | - | red | D4 | D3 | | E | . | yellow-green | D4 | D5 | | M | -- | red | D5 | D4 | | N | -. | yellow-green | D5 | D6 | | A | .- | red | D6 | D5 | | I | .. | yellow-green | D6 | D7 | | O | --- | red | D7 | D6 | | G | --. | yellow-green | D7 | D8 | | K | -.- | red | D8 | D7 | | D | -.. | yellow-green | D3 | D5 | | W | .-- | red | D4 | D6 | | R | .-. | yellow-green | D5 | D3 | | U | ..- | red | D5 | D7 | | S | ... | yellow-green | D6 | D4 | | Q | --.- | red | D6 | D8 | | Z | --.. | yellow-green | D7 | D5 | | Y | -.-- | red | D8 | D6 | | C | -.-. | yellow-green | D3 | D6 | | X | -..- | red | D4 | D7 | | B | -... | yellow-green | D5 | D8 | | J | .--- | red | D6 | D3 | | P | .--. | yellow-green | D7 | D4 | | L | .-.. | yellow-green | D8 | D5 | | F | ..-. | yellow-green | D3 | D7 | | V | ...- | red | D4 | D8 | | H | .... | yellow-green | D7 | D3 |
8

Wire the card

Remove the Pro Mini's power LED. Solder a 150 Ω resistor to each of D3-D8 and run a 0.2 mm solderable enamelled wire from each resistor round the cavity as that line's bus. Solder short wires from every LED pad to its bus, as the wiring table says; the iron strips the enamel. Wire the key between D2 and GND, and the cell holder's + to VCC and - to GND. Check every LED with the meter's diode test.

ဤအဆင့်အတွက် ကုန်ကြမ်းများ:

မိုက်ခရိုကွန်ထရိုလာဘုတ်မိုက်ခရိုကွန်ထရိုလာဘုတ်1 ခု
လျှပ်ခံအားလျှပ်ခံအား6 ခု
နှိပ်ခလုတ်နှိပ်ခလုတ်1 ခု
ဓာတ်ခဲအိမ်ဓာတ်ခဲအိမ်1 ခု
အက်နမယ်ဖုံး ကြေးနီဝါယာအက်နမယ်ဖုံး ကြေးနီဝါယာ1 ခု
ဂဟေဝါယာဂဟေဝါယာ1 ခု

လိုအပ်သော ကိရိယာများ:

ဂဟေဆော်တံဂဟေဆော်တံ
ထိပ်ချွန်ညှပ်ထိပ်ချွန်ညှပ်
ဖလပ်စ်ဖလပ်စ်
မှန်ဘီလူးမှန်ဘီလူး
မာလ်တီမီတာမာလ်တီမီတာ
9

The firmware

morse_card.ino: every timing is a named constant at the top. Board in the Arduino IDE: Arduino Pro or Pro Mini, ATmega328P (3.3V, 8 MHz).
morse_card.inoarduino
// Printed Morse decoder card: firmware for an Arduino Pro Mini 3.3 V / 8 MHz on a CR2032.
// Chart after Dave Nathanson's "Morse Code Receive Decoder Chart (a-z)" (KG6ZJO, copyleft 2010); codes per ITU-R M.1677-1.
// Press the key: short = dot, long = dash. The LED of the letter reached lights; a pause ends the letter.
// Generated by make_firmware.py together with wiring.md. Every timing below is ours: change it to suit you.
#include <avr/sleep.h>
#include <string.h>

const uint8_t KEY_PIN = 2;                      // INT0, key to GND, internal pull-up
const uint8_t NETS[6] = {3, 4, 5, 6, 7, 8};     // each through its own 150 ohm resistor
const unsigned long DEBOUNCE_MS = 15;
const unsigned long DASH_MS = 250;              // a press this long or longer is a dash
const unsigned long END_MS = 700;               // a pause this long ends the letter
const unsigned long BLINK_MS = 150;
const unsigned long IDLE_MS = 30000;            // then sleep until the key is pressed

struct Led { const char *code; const char *label; uint8_t a, k; };
const Led LEDS[] = {
  {"", "Start", 0, 1},
  {"-", "T", 1, 0},
  {".", "E", 1, 2},
  {"--", "M", 2, 1},
  {"-.", "N", 2, 3},
  {".-", "A", 3, 2},
  {"..", "I", 3, 4},
  {"---", "O", 4, 3},
  {"--.", "G", 4, 5},
  {"-.-", "K", 5, 4},
  {"-..", "D", 0, 2},
  {".--", "W", 1, 3},
  {".-.", "R", 2, 0},
  {"..-", "U", 2, 4},
  {"...", "S", 3, 1},
  {"--.-", "Q", 3, 5},
  {"--..", "Z", 4, 2},
  {"-.--", "Y", 5, 3},
  {"-.-.", "C", 0, 3},
  {"-..-", "X", 1, 4},
  {"-...", "B", 2, 5},
  {".---", "J", 3, 0},
  {".--.", "P", 4, 1},
  {".-..", "L", 5, 2},
  {"..-.", "F", 0, 4},
  {"...-", "V", 1, 5},
  {"....", "H", 4, 0},
};
const uint8_t COUNT = sizeof(LEDS) / sizeof(LEDS[0]);

char code[8] = "";
uint8_t len = 0;
bool down = false;
unsigned long changed = 0, lastActivity = 0;

void allOff() {
  for (uint8_t i = 0; i < 6; i++) { pinMode(NETS[i], INPUT); digitalWrite(NETS[i], LOW); }
}

void light(int8_t i) {
  allOff();
  if (i < 0) return;
  pinMode(NETS[LEDS[i].a], OUTPUT); digitalWrite(NETS[LEDS[i].a], HIGH);
  pinMode(NETS[LEDS[i].k], OUTPUT); digitalWrite(NETS[LEDS[i].k], LOW);
}

int8_t find(const char *c) {
  for (uint8_t i = 0; i < COUNT; i++) if (strcmp(LEDS[i].code, c) == 0) return i;
  return -1;
}

void blink(int8_t i, uint8_t times) {
  for (uint8_t n = 0; n < times; n++) { allOff(); delay(BLINK_MS); light(i); delay(BLINK_MS); }
}

void restart() { len = 0; code[0] = 0; light(find("")); }

void wake() {}

void sleepNow() {
  allOff();
  ADCSRA = 0;                                   // ADC off while asleep
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  noInterrupts();
  sleep_enable();
  attachInterrupt(digitalPinToInterrupt(KEY_PIN), wake, LOW);
  interrupts();
  sleep_cpu();                                  // wakes when the key pulls INT0 low
  sleep_disable();
  detachInterrupt(digitalPinToInterrupt(KEY_PIN));
  while (digitalRead(KEY_PIN) == LOW) {}        // the waking press does not count
  delay(DEBOUNCE_MS);
  restart();
  down = false;
  changed = lastActivity = millis();
}

void setup() {
  pinMode(KEY_PIN, INPUT_PULLUP);
  restart();
  changed = lastActivity = millis();
}

void loop() {
  unsigned long now = millis();
  bool pressed = digitalRead(KEY_PIN) == LOW;
  if (pressed != down && now - changed >= DEBOUNCE_MS) {
    if (!pressed) {                             // released: a dot or a dash
      code[len++] = (now - changed >= DASH_MS) ? '-' : '.';
      code[len] = 0;
      int8_t i = find(code);
      if (i < 0 || len >= sizeof(code) - 1) { blink(find(""), 3); restart(); }
      else light(i);
    }
    down = pressed;
    changed = lastActivity = now;
  }
  if (!down && len > 0 && now - changed >= END_MS) {   // the letter is finished
    blink(find(code), 3);
    restart();
    lastActivity = millis();
  }
  if (!down && millis() - lastActivity >= IDLE_MS) sleepNow();
}
10

Upload

Take the cell out. Connect a 3.3 V USB-to-serial adapter to the Pro Mini's programming pins, choose Arduino Pro or Pro Mini, ATmega328P (3.3V, 8 MHz), and upload. Start lights; key E (one short press) and E lights.

လိုအပ်သော ကိရိယာများ:

USB မှ စီးရီးယယ် အဒက်တာUSB မှ စီးရီးယယ် အဒက်တာ
Arduino IDE ပါ ကွန်ပျူတာArduino IDE ပါ ကွန်ပျူတာ
11

Close the card

Glue the key into its hole, plunger through the face. Stick the Pro Mini and the cell holder to the lid's inside with double-sided tape, leaving the wires some slack, put a CR2032 in, and screw the lid on with four M2 x 6 self-tapping screws.

ဤအဆင့်အတွက် ကုန်ကြမ်းများ:

အမြန်ကပ်စေး (ဆိုင်ယာနိုအခရီးလိတ်)အမြန်ကပ်စေး (ဆိုင်ယာနိုအခရီးလိတ်)1 ခု
ဖက်နှစ်ဖက် ကော်တိပ်ဖက်နှစ်ဖက် ကော်တိပ်1 ခု
ကိုယ်တိုင်ချောင်းဖော် ဝက်အူကိုယ်တိုင်ချောင်းဖော် ဝက်အူ4 ခု
CR2032 ဒင်္ဂါးဘက်ထရီCR2032 ဒင်္ဂါးဘက်ထရီ1 ခု
PLA မျှင်PLA မျှင်1 ခု

လိုအပ်သော ကိရိယာများ:

ဖီလမင့်သုံး 3D ပုံနှိပ်စက် (FDM)ဖီလမင့်သုံး 3D ပုံနှိပ်စက် (FDM)
တိကျသော ဝက်အူလှည့်အစုံတိကျသော ဝက်အူလှည့်အစုံ
12

The build in 3D

FreeCAD model of the card: the body with its engraved chart and LED windows, the lid, and the space taken by the Pro Mini, cell holder, key and screws, checked for clashes.
ဒီဇိုင်း ဖိုင်BLENDCC0 - Free
13

Troubleshooting

Printed Morse card troubleshooting.

Flow

Loading...
14

History and honest limits

The chart is **Dave Nathanson**'s (KG6ZJO), drawn in 2010 and shared as copyleft. The letter codes are ITU-R M.1677-1's. The card, its sizes, parts, wiring and timings are ours. The model was checked for clashes and the firmware compiles with all 26 codes checked against ITU, but the card has not been printed, wired or tested.

ပစ္စည်းများ

12

လိုအပ်သော ကိရိယာများ

9

ဆက်စပ် အစီအစဉ်များ

ဤအစီအစဉ်များသည် အသိပညာမျှဝေသည် — နည်းပညာ၊ ပစ္စည်း သို့မဟုတ် မူများ

CC0 အများပိုင်

ဤအစီအစဉ်ကို CC0 အောက်တွင် ထုတ်ဝေထားသည်။ ခွင့်ပြုချက်မလိုဘဲ ကူးယူ၊ ပြင်ဆင်၊ ဖြန့်ဝေ နှင့် အသုံးပြုနိုင်သည်။

အစီအစဉ်မှတစ်ဆင့် ကုန်ပစ္စည်းများဝယ်ယူ၍ လက်မှုပညာရှင်ကို ပံ့ပိုးပါ လက်မှုပညာရှင် ကော်မရှင် ရောင်းချသူက သတ်မှတ်သည်၊ သို့မဟုတ် ဤအစီအစဉ်၏ ဗားရှင်းအသစ်ဖန်တီး၍ ဝင်ငွေခွဲဝေရန် သင့်အစီအစဉ်တွင် ချိတ်ဆက်မှုအဖြစ် ထည့်သွင်းပါ။

ဆွေးနွေးချက်

(0)

ဝင်ရောက် ဆွေးနွေးချက်တွင် ပါဝင်ရန်

မှတ်ချက်များ ရယူနေသည်...