반응형

sudo (substitute user do  또는 super user do 의미)

  • 로그아웃 없이 다른 사용자의 권한을 사용하여 명령을 실행하도록 하는 명령어
  • "sudo 명령어" 는 root 권한으로 명령어를 실행함
  • /etc/sudoers 파일에 지정되어 있는 사용자만 사용가능

su (substitute user 또는 super user)

  • 로그아웃 없이 다른 사용자로 로그인하는 명령어
  • "su 사용자명" 으로 사용 ("su"는 "su root"와 동일함)
  • 로그인 하려는 계정의 패스워드가 필요함

sudo 명령어의 사용방법

sudo [명령어] : root 계정으로 로그인 없이 [명령어]를 실행 | root 계정의 패스워드 필요

sudo su : root 계정으로 로그인 | 현재 디렉토리 유지 (현재 계정의 쉘 유지) | 현재 계정의 패스워드 필요

sudo -s : root 계정으로 로그인 | 현재 디렉토리 유지 (현재 계정의 쉘 유지) | root 계정의 패스워드 필요

sudo -i : root 계정으로 로그인 | "/root"로 디렉토리 변경 (root 쉘 실행) | root 계정의 패스워드 필요

su 명령어의 사용방법 ([아이디] 파라미터가 없을경우 root 로 치환됨)

su [아이디] : root 계정으로 로그인 | 현재 디렉토리 유지 (현재 계정의 쉘 유지) | root 계정의 패스워드 필요

su - [아이디] : root 계정으로 로그인 | "/root"로 디렉토리 변경 (root 쉘 실행) | root 계정의 패스워드 필요

반응형

【 3D프린팅 】Fusion360(퓨전360) 개인용 무료버전 설치

3D 프린팅 2023. 11. 25. 22:24 Posted by 엑소더스팩토리
반응형

이번 게시글은 3D 프린팅 모델 중에서 가장 접근하기 편하면서 강력한 기능을 제공하는 Fusion360에 대해 다루고 있습니다. 
특히 파라메트릭 모델링 기능이 강력해서 결과물 완성 후에도 치수 변경등에 대해 바로바로 적용시킬 수 있으며, 히스토리 기능 제공으로 수정 작업 시간을 매우 빠르게 줄여주는 모델링 툴입니다.  
이번 게시글은 3D프린팅 모델링 소프트웨어 중에서 장점이 많은 Fusion360(퓨전360)의 개인용 무료 버전을 다운로드하여 설치하는 내용을 담고 있습니다. 

Fusion360 무료버전 설치 타이틀

Fusion 360은 인벤터, Rhino 와 함께 대표적인 3D모델링 툴 중 하나인데요, 앞서 설명한 파라메트릭 모델링 및 히스트리 기능을 제공하면서 개인용 무료 버전으로 활용할 수 있는 몇 안 되는 툴로서, 설계 시 직관적으로 설계할 수 있는 매우 좋은 3D 모델링 툴입니다.

Fusion 360은 기본적으로 클라우드 형태로 동작되는 데요, 

OnLine 모드로 작업

만약 네트워크가 안 될 경우에도 ‘Off 라인 모드’로 작업이 가능합니다. 

OffLine 모드로 작업

Fusion360은 기본적으로 월/년/3년 단위의 유료 구독으로 운영이 되는데요, 

Fusion360 정식 버전 구매 가격

보시다시피 개인이 구매해서 사용하기에는 부담이 되는 금액이죠.
물론 무료 체험판이 있지만, 한 달 체험기간이 끝나면 다시 사용하려면 결국 결제해야 합니다.
하지만 영문 서버로 접속했을 때,  비상업적 용도로 계속해서 사용할 수 있는 개인용 버전을 다운로드하여 사용할 수 있습니다. 

개인용 무료 Fusion360 버전과 유료 Fusion360 버전의 기능 비교

개인용에서 제공하는 기능만으로도 3D출력물 모델링에는 별다른 지장이 없고, 3D 프린팅 자격증을 취득하거나 하는 등 모두 가능하기 때문에 개인용 무료 버전을 설치하면 됩니다.

그럼, Autodesk 사이트에 접속하고 화면 우측 상단의 ‘로그인’을 클릭하세요. 
( 주소 :  autodesk.co.kr   또는 autodesk.com )

'로그인' 위치

계정이 있다면 바로 로그인 하면 되고, 가입 이력이 없다면 ‘계정생성’을 클릭해 주세요.

로그인 이미지

그럼, 아래 양식에 있는 빈 곳을 채우고 영상을 따라 진행해 보세요.

만약 '전자메일 확인'란에서 확인 메일을 정확히 입력해도 잘 안 된다면, 복사 붙여 넣기로 해보세요.

그리고,  처음 계정 가입 시에는 가입시 등록한 메일로 ‘가입 확인’ 메일이 전송되는데요, 지금 그 메일로 로그인하여 Autodesk에서 보낸 메일을 열어 확인 버튼을 클릭해야 합니다.

네, 이렇게 로그인이 되었다면, 지금 링크로 접속해 보세요.

[ Fusion360(퓨전360 ) 개인용 무료 버전 다운로드  ]
https://www.autodesk.com/products/fusion-360/personal

처음 영문 페이지에 접속하면 아래같은 질문 창들이 보일 때 자세이 보고 잘 클릭해줘야 합니다. 

만약 아래와 같은 창에서는 반드시 "Stay" 버튼을 눌러주세요.   왜냐하면, 오토데스크 한국어 페이지에서는 다운로드 항목을 찾을 수 없고 영문 페이지로 접속해야 받을 수 있어요. 


아래 이미지에서는 "Get Fusion 360 for personal use" 를 클릭하세요.

그리고 아래와 같은 창에서는 자신의 이메일을 넣어주세요.

그리고 아래 처럼 이름과 연락처를 입력하면 됩니다.

 

 

"No thanks" 체크

이미지 처럼 체크 후, Submit 클릭!

‘다운로드’ 버튼을 클릭해 주세요

설치 파일이 다운로드 완료 되면, 실행하여 설치를 진행해 주세요.

무료버전 설치중인 모습

위 이미지처럼 체크 후 Autodesk Identity Manager 열기를 클릭하세요.

네, 이렇게 해서 최종적으로 설치 완료 된 모습입니다.

Fusion360은 클라우드 형태로 운영되는 데요, 작업 파일을 서버에 저장하기 때문에 다른 사람과 협업(공동) 작업이 가능하고, 이미지처럼 이전에 다른 PC에서 작업했던 내용을 다시 열어서 작업하는 것이 가능합니다.


우선, 기본 설정 부분을 간략히 설명드릴게요.
마우스를 로그인 id 위에서 우클릭하면 ‘기본 설정’ 메뉴 뜨는데요, 클릭하세요.

언어 설정은 아래 이미지에서 영어 같은 것으로 바꿀 수 있습니다. 

개인적으로 마우스 사용방식은 ‘Tinkercad’에서 사용하던 방식이 편해서 사용하고 있는데요, 각각 사용해 보면서 나머지 부분들도 여러분이 사용하기 편한 방식으로 선택해 보세요.

그리고 설계하는 기본 단위가 mm / cm / inch 무엇으로 되어 있는지 확인해 보세요.

그럼, 테스트로 100mm X 100mm X 30mm 치수의 박스를 모델링해 볼게요.

여기서 파일 저장(Save)은 기본적으로 서버로 저장되는데요, 폴더를 만들어 정리해 주면 좋습니다.
만약, 작업하고 있는 PC로 저장하고자 한다면 Export 메뉴로 저장할 수 있어요.  
그리고, 저장할 수 있는 파일 확장자를 확인하세요. 

***.f3d  → fusion360 확장자입니다.

다만, 개인용 무료 버전은 동시에 편집 가능한 파일의 개수가 10개로 제한되는데요, 작업을 끝낸 파일은 Read-Only로 변경해 놓으면 사용하는데 크게 불편하지는 않습니다. 
다시 수정하고자 한다면 Enable로 변경하면 됩니다.

 그리고 우클릭하여 파일을 삭제할 수도 있습니다.

이상으로 Fusion360을 개인용 무료 버전으로 설치하고 기본 사용 설정까지 해보았습니다. 


감사합니다. 좋은 하루 보내세요~

 

반응형
반응형

 이 번 시간에는 지난 시간에 이어 Ubuntu에 한글 입력기 설치(설정)를 통해 한글 입력이 가능하도록 해볼 텐데요, 아울러 운영체제 메뉴도 한글로 바꾸어 보도록 할게요. 

【 학습 참고 자료 】

1.  【 우분투#1 】윈도에 VMware 가상 머신 설치하기 (Ubuntu 우분투 설치를 위한 준비)

2.  【 우분투#2 】VMware 가상 머신에 Ubuntu 우분투 설치하기

 라즈베리파이에 설치되는 라즈비안OS의 경우에는 한글 폰트부터 직접 다운로드하여 설정을 해주어야 합니다. 

우분투도 설치하면 기본적으로 한글 입력기 설정이 되어 있지 않는데요, 아래 절차에 따라 설정해 보세요.

먼저 터미널을 열고 update(upgrade) 상황을 살펴봅니다.

아래 명령어를 입력해보세요.

~$ sudo apt-get update

 

그리고 신규 업데이트 항목이 있다면, 업그레이드를 진행해 주세요.

~$ sudo apt-get upgrade

그리고 프로그램 표시 항목을 클릭해서 윈도에서 제어판에 해당하는 설정 아이콘을 클릭해서 열어주세요.

그러면, 아래와 같은 창이 열릴 거예요.  그러면, "Resion & Language" 항목을 클릭해서 아래 이미지에서 표시한 Language 제목 바로 아래에 보이는 "Manage Installed Languages"를 클릭하세요.

 그럼, 아래와 같은 창이 열리는데요,  Install 버튼을 눌러주세요. 

그리고 user 패스워드를 물어오는 창이 나타나고 패스워드를 입력해 주면, 아래처럼, 자동으로 Korea 관련 언어패키지 설치가 진행됩니다. 

그리고 아래처럼 창이 뜨면, 화살표로 표시한 Install/Remove Languages... 항목을 클릭해서 보면, 

아래처럼 Korean 한국어가 설치되어 있는 것을 볼 수 있습니다. 

그리고 아래 ①번을 클릭하여  열리는 팝업창에서 아래 ②번을 클릭하고 우분투 재시작(재부팅) 버튼을 누르게 되면 시스템 메뉴를 한글화(폰트 변경) 하게 됩니다. 

그리고 중요!!! 

시스템 재부팅 후, 아래와 같은 창이 떴을 때,  반드시 예전 이름 유지(K)를 선택해 주세요.  

폴더 이름이 한글로 되어 있을 경우 그 아래에 설치되거나 실행되는 프로그램의 경우 제대로 실행되지 않거나 문제가 생기는 경우가 종종 발생하게 있기 때문입니다. 

아래 이미지처럼 창이 열리면 ①번 지역형식 탭을 클릭하고 → ② 한국어가 화면에 뜨도록 제일 상단으로 끌어다 놓아주세요. ③ 그리고 시스템 전체 적용 버튼을 클릭해 주세요(경우에 따라 재부팅하는 경우가 있어요)

 

