제조공정
| 부품 | 수량 |
|---|---|
| 아두이노 우노 (Arduino UNO) | 2 |
| 브레드보드 | 2 |
| 레이저 송신 모듈 (Autodesk LASER TRANSMITTER) | 1 |
| 포토 레지스터 (CdS 광센서) | 1 |
| 점퍼 와이어 | 1세트 |
영숫자를 점(·)과 선(―) 조합으로 변환하는 통신 방식. 각 문자는 고유한 점/선 패턴을 가져 비밀/암호 통신에 활용됩니다. 본 프로젝트는 송신부(레이저)와 수신부(포토레지스터)로 구성되며, 수신부 알고리즘이 기존 방식보다 매우 단순하다는 점이 특징입니다.
레이저 +극 → 아두이노 13번 디지털 핀 (코드상 정의)
레이저 -극 → 아두이노 GND
LDR 한 쪽 → 아두이노 5V
LDR 다른 쪽 → 10kΩ 저항 + 아날로그 입력 A0
저항 다른 쪽 → 아두이노 GND
중요: 외부광 차단을 위해 LDR을 검은 도화지 돔으로 덮어주세요. 레이저 미조사 시 아날로그 값 < 1000, 조사 시 > 1000이 되도록 환경 조정 필요.
예: 'a'는 (4, 10), 'b'는 (6, 8), 'e'는 (1, 13) 등
제공 코드는 일부 문자만 디코딩합니다. 조합 로직 확장 시 전체 영숫자 지원 가능. 본 코드의 주목적은 알고리즘 이해와 동작 검증입니다.
int led13 = 13;
int dotLen = 200;
int dashLen = dotLen * 3;
int elemPause = dotLen;
int Spaces = dotLen * 3;
int wordPause = dotLen * 7;
char stringToMorseCode[] = "HELLO WORLD"; // 전송할 메시지
void setup() {
pinMode(led13, OUTPUT);
}
void loop() {
for (int i = 0; i < sizeof(stringToMorseCode) - 1; i++) {
char tmpChar = stringToMorseCode[i];
tmpChar = toLowerCase(tmpChar);
GetChar(tmpChar);
}
LightsOff(8000); // 메시지 간 긴 간격
}
void MorseDot() {
digitalWrite(led13, HIGH);
delay(dotLen);
}
void MorseDash() {
digitalWrite(led13, HIGH);
delay(dashLen);
}
void LightsOff(int delayTime) {
digitalWrite(led13, LOW);
delay(delayTime);
}
void GetChar(char tmpChar) {
switch (tmpChar) {
case 'a': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'b': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'c': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'd': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'e': MorseDot(); LightsOff(elemPause); break;
case 'f': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'g': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'h': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'i': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'j': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'k': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'l': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'm': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'n': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'o': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'p': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'q': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'r': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 's': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 't': MorseDash(); LightsOff(elemPause); break;
case 'u': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'v': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'w': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'x': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'y': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'z': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
default: LightsOff(Spaces); // 공백 처리
}
}
int sensorPin = 0; // A0
int sensorValue = 0;
int a, f; // '1' 카운트, '0' 카운트
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue > 1000) { // 레이저 감지 시
for (int i = 0; i <= 13; i++) {
sensorValue = analogRead(sensorPin);
if (sensorValue > 1000) {
a++; // '1' (점/선) 카운트
} else {
f++; // '0' (간격) 카운트
}
delay(200);
}
}
// 패턴 매칭으로 문자 판별
if (a == 4 && f == 10) Serial.print("a");
if (a == 6 && f == 8) Serial.print("b");
if (a == 8 && f == 6) Serial.print("c");
if (a == 1 && f == 13) Serial.print("e");
if (a == 2 && f == 12) Serial.print("i");
if (a == 10 && f == 4) Serial.print("j");
if (a == 7 && f == 7) Serial.print("g");
if (a == 9 && f == 5) Serial.print("o");
if (a == 3 && f == 11) Serial.print("s");
f = a = 0;
delay(200);
}
검은 도화지로 LDR 차광 돔 제작
제조공정
원격으로 정보를 전송하고 수신할 통신 모듈이 필요하신가요? HC-12를 시도해 보셨나요? 쉽게 구성하고 사용할 수 있는 훌륭한 시리얼 데이터 모듈입니다. 오늘 기사는 HC-12, 그 속성, 설정 및 사용 방법을 다룹니다. HC-12란 무엇인가요? HC-12는 시리얼 데이터를 전송하고 수신하는 데 사용할 수 있는 100mW 무선 다중 채널 임베디드 통신 모듈입니다. 100개 채널을 가지고 있으며 최대 1000미터까지 전송할 수 있습니다. HC-12 기술적 속성 HC-12의 동작 주파수는 433.4~473.0MHz입니다. 둘째, 공급
로봇 레이저 커팅은 기존 레이저 커팅 자동화 형태보다 몇 가지 유용한 이점을 제공합니다. 하지만 여전히 귀사에 최선의 접근 방식인지 확신하지 못할 수 있습니다. 왜 레이저 커팅 머신 대신 로봇을 선택해야 할까요? 기존 기계를 선택하는 단점은 무엇일까요? 로봇 레이저 커팅의 새 시대가 이미 도래했습니다. 귀사 비즈니스에 적합한 선택인지 결정하는 데 필요한 핵심 정보를 제공합니다. 기존 접근 방식: 레이저 커팅 머신 자동화된 레이저 커팅은 새로운 것이 아닙니다. 대부분의 기계 공장과 많은 제조 시설에 이미 평판 레이저 커팅 머신이 있습