반응형

※ 이하 내용은 글 작성 당시의 시험장 환경과 여러 가지 경험을 토대로 작성된 글입니다.  따라서 향후 여러분이 보게 될 시험장 환경 또는 시기적으로 변경되거나 달라질 수 있는 부분이 있다는 점 참고해서 봐주세요.

 

이번 3회 시험 첫째 날(23년 8월 14일)에 나온 과제는 과거 출제 된 12번 문제입니다. (치수 동일)

이제부터는 출제된 문제들이 많이 쌓였기 때문에 최근까지 출제된 문제들을 문제은행으로 놓고, 간간이 새로운 문제를 추가하는 식으로 출제될 것 같아요.  3D프린터운용기능사 첫 시험부터 최근까지(23년 8월 기준) 총 24종의 문제가 출제되었는데요,  올해 기능사 3회 첫날 시험에서는 ⑫번 문제(도면)가 출제되었습니다.  따라서 기본적으로 지금까지 출제된 문제들을 최소한 한 번씩은 연습해야 하며,  되도록이면 24종의 문제 전체를 2~3번 이상 연습해 보는 것이 좋습니다.   그리고 사실 2~3번 이상 연습이 된 상태라면, 새로운 문제가 출제되더라도 처음엔 좀 당황하겠지만 충분히 풀어 갈 수 있을 것으로 생각됩니다.

 

 [ 12번 도면 다운로드하기 ]

01 12회차 문제 도면.png
0.08MB

 ※ 이번 12번 문제의 경우, 모델링하는 데에는 크게 어렵지 않은 과제입니다.  이 글 아래 부분에서 출력 시 주의해야 할 사항 및 시험관련된 팁들에 대해 좀 더 자세히 다루도록 하겠습니다. 

 

[ 실기시험을 본 시험장 환경 ]

1. 시험장          : 울산창조경제혁신센터(울산대학교내 위치)   
2. 모델링 툴       :  Fusion360 (구동 환경 : 약 15인치 크기의 노트북)
3. 슬라이서 툴     :  큐라 Cura 15.04.6  버전
4. 3D프린터 기종  :  GP200

  개인적으로 자신이 사는 곳과 아주 멀지 않은 지역이라면 울산창조경제혁신센터 시험장을 강력 추천합니다!   3D 프린팅 장비와 소프트웨어 사용 환경 등 모두 만족했으며,  해당 시험장은 오랜 기간 3D 프린팅 실기시험을 치른 곳이어서 그런지, 시험을 진행하는 관리위원 및 감독관과 관계자 모두 시험 진행을 매끄럽게 잘 진행해 주었고, 수험자분들이 긴장해서 실수하지 않도록 세심한 설명으로 잘 유도해 주었으며, 작은 돌발사항 발생에도 불이익이 없도록 깔끔하게 잘 대처해 주었습니다. 
 ( 이곳 시험장 시설 특징 : GP200의 경우 타 모델에 비해 출력물이 배드에 안착이 잘 되었으며, 출력물 품질도 나쁘지 않았습니다.  다만 제공되는 필라멘트 재질이 개인적으로 사용해 본 필라멘트보다 응착력? 이 강해 보이는 것 같은 재질 특성으로 인해 서포트를 많이 적용하게 되면 떼어내는데 조금 힘이 들 수 있을 것 같습니다.  이곳의 좋은 점은 실기시험 일 직전에 장비사용에 대한 교육을 진행하기 때문에 원하는 사람은 사전에 신청해서 직접 시험장 장비 및 시설을 이용해 볼 수 있습니다. 
 그리고 제일 좋았던 점은, 일반적으로 시험을 치러가면 기본적으로 Fusion(퓨전) 360은 자신의 아이디로 직접 로그인하게 되어 있는데요, 이때, 시험에 영향을 줄 수 있기 때문에 자신이 그간 작성해 놓았던 모든 모델링 파일들을 사전에 모두 삭제하고 가야 하는 불편함이 있지만, 여기서는 이미 로그인된 깨끗한 교육용 ID를 제공해 주기 때문에 전혀 불편함 없이 시험을 치를 수 있어서, 사는 곳과 거리가 좀 멀었지만 주저 없이 이곳을 선택하게 되었습니다 )

 

 기능사 3회 2023년 8월 게시된 전국 3D프린터 기능사 실기 시험장 시설 현황을 첨부하니, 참고해 보세요.
( 시설 현황은 시험장 사정에 따라 추후 변동성이 있기 때문에 해당회차 실기 시험 접수 직전에 게시되며 일정기간 지나면 시설 목록은 삭제될 수 있습니다.  따라서 매우 큰 변화가 있는 것은 아니지만 시설현황은 향후 변동 될 수 있다는 점 인지하고 향후 큐넷에서 시험장 정보 재공지하는 것을 다시 확인해 주세요.  출처 : Q-Net 공지사항 게시판 )

작업형 시설공개 종목 시험장 시설현황_0716 (3D 등).xlsx
0.06MB


여기서 중요한 건, 필기 접수때도 마찬가지지만 실기 접수는 더더욱 자신이 연습한 모델링툴이 정해져 있고, 사용하고자 하는 슬라이서 툴 및 선호하는 3D 프린터 기종이 별도로 있기 때문에, 이런 조건들을 모두 만족하는 시험장에서 시험 볼 수 있도록 실기시험 접수 때 상당히 신경 써야 합니다.  접수 기간은 며칠 여유가 있는 것은 사실이나 자신이 사는 지역과 되도록 가까운 지역으로 시험장을 선택하고자 한다면,  그리고 자신이 원하는 장비와 소프트웨어가 갖춰진 시험장이 조기에 인원마감이 될 수 있기 때문에 접수 당일 오픈 시간(오전 10시) 전에 준비해서 바로 접수할 수 있도록 하는 것이 좋습니다. 

 시험 종목에 따라 예를들어, 전기기능사와 같은 종목은 특히나 눈치(?) 싸움도 치열하기 때문에,  접수 시, 결제 방법도 신용카드 결제보다 더 빠르게 접수 처리되는 "가상계좌 이체" 방법을 선택하는 것을 추천하기도 합니다. (접수완료 기준은 결제 단계까지 간 것을 기준으로 함).  신용카드 결제의 경우 수많은 접수자가 결제 시도 시 결제 시스템(서버)이 불안정할 수 있고, 따라서 결제지연이 되는 경우가 있다고 합니다.

  가상계좌 이체 방법은 금액 이체 시간 기준이 아니며 일단 선택되면 선접수완료 되며,  실제 실기비용 이체는 접수 당일 오후 2시 전까지만 이체하면 됩니다. 만약, 오후 2시를 넘긴다면 접수 취소처리 되니 유의해 주세요.

 ※ 한가지 추가 팁으로 접수일 직전에 접수를 위한 사전 정보 입력 서비스도 제공되니 꼭 이용해 보세요.  실기 접수 관련된 입력사항(학력정보, 경력정보, 자격정보, 개인 PC지참 여부, 장애 여부 등)을 미리 입력해 놓으면 접수 당일 접수를 보다 빠르게 진행할 수 있습니다.  (아래는 사전입력정보 예시입니다)

위에까지 선택하면 아래와 같은 서전정보 입력이 완료되며,  추후 결제 당일 오전 10시가 되면 아래 "결제정보"란에 결제할 수 있는 버튼이 활성화됩니다.   여기서 중요한 것은 큐넷 첫 페이지에 있는 원서접수하기 메뉴로 들어가면 안 되며, 반드시 큐넷 로그인 후, 아래 화면이 나오는 마이페이지로 바로 들어가야 합니다.  그리고 접수 시작이 되는 오전 10시가 되자마자 리프레시를 눌러보면 약간의 대기 시간 후에 활성화된 결제버튼을 누르고 결제 진행하면 됩니다. 

 

<수험자 지참물 >

수험자 지참물은 반드시 사전에 꼼꼼하게 챙겨서 가야합니다.  시험장에 따라, 특히 보호장갑이나 방진마스크 등 일부 지참물을 준비해 가지 않을 경우 감점처리 될 수 있습니다.   특히 안전과 관련된 지참물의 경우, 예를 들어 장갑을 끼지 않고 서포트 제거하다 손을 다치거나 할 경우 책임의 소재도 있기 때문이기도 하겠지만, 실제로 날카로운 공구를 가지고 작업할 때 손을 다치는 경우가 종종 있기 때문에 본인을 위해서라도 지참물을 잘 챙겨가시기 바랍니다.

 

< 시험 전 중요 체크 사항 >

[ 시험 1 과제 ]

"제 1과제" 시험 시 중요체크사항이며, 관련된 상세설명도 이어서 하겠습니다.

1) 제출할 파일 확인(4가지)하기! 
2) Fusion360 오프라인 모드(네트워크 차단) 사용해 보고 가기! (파일 저장 방법 확인)
3) 자신이 사용하는 Fusion360 사용자 환경설정 다시 확인하고 가기!
4) 작품에 비번호 새기고 공차 넣기 확인하기!
5) 안정적인 출력을 위한 부품의 방향 정하기
6) 슬라이서 프로그램 설정 체크하기!

 

 먼저, 시험 전체 프로세스에 대해 이해하는 것이 중요하니, 실수가 없도록 요구사항을 상세히 읽고 대비하면 좋겠습니다.
'제1과제'는 3D 모델링으로, 제한 시간은 1시간입니다.  자신이 연습해 온 모델링 툴로 설계하여 다음과 같은 4개의 모델링 파일을 감독관이 제공해 주는 USB에 제출하는 것입니다.

1) 제출할 파일 확인(4가지)하기! 

①. Fusion360 작업 파일  "xx.f3d"  (작업하는 모델링툴에 따라 확장자가 다름)
②. 채점을 위한 STEP 파일 "xx.stp" 
③. 슬라이싱 작업을 위한 파일 "xx.stl" 
④. 슬라이싱 된 3D프린터 출력 파일 "xx.gcode"
     
파일이름은 반드시 자신이 부여받은 비번호로 하게 되어 있으니 주의해 주세요.  예를 들어 비번호 9번을 부여받았다면, 윈도 바탕화면에 "09"라는 폴더를 생성한 후,  거기에  " 09.f3d " ,   " 09.stp "  ,  " 09.stl " , " 09.gcode " 이렇게 4개의 파일을 저장해야 하며,  작업이 완료되면 감독관에게 손을 들고 작업한 파일을 보여주면, 감독관이 USB를 제공해 주며, 그럼 거기에 파일들을 저장해서 자신이 제공받은 3D 프린터로 가서, "제2과제" 출력하기로 넘어가게 됩니다.  

여기서,  감독관이 먼저 '제2과제'로 넘어가는 진행방식을 수험자들의 의견을 묻거나하여 결정하게 되는데요, '제1과제' 1시간을 모두 동일하게 기다려 종료된 후 '제2과제'로 모두 동시에 넘어가는 방식이 있지만 이는 일찍 끝낸 사람들은 남은 시험시간을 멀뚱히 기다려야 하기 때문에, 그리고 1과제의 경우 대부분 30분 전 후로 작업을 끝내는 수험자가 많기 때문에, 1과제 작업을 일찍 완료하는 대로 개인별로 2과제 시험 시간을 따로 적용하여 2과제 작업으로 바로 넘어가는 방식을 적용하는 경우가 많습니다. 

 

2) Fusion360 오프라인 모드(네트워크 차단) 사용해 보고 가기! (작업 중 파일 저장 방법 확인) 

※  Fusion360의 경우 클라우드 방식의 온라인으로 연결된 서버에 작업파일('xx.f3d')을 저장하는 방식으로 작동이 되는데요, 시험장에서는 네트워크를 차단한 상태로, 즉 Fusion360을 Off라인 모드로 해놓고 시험을 치르기 때문에 파일 저장 시 주의해야 합니다.   따라서 자동으로 온라인에 저장되는 일반적인 저장(Save, 또는 Save as...) 기능은 이용이 불가하여, 작업 중간중간 파일을 저장해 놓을 경우에는, Export 기능을 통하여 저장해야 합니다.  이때 파일 저장위치는 바탕화면 비번호 폴더입니다.

 만약 작업 중 프로그램 및 컴퓨터 오류로 인하여 멈춰버리거나 할 경우 시험을 망칠 수 있기 때문에, 반드시 작업 중간중간 또는 중요한 부분의 작업을 마무리하였을 경우 반드시 Export를 통하여 작업파일을 저장해 주세요. 