(아래) 이제 한글화(한글 폰트)가 적용되어 시스템의 기본적인 메뉴들이 아래 이미지처럼 한글로 바뀌게 됩니다.

하지만, 터미널창을 열고 한글을 입력해 보아도 아직 한글 입력에 대해서는 적용되지 않았다는 것을 알 수 있습니다. (아래)

그럼, 이제 아래 이미지처럼 키보드 항목을 클릭하고 입력소스 부분(+)을 클릭하여 입력소스를 한글로 변경해야 합니다. 

그리고 아래처럼 창이 열리면 한국어(Hangul)를 선택하고 추가(A) 버튼을 클릭해 주세요. 

 

그리고 아래 이미지를 참고해서,

① 한국어(Hangul)만 남기고 영어는 삭제해 주세요.

② 점 세 개 부분을 눌러 나타나는 팝업 메뉴에서

③ "기본 설정" 항목을 클릭해 보세요.

④  한영 전환키를 별도로 추가해 주거나 수정이 가능합니다. (여러 개의 단축키 등록 가능)
⑤  한글 모드로 시작을 선택해 주세요.  

⑥  마지막으로 "확인" 버튼을 클릭 해 주면 설정이 완료됩니다. 

그래서 우측상단에 있는 En → 한  으로 바꾸면,  터미널창에서 설정해 놓은 단축키 'Shift+space"로 한국어(Hangul)로 바꾸어서 ,  글자를 입력해 보면 한글입력이 잘 되는 것을 볼 수 있습니다. 

그럼, 여기까지 하고 마치겠습니다.

감사합니다. 

[ 우분투 설치 & 한글 설정 동영상으로 확인하기 ]

 

 

반응형
반응형

 3회에 걸쳐 Nano33 ioT 보드의 BLE 저전력 블루투스를 사용하는 다양한 방법에 대해 다루고 있습니다.  아두이노 나노33 보드시리즈는 콤팩트하면서 사용법이 아두이노 우노(나노)와 거의 동일하여 쉽게 접근가능하고 여기에 더해 WiFi기능과 저전력 블루투스 기능을 활용할 수 있는 매우 장점이 큰 보드입니다. 다만 유사한 기능을 제공하는 ESP32 보드에 비해 단가가 조금 나가는 단점이 있지만 아두이노 정품 보드의 정통성?을 이어받아 안정적이고 불량률이 거의 없다는 점이 장점인 보드입니다.  기본적인 스펙과 사용법은 아래, 이전 게시글을 참고하시면 상세하게 파악할 수 있으니 참고해 보세요.

【 Nano33 IoT 선수학습 】

1. 【 아두이노Nano33#1】 NANO 33 IoT 처음사용 설명서

2. 【 아두이노Nano33#1-2】 NANO 33 IoT 처음사용 설명서 #1-2 (LSM6DS3 센서 테스트) (자이로센서 등등)

3. 【 아두이노Nano33#2】 NANO 33 IoT 처음사용 설명서 2편 WiFi 활용하기

4. 【 아두이노Nano33#3】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #1 (BLE로 LED & 서보모터 제어하기)

5. 【 아두이노Nano33#4】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #2 (BLE로 도어락 솔레노이드 제어하기)

2편에서는 BLE를 이용해서 릴레이에 연결된 솔레노이드를 제어하여 도어록을 열고 닫는 실습을 진행했습니다.  이번 시리즈 마지막 3편에서는 1~2편을 통해 구성된 하드웨어들을 스마트폰에서 제공되는 BLE 통신으로 제어해 보려고 하는데요, 앱인벤터(App Inventor)를 이용해서 아주 쉽게 앱을 만들어 제어해 보겠습니다.  우선 이번 실습을 따라 해보고 만약 앱인벤터 기초 부분의 학습이 필요하다고 생각된다면 아래 게시물을 참고해 보세요. 응용 예시를 따라 하다 보면, 아주 쉽게 적응이 될거예요. 

[ 앱 인벤터 기초과정 ]

1.   【 앱인벤터기초#1】 MIT-구글의 App-인벤터 란? ( App-Inventor!)

2.   【 앱인벤터기초 #02】 앱인벤터 시작하기(설치&셋업) ( App-Inventor!)

3.   【 앱인벤터기초 #03】 앱인벤터 따라 하기 실습#1(메뉴화면소개 및 사용법)

4.   【 앱인벤터기초 #04】 앱인벤터 1도 모르고 따라하기 실습#2(화면이동 예제 만들기)

5.   【 앱인벤터기초 #05】 앱인벤터 1도 모르고 따라 하기#3(날짜/시간/체크박스 실습)

6.   【 앱인벤터기초 #06】 앱인벤터 1도 모르고 따라 하기 영상 실습#4 (사진/글자표시/SNS보내기 앱上)

7.   【 앱인벤터기초 #07】 앱인벤터 1도 모르고 따라 하기 영상 실습#5 (사진/글자표시/SNS보내기 앱下-완결!)

 

【 학습 목표 】

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하기
      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)
      ② Nano33 BLE  스캔과 페어링
      ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기
      ④ 서보모터 스위치로 제어하기

<2 편> 블루투스로 도어(Door 문)  잠금장치(솔레노이드) 열고 닫기
      ① 주요 부품 소개 ( 솔레노이드 / 솔레노이드 잠금걸쇠 / 릴레이 )
      ② 도어 미니어처 제작 (3D 모델링과 3D 프린팅)
      ③ 블루투스(BLE)로 도어 열고 닫기

<3 편> 앱 인벤터(App Inventor) 만들고 스마트폰으로 도어 열고 닫기
      ① nRF Connect 앱 활용해 보기 (LED 기본 제어)
      ② 블루투스 스캔 및 연결과 같은 기본 앱 기능 만들고 LED 제어해 보기
      ③  LED 제어와 서보 및 Door 제어 결합된 앱 만들기 (앱 안정성 향상 기능 넣기)
      

<3편>  App Inventor 앱으로 BLE통신하여 Nano33 ioT보드에 연결된 도어록과 서보모터 LED 제어하기!

【 실습 준비 】

이번 실습을 위해 필요한 준비물과 회로는 위 링크에도 게시한 아래 <1편>과 <2편> 게시물을 참고해 주세요. 

1. 【 아두이노Nano33#3】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #1 

2. 【 아두이노Nano33#4】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #2 

 

【 작품 준비 】

 실습을 위한 회로들을 아래처럼 아크릴 판(투명 아크릴 독서대 활용)을 이용해서 정리해 보았는데요, 특히 5V 전원이 다중으로 들어가기 때문에 5V 5A 용량의 미니 파워서플라이를 이용해서 USB 다중 전원 잭을 만들고 공급해 주었습니다. 

 

【 소스 코드 】

소스코드는 이전 게시글을 참고해도 됩니다.
① 기본적으로 블루투스는  1대 1로 연결되는 기기이기 때문에,  버튼회로(중앙회로) + LED 회로(주변회로) , 등 개별로 연결되도록 BLE의 로컬 네임을(SetLocalName) ,   각각 "LED" , "SERVO"  ,  "DOOR"로 하여 1대 1 통신하도록 하였는데요,  그럼 이렇게 번갈아가며 1대1 연결하고 통신 시연하려면, 버튼회로로 사용되는 중앙회로에 연결시키려는 기기이름으로 계속 바꾸어가며 업로드를 해야 하니 번거로워집니다.  따라서, 이 실습에서는 로컬 네임을  "MULTI"로 통일하여 주변기기의 전원을 ON / OFF 하여 간편히 페어링 되도록 하였다는 점 참고해 주세요. 

("MULTI"로 정리한 소스 코드 한 번에 다운로드 받기)

05. MultiCode.zip
0.01MB

 

② 중앙회로가 스마트폰이 되면 앱상에서 버튼별로 로컬네임을 줄 수 있기 때문에 각 회로별로 SetLocalName을 각각 "LED" , "SERVO"  ,  "DOOR" 주어 구분할 수 있고 그렇게 해야 원하는 기기를 선택해서 페어링 할 수 있습니다.   따라서 이렇게 네이밍이 된 코드는 아래에 압축하여 제공해 드립니다. 

( "LED" , "SERVO"  ,  "DOOR"로 각각 네이밍 된 소스 코드 한 번에 다운르드 받기)

04. App_Code.zip
0.01MB

 

【 이번 실습 프리뷰 】


이번 실습에서 1편과 2편을 통해 아래와 같이 중앙회로를 만들고 주변회로를 만들어 1대 1 통신을 실습했는데요, 

 이번 3편 실습에서는 아래처럼 스마트 폰의 BLE기능을 이용해서 각각의 회로를 제어해 보겠습니다.


이번 실습의 결과물은 아래와 같습니다.  최종 결과물 앱인벤터 코드가 어렵지 않도록 기본 핵심기능만 담은 Basic앱을 먼저 제작해 보고, 서보, 릴레이 회로 모두 제어하면서 좀 더 향상된 기능의 Advanced앱도 제작해 볼게요.

 

 

【   ① nRF Connect 앱 활용해 보기 (LED / Servo / Relay기본 제어)   】

 

먼저, 앱인벤터로 앱을 만들어 제어하기 전에, 블루투스(BLE)로 통신하여 간단한 신호를 송수신할 수 있는 기존 통신앱을 다운로드하여 제어가 되는지? 확인해 볼게요. 

앱이름은 nRF Connect 앱입니다.  앱스토어에서 검색 후 설치해 보세요.

앱을 설치하고 실행시켜 주세요. 

앱을 실행하면 자동으로 주변의 블루투스 장치를 스캐닝합니다.

현재 LocalName이 “LED”로 되어 있는 Nano33 보드가 스캔되었고 (현재, A. LED기기만 ON 되어 있음) 
“CONNECT” 버튼을 눌러 주세요.

맨 아래 “Unknown Service”를 터치하고,  송신 화살표 “↑”를 터치해 주세요.

0x____ 항목에 “01”을 입력하고 SEND 버튼을 터치하세요.

그럼 연결된 LED회로로 byte값 ‘1’이 전송되어 LED가 켜지게 됩니다.

 다시, 송신 화살표“↑”를 터치하고 0x00을 입력하면 byte값 ‘0’이 전송되어 LED가 꺼지게 됩니다.

마찬가지로 서보모터를 켜고 동일하게 전송하면 제어가 잘 되는 것을 볼 수 있습니다.

 

그리고 릴레이회로도 보조 전원을 연결하고 동일하게 전송하면 제어가 잘 되는 것을 볼 수 있습니다.

 

【 Basic 제어 앱 만들기 】

 

 이제 앱인벤터(App Inventor)를 이용하여 BLE 통신을 위한 기본앱을 만들어 볼게요.

 

App Inventor 기초와 응용을 다룬 7편의 영상 시리즈가 있는데요,  이 게시글 위에 관련 링크가 있으니 앱인벤터 기초가 필요하다면 참고해 보세요~

 우선, 1차적으로 아주 간단하게 핵심기능만 넣은 App을 제작해 보고,  이것을 바탕으로 게시글 끝에는 서보회로와 릴레이회로까지 넣고 좀 더 깔끔하게 실행되도록 만들어 볼게요.  

Basic App의 디자인 모습은 아래와 같습니다.


우선 작동 원리를 간단히 설명드립니다.

먼저,  

