제조공정
| × | 2 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
저는 오늘 커뮤니케이션 시스템에 대한 수업을 하고 있었고 학생들이 시각화하고 경험함으로써 배우기를 원했습니다. 우리는 석기 시대부터 시작하여 의사 소통의 필요성과 언어 및 문법이 의미하는 바, 신뢰할 수있는 의사 소통, 신호, 메시지 등을 이해하기 위해 몇 가지 실험을했습니다.
이 모든 것을 논의하는 동안 우리는 비주얼 커뮤니케이션을 위한 우리 고유의 언어를 정의하고자 하는 지점에 도달했고 거기에서 우리는 모스 부호를 고안했습니다!
모스 부호를 배우는 것은 우리 각자에게 지루한 작업임이 분명했기 때문에 기계가 필요했습니다. 그래서 우리는 주어진 문자열을 동등한 모스 부호로 인코딩할 수 있는 작은 프로그램과 주어진 모스 부호 스트림에 대한 문자열을 되돌려 줄 수 있는 또 다른 디코더를 작성하기로 결정했습니다.
문자의 모스 부호를 찾기 위해 다음 표를 참조했습니다 –
모스 부호를 동등한 문자로 번역하기 위해 아래와 같이 이진 트리로 구성할 수 있습니다. 각 '점'은 왼쪽 하위 트리로 이동하고 '대시'는 오른쪽 하위 트리로 이동합니다.
이를 통해 문자열을 각각의 모스 부호로 또는 그 반대로 빠르게 인코딩할 수 있었습니다.
PoC로 C#으로 프로그램을 작성했습니다.
그림>
출력
안녕하세요.... . .-.. .-.. --- .-- --- .-. .-.. -..
하지만 두 사람 사이에서 통신이 이루어져야 하기 때문에 이 인코딩된 모스 부호를 다른 장치로 전송하여 그곳에서 디코딩하고 싶었습니다.
두 개의 Arduino 보드를 사용하여 송신기와 수신기를 만들었습니다.
송신기 보드에 레이저 다이오드를 연결했습니다. 키이스에서. 쉽게 구할 수 있고 저렴한 장치. 제가 작업하는 거리에서는 3v 입력으로 충분했지만 5v에서는 레이저가 최소 200m에 도달하는 것을 볼 수 있습니다.
내 송신기는 직렬 인터페이스(USB를 통해)가 있는 컴퓨터에 연결되어 있습니다. 직렬 포트의 모든 데이터를 문자별로 읽습니다. 캐릭터에 해당하는 모스 부호를 찾아 '점' 및 '대시' 빛 스트림을 생성합니다.
각 '점'은 50ms 광선이고 '대시'는 150ms 광선인 50ms 펄스를 만들었습니다. 각 '점'과 '대시'는 50ms 묵음으로 구분됩니다. 각 캐릭터 다음에 또 다른 100ms의 침묵이 옵니다.
송신기 코드
const char* MorseTable[] ={ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 공백, !, ", #, $, %, &, ' NULL, "-. -.--", ".-..-.", NULL, NULL, NULL, NULL, ".----.", // ( ) * + , - . / "-.--.", "-.--.-", 없는, ".-.-.", "--..--", "-....-", ".-.-.-", "-.. -.", // 0 1 2 3 4 5 6 7 "-----", ".----", "..---", "...--", "... .-", ".....", "-....", "--...", // 8 9 :; <=> ? "---..", "--- -.", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..", // @ ABCDEFG ".- -.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // HIJKLMNO "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", / / PQRSTUVW ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--" , // XYZ [ \ ] ^ _ "-..-", "-.--", "-- ..", NULL, NULL, NULL, NULL, "..--.-", // ' abcdefg NULL, ".-", "-...", "-.-.", "-.. ", ".", "..-.", "--.", // hijklmno "....", "..", ".---", "-.-", ".- ..", "--", "-.", "---", // pqrstuvw ".--.", "--.-", ".-.", "...", " -", "..-", "...-", ".--", // xyz { | } ~ DEL "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL, };int dotLength =50;int dashLength =dotLength*3, 무효 설정 () { // 여기에 설정 코드를 입력하여 한 번 실행:pinMode(13, OUTPUT); Serial.begin(9600);}무효 루프() { char ch; if(Serial.available()){ ch =Serial.read(); flashDashDot(모스테이블[ch]); 지연(도트길이*2); }} 무효 flashDashDot(const char * morseCode){ int i =0; while(morseCode[i] !=0) { if(morseCode[i] =='.'){ 점(); } else if (morseCode[i] =='-'){ dash(); } i++; }}void dot(){ digitalWrite(13, HIGH); 지연(도트길이); 디지털 쓰기(13, 낮음); 지연(dotLength);}대시() 무효{ digitalWrite(13, HIGH); 지연(대시길이); 디지털 쓰기(13, 낮음); 지연(점 길이);}
수신기 Arduino 보드에서 LDR을 연결했습니다. , 피에조 부저 및 LED . LED와 부저는 중복되어 오디오 및 비디오 피드백을 제공하고 작동하는 모습을 보니 기분이 좋습니다 😉
내 수신기는 또한 결과 문자열 문자를 읽기 위해 컴퓨터에 연결됩니다.
장치의 루프에서 아날로그 포트 4에 연결된 LDR에 닿는 빛을 읽었습니다. 긴 튜브로 캡슐화하여 주변 빛으로부터 보호했습니다. 내 레이저 다이오드의 빛이 이 LDR에 닿으면 결과 값이 높아지고 스피커를 켜고 LED를 켭니다. 내리면 스피커를 끄고 LED를 끕니다.
나는 그것이 '점'인지 '대시'인지 판단하기 위해 광선의 길이를 계산하고 있습니다. 모든 지연을 고려하면 16MHz Atmel 프로세서의 펄스에 대해 ~400 사이클이 되었습니다.
수신기 코드
//모스 부호 이진 트리// 2n+1에서 왼쪽 자식// 2n+2에서 오른쪽 자식// <.|->// .E -T// .I -A .N - M//const char MorseTree[] ={'\0','E', 'T', 'I', 'A', 'N', 'M', 'S', 'U', 'R' , 'W', 'D', 'K', 'G', 'O', 'H', 'V', 'F', 'U', 'L', 'A', 'P', ' J', 'B', 'X', 'C', 'Y', 'Z', 'Q', '\0','\0','5', '4', ' '3', '\0','\0','\0','2', '\0', '\0','+', '\0','\0','\0 ','\0','1', '6', '=', '/', '\0','\0','\0','(', '\0','7' 또는 0','\0','\0','\0','\0','\0', '\0','\0','\0','?', '_' , '\0','\0','\0', '\0','"', '\0','\0','.', '\0','\0',' \0', '\0','@', '\0','\0','\0','\0','\0','\0', ' ' ','\0','\0','\0','\0','\0','\0', '\0',';', '!', '\0',')', '\0','\0','\0', '\0','\0',',' , '\0','\0','\0','\0',':', '\0','\0','\0','\0','\0', '\0','\0' }; 정수 값 =0; // LDRint의 조명 값을 저장할 변수 ctrHigh =0;int ctrLow =0;int codePtr =0;int dotLen =400;void setup(){ Serial.begin(9600);// 직렬 연결 시작 Serial .print(codePtr);}무효 루프(){ val =analogRead(4); if (val>=10) { ctrHigh++; 낮은 =0; 디지털 쓰기(13, 높음); 톤(9, 1000); } else { ctrLow++; if ((ctrHigh>=dotLen) &&(ctrHigh =dotLen * 2) { Serial.print("-"); codePtr =(2*codePtr) + 2; } else { if(ctrLow ==dotLen*2){ Serial.print(MorseTree[codePtr]); codePtr =0; } } ctrHigh =0; 디지털 쓰기(13, 낮음); 노톤(9); }}
수신기 출력 ....HE-..L.-..L---O.--W---O.-.R.-..L-..D-. -.--!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> const char* MorseTable[] ={ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 공백, !, ", #, $, %, &, ' NULL, "-.- .--", ".-..-.", NULL, NULL, NULL, NULL, ".----.", // ( ) * + , - . / "-.--.", " -.--.-", 없는, ".-.-.", "--..--", "-....-", ".-.-.-", "-..- .", // 0 1 2 3 4 5 6 7 "-----", ".----", "..---", "...--", ".... -", ".....", "-....", "--...", // 8 9 :; <=> ? "---..", "---- .", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..", // @ ABCDEFG ".-- .-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // HIJKLMNO "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // PQRSTUVW ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // XYZ [ \ ] ^ _ "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, "..--.-", // ' abcdefg NULL, ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // hijklmn o "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", / / pqrstuvw ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--" , // xyz { | } ~ DEL "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL, };int dotLength =50,int dashLength =dotLength*3, 무효 설정 () { // 여기에 설정 코드를 입력하여 한 번만 실행합니다. pinMode(13, OUTPUT); Serial.begin(9600);} 무효 루프() { 문자 채널; if(Serial.available()){ 채널 =Serial.read(); flashDashDot(모스테이블[ch]); 지연(도트길이*2); }} 무효 flashDashDot(const char * morseCode){ int i =0; while(morseCode[i] !=0) { if(morseCode[i] =='.'){ 점(); } else if (morseCode[i] =='-'){ 대시(); } 나는 ++; }} 무효 점(){ digitalWrite(13, HIGH); 지연(도트길이); 디지털 쓰기(13, 낮음); 지연(dotLength);} 무효 대시(){ digitalWrite(13, HIGH); 지연(대시길이); 디지털 쓰기(13, 낮음); 지연(dotLength);}
//모스 부호 이진 트리// 왼쪽 자식 2n+1// 오른쪽 자식 2n+2// <.|->// .E -T// .I -A .N -M //const char MorseTree[] ={'\0','E', 'T', 'I', 'A', 'N', 'M', 'S', 'U', 'R', 'W', 'D', 'K', 'G', 'O', 'H', 'V', 'F', 'U', 'L', 'A', 'P', 'J ', 'B', 'X', 'C', 'Y', 'Z', 'Q', '\0','\0','5', '4', '\0',' 3', '\0','\0','\0','2', '\0', '\0','+', '\0','\0','\0' ,'\0','1', '6', '=', '/', '\0','\0','\0','(', '\0','7', '\0','\0','\0','8', '\0','9', '0', '\0', '\0','\0','\0 ','\0','\0','\0','\0','\0', '\0','\0','\0','?', '_', '\0','\0','\0', '\0','"', '\0','\0','.', '\0','\0','\ 0', '\0','@', '\0','\0','\0','\0','\0','\0', '-', '\0' ,'\0','\0','\0','\0','\0','\0', '\0',';', '!', '\0',' )', '\0','\0','\0', '\0','\0',',', '\0','\0','\0','\0 ',':', '\0','\0','\0','\0','\0','\0','\0' };int val =0; // A LDRint ctrHigh =0;int ctrLow =0;int codePtr =0;int dotLen =400;void setup(){ Serial.begin(9600);// 직렬 연결 시작 Serial.print( 코드Ptr); } 무효 루프(){ val =analogRead(4); if (val>=10) { ctrHigh++; 낮은 =0; 디지털 쓰기(13, 높음); 톤(9, 1000); } else { CtrlLow++; if ((ctrHigh>=dotLen) &&(ctrHigh섹션>=dotLen * 2) { Serial.print("-"); codePtr =(2*codePtr) + 2; } else { if(ctrLow ==dotLen*2){ Serial.print(MorseTree[codePtr]); 코드 Ptr =0; } } 높은 =0; 디지털 쓰기(13, 낮음); 노톤(9); }}
제조공정
CNC 프로그래밍은 오늘날 제조의 핵심입니다. 최신 CNC 기계는 프로그램으로 실행되기 때문에 작업자는 사용할 수 있는 코드 유형과 사용 방법을 알아야 합니다. CNC 소프트웨어에서 사용하는 가장 일반적인 프로그래밍 언어는 G 코드이며 M 코드에도 특정 응용 프로그램이 있습니다. CNC 가공에서 G 코드와 M 코드는 중요한 역할과 기능을 합니다. G 코드:CNC 프로그래밍의 G 코드는 기계의 움직임을 제어하여 부품을 이동하는 기계의 방향과 위치를 나타냅니다. M 코드:CNC 프로그래밍의 M 코드는 특정 작업이나 프로그램의 시작
Hurco 터닝 센터용 G 코드 목록(듀얼 스크린 및 Max 콘솔). Hurco 선반 G-코드 목록은 또한 Hurco G-코드가 모달이고 어떤 것이 비모달인지 지정합니다. HURCO 터닝 센터 Hurco 매뉴얼 무료 다운로드 Hurco 프로그래밍 매뉴얼은 Hurco 웹사이트Hurco CNC 매뉴얼 프로그래밍 및 유지보수 무료 다운로드에서 무료로 다운로드할 수 있습니다. Hurco WinMax 소프트웨어 무료 다운로드 CNC 기계공은 Hurco 웹사이트Hurco CNC 소프트웨어 WinMax 무료 다운로드에서 Hurco Win