또한, 아래에 보이는 작업파일 복구하기 기능도 알아두면 좋습니다.   작업 중 갑자기 다운되거나 할 경우 프로그램에 설정된 일정 간격 자동 저장 기능으로 저장된 파일을 불러올 수 있는데요,   "Open Recovered Documents(0)" 메뉴를 통해 복구할 수 있습니다.  (한글 모드에서는 "복구된 문서 열기(0)"로 표시됩니다)

 

3) 자신이 사용하는 Fusion360 사용자 환경설정 다시 확인하고 가기!

①. 환경설정 메뉴 위치 파악하기
②. 한글모드 / 영문모드 변경하기
③. 줌 방향 / 조작 방법 선택하기 

 

①. 환경설정 메뉴 위치 파악하기

처음 Fusion360을 접하게 되면 환경설정(기본설정-Preferences) 메뉴 위치를 찾는데 상당히 애를 먹을 수도 있는데요, 메뉴 위치는 Fusion360 프로그램 우측 상단 쪽에 자신의 계정 아이콘 모양을 클릭하면 됩니다.  경우에 따라서는 아래처럼 계정 아이콘 모양이 잘 안 보일 수 있는데,  그냥 그 위치를 클릭하면 서브 메뉴가 바로 나타나니 참고하세요. 

 

 

②. 한글모드 / 영문모드 변경하기

 자신이 사용하던 Fusion360의 언어 설정과 시험장의 언어설정이 다를 수 있습니다. 따라서 자신이 원하는 언어로 변경이 필요한데요,  
기본설정(Preferences)을 클릭하면 아래와 같은 메뉴가 열리고 메뉴 제일 상단에 "사용자 언어" 부분에서 언어 변경을 할 수 있습니다. 

한글 모드
영문 모드

※ 간혹 한글 모드에서 파일 Export 할 때 에러가 나는 경우가 있다고 하니,  계속 에러가 날 경우 영문 모드로 변경 후 Export 시도해 보시기 바랍니다.  가급적이면, 처음부터 영문모드로 해놓고 연습해서 영문모드에 익숙해지는 것을 권장해 드립니다. 


③. 줌 방향 / 조작 방법 선택하기 

먼저 자신의 취향에 따라 아래 이미지에 있는 줌 방향 반전 부분을 체크하거나 해제해서 사용해 보세요.
줌 방향은 마우스 휠을 위로 미느냐? 당기느냐? 에 따라  줌 인 또는 줌 아웃이 되는 것이 반전이 되는 옵션입니다.  대부분은 이미 어느 한쪽에 익숙해져 있는데, 이 기능이 반대로 동작한다면, 마음은 급한데, 시험 내내 반대로 작동한다면 매우 짜증? 이 날 수 있겠죠? ㅎ

 다음으로, 이미 인벤터, 팅커캐드, 솔리드웍스 등 자신이 사용해 본 프로그램이 있다면 거기에서 사용했던 초점이동, 줌, 회전에 대한 마우스 등의 사용법에 많이 익숙해져 있을 텐데요,  이런 익숙해진 툴과 같은 방식으로 Fusion360을 사용할 수 있도록 관련된 설정을 변경해 주는 기능입니다.   
  저의 경우는 오른쪽 마우스로 모델을 이리저리 회전시켜 보는 기능이,  큐라와 같은 슬라이서 프로그램에서 사용하는 방식과 유사한 " Tinkercad "가 있어서 개인적으로 너무 편해서 선택해 놓고 사용하고 있습니다.  따라서 시험장의 경우 Inventer 혹은 다른 툴로 설정되어 있다면 작업에 매우 불편할 수 있으니 이 기능도 꼭 자신이 사용하던 툴로 변경해 놓고 시험을 치르면 좋습니다. 

 

 

4) 작품에 자신의 비번호 새기고 공차 넣기 확인하기!

①. 비번호 각인하기
②. 공차 넣고 확인하기

 

①. 비번호 각인하기

 3D 프린팅 시험에서 모든 과정을 완벽하게 했더라도, 자신의 비번호가 새겨지지 않은 모델을 출력하게 되면 실격으로 이어질 수 있습니다.  희미하더라도 비번호가 새겨진 것과 새겨지지 않은 것의 차이는 합격과 불합격으로 큰 차이 날 수 있으니 반드시 비번호 넣는 것을 잊지 않아야 합니다.   
 만약 9번 수험자의 경우 9라고 새겨도 되고, 09라고 넣어도 전혀 상관없습니다.  다만 개인적으로는 6번과 9번이 헷갈리수 있으니 앞에 0을 넣어주는 것이 좋다고 생각합니다. 
 또한 비번호는 입력 시 출력물에 표시가 선명하게 잘 되도록 음각 Extruder 적용 시 적절한 굵기와 깊이로 넣도록 해야 합니다.  실제 시험장에서 특정 수험자의 경우, 폰트 크기 및 굵기 선택이 적절하지 못하고, 너무 얇은 음각으로 인해 출력물을 보니 거의 표시가 되지 않는 경우가 발생했습니다.

숫자를 넣는 위치의 부품 두께가 아주 얇은 것이 아니라면, 기본적으로 음각은 -1mm 이상 주는 것이 좋습니다.



②. 공차 넣고 확인하기

 3D 모델링에서 비번호 입력만큼 중요한 것이 공차입니다. 보통 시험 때 긴장하다 보면, 모델링 완료 후 공차 넣는 것을 잊어버릴 수 있는데요, 이 상태로 출력하게 되면, 부품1과 부품2의 움직여야 하는 연결 부위가 단단히 붙어버려 실격으로 이어지게 되죠.  그리고 당연하게도 제 1과제 설계 종료 후 제2과제로 한번 넘어가게 되면, 빠진 공차를 다시 넣는다든지 하는 수정 작업은 아예 불가하기 때문에, 제1과제 마무리 할 때 반드시 공차를 제대로 넣었는지? 확인해 주세요. 

 시험 유의사항에도 나와 있듯이 공차는 1mm를 초과할 수 없는데요,  후가공의 편리성을 위해 공차는 최대치 인 1mm로 주는 것이 좋습니다.   공차를 넣게 되는 위치는 상호 움직임이 발생되는 치수 A와 B로 표시되는 부분이며 기준치수와의 차이가 1mm를 넘지 않도록 공차를 넣어 주면 됩니다. 

먼저 아래 도면을 다시 한번 자세히 살펴보세요.

 

<'A' 에 공차 넣기>

아래 이미지에서 "A" 구간처럼 원통형의 경우 OFFSET FACE로 -0.5mm로 공차를 주면 원직경으로 딱 -1mm 줄어들게 됩니다.  
만약 OFFSET FACE 값을 -1mm로 하게 되면, 원을 둘레로 해서 1mm씩 줄어들게 되면 직경으로 따지면 결국 2mm가 줄어들게 되니 주의해 주세요. 

 

<'B' 에 공차 넣기>

아래 이미지에서 "B" 구간처럼 OFFSET FACE로 -0.5mm씩 양쪽을 함께 공차를 주게 되면 B구간의 몸통 직경이 종합적으로 1mm 줄어들게 됩니다. 
만약 OFFSET FACE 값을 -1mm로 하게 되면, 한쪽에 1mm씩, 직경으로 따지면 결국 2mm가 줄어들게 되니 주의해 주세요. 

 

< 공차를 넣기 전 모델링 단면 >

 

< 공차를 넣은 후 모델링 모습 >

 

5) 안정적인 출력을 위한 부품의 방향 정하기!

 3D 모델링 완성 후에 출력을 위한 슬라이싱 파일(gcode)을 만들게 되는데요, 이 과정에서 3D프린터로 출력시킬 작품의 방향을 정해줄 수 있습니다.    여기서 중요한 것은 어느 방향으로 설정하느냐에 따라 출력시간이 길어지거나 단축될 수 있고, 배드 안착에 문제가 생길 수 있으며, 후가공이 불편해지거나, 안정적으로 출력이 되느냐? 등  여러 가지로 영향을 주기 때문에 신중하게 고민해서 출력의 방향을 결정하는 것이 필요합니다.
3D 모델링 부품의 방향은 Fusion360의 STL 파일을 Export 하는 단계에서 정해 줄 수 있고, Cura와 같은 슬라이서 프로그램에서도 정해줄 수 있는데요,  다만 Cura에서는 회전이 부품1과 부품2가 고정된 상태로만 가능하기 때문에, 이번 과제 처럼, 두 개의 부품 중 하나만 따로 회전시켜야 하는 경우에는 모델링툴에서 바꾸어 주는 것이 필요할 수 있다는 점 참고하세요.  

 그럼, 이번 과제를 예시로 간단히 설명해 볼게요.

(예시 ①)  모델링한 모양 그대로 출력할 경우

 아래, 출력스타일(방향) ①의 경우는  부품2가 바닥으로부터 튀어나와 있기 때문에 부품1을 받치기 위한 서포트가 많이 들어가게 되어 출력 시간이 더 늘어날 수 있습니다.  

 

 

(예시 ②)  두 부품을 함께 옆으로 눕혀 출력할 경우.

 기본 방향은 그대로 하고, 두 부품을 함께 옆으로 눕혀 옆면으로 출력하는 경우.
전반적으로 무난한 편이며, 부품1의 4개의 기둥이 세로로 길쭉하게 뽑히는 형태여서 기둥 부분의 출력 상태가 조금 불안할 수 있음.   비번호가 적힌 2번 부품의 아래면과 1번 부품 사이가 잘 떨어지지 않을 수 있음.

 

(예시 ③)   세로 방향으로 길게 출력할 경우.

 예시 ③은 바닥면을 Raft와 같은 바닥 보조물을 넣어야 할 경우 가로 방향으로 출력할 경우보다, 면적을 최소화할 수 있어 출력시간을 줄일 수 있지만, 전체적으로 바닥의 출력 면적이 작아 안착이 불안정한 3D프린터로 출력할 경우 출력물 탈착이 우려되니 가급적 피하는 것이 좋습니다.

 

 

(예시 ④)  부품2를 돌려서 부품 1과의 바닥 높이를 일치시켜 출력할 경우.

 부품 1은 가로 방향으로 그대로 놓고 부품 2를 아래 이미지처럼 회전을 시켜 출력을 하면 안착 및 출력시간도 크게 늘지 않으며 everywhere 서포트 적용을 하지 않더라도, 안정적으로 출력이 가능해 보입니다.
단, 이렇게 부품 2만 따로 돌리기 위해서는 Fusion360과 같은 모델링 툴에서만 가능합니다.  슬라이서 툴에서는 부품 1, 부품 2가 고정된 채로 함께 회전하기 때문에, 4번 스타일로 작업을 한다면 반드시 모델링 툴에서 선작업을 해주는 것이 필요합니다. 

 

5) 슬라이서 프로그램 설정 체크하기!

 큐라 15.xx 버전의 슬라이서 프로그램을 예시로 주요 설정 사항을 체크해 보세요. 
 ※ 단, 본인이 시험 보는 장비와 환경에 따라 설정이 달라야 할 수 있으니, 본인의 상황에 맞게 조정해야 함을 잊지 마세요.
 < 기본(Basic) 설정 항목의 주요 체크 사항 >

 기본 설정에서 층 간격은 하나의 레이어(층)의 두께를 결정하는 것으로,  0.1 방향으로 숫자를 줄일수록 전체적인 퀄리티는 올라갈 수 있으나, 출력시간이 늘어날 수 있으며,
3.0 이상으로 너무 올리게 되면 빠른 출력이 가능하나 출력품질이 저하되며, 상황에 따라서는 레이어 간 결합력이 떨어져 탈조가 날 수도 있으니 적정 간격으로 조정해 주세요.