① Scan 버튼을 누르면 폰 주변에 감지되는 블루투스 장치를 검색하도록 합니다.

② 검색된 장치 목록에서 ‘LED’를 선택하면 Service UUID와 LocalName을 가져옵니다.

③ Connect를 터치하면 선택한 LED 주변장치와 연결을 시도하고 UUID와 특성 UUID를 체크하도록 합니다.

④ LED ON 버튼을 터치할 경우 true값에 해당하는 ‘1’을 전송시켜 LED가 켜지도록 합니다.

⑤ LED OFF 버튼을 터치할 경우 false값에 해당하는 ‘0’을 전송시켜 LED가 꺼지도록 합니다.

 

그럼, App Inventor 사이트에 접속하여 새 프로젝트를 클릭해 주세요.

App Inventor의 메뉴 언어는 한글로도 바꿀 수 있으니 한글메뉴가 더 익숙한 분은 여기서 바꾸어 주세요.(아래 이미지)

 

 저전력(BLE) 블루투스가 아닌 경우에는 Connectivity에 있는 Bluetooth를 사용하면 됩니다. (아래)

 

하지만 여기서는 저전력 블루투스(Bluetooth LE)를 사용해야 하기 때문에 BLE 확장 패키지를 Extension항목에 별도로 추가해야 사용할 수 있습니다.(아래)

 

그럼, 확장 패키지를 다운로드하기 위해 앱인벤터 사이트 또는 구글 검색으로 “Bluetooth LE” 또는 “BLE”라고 검색해 보세요. (아래)

 

검색된 영상과 같은 링크를 클릭하세요.

첫 번째 항목에 있는 BluetoothLE.aix를 다운로드하세요.(아래)

 설명란에 보이는 링크를 클릭하면  BluetoothLE에서 사용할 수 있는 각 블록에 대한 설명을 참고할 수 있어요. (위/아래 이미지 참고)

 

여기 “ Import extension”을 클릭하여 좀 전에 받은 “ edu...ble.aix ”파일을 추가해 주세요. (아래)

이렇게 생겨난 요소를 끌어다 폰 이미지 위에 올려주세요.(아래)

 

그럼 이렇게 숨김 요소로 기능이 추가되는 것을 볼 수 있습니다.(위)

 

그럼 아래에 앱 인벤터의 디자이너(Designer) 부분을 캡처하였으니 보고 따라 진행해 보세요.

① 번의 디자인에 해당하는 Components 구성은 아래 ②번과 같습니다.
각 Components의 속성은 거의 디폴트(기본) 값으로 하면 되는데요, LED ON 버튼과 LED OFF 버튼만 가로로 화면이 가득 차도록 나타내기 위해 Width 항목에 Fill parent. 옵션을 주고, 글자 FontBold 처리 및 FontSize, 색깔 정도만 처리를 해주면 좋습니다.   나머지 부분은 자유롭게 꾸며도 좋고요, Basic앱에서는 이 정도만 하고 넘어가도록 할게요.

각 항목의 이름들은 블록 코딩 화면에서 쉽게 알아차릴 수 있도록 의미를 부여해 네이밍 해주면 좋습니다.

예를 들어, Button의 경우 ‘btn_’으로 시작하는 태그를 붙여주고, Label의 경우 ‘lbl_’로 시작하는 태그를 붙인 다음, 각 요소의 이름을 붙여주는 식입니다.

 

이제 블록 코딩 화면으로 넘어갑니다.
아래 이미지를 참고하시고,  웹상에서 보기 어려울 경우를 대비해서 이미지 파일로 따로 링크해 놓을게요.
블록 코딩 이미지 사진은 2장으로 캡처했습니다.

Service UUID와 특성 UUID 값을 정확하게 입력해 주어야 합니다.

동일하게 반복되는 블록은 복붙 하는 것이 편할 수 있어요.

--  코드를 한글 메뉴로도 캡처했으니 참고해 보세요(아래) --

 

 

< Basic App 캡쳐 사진 다운로드하기! >

[Basic 앱] 앱인벤터 구성요소와 블록코딩 캡쳐 이미지.zip
1.08MB

 

 

블록 코드 구성이 완성되었다면, Build 메뉴에서 앱을 생성해 주세요.

 

앱 설치는 폰의 카메라를 이용해 QR코드를 스캔하면 연결된 링크를 통해 앱을 다운로드할 수 있고, 

다운로드 버튼으로 설치앱을 다운로드 후,  폰을 USB케이블로 연결하여 직접 복사하여 설치해도 됩니다.

그럼, 앱 설치하는 장면을 집접 보여드릴게요 앱스토어를 통하는 것이 아니기 때문에 경고 창이 나타날 수 있습니다.

 

 

 

‘Scan’ 버튼을 누르면 주변의  블루투스 장치들의 목록이 뜨는데요.

’LED’가 검색되었다면 ‘Stop Scan’을 누르고 검색된 ’LED’를 터치 후, ‘Connect’를 눌러 연결시켜 주세요.

 

그리고 ON / OFF 버튼을 누를 때마다 Status : 에 결과가 표시되도록 합니다.

 

그럼, 실제 동작 영상과 함께 다시 보여드릴게요.

 

‘Scan’ 버튼을 누르면 주변의 블루투스 장치들의 목록이 뜨고.

 

’LED’가 검색되었다면 ‘Stop Scan’을 누르고 검색된 ’LED’를 터치 후, ‘Connect’를 눌러 연결시켜 주세요.

 

그리고 On / Off 버튼을 누르면 LED가 잘 제어되는 것을 볼 수 있습니다.

 

【 BLE 기능 추가 App 만들기 - (Advanced BLE App) 】

 

앱을 좀 더 다듬고 서보와 릴레이 제어까지 추가한 Advanced 앱을 만들어 볼게요.

마찬가지로 디자인 화면과 코드블록을 보기 좋게 캡처하여 보여드리고 압축하여 첨부파일로도 올려드릴게요.

 

아래로 스크롤 된 모습

나머지 옵션 부분은 글자색 넣고 글자(Font...) 크기 및 가로 크기 맞추는 부분만 하면 되기 때문에, 이 부분은 직접 해보면 어렵지 않기 때문에 하면서 감을 익혀보세요.

 

- 블록 코딩 영역 < 영문 메뉴 > -   (③ 번 이미지)

Scan 버튼 관련된 블록코딩

 

LED 버튼 블록코딩
서버 모터 버튼 블록코딩
도어 솔레노이드(릴레이) 버튼 블록코딩

아래 블록코딩은 장치 선택에 따라서 블루투스 UUID 특성값을 다르게 선택하도록 처리한 부분입니다.
LED Scan 버튼을 통해 device_Mode 변수값이 1일 경우 LED에 할당된 특성UUID 값을 가져오도록했고, 
Servo Scan 버튼을 통해 device_Mode 변수값이 2가 될 경우 Servo에 할당된 특성UUID 값을 가져오도록했고, 

Door Scan 버튼을 통해 device_Mode 변수값이 3인지 확인해서 Relay에 할당된 특성UUID 값을 가져오도록하여, 

각 버튼에 맞도록 폰과 Nano33 ioT 기기와 페어링 되도록 하였습니다.

장치 선택에 따라서 블루투스 UUID 특성값을 다르게 선택하도록 처리

 

 

- 블록 코딩 영역 < 한글 메뉴 > -   (④ 번 이미지)

Scan 버튼 관련된 블록코딩
LED 버튼 블록코딩
서보 모터 버튼 블록코딩
도어 솔레노이드(릴레이) 버튼 블록코딩

 

아래 블록코딩은 장치 선택에 따라서 블루투스 UUID 특성값을 다르게 선택하도록 처리한 부분입니다.
LED Scan 버튼을 통해 device_Mode 변수값이 1일 경우 LED에 할당된 특성UUID 값을 가져오도록했고, 
Servo Scan 버튼을 통해 device_Mode 변수값이 2가 될 경우 Servo에 할당된 특성UUID 값을 가져오도록했고, 

Door Scan 버튼을 통해 device_Mode 변수값이 3인지 확인해서 Relay에 할당된 특성UUID 값을 가져오도록 하여, 

각 버튼에 맞도록 폰과 Nano33 ioT 기기와 페어링 되도록 하였습니다.

 

< Basic App 캡처 사진 다운로드하기! >

[Advanced 앱] 앱인벤터 구성요소와 블록코딩 캡쳐이미지.zip
1.51MB

 

그럼 이제 Advanced 앱도 실행시켜 볼게요.
아래 이미지는 LED와 페어링 시키고 ON / OFF 제어에 성공한 모습입니다.  

 

아래 이미지는 서보(모터) 기기와 페어링 시키고 ON / OFF 제어에 성공한 모습입니다. 

 

아래 이미지는 도어 솔레노이드(릴레이) 기기와 페어링 시키고 도어문 개폐 제어에 성공한 모습입니다. 

 

모두 잘 작동하고 있습니다.

 

여기까지 Nano33 ioT 보드에서 제공되는 저전력 블루투스(BLE) 기능을 이용한 제어 시스템 학습 안내를 마무리하도록 하겠습니다. 

감사합니다.

 

 

 

【동영상으로 학습하기】

https://youtu.be/vKGKb-h59sA

 

반응형
반응형

지난 게시글에서 윈도 OS 상에서 리눅스 혹은 또 다른 운영체제를 돌리기 위해 VMware라는 가상 머신을 설치하였습니다.  이렇게 설치된 VMware에 Ubuntu를 탑재해서 언제든 윈도환경에서도 우분투를 사용해 볼 수 있도록 해볼게요.

우선, 
→ ① 구글에서 " 우분투 다운로드 또는 " Ubuntu Download " 검색합니다.   
   그리고 아래 보이는 링크를 클릭해 주세요.

 

다운로드 사이트 직접 링크
https://ubuntu.com/download/desktop

 

https://ubuntu.com/download/desktop

 

ubuntu.com

 

→ ② VMware를 실행 시키면 아래와 같은 VMware 메인 창이 열리게 되는데요, Create a New Virtual Machine을 클릭합니다.

→ 그럼, 아래와 같은 창이 열리는데요,  아래처럼,  ①과 ②를 순서대로 클릭하세요.

→ 그리고 열리는 창에서 위에서 받아 놓았던 우분투 이미지 파일(xxx.iso)을 선택 후 NEXT를 클릭해 주세요.

→ 계정 관련 정보를 입력 후 잘 기억해 주세요.  만약 ID, Password는 차후에 잊어버리게 되면 밀고 다시 설치해야 하니 잘 기억해 두세요.    여기서는 간단히 user  ,   1234로 해두었습니다.

 

아래는 Ubuntu 우분투가 가상 공간으로 디스크를 차지하게 될 영역을 지정하는 화면인데요, 디폴트 값으로 20Gb 정도로 되어 있습니다.  만약 용량이 더 필요하다면 올려서 Next를 클릭하세요.

→  그리고 Finish를 클릭하면 아래처럼 우분투가 실행됩니다.

→  아래는 키보드 언어를 설정하는 화면인데요, 우선 디폴트 값인 영어로 설정하고 넘어가는 것을 추천드립니다. 추후에 한글 폰트와 언어 패키지를 제대로 설치하면 자연히 한글 입력도 가능해집니다. 

→ Continue 버튼 클릭하고 아래 이미지를 참고하여 계속 진행해 주세요.

→ 위에서 입력한 계정 정보를 그대로 입력해 줍니다.

→ 설치 진행되는 모습

→  아래는 구글 혹은 마이크로 소프트 계정이 있을 경우 등록하는 절차인데요, 일단은 Skip 할게요.

→ 일차적으로 설치 완료 되었으며, 우분투 버전의 업그레이드가 존재할 경우 아래와 같은 창이 뜨는데 업데이트를 해주세요.

→ 그리고 마지막으로 필요한 소프트웨어가 있을 경우 설치하라는 창이 뜨고 설치가 마무리 되었습니다. 

 

다음 시간에는 우분투에서 한글 설정 및 사용에 대해 다루어 볼게요.
감사합니다.

 

반응형
반응형

윈도 OS 상에서 리눅스 혹은 또 다른 운영체제를 돌리기 위해서는 기존 OS를 살려두고 논리적으로 분할된 하드디스크의 일정한 공간을 할당받아 멀티 OS 구동을 지원해 주는 소프트웨어가 필요합니다.  

대표적으로 VMware(브이엠웨어)와 Virture-Box(버추얼 박스)가 있는데요,  버추얼 박스는 오라클이 개발한 오픈 소스 가상화 소프트웨어이고 따라서 무료로 이용할 수 있습니다.  

VMware는 가상화 전문 소프트웨어 기업에서 제공하는 툴로  VMware vSphere, VMware Workstation, VMware Fusion, VMware Horizon 등의 제품이 있고,  우리가 주로 사용하는 제품은 VMware Workstation입니다.  
그리고 Workstation 버전은 Pro 버전과 Player 버전으로 나뉘어 있는데, Pro 버전은 30일간만 무료사용가능한 트라이얼 버전이고, Player 버전은 무료로 계속 사용할 수 있는 버전이기 때문에  VMware Workstation Player 버전을 다운로드하여 사용하면 됩니다.  이 버전은 비상업적인 용도에 한해서 개인이 사용하는 것은 무료로 이용할 수 있습니다. 
따라서 VMware Workstation 가상머신을 설치하고 여기에 Ubuntu를 설치해 보도록 할게요.

우선,
→ ① 구글에서 " VMware workstation player download "로 검색합니다.   
   그리고 아래 보이는 링크를 클릭해 주세요.

사이트 링크 :  https://www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html 

 

Download VMware Workstation Player | VMware

Download VMware Workstation Player for free today to run a single virtual machine on a Windows or Linux PC, and experience the multi-functional capabilities.

www.vmware.com

 

 

  ②  VMware download 사이트가 나오면 화면을 아래로 스크롤해보면 무료로 설치할 수 있는 버전이 아래 이미지처럼 나타나며, 클릭하면 탐색창 DOWNLOAD 폴더로 다운로드가 시작됩니다.

그럼, 탐색창을 띄우고 다운로드 폴더로 가서 VMware player 설치 파일을 실행시켜 주세요.

아래 이미지가 보이면 Next를 클릭!

I accept에 체크를 하고  Next를 클릭!

아래와 같이 체크 하고 다시 Next 클릭!

아래와 같이 체크 하고 다시 Next 클릭!

아래와 같이 체크 하고 다시 Next 클릭!

Install 버튼을 클릭하면 아래처럼 설치가 진행됩니다.

마지막으로 Finish 선택하면 기본적으로 설치가 완료되는데요,

바탕화면 또는 시작메뉴에 있는 VMware 아이콘을 클릭해서 실행합니다.

그리고 아래 이미지를 참고하여 계속 진행해 주세요

자,  여기까지 설치하면 기본적으로 현재시점으로 다운로드하여서 설치되는 VMware Workstation Player 17 버전의 설치가 끝납니다.  이렇게만 설치하고 그대로 사용해도 좋지만,   설치 후 바로 아래처럼 17.5 버전에 대한 업데이트를 할 수 있다는 메시지를 띄워주는데요, 보통의 경우 여러 가지 개선사항이 있을 수 있기 때문에 업그레이드를 해볼게요.

여기서 바로 Download and Install 버튼을 클릭해도 좋지만, 중간에 재부팅을 해야 제대로 진행 되기에,  지금 시점에 재부팅한 번 하는 것도 좋습니다.   

  만약 재부팅없이 바로 진행하면 아래처럼 재부팅해야 한다는 메시지를 띄우게 됩니다. 

그래서,  재부팅하거나 하여 다시 VMware 아이콘을 실행시키고 있으면, 아래처럼 다시 업데이트 메시지가 뜨는데, 다시 Download and Install 버튼을 클릭합니다.  

그리고 업데이트용 설치파일이 모두 다운로드되고 나면 아래처럼, 지금 실행되고 있는 17 Player 프로그램을 닫아야 설치업데이트)을 진행할 수 있다는 메시지를 띄우기 때문에,  배경에 깔린 프로그램을 닫아줍니다.

 

그러면, 처음 설치할 때와 같은 화면들이 동일하게 이어지니,  위에 설명드린 이미지를 참고해서 설치를 완료해 보세요.

 

이렇게 17.5 버전으로 업그레이드가 완료되고 다시 실행 시키면 아래처럼 가상툴을 본격적으로 사용할 수 있게 되며,  다음 게시글에 우분투 최신버전을 설치해 보도록 하겠습니다. 

 

※  영상을 보며 설치 따라하기 (아래 유튜브 영상 클릭!)

또는 아래 티스토리 영상 클릭!

반응형
반응형

3회에 걸쳐 Nano33 ioT 보드의 BLE 저전력 블루투스를 사용하는 다양한 방법에 대해 다루고 있습니다.  아두이노 나노33 보드시리즈는 콤팩트하면서 사용법이 아두이노 우노(나노)와 거의 동일하여 쉽게 접근가능하고 여기에 더해 WiFi기능과 저전력 블루투스 기능을 활용할 수 있는 매우 장점이 큰 보드입니다. 다만 유사한 기능을 제공하는 ESP32 보드에 비해 단가가 조금 나가는 단점이 있지만 아두이노 정품 보드의 정통성?을 이어받아 안정적이고 불량률이 거의 없다는 점이 장점인 보드입니다.  기본적인 스펙과 사용법은 아래, 이전 게시글을 참고하시면 상세하게 파악할 수 있으니 참고해 보세요.

【 Nano33 IoT 선수학습 】

1. 【 아두이노Nano33#1】 NANO 33 IoT 처음사용 설명서

2. 【 아두이노Nano33#1-2】 NANO 33 IoT 처음사용 설명서 #1-2 (LSM6DS3 센서 테스트) (자이로센서 등등)

3. 【 아두이노Nano33#2】 NANO 33 IoT 처음사용 설명서 2편 WiFi 활용하기

4. 【 아두이노Nano33#3】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #1 (BLE로 LED & 서보모터 제어하기)

 

1편에서는 BLE와 UUID가 무엇인지? 통신하는 방식에 대해 알아보았고BLE를 이용해서 LED와 서보모터를 간단히 제어해 보았습니다. 

이번 2편에서는 BLE 통신으로 릴레이 모듈을 이용한 도어 솔레노이드를 제어해 보겠습니다.
아울러 사실감을 주기 위해 미니어처 도어를 3D프린팅 하여 보여드리려고 합니다.
다음 3편에서는 스마트폰으로 제어해 볼 수 있도록 앱인벤터를 활용하는 것까지 다루어 보겠습니다.
사전 준비로 Nano33 ioT 보드를 사용하기 위한 환경 설정과 예시 코드는 1편을 참고해 주세요.

【 학습 목표 】

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하기
      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)
      ② Nano33 BLE  스캔과 페어링
      ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기
      ④ 서보모터 스위치로 제어하기

<2 편> 블루투스로 도어(Door 문)  잠금장치(솔레노이드) 열고 닫기
      ① 주요 부품 소개 ( 솔레노이드 / 솔레노이드 잠금걸쇠 / 릴레이 )
      ② 도어 미니어처 제작 (3D 모델링과 3D 프린팅)
      ③ 블루투스(BLE)로 도어 열고 닫기

<3 편> 앱 인벤터(App Inventor) 만들고 스마트폰으로 도어 열고 닫기
      ① nRF Connect 앱 활용해 보기 (LED 기본 제어)
      ② 블루투스 스캔 및 연결과 같은 기본 앱 기능 만들고 LED 제어해 보기
      ③ 앱 안정성 높이고 연결하려는 BLE장치 바로 연결시키기
      ④ LED 제어와 Door 제어 결합된 앱 만들기

 

< Nano33 ioT 스펙과 기본 정보 >

Nano33 보드 시리즈 스펙 정보

 

Nano33 시리즈 핀 배열

 

<2편>  Nano33 ioT 블루투스(BLE)로 도어록 솔레노이드 제어하기

 

【 실습 준비 】

이번 실습을 위해 필요한 준비물입니다. 아래와 같은 재료를 준비하면 실습을 진행할 수 있습니다.
스위치가 연결된 보드는 실습 1)의 재료와 연결이 같습니다. 

- Nano33 ioT 보드 X 2개 이상
- 브레드 보드(400핀 또는 840핀) X 2개 이상
- LED X 1개
- 저항 220옴(150Ω~470Ω 가능)  X 1개
- 저항 10K옴(4.7KΩ~10KΩ 가능)  X 1개
- 푸시 버튼(종류 모양 상관없음) X 1개 
- 도어록 솔레노이드 & 걸쇠 (모델명 SM1054, 12V, 0.6A  / 또는 6V SM1054S 원형헤드) X 1개
- 점퍼선(연결선) 또는 PCB헤더 X 한 묶음

 

 ① 주요 부품 소개 ( 도어록용 솔레노이드 2종 및 걸쇠 /  릴레이 / USB 다중 커넥터 & 5V 전원공급기 )

< 솔레노이드(도어록) 제품 규격 및 사이즈  >

 

또는 아래와 같은 제품도 사용해 볼 만합니다.  작동전압은 6V이며, 0.57A 전류를 소모합니다. 

 

 < 도어록용 걸쇠 >

 < 릴레이 >

( ※ 5V 출력이 지원되는 아두이노 우노/나노의 경우는 직접제어가 가능하지만 Nano33ioT 보드는 보드에 있는 특정핀의 납땜 등의 조치를 하지 않는 이상 3.3V의 출력만 사용할 수 있기 때문에 그 상태에서는 보드에서 릴레이 직접제어는 보드 손상을 초래할 수 있어 삼가야 합니다.)

실습에 사용된 릴레이는 5V입력 전원으로 동작되고 교류전원 250V 10A까지 제어되는 모듈입니다.

 릴레이 사용법 
 - 릴레이는 코일에 전류를 흘려 코일의 유도 작용에 의해 접점을 On / Off 해주는 스위치입니다. 
 - 이를 이용하면, 낮은 전압(예, 5V)으로 220V의 전원을 끊거나 연결시킬 수 있습니다.
 - 좌측 IN에 HIGH(또는 LOW) 신호가 가해지면 Com단자와 NO 단자가 연결되어 스위치 형태로 작동됩니다.
 - NC (Normal Close : 평상시 연결되어 있음)   
 - NO (Normal Open : 평상시 열려 있음, 연결 끊어짐) 

  - NC단자와 Com 단자가 디폴트로 연결되어 있고, 릴레이가 동작이 되면 이 연결이 끊어지고,
    Com단자가 NO단자와 연결이 됩니다. 이 부분을 전기제품이나 콘센트의 한쪽 부분의 연결을 끊어 
    스위치 형태로 구성할 수 있습니다.

 