< 고급(Advanced) 설정 항목의 주요 체크 사항> 

 

[ 시험 2 과제 ]

"제 2 과제" 시험 시 중요체크사항입니다.

1) 시험장의 3D프린터 작동법 및 특성 사전에 파악하고 가기! 
2) 2과제 진행방법 및 제한 시간 파악하기!
3) 내부채움(Infill) 설정을 단단하게 하기! (1 과제 슬라이서 툴에서 작업)
4) 출력 시 필라멘트 롤 체크하기!
5) 후가공 시 주의할 부분!

 

1) 시험장의 3D프린터 작동법 및 특성 사전에 파악하고 가기!

①. 직접 사용해 볼 수 있는 곳 찾아가서 출력해 보기  
②. 유튜브 및 블로그 자료 검색으로 장비 특성 파악해 보기

 

①. 직접 사용해 볼 수 있는 곳 찾아가서 출력해 보기

 자신이 갖고 있거나 사용해 본 3D 프린터라면 문제없겠으나, 시험장소 선택과 같은 여러 이유로 전혀 사용해 보지 못한 장비로 시험을 보게 된다면 시험 때 많이 당황을 할 수 있고, 시험직전까지 계속 걱정스러운 마음으로 기다리게 되는데요, 이럴 때 해당 장비로 교육이 가능한 "메이커 스페이스" 혹은 관련 강좌 프로그램을 하는 곳이 있는지? 찾아서 교육 신청을 하고 미리 사용해 본다면 이런 걱정스러운 부분들을 해소할 수 있습니다.   실제로 자격증 시험을 보았던 울산창조경제혁신센터에서는 자격증 시험을 보기에 앞서 3D프린팅 및 장비 교육 프로그램을 진행하고 있었습니다. 

②. 유튜브 및 블로그 자료 검색으로 장비 특성 파악해 보기

 만약, 여러 사정으로 인해 해당 장비를 직접 사용해 보지 못하는 경우라면 유튜브 및 블로그 또는 해당 3D프린터 장비 제조사 홈페이지 등 검색하여 장비 특성이나 사용법과 같은 자료들을 찾아보아야 합니다.  파악해 두어야 할 몇 가지 내용은 다음과 같습니다.

1)  3D 프린터의 LCD 패널을 통한 조작법 파악 (메뉴 이동 방법,  '오토레벨링' 메뉴 확인 또는 수동 레벨링을 위한 Step 모터 언락 방법, 필라멘트 Load/Unload 메뉴 위치 파악 등)

2)  필라멘트 교환 또는 Load / Unload 하는 방법 파악 (일반적으로는 필라멘트가 장착이 된 상태로 수험자에게 제공이 됩니다.  하지만, 만에 하나 별도로 필라멘트를 제공하여 수험자가 직접 Extruder까지 로딩시켜야 하는 경우도 생각해 볼 수 있기 때문에 이를 조작하는 관련 영상이 있다면 찾아보고 가는 것이 좋습니다. 

3) 배드레벨링 (장비에 따라 오토레벨링이 지원될 수도 있고 수동으로 직접 레벨링해야 하는 경우가 있는데요, 수동 레벨링의 경우에는 역시 해당 장비의 레벨링 하는 방법을 사전에 확인하고 가야 당황하지 않게 됩니다. 다만, 시험장에 따라서 기본적으로 레벨링까지 되어 있어 특별히 수험자가 별도로 만지지 않아도 되는 곳이 있습니다.  그리고 경우에 따라, 해당 장비를 처음 사용해 보는 수험자라면 오히려 잘못 만지게 되면 출력에 문제가 생길 수 있으니 주의해야 합니다. 보통 이런 곳에서는 시험장 관리위원이 "수험자가 별도로 레벨링 할 필요 없다"라고 이야기해 주기도 하니 장비 관련 설명할 때 잘 들어보고, 만약 관련 언급이 없다면 레벨링 관련해서 질문을 해보세요. 보통의 경우는 따로 설정하지 않는 것이 도움이 될 거라는 식으로 약간 둘러서 말해주기도 합니다.  그리고 사실 상황에 따라 출력물 출력하고 서포트제거 및 제출까지 시간 여유가 많지 않을 수 있기 때문에 레벨링 등에 따로 시간을 할애할지 등은 잘 판단해 보세요.  )

 

2) 2 과제 진행방법 및 제한 시간 파악하기!

①. 2과제 진행과 관련된 수험자 요구사항 확인하기.
②. 2과제 제한 시간! 확인할 것

①. 2과제 진행과 관련된 수험자 요구사항 확인하기.
 2과제 진행과 관련된 수험자 요구사항을 확인해 보세요. 

기본적으로 제2과제의 주요 과정은 아래와 같습니다. 
 < 3D 프린터 세팅>   →   < 출력물 출력>  →   < 출력물 후가공>     ▶ 결과물 제출

 

②. 2과제 제한 시간! 확인할 것

 2과제 제한 시간은,

 "3D 프린터 장비 세팅시간" +  "출력물 출력시간"  + "후가공"   ==  "2시간"

( ※ 출력물 출력 시간 : 1시간 20분 이하이며, 슬라이서 툴에서 "출력 예상 시간"이 1시간 20분 이하로 슬라이싱 된 것을 감독관으로부터 확인을 받아야 2 과제로 넘어올 수 있음)

 

3)  내부채움(Infill) 설정을 단단하게 하기! (1 과제 슬라이서 툴에서 작업해야 함)

  3D 프린팅 시험에서 완벽하게 모델링하고 출력까지 성공했다면, 마지막으로 후가공 후 제출만 한다면 합격할 수 있습니다. 다만 모델 모양에 따라 특정부위가 얇게 디자인되어 있는 부품의 경우 후가공 과정에서 부러뜨리기가 매우 쉽습니다.  아무리 후가공 과정에서 조심하려고 주의해도, 특히 부품 1과 부품 2가 만나면서 움직여야 하는 부위의 경우 폭까지 얇은 디자인이라면,  그리고 내부 채움이 20% 이하라면, 정말 부서지기 쉽고, 그간 이런 경우로 탈락하는 사례가 종종 있어왔습니다. 서포트를 떼어내는 것뿐 아니라, 이 과정에서 쉽게 부서지는 경우가 흔하다 보니, 되도록 내부채움을 두께가 아주 얇다면 50% 가까이 가져가는 것이 좋습니다. 물론 전체 출력시간이 1시간 20분을 넘으면 안 되기에 50%를 기준으로 출력시간이 오버되지 않는 선에서 내부채움 %를 결정해 주면 좋습니다. 

아래 예시로 Infill의 %에 따라 내부의 단단함을 비교해 보면 바로 이해할 수 있습니다. 

 위 사진에서도 알 수 있듯 Infill이 15% 정도라면 얇은 기둥 부분은 후가공 과정에서 충분히 부서질 가능성이 큽니다. 

따라서,  출력 제한 시간을 확인하면서 Infil을 최대한 단단한 비율로 채워주면 좋을 것 같습니다.  (권장 50%~30%)

 

4) 출력 시 필라멘트 롤 체크하기!

 보통의 경우는 출력할 때 크게 문제없겠으나, 종종 필라멘트 롤이 엉키는 경우가 있습니다. 그렇게 되면, 필라멘트가 공급이 되지 않아 출력물이 더 이상 적층이 안 되어 출력물을 완성할 수 없게 됩니다.  따라서 시험이 진행되는 동안에는 주기적으로 작업물이 적층 되는 모습을  수험자 본인이 주의 깊게 지켜봐야 하며, 만약 필라멘트 롤이 잘 풀리지 않고 걸린다면 롤을 손으로 미리 조금씩 계속 풀어 주면서 작품을 완성해야 합니다.  

5) 후가공 시 주의할 부분!

①. 작업용 장갑을 착용하고 다치지 않도록 안전에 유의함.  
②. 후가공시 적절한 공구가 갖춰져 있다면 실수할 가능성이 줄어든다.


 수험자 지참 준비물에 보면 작업용 장갑 및 마스크를 준비하라고 되어 있습니다. 만약 준비되지 않을 경우 시험장 상황과 감독관에 따라서 감점을 줄 수 있습니다. (규정)    
물론 규정이 아니라도, 실제 후가공 상황에서 날카로운 도구로 잘 떨어지지 않는 부분을 시간에 쫓기어 작업하다가 손을 다치는 경우가 종종 있기 때문에 본인의 안전을 위해서라도 장갑을 챙겨가세요. 

일반적으로 니퍼, 롱노우즈, 커팅도구(칼, 미니 조각칼 등)는 필수로 챙겨가는 것이 좋고, 추가로 필요하다면 쇠줄, 디버링 툴 같은 것도 챙겨가면 도움이 될 수 있겠습니다. 

 

 

또한, 이렇게 상황에 따라, 적절한 공구들이 있다면 후가공 시 잘 떨어지지 않는 서포트를 떼어내기 수월하며, 두께가 얇아 부러지기 쉬운 부품도 좀 더 안전하게 작업할 수도 있습니다. 

 이상으로, 3D프린터 운용기능사 시험 전, 미리 알고 가면 도움 될 수 있는 내용으로 정리해 보았습니다. 
3D프린터 운용기능사 시험을 처음 보는 분들이,  종합적으로 시험 전 준비할 수 있는 자료가 있으면 많이 도움이 되겠다는 마음으로 일주일 가까이 공을 들여 작성하였는데요, 아무쪼록 많은 도움이 되었으면 합니다. 

감사합니다.

 

반응형
반응형

이번 게시글은 아래 지난 게시글 핵심노드 설명 4편에 이은 설명입니다.  순서는 크게 상관없지만 다른 노드의 설명과 Node-RED의 기초적인 설명을 참고하려면 맨 앞쪽 링크를 참고해 보세요.

【Node-RED #⑤】노드-레드! 핵심노드 설명 4편/ Core Node Description! #4

①  delay 노드

  delay 노드는 입력 받는 메시지를 일정한 규칙에 따라 지연해서 전달하도록 해주는 노드입니다.

지연 전달하는 몇 가지 조건 설정을 할 수 있는데요,  예를 들어 아래처럼 5초의 시간 delay를 시켜볼 수 있습니다.   확인을 위해 1번 debug 창은 바로 연결하였고,  2번 debug 창은 5초의 시간 delay를 거치도록 하였습니다. 

1. 타임스템프(inject 노드)의 속성 값으로 전달할 적당한 메시지를 아래처럼 작성합니다. 

 

2. delay 노드의 속성은 아래처럼 해주세요. 

 

3. 그리고 배포하기를 누르고 Inject 버튼을 누르면 아래처럼 debug 창으로 결과를 확인해 보면,  delay가 없는 출력과 비교해서 5초의 설정에 따라 5초의 delay가 정확히 발생하는 것을 알 수 있습니다.

 delay 속성중에는 방금과 같은 고정 값 지연(Fixed delay) 외에,  일정 범위 값 안에서 랜덤으로 지연시킬 수 있는 속성도 사용 가능합니다.

또한, 기본(default) delay 값으로 예를 들어 3초를 설정하고,  특정 메시지(페이로드) 마다 delay를 다르게 설정하여 구분해 줄 수도 있습니다.  (아래 예시)

먼저,
1. 아래처럼 노드를 구성해 주세요.  

2.  delay 노드의 속성은 아래처럼 "msg.delay에 지연을 설정"으로 바꾸고 시간은 default 값으로 임의로 3초를 지정해 줍니다.

 

3.  'A' inject노드에는 단순한 전달 메시지만 입력합니다.

 

4. 'B' inject 노드에는 둘 째줄에 있는 'msg.topic'을  'msg.delay'로 바꿔주고, 속성을 '0~9' number 형식으로 바꾼 다음, delay 값 5000 millisecond (5초)를 입력해줍니다.

 

5.  결과를 실행해 보면, 'A inject'노드를 눌렀을 때, delay (variable) 노드에 기본 값으로 설정된 3초를 기다린 후 A의 메시지(페이로드)를 debug 창으로 전달(출력)했으며, 

 

6.  'B inject'노드를 눌렀을 때는 B inject 노드에 설정된 delay 값이 적용되어 5초를 기다린 후 B의 메시지(페이로드)를 debug 창으로 전달(출력)하는 것을 알 수 있습니다. 

 

7. 그 밖에, delay 노드 사용할 때  inject 노드에서 Reset 기능을 설정할 수 있는데요, 예를 들어, A나 B노드의 inject를 실행하고 설정된 delay 값이 완료되기 전,  Reset inject노드를 누르면 delay가 취소되고 결국 debug창으로 페이로드가 전달되지 않게 됩니다.  (이 실습을 위해 아래처럼 Reset inject 노드를 추가해 주세요)

그리고 리셋(Reset) inject 노드의 속성은 아래처럼 합니다.  일반 inject 노드를 추가해서 두 번째 줄에 있는 msg.topic 항목의 topic 글자를 지우고 reset를 입력합니다.(자동완성 기능 제공)   그리고 속성창에 있는 속성을 Boolean(불린)으로 변경하고, true값으로 설정 확인해 주면 됩니다. 

실습은 먼저 A 혹은 B inject 노드(여기서는 5초로 설정된 B 노드를 클릭)를 클릭 한 다음 5초가 되기 전 Reset inject노드를 클릭하면 delay가 취소되고 debug창으로 아무런 페이로드가 전달되지 않는 것을 볼 수 있습니다. 

8. 아래처럼, 플러쉬(Flush) inject 노드를 추가해 주는데요, 마찬가지로 일반 inject 노드를 추가해서 두 번째 줄에 있는 msg.topic 항목의 topic 글자를 지우고 flush를 입력합니다.   그리고 속성창에 있는 속성을 Boolean(불린)으로 변경하고, true값으로 설정확인해 주면 됩니다.   Flush 기능은 delay 타임이 적용되고 있든 그렇지 않든 클릭하는 즉시 페이로드를 전달시키는 기능입니다. 

 

반응형
반응형

안녕하세요~

최근, ATmega128 칩을 테스트할 일이 있어 AVRISP-mk2 툴을 알리에서 구해서 연결하던 중, AVRStudio 7.0에서 인식이 안 되는 문제가 생겨, zadig 툴을 사용하여, 펌웨어 업뎃을 진행했습니다. 

zadig-2.8.exe
5.01MB

참고로, Zadig 툴은 USB형태로 연결된 기기장치들의 펌웨어를 강제로 원하는 형태로(위 이미지에 있는 4가지 종류) 덮어  씌울 수 있는 툴로서 사용시 주의를 요합니다.  Zadig 툴의 옵션 메뉴에 있는 "List All Device"를 클릭하면, PC에 연결된 모든 USB장치가 목록으로 뜨게 되는데요,  AVRISP 장치의 펌웨어를 4종 모두 바꾸어가며 테스트하던 중(기기를 꽂고 빼고 하면서) 목록 최상단에 있던  키보드(Keychron K1)를 펌웨어 업뎃 시키고야 말았습니다. (살짝 뜨는 경고 메시지를 무시해 버림)


 그 덕에(?)  갑자기 키보드가 먹통이 되었는데요,   이를 해결하고자, Zadig 목록에 있던 4종의 펌웨어로는 모두 인식이 안 되고,  키보드 제조사 게시판에서 제공하는 펌웨어 업뎃 프로그램으로 복구를 시도해 봤지만,  펌웨어 업뎃으로 인해 키보드가 HID장치가 아닌 다른 장치로만 인식이 되는 상황이어서 제조사에서 제공되는 펌웨어 업뎃 툴로는 복구가 안 되는 상황이 발생하게 되었습니다.   

윈도 장치관리자에 있는 Keyboard 목록을 삭제하고 드라이버를 다시 설치해보려 했지만 제대로 인식이 되지 않았으며, 여러 가지 시도 끝에  겨우 해결을 했는데요,  모든 상황이 동일하진 않겠지만,  저와 같은 상황에 빠진다면, 참고해 보시라고 기록을 남겨 놓습니다.  

 우선 Zadig로  WinUSB (v6.1.7600...) 버전으로 펌웨어 업뎃을 해놓고서,  키보드를 다른 PC에 물리니 키보드의 기본 기능은 사용할 수 있는 것으로 확인되자,  인식이 안 된 PC에서 레지스트리 편집을 통해,  Keyboard 관련 Driver버를 모두 삭제하는 것이 필요하다고 생각되어 삭제를 하게 되었습니다. 
윈도 실행 메뉴 》 Regedit  엔터,    레지스트리 편집기로 들어가서,  아래 목록처럼 키보드 목록으로 들어가세요,  

아래에 보면, 그동안 인식된 키보드 관련 레지스트리 값들이 보이는데요, 인식이 안 된 키보드 항목이 어떤 것인지 모르기 때문에, (기본값) 항목을 제외하고 모두 삭제시켜주세요.  (레지스트리 작업 시 주의하세요!)

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KeyboardClass

그리고, 재부팅한 후,  재일 중요한 부분! 입니다.

먹통이 된 키보드를 다시 연결하고, 제어판 장치관리자로 들어갑니다. 

그리고 문제가 된 키보드 장치(키보드 모델명) 혹은 USB장치로 인식된 키보드 항목을 찾아서 선택 후에 마우스 우클릭하고 장치속성 창을 여세요,  그리고 드라이버 탭의 드라이버 업데이트(P)를 클릭해서 아래와 같은 화면이 나오면,  → 내 컴퓨터에서 드라이버 찾아보기(R) 항목을 클릭하세요. 

그리고 이어지는 화면에서 아래처럼,  → 컴퓨터의 사용 가능한 드라이버 목록에서 직접 선택(L)을 클릭합니다. (문제 해결 전에는 여러 목록이 떴고,  다른 항목이 기본 선택되어 있는 상황이었습니다.)



 그러면, 
드라이버 업데이트 관련된 호환 가능한 하드웨어 장치 목록 몇 가지가 쭉... 뜰 텐데요,  그중에서 아래처럼, USB 입력 장치를 선택하고 다음을 클릭합니다. 

 

그리고 닫기를 누르면,   좀 전까지도 작동이 안 되었던 키보드가 작동하는 것을 볼 수 있을 겁니다.  (필요한 경우 재부팅)

 

그럼,  Zadig 같은 펌웨어 업뎃 툴을 사용하실 때 주의해서 사용하세요~  ^^;;

 

 

반응형
반응형

이번 게시글은 아래 지난 게시글 핵심노드 설명 3편에 이은 설명입니다.  아래 게시글 링크를 먼저 참고해 주세요.

【Node-RED #④】노드-레드! 핵심노드 설명 3편/ Core Node Description! #3

①  trigger 노드

 trigger 노드는 메시지를 일정한 규칙에 따라 전달할 수 있도록 해주는 노드인데요, 예를 들면, 메시지에 따라서 일정간격으로 메시지를 전송하도록 하거나, 특정 메시지를 수신하면 홀드 시키거나 하는 등 이벤트를 줄 수 있는 노드입니다.   또한 시스템에서 무한루프에 빠져 있는 경우와 같은 오류등을 감지해 줄 수 있는 와치독 타이머(Watchdog timer)와 같은 역할도 줄 수 있습니다.    정리하자면 노드 플로우에서 흐름을 멈추거나 다시 트리거 시켜주는 등 제어가 가능한 노드라고 볼 수 있습니다. 

그럼, 실습을 위해 아래처럼 노드를 구성해 주세요.

 

1) "타임스탬프" (인젝트) 노드의 설정화면입니다. 

 

2) "STOP" 인젝트 노드의 설정화면입니다.

 

3) "RESET" 인젝트 노드의 설정화면입니다.

 

4) "trigger"노드의 설정화면입니다. 

송신데이터에는 "1"을 적어 놓았는데요,  전달하고 싶은 특정 문자를 적거나하면 되고,  초기화 조건에 "stop"을 적어 놓았는데요,   "STOP" 인젝션을 누를 때 "STOP" 메시지가 전달되면 트리거를 멈추도록 하고 있습니다. 

그럼, 여기서 아래처럼 trigger노드의 속성을 수정해 주면, 3초 간격으로 송신데이터"1"을 반복 송신하게 됩니다. 

 

이때, STOP 인젝터를 클릭하게 되면, 아래처럼 trigger가 멈추게 되고 디버그 창으로도 더 이상 메시지가 전달되지 않게 됩니다.

여기서 기본 트리거 간격을 1초로 바꾸고,   2초 간격의 Trigger 타임스탬프를 하나 더 추가해 볼게요.   그래서 1초 간격으로 트리거 되는 상태에서 추가한 인젝터를 누르게 되면, 2초 간격으로 트리거 시킬 수도 있습니다. 

그리고, 각각의 속성을 아래처럼 입력하거나 수정해 주세요. 

실행해 보면,  처음 기본 "타임스탬프"를 클릭하면 trigger에 설정한 대로 1초 간격으로 "1"이라는 메시지가 디버그창으로 전달되다가, "Trigger 2 sec"인젝터를 클릭하는 순간 2초 간격으로 "1"메시지가 전달되는 것을 볼 수 있습니다. 

 

②  join 노드

 Join 노드는 수신된 메시지들을 지정된 규칙에 따라 하나의 메시지로 변환해 주는 기능 등을 수행합니다. 
우선 Join 노드의 기능알 알아보기에 앞서 직전 게시글에서 다루었던 Split 노드로 메시지를 분리해보고 나서, 여러 개의 메시지가 수신될 때 이를 합쳐서 출력해 보도록 하겠습니다. 

그럼, 아래처럼 Sprit 노드가 포함된 플로우를 구성해 주세요. 

타임스탬프 노드는 아래처럼 해주세요.

다음, Split 노드 속성창인데요,  아래 보시면 '분할 항목'에 아무것도 입력 되어 있지 않은 것처럼 보이지만, "공백 한 칸"이 입력되어 있습니다. 주의해 주세요.  만약 공백을 입력하지 않을 경우, 메시지는 Split 되지 않고 모두 이어져서 하나로 전달 됩니다.

그리고서 배포 후 타임스탬프를 클릭해서 실행하면 아래처럼, 한 줄의 메시지가 각각 분리된 것을 볼 수 있습니다. 

다음으로, 아래처럼, Join노드를 구성해 주시는데요, 다섯 개의 타임스탬프 입력을 Join 노드에 연결한 플로우를 구성해주세요,  각각의 타임스탬프에 있는 메시지를 합쳐서 디버그창으로 출력해 볼게요.

아래는, Data1의 세부 속성 모습인데요,  Data2~Data5의 속성도 동일한 형태로 설정해 주세요. 

다음으로, Join 노드의 속성을 아래와 같이 설정해 주세요.    동작부분에는 수동으로 해주시고, 출력 부분에는 문자열로 선택합니다.  다음으로 연결문자 항목에는 아무 입력도 없을 경우에는 메시지들이 모두 붙어서 출력되며, 공백, '콤머', '+' 기호 등등 메시지들을 결합하고자 하는 문자가 있을 경우 입력하면 됩니다.   그리고 "지정수의 메시지파트를 수신 후" 항목에 5를 입력하여, 5개의 타임스탬프 메시지가 입력되면 자동으로 출력되도록 설정을 하였습니다.   그리고  "첫 메시지수신후부터 타임아웃 후" 항목에 10을 입력하거나 하게 되면, 첫 메시지를 수신하고 10초가 지날 경우 자동으로 입력된 메시지가 출력되는 설정입니다. 

이제 무입력, 공백 한칸, 콤머, + , /  으로 연결문자를 각각 입력해서 결과를 보면 아래처럼 결합되어 출력되는 것을 볼 수 있습니다.  물론 타임스탬프 누르는 순서를 바꾸면 출력도 바뀐 순서대로 결합되어 나오게 됩니다. 

그럼, 다음으로 Join 노드의 속성 중에서 "출력"부분의 항목을 아래처럼 "배열"로 변경해서 실행해 보세요. 

이렇게 하고, 결과를 출력해 보면, 아래처럼 데이터가 배열 형태로 결합되어 저장되는 것을 확인할 수 있습니다. 