※ 릴레이는 작동 방법에 따라 두 가지 종류가 있습니다.   신호(Signal) 라인 In으로 High 신호가 입력되면 작동(Trigger)되는 High Level Trigger 타입이 있고,   Low 신호가 입력되면 작동되는 Low Level Trigger 타입이 있습니다. 
보통 High Level Trigger 타입을 사용하면 좀 더 직관적으로 편하게 사용할 수 있습니다.   이 번 실습에도 High Level Trigger 타입의 릴레이를 사용하고 있습니다. 

 

통신을 위해서는 송수신 회로가 필요한데,  BLE통신에서는 중앙회로(Central-버튼 회로)와 주변회로(Peripheral-릴레이 솔레노이드 회로)로 부르며,  버튼이 들어간 중앙회로는 지난 1편의 회로와 동일하기 때문에 이번 편에서는 솔레노이드 회로(Peripheral) 제작만 설명드리겠습니다.  1편의 내용을 보고 버튼회로도 함께 준비해 주세요.
우선, 버튼회로 도면을 보여드리면 아래와 같습니다.


아래가, 솔레노이드가 연결된 릴레이회로 도면입니다.

이번 실습에서는 어느 정도 크기가 있는 솔레노이드는 12V 정도를 사용하는데요.  이 것을 아두이노 보드 출력으로 직접 제어하기는 어렵기 때문에 릴레이라는 모듈을 사용합니다. 
이번 실습에 사용될 솔레노이드는 DC12V 정격입력이지만, 구하기 쉬운 9V건전지와 7.4V 리튬폴리머 배터리를 사용해 볼게요.  솔레노이드에 다이오드를 연결해 놓았는데, 코일로 구성된 부품은 작동 시 역기전력이 발생하는데요. 이로부터 회로를 보호하기 위한 부품으로 되도록 연결해 주는 것이 좋습니다. 

비교적 구하기 쉬운 9V 4각 건전지로 솔레노이드 동작을 위한 전원 연결한 모습
RC카 등에 많이 사용되는 7.2V 리튬폴리머 배터리로 솔레노이드를 동작시키는 모습


이번 회로에서는 전원이 3가지나 들어가는데요(위 그림 참조), 아두이노 3.3v 출력 단자로 릴레이 전원을 대체하려고 한다면 Nano보드가 손상될 수 있으니 주의해 주세요!

그리고 종류가 다른 전원들을 하나의 회로에 사용하고자 할 때는 GND(-)는 모두 연결해 주어야 합니다. 

[ 동작을 위한 아두이노 코드입니다. ]

버튼회로 코드는 아두이노 IDE의  ArduinoBLE》Central 》LedControl 예제를 기본으로 해서 수정 사용합니다.

< 버튼회로 (중앙장치 Central) 코드 >

/*  Relay Control Central (버튼이 있는 회로) Client */

#include <ArduinoBLE.h>

// variables for button
const int buttonPin = 2;
int oldButtonState = LOW;

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요
//  while (!Serial);    

  // configure the button pin as input
  pinMode(buttonPin, INPUT);

  // initialize the Bluetooth® Low Energy hardware
  BLE.begin();

  Serial.println("Bluetooth® Low Energy Central - RELAY control");

  // start scanning for peripherals
  BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}

void loop() {
  // check if a peripheral has been discovered
  BLEDevice peripheral = BLE.available();

  if (peripheral) {
    // discovered a peripheral, print out address, local name, and advertised service
    Serial.print("Found ");
    Serial.print(peripheral.address());
    Serial.print(" '");
    Serial.print(peripheral.localName());
    Serial.print("' ");
    Serial.print(peripheral.advertisedServiceUuid());
    Serial.println();

    if (peripheral.localName() != "RELAY") {
      return;
    }

    // stop scanning
    BLE.stopScan();

    controlRelay(peripheral);

    // peripheral disconnected, start scanning again
    BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
  }
}

void controlRelay(BLEDevice peripheral) {
  // connect to the peripheral
  Serial.println("Connecting ...");

  if (peripheral.connect()) {
    Serial.println("Connected");
  } else {
    Serial.println("Failed to connect!");
    return;
  }

  // discover peripheral attributes
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("Attributes discovered");
  } else {
    Serial.println("Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }

  // retrieve the Relay characteristic
  BLECharacteristic relayCharacteristic = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");

  if (!relayCharacteristic) {
    Serial.println("Peripheral does not have RELAY characteristic!");
    peripheral.disconnect();
    return;
  } else if (!relayCharacteristic.canWrite()) {
    Serial.println("Peripheral does not have a writable RELAY characteristic!");
    peripheral.disconnect();
    return;
  }

  while (peripheral.connected()) {
    // while the peripheral is connected

    // read the button pin
    int buttonState = digitalRead(buttonPin);

    if (oldButtonState != buttonState) {
      // button changed
      oldButtonState = buttonState;

      if (buttonState) {
        Serial.println("button pressed");

        // button is pressed, write 0x01 to turn the LED on
        relayCharacteristic.writeValue((byte)0x01);
      } else {
        Serial.println("button released");

        // button is released, write 0x00 to turn the LED off
        relayCharacteristic.writeValue((byte)0x00);
      }
    }
  }

  Serial.println("Peripheral disconnected");
}

 

릴레이회로 코드는 1편에서 사용하였던 ArduinoBLE》Peripheral 》LED 예제를 사용하면 됩니다.

< 릴레이회로 (주변장치 Peripheral) 코드 >

/*  Relay Peripheral (Relay가 연결된 회로)  Server */

#include <ArduinoBLE.h>

BLEService relayService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy RELAY Service

// Bluetooth® Low Energy RELAY Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int relayPin = 2; // pin to use for the Relay

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요
//  while (!Serial);    

  // set RELAY pin to output mode
  pinMode(relayPin, OUTPUT);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");

    while (1);     // BLE 서비스가 시작될 때까지 무한 루프
  }

  // set advertised local name and service UUID:
  BLE.setLocalName("RELAY");
  BLE.setAdvertisedService(relayService);

  // add the characteristic to the service
  relayService.addCharacteristic(switchCharacteristic);

  // add service
  BLE.addService(relayService);

  // set the initial value for the characeristic:
  switchCharacteristic.writeValue(0);

  // start advertising
  BLE.advertise();

  Serial.println("BLE RELAY Peripheral");
}

void loop() {
  // listen for Bluetooth® Low Energy peripherals to connect:
  BLEDevice central = BLE.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) {
      // if the remote device wrote to the characteristic,
      // use the value to control the RELAY:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("Relay on");
          digitalWrite(relayPin, HIGH);         // will turn the LED on
        } else {                              // a 0 value
          Serial.println(F("Relay off"));
          digitalWrite(relayPin, LOW);          // will turn the LED off
        }
      }
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}


< 코드 다운로드 >
위 두 가지 코드를 압축하였으니 다운로드하여 사용해 보세요. 

03. Relay.zip
0.00MB

 

코드 내용을 살펴보면 릴레이가 연결된 핀 번호를 정확하게 적어주어야 합니다. 
그리고 사용할 서비스 UUID와 특성 UUID를 예시에 있는 것 말고 다른 번호로 변경하고 싶다면 아래 UUID 생성 사이트를 이용하세요 uuidgenerator.net  또는 http://www.uuidtools.com 사이트를 이용하면 됩니다.

물론, 기본 예제에 제시된 UUID를 그대로 사용해도 됩니다

setLocalName을 “RELAY”로 하였는데요,  중요한 것은 버튼회로(Central)의 setLocalName과 일치시켜야 합니다.

즉, 연결하고자 하는 회로별로 로컬 네임을 설정해 주면 되는데요,  서로 로컬 네임이 일치하는 기기끼리 페어링 되도록 코딩되어 있습니다 (UUID 포함)

Central 코드도 서비스 이름과 로컬네임만 RERAY로 변경해 놓았습니다. 

 

< 도어 미니어처 제작 >

이번 실습에서는 좀 더 사실감을 주기 위해 3D 프린터로 미니 도어를 만들어 보았습니다 도어 모델링에 사용한 툴은 Fusion360입니다

사이즈는  ( 가로 160mm X 높이 185mm ), 바닥 ( 160mm x 130mm ), 두께 5mm입니다

그리고 문에 사용할 경첩을 따로 설계했습니다

경첩의 홀은  M3 x 8mm 나사를 기준으로 제작했습니다

문의 솔레노이드 고정과 걸쇠 고정 홈은  M2 x 5mm 나사를 기준으로 제작했습니다

 

경첩을 문위에 맞대어 보면 아래와 같습니다.  치수가 정확하게 일치하도록 제작했습니다.

 출력은 문과 경첩 각각 따로 하도록 하였습니다. 

※ 만약 출력한다면 슬라이서 프로그램에서 내부채움(Infill)은 70% 이상 권해드립니다 (출력물을 떨어뜨렸을 때 쉽게 부서지지 않도록)
슬라이서 프로그램으로 슬라이싱 할 수 있는 STL파일(도어와 경첩)을 아래 압축하여 올려드립니다. 

도어와 경첩 STL 파일.zip
0.10MB

미니어처 모형은 아래처럼 잘 출력되었습니다. 

그리고 여기에 솔레노이드와 걸쇠 그리고 경첩까지 달아 놓은 모습입니다. 

도어 미니어처에 솔레노이드와 걸쇠를 달아 놓은 모습입니다
도어 미니어처에 경첩을 달아 놓은 모습입니다

 

< 솔레노이드 >

 

솔레노이드도 크기와 작동 전압 범위에 따라 몇 가지 종류가 있습니다.

작동 방식은 전선에 직류 전기를 넣으면 코일에 발생된 자기장에 의해 쇠뭉치가 전진하고, 입력 전기가 없으면 자기장이 소멸되어 스프링에 의해 원위치로 돌아오는 원리로 작동됩니다. 

실습에 사용된 도어형 솔레노이드도 위 사진의 아래쪽에 있는 솔레노이드에 케이스를 씌운 형태입니다

 

 < 다중 전원 공급기 >

이번 실습에서 5V전원을 많이 사용하기 때문에 USB 다중 전원공급기를 만들어 보았습니다
실습에 반드시 필요한 것은 아니기 때문에 참고용으로 봐주세요.

접지선이 있고 두께가 비교적 굵은(16A) 전원 케이블을 잘라 연결해 주었습니다. 

 규격은 전원코드에 표시되어 있으니 확인해 보고 비교적 여유 있는 전원코드를 사용하면 좋습니다.

아래 노란 원으로 표시된 부분을 연결할 때는 선을 잡아당겼을 때 쉽게 풀리지 않도록 단단히 고정해야 하며 합선되지 않도록 주의해야 합니다 그리고 감전될 수 있기 때문에 보호 케이스를 씌어 주거나 추가 조치를 해주는 것이 좋습니다. 

 