그리고 마지막으로, 아래 Join노드의 속성에서 "출력"항목의 선택을 "key/value오브젝트"로 선택해 볼게요. 
이렇게 할 경우 사용할 값 항목에 보면 "msg.topic"으로 되어 있는데요, 이에 따라, 타임스탬프(inject) 노드에 있는 msg.topic 항목에다가, 예를 들어, 숫자 키값을 1~5 각각 입력해 주면,  key/value 오브젝트로 인식되어 결합처리해 줄 수 있게 됩니다. 

그럼, 타임스탬프를 순서대로 클릭해서 출력을 확인해 보면 아래처럼, key/value 오브젝트 형태로 데이터가 결합 정리되어 출력되는 것을 확인할 수 있습니다. 

 

반응형
반응형

이번 게시글은 아래 지난 게시글 핵심노드 설명 2편에 이은 설명입니다.  아래 게시글 링크를 먼저 참고해 주세요.

【Node-RED #③】노드-레드! 핵심노드 설명 2편/ Core Node Description! #2

①  Status 노드

Status(상태) 노드는 플로우 내에 있는 특정 노드들의 상태 메시지를 수신하는 역할을 합니다.   노드의 상태를 표시해 주는 기존 기능을 통해서 상태가 변경될 때 Status 노드는 관찰을 하는데요, 특정 노드의 출력을 감지하여 메시지를 출력하는 경우 등에 활용할 수 있습니다. 

예시)  예를 들어 아래와 같은 플로우가 구성되어 있을 때, debug2로 메시지(숫자'2')가 전달 되는 상황에서 Debug2로 메시지가 전달되면 "status 노드"를 통해서 이를 확인하는 플로우를 구성할 수 있습니다.

[ 지난 게시글에 입력한 Function node의 코드 설정입니다 ]

var msg1 = { payload: "1" };
var msg2 = { payload: "2" };
var msg3 = { payload: "3" };

return [msg1, msg2, msg3];

우선, 위와 같이 노드 플로우를 구성하고, Status의 설정과 디버그 1, 2, 3, 4의 설정은 아래와 같이 해주세요. 

 

이렇게 설정 후 '배포하기'를 누르고 'Hello world!'노드의 인젝션을 실행시키면 아래처럼, debug4를 통해서 상태를 수신하게 됩니다. 

 

②  Comment 노드

comment 노드는 플로우에 영향을 미치지 않는 노드로써, 설명 또는 주석을 작성할 때 사용되는데요, 설명이 필요한 플로우 주변에 넣거나 플로우 구간끼리 구분을 위해 넣어 놓을 수 있습니다. 아래 예시를 참고해 보세요. 



③  Split 노드

Split노드는 입력으로 들어오는 데이터를 설정한 규칙으로 분리 시키는 작업을 수행할 수 있는 노드입니다. 
메시지 내용을 줄 단위(엔터) 혹은 ','컴머나  '.'마침표 등과 같은 특정 문자(스트링) 단위로 구분을 하거나, 노드에 입력되는 메모리 버퍼 단위로 분리 가공할 수 있습니다. 

그럼, 예시로 split노드를 이용해서 전달할 메시지를 줄바뀜이 날 때마다 분리해 볼게요. 

예시①-1) 줄바뀜 ("\n")이 일어날 때 분리해 주는 예시

우선 아래와 같이 노드를 구성해주세요.  "데이터 노드"는 "Template"노드를 이용하면 됩니다. 

아래는 데이터 노드와, split 노드의 속성창 설정 내용입니다. 

 

이렇게 하고서, 타임스템프(인젝션)을 클릭해 보면, 아래처럼 데이터의 줄 바뀜이 일어날 때마다 데이터가 분리(Split)되는 것을 볼 수 있습니다.


예시①-2) 위 예시에서 콤머 ', '  와  마침표 '. ' 등의 여러 가지 문자로도 구분을 할 수 있으니 참고해 주세요. 

 

예시①-3) 마침표 ', '  문자로 데이터를 분리한 예시.

 

예시 ②)  입력되는 문자 길이로 일괄적으로 분리하는 경우. (split 노드에서 아래처럼 분할 부분을 고정장(영문표기: Fixed length of)으로 변경하고 구분하고자 하는 단위의 숫자를 입력해 주세요,  여기서는 3개의 스트링으로 입력) 

템플릿(Template) 노드의 데이터 설정은 아래처럼 했습니다. 

그래서 결과를 출력해 보면 아래처럼 출력되는 것을 볼 수 있습니다. 

 

예시 ③)  배열 단위로 데이터를 분리(구분)할 수 있습니다.  템플릿 노드의 데이터와 속성을 아래처럼 수정해 주세요.  ( 데이터를 배열형태로 바꾸고, 출력 형식을 'JSON'으로 변경합니다.)

그리고 Split노드의 속성은 아래처럼 구분해 주세요.  먼저 2로 입력하여 배열의 값을 두 개씩 묶는 경우입니다. 

결과 출력을 보면 아래처럼 배열값이 2개씩 분리되어 출력되는 것을 볼 수 있습니다. 

그럼, 이어서 배열 묶음을 3으로 변경해서 출력해보면 아래처럼 결과를 정확하게 얻을 수 있습니다. 

 

예시 ④)   오브젝트의 경우는 파이썬의 딕셔너리 구조와 같은 Key값을 기준으로 데이터를 분리할 수 있도록 해줍니다. 
split노드의 속성을 아래처럼 변경해 주세요. 

이를 실행하면 아래처럼 Key값을 기준으로 데이터가 분리되어 출력되는 것을 확인할 수 있습니다. 

 

④  Sort 노드

sort 노드는 입력데이터를 규칙에 따라 정렬해 주는 노드인데요, 정렬은 전달된 msg.payload값이나 JSONata 식을 통해서 정렬할 수 있습니다.   정렬방식은 값을 기준으로 오름차순과 내림차순으로 정렬되며, 수치로서 도 오름차순과 내림차순으로 정렬 가능합니다. 

먼저 템플릿 노드의 데이터를 아래처럼 입력해 주세요. 

Sort노드는 아래처럼 입력하는데,  먼저 "수치로써 비교" 부분을 체크해제하고 결과를 출력해본 후, 체크 후 결과도 차례로 출력해 보세요. 

내림차순의 경우도 동일하게 활용할 수 있습니다. 

또한, Sort노드에서 키값을 Json 표현식으로하여 변경하면 딕셔너리 자료의 Value값을 기준으로도 정렬할 수 있습니다.   예를 들어,  이름과 나이 형태로 된 딕셔너리 데이터가 있을 때,  나이를 기준으로 오름차순이나 내림차순으로 정렬이 가능합니다.  
먼저 "Template"노드를 아래처럼 입력해 주세요. 

그리고,  Sort노드는 아래처럼 수정해 주세요. 

 

그리고 인젝트 버튼을 클릭하여 결과를 출력해보면 아래처럼 나이를 기준으로 오름차순으로 출력된 결과를 볼 수 있습니다. ( 데이터가 안 보일 경우 ▼array [3]  부분의 삼각형을 눌러 아래로 펼쳐보세요)

 

끝으로 Sort노드에서 내림차순으로 바꾸어 출력해 보면 아래처럼 잘 출력되는 것을 확인할 수 있습니다. 


그럼, 이번 시간은 여기까지하고, 다음 시간에 핵심노드 설명을 이어가도록 하겠습니다. 
감사합니다. 

 

반응형
반응형

이번 게시글은 지난 게시글 핵심노드 설명 1편에 이은 설명입니다.  아레 게시글 링크를 먼저 참고해 주세요.

【Node-RED #②】노드-레드! 핵심노드 설명 1편/ Core Node Description! #1

⑥  switch 노드

스위치노드는  입력으로 들어오는 메시지를 분석하여 설정한 조건에 따라 메시지의 출력 방향을 조절할 수 있는 기능을 제공합니다. 

예를 들어, 인젝트(inject)에서 "Dog"라는 메시를 설정하고 switch노드에서 목적상 여러 개의 출력을 설정하였을 때,  "Dog"라는 메시지와 동일한(==) 출력 노드로만 메시지를 보낼 수 있습니다.   즉 메시지에 일정한 규칙을 설정하여 Flow의 방향을 조절할 수 있습니다.

우선, 앞의 인젝트(inject)노드에서 "Dog"라는 메시지를 설정함.

여기서 만약 아래 이미지처럼, 처음 맞는 조건에서 더 이상의 하위 조건들을 검사하지 않고 종료할 수도 있는 옵션도 사용할 수 있습니다.


 검토할 수 있는 조건의 종류는 아래와 같습니다.   인젝터에 있는 메시지 전체에 대해 판별하며, 일치할 경우 true값을 반환합니다.    

특히, JSONata를 지원하기 때문에, 좀 더 디테일하게 조건을 판별 처리할 수 있습니다. 
( JSONata는 JSON 데이터를 위한 경량 쿼리 및 변환 언어입니다. XPath 3.1의 '위치 경로' 시맨틱에서 영감을 받아 정교한 쿼리를 간결하고 직관적인 표기법으로 표현할 수 있습니다. 추출된 데이터를 조작하고 결합하기 위해 내장된 연산자 및 함수의 풍부한 보완이 제공되며 쿼리 결과는 친숙한 JSON 개체 및 배열 구문을 사용하여 모든 JSON 출력 구조로 형식화될 수 있습니다. 사용자 정의 함수를 생성하는 기능과 함께 고급 표현식을 구축하여 모든 JSON 쿼리 및 변환 작업을 처리할 수 있습니다.   참고 →  http://docs.jsonata.org/overview.html   )

⑦  Template 노드

템플릿 노드는 이름 그대로 원하는 형태로 본을 떠주는 노드라고 할 수 있는데요, 아래 예시를 참고해 보세요. 

예시 1)

이 경우, template의 속성은 아래처럼 되어 있습니다.  그리고, 전달할 내용(payload)을  {{  ...  }}  이중 괄호 묶어서 템플릿을 구성하면 됩니다. 

 

예시 2)

예시 3) 여기서 템플릿노드는 특정문자를 HTML 이스케이프 코드로 바꾸어 버리는 경우가 생기는데,  이럴 때는 {{ ... }} 이중 괄호가 아니라,  {{{ ... }}} 삼중 괄호를 사용해 주면 됩니다. 

아래 예시는 html에서 강조(bold) 태그인 <b> </b>를 사용한 메시지를 전달할 때 이중괄호와 삼중괄호를 비교한 예시이니 참고해 보세요.  

 

또한,  템플릿 노드에서는, HTML, JSON... 뿐 아니라,   mustache(머 스테치)라는 템플릿 문법을 지원하는데요, 머스테치는다양한 언어를 합쳐서 사용할 수 있는 하나의 템플릿 엔진으로,  Loop와 같은 로직 구문이 존재하지 않으므로, Logic-Less Templates라고 불리는 엔진입니다.  머스테치는 가장 심플한 템플릿 엔진 중 하나이며, 다양한 언어를 지원하기도 합니다. (C++, C#, PHP, Java, JavaScript, Python, Perl... 등 50여 개 이상 지원)

따라서 머스테치와 같은 템플릿 엔진을 사용한 템플릿 노드를 이용해서 사용자가 정의한 형태의 타입으로 메시지를 가공하는데 효과적으로 사용할 수 있는 노드입니다.  특히, HTML과 같은 웹페이지 출력 형태를 사용할 때 많이 사용하게 됩니다.   뒤에서 다루게 될 [http response] 노드와 함께, 웹으로 출력하는 것을 볼 수 있습니다. 

 

⑧ Complete 노드

노드들의 Flow에서,  어떤 노드들은 출력이 없는 노드들이 있습니다.  따라서 수행완료(처리)를 파악하는 것이 필요할 경우가 생기는데,  complete 노드는 이런 경우처럼 다른 노드의 메시지 처리가 완료되면 이를 체크할 수 있는 기능을 제공하는 노드입니다.   물론 출력이 있는 노드도 체크할 수 있습니다. 
아래 예시에서 보면,  Complete노드에서  "Hello World!" 메시지를 갖고 있는 인젝트(Inject) 노드의 출력 메시지를 감지하면 "debug 2"를 통해서 동일한 메시지를 출력할 수 있도록 하였습니다. 

 

물론 "debug 1" 메시지의 출력을 체크하여도 동일한 결과를 얻을 수 있습니다. 

다만 모든 노드가 이벤트를 발생시키는 것은 아니기 때문에,  Complete노드를 모든 노드에 적용할 수 있는 것은 아닙니다. 

⑨ Link in, out과  Link Call 노드

Link 노드는  플로우 화면에 배치된 노드와 플로우가 너무 복잡할 경우 실제 링크 연결을 대신하여, 즉 무선으로 연결시켜 줄 수 있는 역할을 하는 노드로서, 플로우를 간결하게 표현하는 데 사용할 수 있는 노드입니다. 

아래 예시를 보면, 인젝터에 있는 Hello world! 메시지와 Function 1의 메시지를 합친 출력을 "Link Out 1"노드 → "Link In 1"노드로 전달시켜 debug 1으로 출력시켜본 예제입니다. 

 

아래 "Link Out 1" 노드를 선택해 보면, 옵션에서 "Link In 1" 연결되었다는 표시를 볼 수 있습니다.

 

위와 같이 연결되기 위해서는 아래에 있는 Link Out노드와 Link In노드의 설정을 참고해 주세요.

 

또한 Link 노드를 아래 예시처럼 서부루틴 함수처럼 활용할 수도 있습니다.   (Link Call 함수 활용)

Link node의 옵션은 아래 이미지들을 참고하세요~

 

그리고 아래처럼, 여러 개의 Flow node에서 Link Call 하여 정말 서부루틴 함수 활용하듯 할 수 있습니다.

 

그리고 아래처럼, 플로우 화면 1과 화면 2로 나누어 좀 더 체계적으로 플로우노드를 구성할 수도 있습니다.

 

⑩  Catch 노드

Catch노드는 플로우에서 발생되는 에러를 감지하는 노드인데요,  모든 플로우를 설계하고서 어떤 예상치 못하는 에러가 발생하는 경우 의도적으로 에러를 발생시켜 플로우를 종료해야 되는 경우가 발생됩니다.  특히, 외부 서비스를 연동하거나 할 때 예를 들어, 외부 DB나 HTTP연동에서 응답이 없는 경우에 대한 처리를 해줄 필요가 있습니다.  이러한 경우 등에 catch 노드를 사용하여 대비하는 플로우를 짜는 것이 좋습니다. 

아래 이미지들은 Function 함수에서 에러를 발생시켜 이를 Catch노드에서 감지하도록 하여 에러 발생 내용을 debug 6 노드로 출력하도록 한 예시입니다. 

Function 노드 내용 :

var msg1 = { payload: "1" };
var msg2 = { payload: "2" };
var msg3 = { payload: "3" };

 

return [msg1, msg2, msg3];
 
function 노드에는 msg3에 대한 리턴이 없고 msg4로 잘못 리턴이 되어 에러가 발생하게 됩니다.

 

Catch노드에서는 에러를 체크할 노드로 "function 1"을 체크해 주세요.   물론 하나의 catch노드에서 플로우에 있는 여러 개의 노드를 동시에 에러 체크할 수 있습니다.

 

그리고 catch 노드와 연결된 메시지로 에러메시지를 출력하기 위해,  대상: msg.error.message  로 입력해 주세요.

 

에러가 나는 부분을 정상정으로 수정 후에는 아래처럼 정상 출력(작동) 되는 것을 볼 수 있습니다. 

 

그럼, 다음 게시글에서 핵심노드 설명 3편으로 이어가도록 하겠습니다.

감사합니다.

반응형
반응형

1.  노드 그룹

이번 글에서는 노드레드(Node-RED)에서 플로우를 작성하기 위한 기본 단위인 노드에 대해 설명 주요 노드를 중심으로 설명을 드리려고 하며,  이를 그룹별로 정리한 노드 그룹(Group)에 대해 설명하고자 합니다. 

아래는 노드래드를 실행하면 보이는 좌측 팔레트(Palette Side) 영역에 보이는 노드와 기본 노드 그룹에 대한 설명을 표로 정리하였습니다. 

이 노드는 Node-RED를 처음 실행하면 보이는 기본 그룹이며,   팔레트 관리 메뉴에서 추가적으로 필요한 노드를 라이브러리 검색으로 검색하여 추가시킬 수 있습니다. 
아래는 가장 많이 추가해서 사용되는 Dashboard 노드 그룹과 Raspberry Pi 노드 그룹입니다. 

2.  핵심 노드  설명

  ①  Inject 노드  

인젝트(Inject) 노드는 작업영역에 배치하면 Time Stemp(타임스템프)로 표시되는 노드이며,  좌측에 있는 버튼을 눌러 수동으로 플로우를 발생시킬 때 사용할 수 있는 노드입니다.   또는 일정한 시간 간격(인터벌)으로 플로우를 발생시킬 수 있습니다. 

(타임스템프 노드를 더블 클릭하여 이미지와 같이 설정할 수 있습니다)

또한 아래처럼 지정한 시간 간격, 일시 형태로도 설정이 가능합니다.

전달하는 기본 형태는 msg.payload와 msg.topic을 설정할 수 있는데, 메시지 타입을 숫자, 문자열(String), Josn 타입 등 다양하게 전달할 수 있습니다.

 

그리고 화면 아래  '+추가' 버튼을 클릭하면, 메시지를 추가하거나 삭제 그리고 메시지의 타입을 선택할 수 있습니다.  

inject 노드에서 전달할 수 있는 메시지의 주요 타입(속성)은 아래와 같습니다. 

 

②  디버그(Debug) 노드  

 디버그 노드는 아두이노IDE로 예시를 들자면 시리얼 모니터와 같은 기능을 하는 노드로 이해하면 됩니다.  플로우 사이에 이동되는 메시지를 파악하거나 탐색하기 위해 많이 사용되는 노드입니다.  편집기 화면에서 디버그 내용을 보기 위해서는 측면영역(Side Bar)에 있는 debug 탭을 클릭하면 그곳으로 출력됩니다. 

 

만약,  시스템 콘솔 (system console)로 출력을 선택하면, 아래처럼 Node-Red를 실행시킨 콘솔(터미널) 화면으로 출력 됩니다. 

 

또한, 노드 상태(node status)창으로 출력을 설정할 경우 플로우 작업영역의 노드 아래에 32 character까지 출력해 줍니다. 


그리고 이 옵션들은 중복해서 적용할 수 있습니다.  (동시 출력 가능함)
그리고 이과정에서 디버그 노드는 앞선 글에서도 다루었지만, 활성화 또는 비활성화할 수 있는데요, 필요치 않은 경우 비활성화시켜놓다가 다시 체크해 볼 상황이 되면 활성화시켜 확인해 보는 식으로 하면 편리하게 디버그 노드를 활용할 수 있습니다. 

 

③  함수(function) 노드  

 함수 노드는 전달 받은 메시지를 JavaScript를 활용하여,  처리하고 처리된 결과를 뒷 단의 노드로 전송할 수 있습니다.  사용자가 원하는 기능을 정의한다고 생각하면 됩니다. 

예를 들어 인젝트 노드에서 'Hello World!'라는 문자열을 받아서 문자열 전체 개수를 카운트하여 전달할 수 있습니다.  아래 이미지를 보면, 공백포함하여 정확히 '12'가 카운트되어 전달되는 것을 볼 수 있습니다. 

예제 1)  전달 되는 메시지(Hello World!)의 문자열 길이를 출력하는 함수(function) 넣기

▷  Function 함수 내용 :    var msg= { msg.payload.length );     return   msg;

 

예제 2)  다중 함수를 구성하여 기본 전달 메시지(Hello World!)와,  설명 문자열 출력과 전달되는 문자열의 길이를 출력하는 3중 출력 함수 Json코드 넣기.

함수에 입력된 JSON 코드 :

var msg2 = { payload: "메시지의 총길이는:" };
var msg3 = { payload: msg.payload.length };
return [ msg, msg2, msg3 ];

( ※ msg는 기본 전달되는 메시지여서 별도로 객체를 생성할 필요 없습니다)

이때, 함수(function) 노드의 설정창의 Setup탭에서 함수 노드 수를 3개로 변경해 주어야 합니다. 

그럼, 아래와 같이 디버그 창으로 동시에 원하는 3가지 형태의 출력 결과를 얻을 수 있습니다.

 

또한,  if 조건문을 넣어 원하는 입력일 경우 그대로 출력하고 그렇지 않을 경우 에러 메시지 등과 같은 것을 출력하는 등, 좀 더 다양하게 활용할 수 있습니다. 

① 원하는 입력('Hello World!')이 들어오면 설정한 대로 출력합니다.

1. 원하는 입력('Hello World!')이 들어오면 설정한대로 출력합니다.

 

② 만약 원하지 않는 입력('Nice World!')이 들어오면 다시 확인할 수 있도록 메시지를 출력할 수도 있습니다. 

2. 원하지 않는 입력 ('Nice World!')이 들어오면 다시 확인할 수 있도록 메시지를 출력합니다.

 위에서 입력한 function 코드는 아래와 같습니다. 

var msg2 = { payload: "메시지의 총길이는:" };
var msg3 = { payload: msg.payload.length };
var msg4 = { payload: "입력문자를 확인하세요!"};
if (msg.payload == "Hello World!") {
    return [msg, msg2, msg3];
} else {
    return [msg4];
}

 

예제 3) 하나의 디버그 노드로도 여러개의여러 개의 메시지를 순차적으로 출력할 수 있습니다. (한 번의 인젝션으로 여러 개의 메시지를 출력할 수 있음)

 

아래 function 내용을 참고하세요. 

또한, return 에서 대괄호 [ ]는 배열을 의미합니다. 따라서,  function 노드의 Setup에서 출력수를 2로 하고 디버그를 하나더 연결 후 아래와 같이 msg, msg1과  msg2, msg3를 배열의 요소로 따로 분류하면 각각의 디버그 노드로 분리되어 출력되는 것을 볼 수 있습니다.

[ [msg, msg1], [msg2, msg3] ] 으로 Function 코드를 수정하세요

 

배열로 분리된 리턴값이 디버그1과 디버그2로 각각 분리되어 출력됩니다

 

예제 4)  이벤트 로깅

 필요할 때마다 콘솔을 통해 무언가를 기록해야 하거나, 특정 노드에서 주의(경고)나 에러(오류)가 발생하는 상황에 대해 메시지를 출력하도록 할 수 있습니다. 
function 노드에 아래와 같이 코드를 입력하고 실행시켜 보면,  이벤트 로깅이 되는 것을 볼 수 있습니다. 단, node.log ()의 경우는 사이드바로는 출력되지 않고 콘솔로만 출력됩니다. 

node.log("로그 기록입니다.");
node.warn("주의 경고 사항발생!");
node.error("에러 발생~!");
 

그리고 이벤트 함수에 직접 메시지를 입력할 수도 있지만 아래처럼, 변수를 지정해서 할 수도 있습니다.
var msg1 = { payload:"로그 기록입니다."};
var msg2 = { payload: "주의 경고 사항발생!" };
var msg3 = { payload: "에러 발생~!" };
node.log(msg1.payload);
node.warn(msg2.payload);
node.error(msg3.payload, msg3);
return [[msg1, msg2, msg3]];

아래 이미지를 보면, 이벤트 로깅 함수에의해 발생되는 것(분홍색 표시)과  일반 메시지로 출력되는 것(주황색 표시)의 차이를 구분하실 수 있을 거예요.

 

④  Catch 노드  

catch 노드를 통해서는  노드 전체나 특정 노드에서 발생하는 에러가 있을 경우 이벤트 메시지를 발생시키도록 할 수 있습니다. 

 

⑤  Change 노드  