파워는 소형의 5V-5A 출력의 파워를 사용했습니다.  나노보드 4개 및 릴레이전원 공급 등 이 실습에는 충분히 사용하고도 남는 용량입니다. 

Nano 보드를 한 번에 많이 연결하기 위해 USB A-Femail 타입의 커넥터를 연결된 상태로 사용했고요.

커넥터에는 데이터 연결은 필요 없으니 양 끝에 있는 +단자와 -단자만 서로 연결해 주면 됩니다

그리고 바닥면이 합선이 되지 않도록 캡톤(내열) 테이프로 감싸주었습니다

추가로 스위치를 달아 개별로 켜고 끌 수 있도록 하였습니다 

그럼, 버튼회로와 릴레이 회로를 준비해 연결해 보세요.

릴레이에 5V를 공급하기 위해 마이크로 USB 케이블 커넥터를 연결해 보았습니다

※ 항상 + , - 극성에 주의해서 연결해 주세요. (보드 및 부품 손상 방지)

이 실습에서 솔레노이드용 전원으로 9V 건전지가 사용하기 제일 간편하지만, 용량도 적고 출력 전류가 낮은 타입이어서 실물 제작에 적용하기에는 적합하지 않으니 참고하세요.

그리고 동작을 시켜보면,  잘 작동하는 것을 알 수 있습니다.   그럼, 다른 전원도 테스트해 볼게요 현재 솔레노이드가 12V 용이지만 작동되는 힘은 약해도 9V건전지와 7.2V 리튬배터리도 역시 잘 작동하는 것을 볼 수 있습니다.

그럼, 1편에서 사용했던 LED회로와 서보회로를 모두 연결해 볼게요.  아래는 개별로 스위치를 켜고 끄면서 작동을 원하는 장치끼리 페어링 하여 제어해 본 것이고요,  이렇게 하기 위해서는 버튼(중앙장치) 회로의 코드에 있는 SetLocalName="    " 이름을 연결하려고 하는 각각의 이름,  예를 들어 "LED" , "SERVO" ,  "RELAY" 등으로 수정하여 매번 업로드해주어야 페어링 됩니다. 

그리고 여기서부터는 번갈아 가며 3가지 주변회로에 페어링 될 수 있도록코드 속의 LocalName을 “MULTI”로 통일하였으니 참고하세요.  즉 모든 코드의 SetLocalName="MULTI"로 통일하였습니다.  그렇지 않으면 번갈아가며 페어링 하기 위해서는 매번 중앙장치의 코드의 SetLocalName을 바꾸어 업로드해야 하기 때문이죠.

우선 버튼 회로부터 전원을 ON 합니다.  다음, LED 회로를 ON 하고 버튼을 눌러보면 빠르게 페어링 되어 LED가 제어되는 것을 볼 수 있고,  그다음, LED회로는 OFF 하고 서보회로를 ON 하여 페어링 시켜보면 릴레이 회로도 페어링 되어 잘 작동하는 것을 볼 수 있습니다. 
 학습용으로 활용할 수 있도록 네 가지 회로를 아크릴판에 올려봤습니다. 

스위치를 개별로 작동시켜 원하는 장치 간 페어링을 시켜 작동시킬 수도 있고, 
전원을 모두 ON 하고 랜덤으로 페어링 하여 작동시켜 볼 수도 있습니다.   그래서 
기존 페어링을 끊으려고 하려면,  보드에 있는 리셋 버튼을 눌러주면 됩니다.  해당 보드가 리셋되는 사이 랜덤으로 주변에 있는 다른 보드와 다시 페어링 됩니다. 

다음 3편에서는 앱인벤터를 활용하여 (BLE방식으로) 스마트폰으로 작동시켜 볼게요. 

감사합니다.

아래 유튜브 영상도 함께 참고하면 보다 수월하게 내용을 파악하실 수 있습니다. (아래 영상 클릭)

 

 

 

 

 

 

 

 

 

반응형
반응형

VScode에서 C & C++ 코드 실행 시 한글 깨지는 현상을 해결하는 방법에 대한 기본적인 VScode 설정은 아래를 먼저 참고해 보세요.    그리고  그 방법 이 외에 코드를 작성할 때 방지하는 코드 라인을 작성하는 방법에 대해 소개하려 해요. 

 

#include <windows.h>
 
#pragma execution_character_set("utf-8")
 
    SetConsoleOutputCP(65001);

위,  3개의 라인을 추가하면 되는데요,  아래 예시 코드를 참고해 보세요.

#include <iostream>
#include <windows.h>
using namespace std;
 
#pragma execution_character_set("utf-8")
 
int main(){
    SetConsoleOutputCP(65001);
    int a;
    int b;
    int c;
 
    cin >> a;
    cin >> b;
 
    cout << "입력 a: " << a << endl;
    cout << "입력 b: " << b << endl;
    cout << "결과 c: " << a+b << endl;
    return 0;
}

그리고 결과를 실행해 보면,  아래처럼 한글 깨짐 없이 잘 출력되는 것을 볼 수 있습니다. 

 

반응형
반응형

3회에 걸쳐 Nano33 ioT 보드의 BLE 저전력 블루투스를 사용하는 다양한 방법에 대해 다루고자 합니다.  아두이노 나노33 보드시리즈는 콤팩트하면서 사용법이 아두이노 우노(나노)와 유사하여 쉽게 접근가능하고 여기에 더해 WiFi기능과 저전력 블루투스 기능을 활용할 수 있는 매우 장점이 큰 보드입니다. 다만 유사한 기능을 제공하는 ESP32 보드에 비해 단가가 조금 나가는 단점이 있지만 아두이노 정품 보드의 정통성?을 이어받아 안정적이고 불량률이 거의 없다는 점이 장점인 보드입니다.  기본적인 스펙과 사용법은 아래, 이전 게시글을 참고하시면 상세하게 파악할 수 있으니 참고해 보세요.

【 Nano33 IoT 선수학습 】

1. 【 아두이노Nano33#1】 NANO 33 IoT 처음사용 설명서

2. 【 아두이노Nano33#1-2】 NANO 33 IoT 처음사용 설명서 #1-2 (LSM6DS3 센서 테스트) (자이로센서 등등)

3. 【 아두이노Nano33#2】 NANO 33 IoT 처음사용 설명서 2편 WiFi 활용하기

 

【 학습 목표 】

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하기
      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)
      ② Nano33 BLE  스캔과 페어링
      ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기
      ④ 서보모터 스위치로 제어하기

<2 편> 블루투스로 도어(Door 문)  잠금장치(솔레노이드) 열고 닫기
      ① 주요 부품 소개 ( 솔레노이드 / 솔레노이드 잠금걸쇠 / 릴레이 )
      ② 도어 미니어처 제작 (3D 모델링과 3D 프린팅)
      ③ 블루투스(BLE)로 도어 열고 닫기

<3 편> 앱 인벤터(App Inventor) 만들고 스마트폰으로 도어 열고 닫기
      ① nRF Connect 앱 활용해 보기 (LED 기본 제어)
      ② 블루투스 스캔 및 연결과 같은 기본 앱 기능 만들고 LED 제어해 보기
      ③ 앱 안정성 높이고 연결하려는 BLE장치 바로 연결시키기
      ④ LED 제어와 Door 제어 결합된 앱 만들기

 

< Nano33 ioT 스펙과 기본 정보 >

Nano33 보드 시리즈 스펙 정보

 

Nano33 시리즈 핀 배열

 

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하고 서보모터까지 하기


      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)

   - UUID란 ? 
  UUID는 Universally Unique Identifier의 약자이며 범용의 고유 식별자를 의미합니다.  네트워크 상에서 고유성이 보장되는  id를 만들기 위한 표준 규약으로서, 서로 모르는 많은 개체들을 식별하고 구별하기 위해서는 거의 중복되지 않는 각각의 고유한 이름이 필요한데요, 이를 구현하기 위해 128비트(16바이트) 길이의 값을 사용합니다. 
128비트의 길이는 2진으로 표현하면 대략 아래 예시와 같습니다.

1110110100 0101001001 0101010010 1010101011 1110101001 1010101010 1110101010 1010101001 0101010101 0101010101 1010010011 1110101110 01110101

128비트는 경우의 수(가지 수)가 2의 128승 이므로,  이를 굳이 계산해보면, 340,282,366,920,938,463,463,374,607,431,768,211,456  라는 어마 어마한 가지 수가 나오기 때문에, 실제적으로 겹치지 않는 ID를 가질 수 있다고 할 수 있습니다.  더군다나,  범위가 제한적인 WiFi 혹은 BLE 블루투스 네트워크에서는 현실적으로 겹칠 수 없는 고유 ID를 가질 수 있다고 할 수 있습니다. 
( 비트 단위의 가지 수 이해를 돕기 위해, 또 다른 예시를 들자면,  인터넷 IP부족으로 인해 32비트의 IPv4를 대신하여 128비트의 주소 길이를 가진 IPv6가 나왔습니다. 
 ○ IPv4는   8비트씩 4부분으로 10진수로 표시 →   220.123.103.253  (약 43억 개)
 ○ IPv6는 16비트씩 8부분으로 16진수로 표시 →   2201:0123:1adc:ffff:253d:a3d2:bc34:67da  (43억X43억X43억X43억 개)
  따라서 IPv6의 주소 범위는 0000:0000:0000:0000:0000:0000:0000:0000에서 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff  이기 때문에 거의 무한대의 주소 개수를 사용할 수 있다고 할 수 있습니다) 

 그럼, 다시 UUID로 넘어와서,  그런데, 128비트나 되는 수를 2진수로 표현하면 너무 많은 자리 수를 차지하기에 이를 16진수로 표현하게 되는데요,  4비트가 각각 16진 한 자리를 차지하므로,  자리수로는 32자리가 되고 아래처럼 4개의 '-' 구분자를 넣어 표시하게 됩니다.  

19B10000-E8F2-537E-4F6C-D104768A1214    (8자리 - 4자리 - 4자리 - 4자리 - 12자리) 
'-' 구분자까지 포함하면 전체 자리 수는 36자리로 표현됩니다.

사실 UUID는 저전력 블루투스인 BLE 뿐 아니라, 데이터베이스, 시스템 인스턴스, JAVA5와 같은 코드에서 고유 식별자를 생성하기 위해 두루두루 사용되고 있습니다.  

UUID의 코드 구성은 아래와 같습니다. 

이미지 출처 :&nbsp;https://www.techtarget.com/searchapparchitecture/definition/UUID-Universal-Unique-Identifier

 UUID는 이런 규칙에 의해서 생성되기 때문에 동일한 UUID가 생성되어 충돌이 일어날 확률은 거의 0에 가깝다고 할 수 있습니다.   
 또한 UUID는 이런 규칙으로 생성시킬 수 있는 생성기(Generator)가 있으며,  대표적으로 아래 두 가지 사이트에서 제공되는 것을 많이 이용합니다. 
1.  온라인 UUID 제너레이터 :   https://www.uuidgenerator.net/  
2.  온라인 UUID 툴 : https://www.uuidtools.com/

위 사이트를 보면, UUID는 생성 방법에 따라 버전 1에서부터 버전 5까지 있는데요, 버전 1 또는 버전 4를 대표적으로 많이 사용합니다.  그래서 위 1 버전 또는 4 버전 둘 중 하나를 골라 생성 후 복사(copy)하여 사용하면 됩니다. 