Change 노드는 Function노드에서 처럼 JavaScript  코드에 의존하지 않고 사용할 수 있는 노드로서, Node-RED에서 자주 사용될 수 있는 기능인,  payload값을 변경하거나, 설정, 삭제, 이동 같은 작업들을 처리해 줄 수 있는 노드입니다. 

Change노드의 설정으로 들어가보면 4가지 속성을 선택할 수 있는데요, 각각의 예시를 들어 볼게요.

예제 1)  값의 대입 (Set)   속성
Change노드의 설정부분에서 "값의 대입(Set)"으로 놓고 대입하고자 하는 값('Welcome!')을 입력해 놓으면,  인젝터에 입력값이 없는 경우에도 특정 값을 대입(설정,Set)시킬 수 있습니다. 

 

예제 2) 값의 치환(Change) 속성

치환 속성은 예를들어 인젝트 노드로부터 입력되는 값에서 특정 문자열을 검색하여 바꾸고자 하는 문자열로 변경해 주는 속성입니다.

"Hello World!" 문자열에서 Hello를 검색하고 이 문자열 대신 "Nice"로 치환하여 출력 하도록 합니다. 
그래서 결국 "Hello World!" 문자열은 Change 노드를 거친 결과 값은  "Nice World!"로 바뀌어 출력되게 되는거죠.


예제 3) 값의 삭제(Delete) 속성

값의 삭제(Delete)속성은 입력되는 payload 값을 삭제하도록 합니다. 아래처럼 Change의 속성을 값의 삭제로 변경하게 되면,  

Change 노드를 거친 "디버그 2" 노드로는 출력값이 나오지 않게 됩니다. 

 

예제 4) 값의 이동(Move) 속성

 값의 이동은 이동(Move)이라는 말보다는 추출이라는 말로 생각하면 더 빠르게 이해할 수 있는데요, 예를 들어, Raspberry Pi에 연결 된 dht11 온도센서가 있다면,  센서로부터 전달 받는 데이터(payload)는 오브젝트(객체)로 전달 받게 되는데요  즉, dht11이라는 정보 객체 속에는 온도값과 습도값의 데이터 집합(뭉텅이) 형태로 전달 받게 되는데, 실제로 활용하고자 하는 온도(Temperature) 값이나 습도(Humidity)값을 추출(이동-Move)해야 활용할 수 있게 되겠죠?   따라서 이런 상황에서 아래처럼, 이동(Move) 속성을 이용하여 플로우를 구성하여 사용할 수 있습니다. 

반응형
반응형

지난 시간에는  노드레드를 라즈베리파이 또는 윈도에 설치하는 것에 대해 다루었습니다.  이와 관련하여서는 아래 게시물을 참고해 주세요.
【Node-RED #1】라즈베리파이(Raspberry pi)에 Node-RED 설치하기

 이번 시간부터는 본격적으로 노드레드에 대해 알아보고 활용해 보도록 시작해 보겠습니다. 

1. Node-RED의 개념

 노드레드는 플로우(Flow) 즉, 흐름 기반의 프로그래밍으로써 시각적 표현에 매우 적합하고, 복잡하고 어려운 프로그래밍 사용을 자제하고, 사용자가 보다 쉽게 접근할 수 있도록 설계된 모듈입니다.   노드레드에서의 각 노드는 마치 블록코딩의 대명사인 스크래치의 블록과 유사한 개념으로  노드레드는 다수의 노드를 이용하여 각 노드별 원하는 요구사항에 맞는 플로우를 만들 수 있으며 이를 아두이노, 라즈베리파이 및 각종 센서, 디스플레이 등 제어모듈과 같은 하드웨어와 연결하여 시각적으로 보여주거나 제어가능하도록 ioT 시스템을 쉽게 구축할 수 있는 특징이 있습니다. 

아래는 노드레드 Flow 구성 및 편집 예시입니다.

이미지 출처 : nodered.org

아래는 노드레드 UI 예시입니다.

이미지 출처 : hackaday.com

아래는 노드레드 UI 예시입니다.

이미지 출처 :&nbsp;Yaser Ali Husen

아래는 노드레드 UI 예시입니다.

이미지 출처 :&nbsp;Yaser Ali Husen

 

기본 화면 구성은 아래 이미지와 같습니다.

① 노드레드 편집기 화면 구성

 

노드레드는 크게 4개의 영역으로 구성되는데요,,

→ ① 상단(Header) 영역에는 배포(Deploy) 메뉴와(Deploy) 팔레트관리와 같은 설정 메뉴가 배치되어 있습니다.

→ ② 팔레트(Palette) 영역은 각종 기능 구현해 주는 노드 블록들로 배치되어 있습니다.

→ ③ 측면(Sidebar) 영역은 노드에 대한정보/도움말/디버그/노드설정에 대한 메뉴로 구성되어 있습니다.

→ ④ 작업공간(Workspace) 영역은 노드들을 배치하고 이어주며 함수 노드에 프로그래밍을 하는 영역입니다.

 

상단(Header) 영역에 있는 배포(Deploy) 메뉴는 작업공간영역에서 완성된 노드들의 플로우를 실행시키는 역할을 합니다. 만약 UI(User Interface)가 있는 플로우라면 “http://localhost:1880/ui” 주소를 통해서 UI를 확인하거나 실행할 수 있습니다. 그리고 배포하기 옆에 세줄로 표시된 부분을 클릭하면, 라이브러리 추가 등 팔레트관리와 같은 설정 메뉴가 있는데, 제세한 내용은 이후 계속 설명이 됩니다.

팔레트(Palette) 영역은 작업영역 좌측에 있으며, 기본적으로 6개 그룹(카테고리)의 메뉴로 구성되어 있습니다. 여기에서 필요한 노드 블록을 선택하여 작업영역으로 끌어다 놓는 식으로 작업합니다. 기본 그룹 외에 추가적으로 팔레트관리 메뉴에 있는 라이브러리 추가를 통해 대시보드(dashboard)나 라즈베리파이(Raspberry Pi) 노드 그룹 같은 것들을 추가해서 사용할 수 있습니다.  
대략 2,700개 이상의 모듈을 추가 설치가 가능하며, 사용자 정의로 직접 모듈을 등록하고 관리할 수 있습니다.

 

측면(Sidebar) 영역은 노드 편집기 내의 유용한 도구를 제공하는 패널로 구성되어 있는데요, Information/Help/Debug/Configuration nodes/Context Data/Dashboard, 6개의 탭으로 구성되어 있습니다.

주로 Debug탭을 많이 활용하게 되는데요, 작업공간에서 사용한 디버그 노드의 출력을 확인할 수 있습니다. 측면영역은 작업영역 확보를 위해 숨김/보이기 처리할 수 있으며, (Ctrl+Space) 단축키도 할당되어 있습니다. 가령,  "Hello world!"와 같은 

 

작업공간(Workspace) 영역은 필요한 노드 블록을 끌어다 놓고 블록들 사이의 플로우(Flow)를 연결하며, 함수 노드의 경우 Javascript로 프로그래밍을 추가해 넣을 수 있는 작업 공간입니다. 노드들을 클릭하면 세부 설정을 변경하거나 코드를 입력할 수 있는 메뉴가 표시됩니다.  노드레드에서 노드는 플로우를 작성하는 기본 구성단위 요소입니다. 

작업공간 상단 우측에 보면 + 표시와 서브메뉴가 보이는데요,  이를 클릭하면 플로우 페이지를 추가하거나 보이기 감추기 등을 할 수 있습니다. 

또한, 불필요한 플로우 삭제는 아래처럼,  플로우를 더블클릭 후 나타나는 메뉴에서 플로우를 삭제할 수 있습니다.

 

그럼, 사용법을 익히기 위해 먼저 간단한 플로우를 작성해 볼게요.

▶ Hello world ! 문자 출력해 보기

프로그래밍을 배울 때 제일 처음 출력해 보는 것이 “Hello world!”인 것은 이제 국룰? 인데요, 여기서도 그 문장을 출력해 볼게요.

먼저 위 이미지처럼, 공통노드(common node) 그룹에서 inject(타임스탬프)를 플로우 작업화면으로 끌어다 놓으세요.   
그리고, 타임스탬프노드를 더블 클릭하면 설정창이 열리는데, 아래 ②번 부분을 클릭하여 전달할 메시지 타입을 String(문자열)으로 선택합니다. 

그런 다음, 아래 ④번과 같이 "Hello world !" 메시지를 입력하고 완료 버튼을 눌러주세요.

 

 이제 공통그룹에서 debug 노드를 ⑤ 위치에 끌어다 놓으세요. 

그리고 "Hello world! " 노드 끝에 있는 포인트를 마우스로 드래그하면 연결할 수 있는 주황색 선이 나오는데요,  이를 debug노드의 연결점에 이어 붙여주세요.  (아래 이미지 참조)


각각의 노드 오른쪽에 보면, 파란색 점이 있는 것을 볼 수 있는데요, 이는 현재 새로운 노드가 삽입되었거나, 변경 사항이 발생한 표시이며, 아직 배포(적용)되기 전이라는 뜻입니다.     그럼,  이 상태에서 상단메뉴에 보이는 "베포하기" 버튼을 눌러주세요. 

 

그럼, 아래처럼 파란색 점이 사라진 것을 볼 수 있습니다.     이제 "Hello world!"라는 전달 내용(payload)을 가진 타임스탬프 노드의 왼쪽 버튼 부분(Inject)을 클릭하면 디버그 노드로 전달이 이루어집니다.   이윽고 우측 Sidebar의 디버그 창으로 "Hello world !"가 출력되는 것을 볼 수 있게 됩니다.    또한, Inject 버튼을 여러 번 클릭하는 만큼 출력이 됩니다.

 

참고로,  노드레드의 언어 설정은 기본적으로  영어, 독일어, 일본어, 러시아어를 지원하며, 한글도 지원하지만 간혹 한글 표현이 조금 어색한 경우도 있습니다.  
언어 설정 메뉴는 상단메뉴의 "배포하기" 버튼 오른쪽에 있는 삼선을 클릭 후,  창 탭을 클릭하면 나옵니다.

그리고 디버그 창에 출력된 내용이 지저분하거나 하여 삭제하고 싶을 때는 아래 휴지통 버튼을 클릭하면 됩니다. 

 

참고로 디버그(debug) 노드를 클릭 후 보이는 설정메뉴 하단에 "ㅇ사용가능" 표시가 있는데요, 이를 클릭하면 "Ø사용불가능"으로 표시가 바뀌며,  해당 디버그 노드는 실행을 시켜도 디버그 창으로 메시지 출력이 되지 않도록 사용이 중단됩니다. 

아래 이미지처럼,  해당 노드는 점선으로 처리되며,  Inject 버튼을 눌러도 아무것도 출력되지 않게 됩니다.

 노드의 삭제는 삭제하고자 하는 개별 노드를 선택한 다음 Delete 키로 쉽게 삭제 가능합니다.
노드간 연결된 선도 마우스로 선택 후 Delete 키로 삭제할 수 있습니다. 

그럼  "Node-RED의 시작!" 첫 글은 여기까지 하고,  다음 게시글에서 계속 이어가도록 하겠습니다.

반응형
반응형

※ Node-RED 소개

노드레드는 플로우(Flow) 즉, 흐름 기반의 프로그래밍으로써 시각적 표현에 매우 적합하고, 사용자가 보다 쉽게 접근할 수 있는 모듈입니다.  노드레드는 다수의 노드를 이용하여 각 노드별 원하는 요구사항에 맞는 플로우를 만들 수 있으며 이를 아두이노, 라즈베리파이 및 각종 센서, 디스플레이 등 제어모듈과 같은 하드웨어와 연결하여 시각적으로 보여주거나 제어가능하도록 ioT 시스템을 쉽게 구축할 수 있는 특징이 있습니다. 

 

[ Node-red  예시 ]

이미지 출처 : nodered.org
이미지 출처 : hackaday.com

 바로 위 이미지에서도 볼 수 있듯이 그래픽 기반의 GUI 환경으로 인터넷에 연결된 장치들을 모니터링하거나 컨트롤 할 수 있는 웹 앱 대시보드를 보다 쉽고 빠르게 구성할 수 있으며,  예를 들어,  API를 활용한 일기예보, 버스나 지하철 시간표, 뉴스 기사 및 IoT 홈 네트워크 등 활용가능한 범위도 다양합니다.  구동을 위한 서버가 필요한 경우에는 라즈베리파이로 저비용으로 간단히 해결할 수 있습니다.   

Node Red는 2013년 초 IBM의 Emerging Technology Services 그룹의 Nick O'Leary와 Dave Conway-Jonse의 부수 프로젝트로 개발 시작 되었고, 2016년 10월 JS Foundation의 창립 프로젝트 중 하나가 되면서 오픈 소스로 개발되었습니다.

Node Red는 가벼운 Node.JS를 기반으로 하기 때문에 라즈베리파이와 같은 낮은 하드웨어 및 열악한 클라우드 네트웍 환경에서도 실행이 가능합니다.   또한 Node의 패키지 저장소에 있는 22만 개 이상의 노드 패키지 모듈을 활용할 수 있는 장점이 있습니다. 

Node Red에서 생성된 플로우는 JSON 형식의 데이터를 사용하여 저장되며, 자신이 디자인한 플로우를 JSON 포멧으로 온라인상에 공개하거나 다른 사람과 쉽게 공유할 수 있도록 디자인되었습니다.(Node-red 공홈 또는 깃허브 등). 
 이는 자신이 힘들게 처음부터 모든 Node를 다 구성할 필요 없으며 다른 사용자가 공유한 노드를 쉽게 추가 함으로써, 쉽고 빠르게 시스템을 구축할 수 있는 장점이 있습니다.   

노드레드는 다양한 환경에서 설치 및 활용할 수 있는데요, 라즈베리파이, 비글본 블랙과 같은 저비용 하드웨어 뿐아니라, IBM클라우드, 아마존 웹 서비스, 마이크로소프트 애저와 같은 클라우드기반에서도 잘 작동됩니다. 

그럼,  노드레드를 사용해보기에 앞서, Node.JS의 설치가 필요합니다.  링크 : https://nodejs.org/ko/download   
링크에서 설치하려는 시스템에 맞는 Node.JS를 설치하세요.    여기서는 라즈베리파이에 설치하는 것으로 진행합니다만,  윈도 PC에서 라즈베리파이를 원격으로 접속해서 제어하기를 원한다면 윈도용 Node JS를 윈도 PC에 설치할 수도 있습니다.   혹은 라즈베리파이이와 하드웨어 모듈 같은 연결을 활용하지 않고 윈도용 NodeJS를 단순히 윈도 PC에 설치하여 Node-Red를 활용할 수도 있습니다.    

참고로,  각 노드에서 함수 코드를 만들 때에는 자바스크립트(Java Script)를 기본 코딩 언어로 활용하게 됩니다.   

그럼, 본격적으로 Node-Red의 세계로 출발해 보아요~!  

※  라즈베리파이에 Node-Red 설치하기

15년도부터 라즈베리파이 OS(라즈비안)에는 NodeJS와 Node-Red가 기본으로 설치가 돼있습니다.
즉, Node-Red와 업데이트만 진행하면 됩니다.
하지만 이것과 상관 없이 아래 명령어를 이용하여 설치하면 기존 설치된 혹은 구버전 NodeJS와 Node-RED를 자동 제거부터 하고 설치가 진행되니 그대로 진행해도 됩니다.

$ sudo apt-get update
$ sudo apt-get upgrade
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
$ sudo apt-get update
$ sudo apt-get upgrade


그리고 위 명령어를 복붙복 하세요.  NodeRED 참고 공식 링크  : https://nodered.org/docs/getting-started/raspberrypi

아래 이미지들은 Node-Red 설치 진행 과정입니다.

Y를 두 번 입력

Y를 차례로 두 번 입력하여 설치해 주세요. 

그럼, 아래처럼 최신 버전의 Node JS (v16.19.1)와  Node-RED (v3.0.2)가 설치됩니다.  만약 구버전이 있다면 자동 삭제 됩니다. 

▶  부팅시 Node-RED가 자동으로 실행되도록 하려면 아래 명령어를 실행해 주면 됩니다.

$ sudo systemctl enable nodered.service

 - 만약 자동실행 설정을 해제하려면 아래 명령을 입력하세요. 

$ sudo systemctl disable nodered.service

 

▶ node-red의 서비스 시작은 아래 명령어로 시작하면 됩니다.   
Node-RED의 서비스 시작은 터미널에서 명령어를 입력하거나, 라즈베리파이 메뉴에서(개발 》Node-RED)   Icon을 클릭하여 실행 가능합니다.    명령어로는   $ node-red  또는  $ node-red start   하나를 입력하면 됩니다.

$ node-red start

 

▶ 이제 웹브라우저를 열어 Node-Red가 실행될 혹은 작업화면은 라즈베리파이의 IP 주소를 입력하면 되는데요,   기본 설치되어 있는 크롬미움 Chromium (크롬의 리눅스 버전)이나,  파이어 폭스(Fire Fox Web) 웹브라우저에서 아래 주소를 입력하면 됩니다. 
http://localhost:1880      또는  http://localhost:1880/ui/     

혹은 ip를 직접 입력하여   http://192.168.138.130:1880  또는 http://192.168.138.130:1880/ui로 입력하면 아래처럼 Node-Red 에디터(편집) 창이 나타나는 것을 볼 수 있습니다.   이 공간에서 플로우를 개발한다고 생각하면 됩니다.

▶ Samba 툴을 설치하여 윈도우 PC에서 "원격 데스크톱 연결"을 통해서도 가능합니다.  
  라즈베리파이 원격 데스트탑 연결 내용은 아래 게시글을 참고해 주세요. 
  ▷ 윈도PC에서 라즈베리파이 원격 제어하기 ( https://rasino.tistory.com/329 )

 

그리고 Node-RED 네트워크 사용자 추가나 Node-RED 기본 환경설정은 아래 명령어로 설정해 주면 되는데요, 

$ node-red admin init

아래와 같은 내용이 나타나며,  아래 경로의 settings.js 파일에 설정내용이 저장됩니다. 

  /home/pi/.node-red/settings.js

엔터를 하면, 다음으로 진행이 되는데요,   Yes와 No 메뉴 혹은 기타 선택 메뉴가 나타나면 키보드 화살표 위/아래 키로 선택해 주면 됩니다. 

Do you want to setup user security? Yes
 → User Security :    id (예시: pi )와 password (8자 이상, 예시: raspberry)  입력 후 엔터,  →  유저 추가 선택 (여기서는 No) 선택  (ID와 패스워드는 잘 기억해 두세요)
→  User permissions?full access를 선택  
→ Add another user?No 선택 (추후 선택 가능)

②  프로젝트 선택  :  Do you want to enable the Projects feature?No 선택

③ Flow 파일 설정:  Flow File settings?flows.json (기본값으로 저장)

④ 테마 에디터 및 텍스트 에디터 설정 :   Select a theme for the editor default?  두 가지 모두 default로 설정 

⑤ 외부 모듈 받아들일지 여부? :   Allow Function nodes to load external modules?Yes (기본값으로 저장)

 

이와 같이 설정하면 무난하며, 추후에 명령어로 다시 변경 가능합니다. 

 

이렇게 설정하고 재부팅하게 되면,  로그인 창이 뜨는데요,  조금 전에 만들어준 계정으로 로그인하면 됩니다.

(예시)  ID :  pi  ,     Password :  raspberry

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

(기타 참고)   라즈베리파이에 파이어 폭스 Firefox Browser 설치하기  명령어 (최신 버전)

$ sudo apt update
$ sudo apt install firefox-esr

 

아래는 NodeRED를 실행하고 간단한 문자(String) 출력과 함수 노드를 이용한 숫자 카운트를 해보는 모습입니다. 

 

물론 같은 WiFi망 혹은 내부 네트워크에서 접속하는 것이라면, 아래처럼, 윈도 PC에서 라즈베리파이 주소를 입력하면 Node-RED 편집화면에 접속하여 실행시킬 수 있습니다.   ( 예시,  http://192.168.138.130:1880/ )

단, 윈도에서 노드레드를 실행하기 위해서는 윈도에 윈도용 Node JS가 설치되어 있어야 합니다. 
링크 : https://nodejs.org/ko/download    (LTS 안정화 버전을 다운로드하세요)
node js 설치 확인 및 버전확인은 아래처럼 가능하며, 윈도에 설치한  NodeJS의 버전 확인은,  윈도》실행》 cmd 명령 프롬프트 실행 하여,  node  -v로 실치 및 버전을 확인할 수 있습니다.    또한,  라즈베리파이에서는 터미널에서 같은 명령어로 확인 가능합니다. 

 

참고로,  윈도에서 Node-RED 실행은 아래 이미지와 같이 "node-red"를 입력하면 됩니다.   Node-RED의 버전확인도 가능하고 Starting flows라고 표시되는 것을 확인할 수 있습니다. 


마지막으로,
▶ Node-RED의 플로우 편집화면은   http://localhost:1880  또는  http://192.168.138.128:1880 형태의 주소로 접속하면 되며,
▶ Node-RED의 Dash Board(대시보드) 결과 출력 혹은 컨트롤 화면은  주소 마지막에/ui를 붙인 주소를 입력하면 됩니다.   (예시,  http://localhost:1880/ui   또는 http://192.168.138.128:1880/ui )

 

 

그럼, 차후에 Node RED를 이용해서 라즈베리파이에 연결된 모듈이나,  MQTT 브로커와 연동된 통신 실습을 올려볼 예정입니다.   감사합니다.

 

반응형
반응형

아두이노 IDE 등을 사용하여 컴파일할 때 코드에서 사용되는 라이브러리를 분명히 제대로 설치하였음에도 불구하고, 아래처럼 " xxx.h: No such file or directory "  등의 에러를 내는 경우가 종종 있습니다. 

(이미지1) 라이브러리 충돌 모습

또한 이전에 문제 없었던, WiFi.h  및 DHT.h 등 특정 라이브러리가 복수개로 충돌된다는 메시지도 보이는데요,  갑자기 이런 충돌 메시지를 받게 되면, 당황하여 괜히 잘 사용하던 기존 라이브러리를 삭제하거나 하여 다른 아두이노 코드 실행에도 악영향을 주게 됩니다. 

실제 필요한 라이브러리는 제대로 설치가 된 상황이고 기존 라이브러리도 충돌 되지 않는 상황인데요,  문제의 원인은 우습게도,  아두이노 IDE를 사용할 때 예를 들어, 직전까지 우노 보드를 사용하다가 갑자기 D1보드나 esp32 보드 등 보드를 변경하였을 때, 아두이노 라이브러리의 보드 선택을 바꾸어 주지 않았을 경우 종종 이런 문제가 발생하게 됩니다.  실제 라이브러리 문제가 아님에도 말이죠. 
따라서,  아두이노 IDE를 사용할 때 항상 컴파일 하기전에 사용할 보드선택을 먼저 하는 습관(체크)을 들이시면 좋을 것 같네요.  만약 그렇지 않고 자칫 해서  충돌 문제로 생각하고 이것 저것 라이브러리를 삭제하거나 건드려 놓아 엉키게 되면 또 이를 되돌려 놓는 것에도 진을 빼야 할 수도 있으니 주의하면 좋을 것 같네요. 

아래 이미지는 보드 우노 보드 선택 시 에러가 났다는 것과 USB에 연결된 보드를 제대로 선택한 후 곧바로 에러 메시지가 사라지고 컴파일이 된 이미지입니다. 

연결된 보드선택을 잘못하게 되면 라이브러리 에러를 보게 될 수 있습니다.

(이미지2) 연결된 보드선택을 잘못하게 되면 라이브러리 에러를 보게 될 수 있습니다.

연결된 보드 종류 선택을 제대로 하였을 때 에러가 사라진 모습입니다.

(이미지3) 연결된 보드 종류 선택을 제대로 하였을 때 에러가 사라진 모습입니다.

그럼, 스트레스 해소되는 코딩 생활 되세요~  ^^;

반응형