<BLE 란?>
그럼 여기서 BLE에 대해 간략히 설명하자면,  BLE는  Bluetooth Low Energy의 약자로 기존 블루투스 통신의 약점인 소비전력을 크게 낮춘 블루투스 통신 방식이라 할 수 있습니다.  (Bluetooth LE로 표시하기도 함)
스마트워치나, 헬스케어 디바이스, 스마트폰과 연동되는 이어폰 및 다양한 기기 등, 배터리를 사용해야 하는 무선기기 간 통신이 늘어남에 따라 배터리 소모를 줄여줄 수 있는 기존 블루투스(Bluetooth Classic)를 개량한 통신형태가 필요했고 이에 나타난 것이 BLE 통신이라고 할 수 있습니다.  이런 과정에서 통신하고자 하는 기기간 식별을 위해 범용고유 ID식별 기술인 UUID 방식을 사용하고 있습니다. 

BLE 통신이 기존 블루투스 클래식(Bluetooth Class)에 비해 저전력인 이유는 기존 연결 방식은 연속적인 데이터 스트림으로 인해 지속적으로 전력을 소모하게 되는 반면에,   BLE는 동작 주기(duty cycle)가 수 밀리초(ms)로 가벼운 구동 방식을 취하며, 사용되지 않는 대부분 시간을 슬립 모드(sleep mode, 또는 절전모드)로 있어 전력 소모가 매우 적은 가장 큰 차이점이 있습니다. 
 그리고 2MHz의 대역폭을 사용하고 1Mbps의 전송 속도를 지원하지만 동작 주기가 짧아 평균 전송 속도를 낮출 수 있어  전력 효율을 향상할 수 있고 장치에 따라 배터리 교환 없이 1년 이상을 사용할 수도 있습니다.  따라서 저전력 블루투스 기술을 활용하면 전력소비를 크게 줄일 수 있는 통신 디바이스 또는 시스템을 구성할 수 있습니다.

기존 블루투스 클래식의 연결방식은 Master와 Slave의 방식으로 연결이 되는데요, Master가 Master 주변으로 주변에 있던 Salve에게 요청 신호를 넣고 슬레이브가 그에 응답한 뒤 페어링이 이루어지는 연결방식을 사용하고 있습니다. 

BLE 통신에서는 Central이라고 하는 Observer 역할의 중앙장치와 Peripheral이라고 하는 주변장치로 구분하여 통신하는데요, 
주변장치(Peripheral)가 주변에 일정간격으로 Advertise(일종의 라디오처럼 브로드캐스팅)하고 Central(옵저버-observer)이 스캔을 하여 페어링을 하게 되는 구조를 갖고 있습니다.  

이미지 출처 : Microchip
이미지 출처 : Microchip
이미지 출처 : Microchip

정리하자면, 
주변장치인 Advertiser (Broadcaster)는 Advertising Packet을 자신 주변으로 주기적으로 보내는 장치이며,
중앙장치인 Observer는  Advertiser가 보내고 있는 Advertising Packet을 듣기 위해 주기적으로 Scanning 하게 됩니다. 
그러다 연결하고자 하는 프로파일(Profile-서비스 묶음) 정보가 일치하게 되면 연결신호를 주고받고 승낙되면서 페어링 하게 됩니다.   이 과정에서 서비스 이름 및 특성(CHARACTERISTIC)과 UUID가 일치하는지 확인하게 됩니다. 

이미지 출처 : Random nerd tutorials lab


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

【 실습 준비 】

이번 실습을 위해 필요한 준비물입니다. 아래와 같은 재료를 준비하면 실습을 진행할 수 있습니다.

- Nano33 ioT 보드 X 2개 이상
- 브레드 보드(400핀 또는 840핀) X 2개 이상
- LED X 1개
- 저항 220옴(150Ω~470Ω 가능)  X 1개
- 저항 10K옴(4.7KΩ~10KΩ 가능)  X 1개
- 푸시 버튼(종류 모양 상관없음) X 1개 
- 서보모터(SG90 또는 MG90) X 1개
- 점퍼선(연결선) 또는 PCB헤더 3핀 이상 X 한 묶음

 

  ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)

그럼, 이제 Arduino nano 33 ioT 모듈과 BLE를 사용기 위한 기본적인 환경설정을 해볼게요. 

우선, 아두이노 IDE에서 nano33 ioT 보드를 인식하기 위해서는 보드 관련 라이브러리를 설치해야 하는데요, 아래처럼 "보드라이브러리"에서(그냥 라이브러리 관리자가 아님에 주의!)  "nano 33"으로 검색한 후 아래 분홍색 점선 박스의 보드 라이브러리를 설치해 주세요. ( 좀 더 상세한 사용법은 이 글 맨 위에 있는 "[선수학습] Nano 33 ioT 처음사용설명서" 게시글 링크를 참고해 주세요)

 

설치 후에는 아래처럼, 새로운 보드 그룹이 생겨나며 Arduino NANO 33 IoT를 선택할 수 있습니다. 

다음, BLE 기능을 사용하기 위해서는 "라이브러리 관리자"에서 "arduinoble" 라이브러리를 설치해야 합니다.

 

      ② Nano33 BLE  스캔과 페어링

arduinoble 라이브러리를 설치하게 되면, 관련 예제 파일들이 설치되는데요,  예제 파일에는 BLE 라이브러리를 사용해서  블루투스를 활용할 수 있는 내용으로 구성되어 있어 이를 응용해 볼 수 있습니다. 

스캔파일의 내용은 아래와 같습니다

#include <ArduinoBLE.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");

    while (1);
  }

  Serial.println("Bluetooth® Low Energy Central scan");

  // start scanning for peripheral
  BLE.scan();
}

void loop() {
  // check if a peripheral has been discovered
  BLEDevice peripheral = BLE.available();

  if (peripheral) {
    // discovered a peripheral
    Serial.println("Discovered a peripheral");
    Serial.println("-----------------------");

    // print address
    Serial.print("Address: ");
    Serial.println(peripheral.address());

    // print the local name, if present
    if (peripheral.hasLocalName()) {
      Serial.print("Local Name: ");
      Serial.println(peripheral.localName());
    }

    // print the advertised service UUIDs, if present
    if (peripheral.hasAdvertisedServiceUuid()) {
      Serial.print("Service UUIDs: ");
      for (int i = 0; i < peripheral.advertisedServiceUuidCount(); i++) {
        Serial.print(peripheral.advertisedServiceUuid(i));
        Serial.print(" ");
      }
      Serial.println();
    }

    // print the RSSI
    Serial.print("RSSI: ");
    Serial.println(peripheral.rssi());

    Serial.println();
  }
}

Scan 파일은 아두이노 IDE의 예제 항목에 있지만, 필요한 경우 아래를 다운로드하여 압축을 풀고 사용해 보세요.

Scan.zip
0.00MB

특별한 회로 조립 없이 나노 33 보드만 PC와 연결하여 , 코드를 업로드하고 시리얼모니터 창을 열어보면, Nano33 보드 주변으로 블루투스 신호가 잡히는 것을 볼 수 있습니다. 

신호 중에는 일반 블루투스(클래식) 장치도 있고, UUID 서비스 이름과 UUID 고유번호가 보이는 BLE 장치도 검색된 것을 알 수 있습니다. 

 

 

    ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기

< 1. LED 회로(주변장치-Peripheral) >

아래 연결도를 참고하여 주변장치(Peripheral)로 사용될 LED 회로를 준비해 주세요. 

[ 코드 - LED 회로 ]

./*  [ LED Peripheral (LED 회로)]  Server */

#include <ArduinoBLE.h>

BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy LED Service

// Bluetooth® Low Energy LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = LED_BUILTIN; // pin to use for the LED

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요 
  while (!Serial);    

  // set LED pin to output mode
  pinMode(ledPin, OUTPUT);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");

    while (1);     // BLE 서비스가 시작될 때까지 무한 루프
  }

  // set advertised local name and service UUID:
  BLE.setLocalName("LED");
  BLE.setAdvertisedService(ledService);

  // add the characteristic to the service
  ledService.addCharacteristic(switchCharacteristic);

  // add service
  BLE.addService(ledService);

  // set the initial value for the characeristic:
  switchCharacteristic.writeValue(0);

  // start advertising
  BLE.advertise();

  Serial.println("BLE LED Peripheral");
}

void loop() {
  // listen for Bluetooth® Low Energy peripherals to connect:
  BLEDevice central = BLE.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) {
      // if the remote device wrote to the characteristic,
      // use the value to control the LED:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("LED on");
          digitalWrite(ledPin, HIGH);         // will turn the LED on
        } else {                              // a 0 value
          Serial.println(F("LED off"));
          digitalWrite(ledPin, LOW);          // will turn the LED off
        }
      }
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

(LED회로 코드 다운로드하기)

LED_Prep_ok.zip
0.00MB

 

< 2. 스위치(S/W) 회로 (중앙장치-Central) >

아래 연결도를 참고하여 중앙장치(Central)로 사용될 버튼 회로를 준비해 주세요. 

[ 코드 - 스위치(S/W) 회로 ]

/*  LED Control Central (버튼이 있는 회로) Client */

#include <ArduinoBLE.h>

// variables for button
const int buttonPin = 2;
int oldButtonState = LOW;

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요 
  while (!Serial);    

  // configure the button pin as input
  pinMode(buttonPin, INPUT);

  // initialize the Bluetooth® Low Energy hardware
  BLE.begin();

  Serial.println("Bluetooth® Low Energy Central - LED control");

  // start scanning for peripherals
  BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}

void loop() {
  // check if a peripheral has been discovered
  BLEDevice peripheral = BLE.available();

  if (peripheral) {
    // discovered a peripheral, print out address, local name, and advertised service
    Serial.print("Found ");
    Serial.print(peripheral.address());
    Serial.print(" '");
    Serial.print(peripheral.localName());
    Serial.print("' ");
    Serial.print(peripheral.advertisedServiceUuid());
    Serial.println();

    if (peripheral.localName() != "LED") {
      return;
    }

    // stop scanning
    BLE.stopScan();

    controlLed(peripheral);

    // peripheral disconnected, start scanning again
    BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
  }
}

void controlLed(BLEDevice peripheral) {
  // connect to the peripheral
  Serial.println("Connecting ...");

  if (peripheral.connect()) {
    Serial.println("Connected");
  } else {
    Serial.println("Failed to connect!");
    return;
  }

  // discover peripheral attributes
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("Attributes discovered");
  } else {
    Serial.println("Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }

  // retrieve the LED characteristic
  BLECharacteristic ledCharacteristic = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");

  if (!ledCharacteristic) {
    Serial.println("Peripheral does not have LED characteristic!");
    peripheral.disconnect();
    return;
  } else if (!ledCharacteristic.canWrite()) {
    Serial.println("Peripheral does not have a writable LED characteristic!");
    peripheral.disconnect();
    return;
  }

  while (peripheral.connected()) {
    // while the peripheral is connected

    // read the button pin
    int buttonState = digitalRead(buttonPin);

    if (oldButtonState != buttonState) {
      // button changed
      oldButtonState = buttonState;

      if (buttonState) {
        Serial.println("button pressed");

        // button is pressed, write 0x01 to turn the LED on
        ledCharacteristic.writeValue((byte)0x01);
      } else {
        Serial.println("button released");

        // button is released, write 0x00 to turn the LED off
        ledCharacteristic.writeValue((byte)0x00);
      }
    }
  }

  Serial.println("Peripheral disconnected");
}

(스위치 회로 코드 다운로드하기)

LedControl_Cent.zip
0.00MB

 

 아래는 두 회로를 실제로 조립한 모습입니다.

나노33 BLE 주변장치회로(LED)와 중앙장치회로(스위치)

 

작업의 편의상 하나의 PC에 두 대의 아두이노를 연결하여 작업할 텐데요.

장치관리자를 열어서 연결된 포트를 확인하면 편합니다. (포트 번호는 PC에 따라 Nano33 보드에 따라 기본적으로 랜덤으로 할당됩니다.  다만 인식한 포트 번호에 마우스 우클릭 후 고급탭으로 들어가서 아래처럼 번호를 변경해 줄 수도 있습니다. )

아두이노 보드 연결 포트 번호 변경하는 방법

 

그리고, 하나의 PC에 아두이노 두 대를 연결해서 시리얼 모니터 통신을 하려면, 아두이노 IDE 상에서 nano33 보드가 각각 포트를 다르게 인식하도록 해야 하는데요,  만약, 코드 하나를 열고서 그 IDE에서 예제를 클릭하거나 열기로 불러오게 되면
  두 개의 아두이노가 같은 포트로 인식되어 시리얼 모니터를 이용한 통신이 안 됩니다.

우선 첫 번째 예제로 Central 항목에 있는 “LedControl” 파일을 열어주세요. 
앞서 설명한 대로 두 번째 예제 파일은 Arduino IDE 프로그램을 새로 실행시켜서 열어주세요.
두 번째 파일은 새로 실행된 IDE의 예제에서 Peripheral 항목에 있는 “LED” 파일을 열어주세요.

이때 각각의 nano33이 인식되는 포트가 다르게 어디로 할당되는지 확인해 주세요.

현재 LedControl 코드는 버튼 회로에 업로드해야 하기에 버튼이 있는 나노의 포트로 선택하세요.
마찬가지로 LED 코드는 LED가 연결된 회로에 업로드하기 위해 LED가 있는 나노를 선택하세요.
그리고 각각 코드를 업로드해줍니다.


두 개의 나노보드의 포트를 하나의 PC에서 각각 다르게 인식시키는 확실한 방법은,  해당 아두이노 코드를 각각 저장하고, 각각의 코드를 직접 더블 클릭해서 열면 됩니다. 

일단, 코드를 업로드해보세요,  그리고 바로 버튼을 눌러보세요.   그럼,  동작이 안 될 거예요.  
그리고 ' LedControl' 코드와 'LED'코드의 IDE에서 시리얼모니터를 각각 열어보세요. 그럼, 서로 페어링 되는 내용이 표시되고,  그런 다음 동작시켜 보면 아래처럼 동작이 잘 될 거예요.

 

여기서 다시, 시리얼(모니터) 통신 없이 전원을 연결하여 테스트해보면, 페이링이 되지 않고 동작도 되지 않을 거예요.
 
 그 이유는 LedControl 코드와 LED 코드에 기본적으로 아두이노 IDE의 시리얼 모니터가 열려야 동작되도록 하는 코드가 들어 있어 그렇습니다. 
아래 이미지에 보면,  while ( !Serial );  이라는 코드로 인해, 시리얼 모니터가 열리지 않을 경우 그다음라인으로 넘어가지 않도록 되어 있기 때문인데요,   이 부분을 주석처리하게 되면,   나노 33 보드들에 전원을 연결만 하게 되면 바로 페어링 되어 동작이 가능한 상태가 됩니다. 

주석처리 →    //  while ( !Serial );


이후 코드를 재업로드하고 테스트해 보면, 두 장치 모두 PC연결 없어도 페어링과 동작이 잘 됩니다. 

 

 ④ 서보모터 스위치로 제어하기

그럼 이제 두 번째 실습으로 버튼으로 서보모터를 구동시켜 보도록 하겠습니다.

아래 보이는 연결도를 참고하여 두 번째 회로를 준비해 주세요. 

[ 코드 - 서보모터 Peripheral 회로용 코드 ]

/*  Servo Peripheral (서보 회로)  Server */

#include <ArduinoBLE.h>
#include <Servo.h>    // 서보 라이브러리를 지정
#define servoPin 3    // 서보 모터핀을 지정
Servo myservo;          // 서보 라이브러리 객체를 선언
int pos=0;            // 현재 각도를 저장할 변수를 지정한다

BLEService myservoService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy Servo Service

// Bluetooth® Low Energy LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

// const int ledPin = LED_BUILTIN; // pin to use for the LED

void setup() {
  Serial.begin(9600);
//  while (!Serial);    
  
  myservo.attach(servoPin);   // 서보모터 핀을 설정한다
//  pinMode(ledPin, OUTPUT);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");
    while (1);     // BLE 서비스가 시작될 때까지 무한 루프
  }

  // set advertised local name and service UUID:
  BLE.setLocalName("SERVO");
  BLE.setAdvertisedService(myservoService);

  // add the characteristic to the service
  myservoService.addCharacteristic(switchCharacteristic);

  // add service
  BLE.addService(myservoService);

  // set the initial value for the characeristic:
  switchCharacteristic.writeValue(0);

  // start advertising
  BLE.advertise();

  Serial.println("BLE Servo Peripheral");
}

void loop() {
  // listen for Bluetooth® Low Energy peripherals to connect:
  BLEDevice central = BLE.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) { 
      // if the remote device wrote to the characteristic,
      // use the value to control the LED:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("Servo turn on");
              myservo.write(180);   // 서보모터의 각도를 변경한다              
              delay(500); // 서보 모터의 각도가 변하는 것을 기다려 준다. 

              myservo.write(0);   // 서보모터의 각도를 변경한다              
              delay(500); // 서보 모터의 각도가 변하는 것을 기다려 준다.                  
        }
      }
          Serial.println(F("Servo turn off"));
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

( 서보모터 회로용(Peripheral) 코드 다운로드 하기)

Servo_Prep.zip
0.00MB

 

이번 실습의 서보모터용 코드는 아두이노 코드는 ArduinoBLE 라이브러리를 사용한 예제 파일들을 베이스로 해서 서보모터 제어에 필요한 부분만 추가해 넣어주면 됩니다.   그리고 다른 부품이나 모듈을 사용한 응용실습을 하려 할 때도 이렇게 기존 예제 파일을 수정해서 작성하면 됩니다.

여기서,  버튼 회로는 실습 1과 동일한 Central 항목에 있는 “LedControl” 파일을 그대로 사용합니다. 
두 번째 서보회로 파일은 Peripheral 항목에 있는 “LED” 파일에서 서보모터 구동을 위한 코드를 추가해 주면 서보모터를 쉽게 제어할 수 있습니다. 

 

서보모터 사용에 대한 관련 자료는 아래 링크를 참고해 보세요.

【 아두이노 기초 】 #23 서보 모터 제어 1

【 아두이노 기초 】 #28 서보(Servo) 모터 제어 하기 1

【 아두이노 기초 】 #29 서보(Servo) 모터 제어 하기 2

【 아두이노 기초 】 #30 서보(Servo) 모터 제어 하기 응용

 

서보모터(SG90/MG90 모델)는 동작 전압이 4.8~6V인데,  보통 5V 정도를 별도로 공급해 주는 것이 좋습니다. 
영상에서는 임시로 나노보드의 3.3V 출력 단자로 연결하여 테스트해 본 것인데요. 
만약 모터에 부하가 가해질 경우 나노보드가 손상될 수 있으니 꼭 별도의 전원으로 동작시켜주세요. 
그리고,  실습이 아니라 실제 응용을 하고자 한다면, SG90보다 안정성이 좀 더 좋은 MG90 서보를 사용하는 것을 권해드리고,  동작 토크가 더 필요하다면 MG996R과 같은 하이토크 모델급 이상을 사용하는 것이 좋을 거예요.   또한 작동 범위(각도)도  90도, 180도 360도 등 다양하게 있으니 사용 목적에 맞는 서보모터를 선택하면 됩니다. 

그리고 서보모터를 브레드보드에 연결하기 위해서는 이런 PCB헤더라고 하는 핀을 사용하거나, 가지고 있는 점퍼케이블로 양쪽을 연결해 주면 됩니다.  
그럼 통신포트를 확인하고 서보모터 회로에 코드를 업로드해 주세요.  
이제 버튼을 눌러보면 잘 동작하는 것을 볼 수 있습니다. 

블루투스(BLE) 무선으로 서보모터 제어하기

그럼 이제 아래처럼, PC 연결을 제외하고 외부 전원 연결로 동작이 잘 되는지 테스트해 보세요. 

그럼 여기서 서보모터에 별도의 전원을 연결해 볼게요

이때 그라운드(GND)는 모두 동일하게 묶어주어야 합니다. 

그럼 아주 활기 있게 움직이며, 이 때는 서보모터에 부하가 어느 정도 걸려도 잘 동작될 거예요.

 

그리고 아래 이미지처럼, 무선 전원으로 9V 배터리를 연결해서도 동작이 잘 되는 것을 볼 수 있습니다. 

실습 #1 BLE로 LED와 서보모터 제어는 여기까지고요, 
다음 #2편 영상에서는 도어록 솔레노이드를 블루투스(BLE)로 제어해 보겠습니다. 

마지막으로 아래 실습 강의 영상과 함께 학습하시면 내용이해에 도움이 될 것으로 생각됩니다. 
감사합니다.  
https://youtu.be/eePGckOYSZs

 

반응형
반응형

리눅스에서 사용하는 확장자가 .deb 파일은  윈도에서의 실행파일인 .exe나 .msi의 install 파일과 같은 역할을 합니다. 조금 더 정확하게는 프로그램을 설치할 수 있는 패키지 파일이며 더블 클릭해 보면 어떤 패키지로 구성되어 있는지, 확인할 수 있습니다.   아래, 예를 들어 우분투에서 크롬 브라우저를 설치하기 위해 아래와 같은 파일을 다운로드하였고, 이를 더블 클릭해 보면 패키지 내용을 확인할 수 있습니다. 

위의 패키지(설치) 파일을 더블클릭하면 아래처럼 패키지 내용을 볼 수 있습니다.

 

  확장자가 .deb 인 패키지(꾸러미) 파일은 데비안 파일과 관련 있으며,  예시로 리눅스용 크롬 브라우저를 설치해 볼게요,  .deb 패키지 파일을 설치하는 명령어는 아래와 같습니다.

deb 파일

dpkg -i "패키지이름.deb"


설치한 패키지 제거는 -r 옵션을 붙여서 제거할 수 있습니다.

dpkg -r "패키지이름.deb"

 

아래, 크롬 브라우저 패키지(.deb) 파일 설치를 dpkg -i 명령어와 옵션을 사용하여 설치해 보았습니다.

위와 같이 설치가 진행되면 아래처럼 크롬 브라우저 아이콘을 볼 수 있습니다. 

 

감사합니다.

반응형