2018년 11월 24일 토요일

모터와 엔코더, 간략한 개념

모터와 엔코더, 간략한 개념

모터란 무엇인가?

크게 DC와 BLDC가 있다. 가장 큰 차이점은 브러쉬의 유무이다. 브러쉬는 정류자에 전류를 공급하는 장치로, 모터가 회전함에 있어 마찰이 생겨 모터 효율을 낮추는 단점이 있다.
따라서 브러쉬를 없앤 것이 BLDC이며 3상의 코일로 전자기력을 형성하여 회전하는 것이 BLDC의 특징이다. 또한, 각 코일은 홀센서로 자석의 위치를 알게 되고 이에 따라 코일의 전류가 공급되어 회전하는 것이 특징이다.

엔코더란 무엇인가?

크게 인크리멘탈과 앱솔루트 방식으로 측정이 된다.

인크리멘탈은 엔코더 슬릿이 회전함에 따라 광입자 측정을 a,b상 펄스로 만들어 내어 위치와 속도를 측정합니다. 일정한 방향으로 도는 DC모터에 자주 사용한다.

장점:회전량 제한이 없다. 단점: 절대위치 측정x, 전원이 꺼지면 초기위치 다시 검출

앱솔루트 경우, 각 지점의 절대값을 설정하여 측정 되는 해당 위치에서의 값을 전달하는 방식으로 1바퀴 이상 돌아가지 않는 특정 각도로 미세하게 움직이는 서보모터에 적합한 방식이다. 엔코더 슬릿을 통해 3개의 검출소자가 측정되며 이를 통해 특정위치를 확인한다. 회전수의 경우 구동측에 감속기어를 추가하여 횟수 측정한다.

장점: 전원 상태 무관, 절대 위치 유지. 단점 : 회전량 제한

엔코더 계산

1번 회전당 2000펄스(슬릿구멍 개수) 발생되는 것이 있다. 모터가 3000rpm으로 회전시, 분당 30002000 개의 펄스 발생한다.(어떤 위치를 기준으로 슬릿 구멍이 총 30002000 개 지나간다고 생각하면 된다) RPM 단위는 min 이기 때문에 초당으로 단위 환산할 시 나누기 60 > 초당 10만 펄스 발생하고, 100khz 로 표현하기도 한다.

한 예로, 서보앰프(모터드라이버 비슷한)가 500us 당 50개를 카운트하는 능력의 서보라면 50/500us = 10만counts(pulse)/s (100kHz)이므로 2000개 슬릿을 가진 엔코더와 3000rpm으로 회전이 가능한 모터를 서보앰프가 감당(데이터 샘플링)할 수 있다는 의미로 해석할 수 있다.

분해능

엔코더에서 전송하는 최소 측정 단계로, 회전당 얼마만큼의 펄스를 출력할 수 있는 가의 정도이다. 슬릿의 갯수로 이해하면 편하다. 위치를 매우 작은 단위까지 측정!

정밀도

지금 이 글을 적는 나 자신도 매우 헷갈리는 분해능과 정밀도의 차이… 두 용어를 혼용하여 쓰는 분도 있고, 다르다고 구분짓는 분도 있다. 필자는 구분짓지만 혼용도 가능하다고 생각한다. 따라서 정답을 잘 모르겠다… (아시는 분은 답변 부탁드립니다!)

정밀도는 쉽게 말해 측정한 위치가 실제 값과 얼마나 가까운 가의 정도이다. 엄밀히 말해 분해능과 차이가 있지만, 정밀도가 분해능과 관련이 있다고 생각할 수 있는 것이 분해능이 좋을 수록 정밀도도 좋아지기 때문이다. 필자는 쉽게 정 위치와 얼마나 가까운지로 이해한다.

모터 드라이버

모터드라이버란 쉽게 말하여 모터를 제어할 수 있는 장치이다. 여기서 단순히 모터에 +, - 연결하면 한 쪽 방향으로만 회전하여 손으로 +,- 입력단자를 바꾸지 않는 이상 회전 변환은 불가능하다. 따라서 모터드라이버가 H-브릿지회로를 사용하여 입력단자를 바꿔주고 이를 통해 회전방향을 제어하게 된다. 또한 모스펫 채널을 통해 펄스수를 제어하여 전압조절로 모터 속도를 제어하게 된다.

H-브릿지 회로란? - 스위치 제어

아래 그림을 볼 때, S1S_1 스위치와 S4S_4 스위치 가 연결 될 때 +는 모터 왼쪽, - 는 오른쪽에 있어 정방향 회전을 한다. 그러나 만약, S3S_3S2S_2 스위치가 닫히면 모터의 +,- 방향이 반대로 되어, 회전이 역방향으로 변함을 알 수 있다. 이러한 스위치 전환을 통해 입력단자를 전환할 수 있는 회로를 H-브릿지회로라 한다.





PWM 제어

Pulse Width Modulation의 약자로 펄스 폭을 변화시켜 전압을 조절하고, 이를 통해 모터의 속도를 제어하는 것을 의미한다.

모터 속도 공식은 아래와 같다.

N=k(VIaRa) N = k *\frac { (V- I_aR_a)} {\varnothing}

VV는 전압, IaRaI_aR_a는 역기전력, NN은 분당 회전수, \varnothing는 계자이다.

따라서, 회전속도를 결정짓는 중요한 인자 중 하나는 전압이다. 전압 조절은 PWM 즉, 위에서 언급한 스위치를 모스펫 채널로 특정 주기마다 열고 닫고를 하면 전체 평균 전압이 변하여 전압을 조절할 수 있다. 아래 그림을 통해 이해해보자.



10V전압 인가 시, 스위치를 1초마다 on/off 하면 평균 전압이 5V가 됨을 알 수 있다. > 전체 면적(전압*시간)을 시간으로 나누면 된다. 참고로, 시간은 사이클 단위로 계산해야 한다.

마찬가지로 전압을 2초동안 주고 1초 쉬고를 반복하면 6.66V가 나옴을 알 수 있다.

이렇게 구한, 전압을 공식에 대입하고, 나머지 변수는 주어진다면, 속도를 구할 수 있고 이것이 모터드라이버가 속도를 제어하는 것이라 할 수 있다.

  • 모스펫 채널은 간단하게 스위치를 주기별로 on/off 하는 것으로, 성능이 좋을수록 짧은 주기로 열고 닫을 수 있어 미세한 전압조절이 가능하다.

PID 제어

P 비례 : 오차 값의 크기에 비례한 제어작용, kp 크면 빠르게 셋포인트 도달, 그러나 불안정상태 > 진동

I 적분 : 일정한 상태로 유지되는 오차를 없애는 작용, 누적 오차에 따라 출력을 보고 바꿔야 함

오차가 클 경우 시간이 지남에 따라 오차 합이 쌓이며, 출력은 빠르게 변해 오차 제거.
Ki크면 빠르게 응답, 그러나 파형 상승부도 커짐> 그러나 점점 안정

D 미분 : 출력값의 급격한 변화에 제동을 걸어 오버슛을 줄여 안정성 향상

2018년 9월 15일 토요일

개인 컴퓨터로 웹서버 구축하기

개요


네트워크의 기본 개념을 이해하고, 개인 컴퓨터를 이용하여 웹서버를 구축할 수 있다.

네트워크 개념


네트워크 연결은 ip주소와 포트가 필요하다. IP는 주소이고, 공인과 사설로 나뉜다. 

공인ip와 사설ip

공인ip는 인터넷에서 외부 컴퓨터들끼리 서로통신하기 위해 필요한 공용의 주소이다.
반면, 사설ip는 외부가 아닌 내부에서만 통신할 수 있는 주소라 할 수 있다.
즉, 나의 컴퓨터와 미국에 있는 친구의 컴퓨터 끼리 소통하려면 공인ip가 필요하고, 나의 컴퓨터와 나의 스마트폰 끼리 소통하려면 사설ip가 필요하다.


따라서 외부에서 컴퓨터C가 컴퓨터A와 사설 ip로 통신을 주고 받을 수 없다. 왜냐하면 사설 ip는 내부 통신용 주소이기 때문이다. 외부와 통신할 경우, 공인 ip 주소로 통신을 해야 한다.

요약

결론적으로 같은 공유기로 연결된 디바이스끼리는 사설 ip로 통신이 직접 가능하지만, 
공유기로 연결되지 않은 외부서버와 연결시에는 공인 ip로 공유기를 거쳐 통신한다.
(즉, 자신의 컴퓨터로 네이버를 접속할 때, 공인 ip가 사용되어진다)

포트

포트에 대해 설명하면, 포트는 항구라는 의미로 일종의 '나갔다 들어갔다' 하는 통로이다. 보통 인터넷 웹페이지(HTTP)를 접속할 때는 80번 포트의 통로가 이용되고, FTP(파일전송)시에는 21,20번 포트의 통로가 이용된다.

웹서버 구축하기 (윈10 기준)


1. 제어판 > 프로그램 > 윈도우 기능 켜기/끄기 클릭.

2. 인터넷정보서비스 폴더 더블 클릭 > FTP 서버 및 웹 관리 도구 모두 체크.

3. 설치 완료 후, 제어판 > 관리도구 > 시스템 및 보안 > 관리도구 클릭.

4. IIS관리자 클릭.

5. 좌측 상단에 연결 목록에서 항목 더블 클릭 > 사이트 '오른쪽' 클릭 > 웹사이트추가 클릭.

6. 바인딩 파트에서 포트에 1000이상의 아무 숫자 입력.(기억)

7. 실제경로 ...버튼 클릭 > 웹페이지 전용 폴더 지정.

8. 검색에서 cmd 입력 후 > ipconfig 입력 후 엔터 > 기본게이트웨이 ip 주소 적어놓기.
    (컴퓨터와 공유기가 통신하기 위한 주소)

9. 웹 브라우저를 열고, 게이트웨이 주소 입력 후 암호 입력하여 접속.

10. 방화벽(firewall)을 찾아 포트포워딩 항목 찾기.

포트포워딩: 공유기에 특정 포트로 접속할 시, 컴퓨터(외부)를 웹서버로 연결시켜줌(자신 서버와 통신)과
                  동시에 구축프로그램(자신 서버 내 프로그램)이 사용하는 포트로 연결 성립 시킴.
                  즉, 특정 포트로 들어오는 네트워크 데이터(외부)를 해당 IP 주소(자신)로 연결시켜주는 기능.

11. 서비스 포트에는 기억한 포트 범위 적용 내부ip는 ipv4(사설ip) 적용

12.검색에서 firewall.cpl 검색 > 윈도우defender 방화벽을 통해 앱 또는 기능 허용 클릭

13. branchcache 관련된 항목들 체크. 없으면 무방

14. 고급설정에서도 브랜치캐시 오른쪽 클릭 후 규칙사용 클릭. 

15. 이후 우측상단에 새규칙 클릭 > 포트선택, 특정 로컬포트(웹서버구축프로그램 포트)입력 > 연결허용         > 도,개,공 허용 > 이름 마음대로

2018년 8월 22일 수요일

Blynk 앱을 이용하여 집 밖에서 통신하기-Blynk 앱 설치 및 예제연습

개요


Blynk앱 사용법을 터득하고, nodemcu를 이용, 앱을 통해 led를 제어할 수 있다.
nodemcu에 대한 설명은 nodemcu 를 참조하길 바란다.


Blynk 란?


자신이 만든 제품을 스마트폰을 통해 제어하려면 어플과 서버구축 등이 필요하다. 이를 초보자가 다 만들기에는 시간과 비용이 많이 든다. 이를 해결해 준 어플이 바로 Blynk 앱이다. 심지어 무료이다. (단, 부분유료이다. 일정 할당량을 초과하면 돈을 주고 추가로 구입해야한다.) 즉, iot를 입문자가 실현시킬 수 있는 매우 유용한 어플이다.

Blynk 원리



Blynk 앱 > 아두이노 제어,

앱을 통해 데이터를 보내면, Blynk 서버가 데이터를 받는다. 그러면 서버가 다시 아두이노로 데이터를 보내 아두이노가 이를 받고 정해진 일을 수행하는 형태이다.

아두이노 > Blynk 앱 

물론 반대도 가능하다. 아두이노에서 받은 센서값을 서버가 받고 이를 어플로 보내어 가공된 데이터를 확인하는 형태이다.

시작하기


1. 먼저 https://github.com/blynkkk/blynkkk.github.io/blob/master/SupportedHardware.md
에서 자신이 쓰는 모듈이 블링크앱에서 호환이 되는지 찾아보자. (다 코딩하고 마지막에 지원이 안되서 실패하는 불상사를 막자)

2. https://www.blynk.cc/getting-started/에서 안드로이 또는 ios 버전을 다운받자.

3. 블링크 라이브러리 다운. (설치주소에 같이 있다.) > 모든 파일들을 아두이노의 스케치북 라이브러리 폴더에 붙여넣기 한다. 아두이노 스케치북 폴더는 IDE에서 파일-환경설정에서 스케치북 위치를 확인 할 수 있다.


연습하기 ( 앱을 통해 nodemcu led on/off )


1. 앱 실행 회원 가입 후, 프로젝트를 만든다.

2. 내가 제어하고 싶은 하드웨어(nodemcu)를 선택, Connection은 WiFi 를 선택

3. AUTH TOKEN 에서 E-mail 버튼을 눌러 해당 토큰을 메일로 받는다. 그리고 Create 실행

4. 버튼을 끌어 들이고 클릭, OUTPUT에서 D4 를 디지털 출력핀으로 설정한다.

5. 아두이노 IDE를 실행 > 파일 > 예제 > Blynk > Board_WiFi > nodemcu 스케치 불러오기

6. 스케치에서 char auth[] 부분에 메일에서 받은 토크를 입력하고
                  char ssid[] 부분에서 스마트폰이 연결된 와이파이 이름 입력
                  char pass[] 에 와이파이 비밀번호를 입력한다.

7. 업로드 후, 앱을 통해 nodemcu에서 led가 빛나는 지 확인한다.







2018년 8월 21일 화요일

nodemcu 이용하기 - 아두이노 개발환경 적용하기.

개요


nodemcu에 대해 간략히 이해하고, 이를 바탕으로 드라이버 및 개발환경 설치를 할 수 있다. (세부적인 설명은 LED 제어하기에서 설명하겠다.)

nodemcu 란?



WIFI가 가능한 ESP-8266 기반 보드이다. 즉, 독립적으로 소스를 올려 여러가지 모듈을 WIFI통신을 통해 제어 할 수 있다. nodemcu는 Lua라는 언어기반으로 개발환경이 적용되어 있지만, 사람들이 많이 사용하는 아두이노IDE로 개발이 가능하다.

장점 


   >모듈이 아니다. 보드이다. 즉, 아두이노 등 플랫폼 없이 독립적으로 아두이노 처럼 여러       모듈을 제어할 수 있다. (물론 모듈처럼 아두이노와 시리얼 통신이 가능하다.)

   >ESP8266은 ESP-01 부터 12까지 많다. 하지만 숫자가 낮은 시리즈는 개발하기에 너무
     제한적인 요소가 많고( 전압제어하기, 펌웨어 등), 따로 납땜을 하고 핀을 설치해야 하         기 때문에 불편하다. 이러한 모든 요소들을 해결한 12시리즈가 나오게 되었다.                 nodemcu는 12시리즈 기반이다.

    >가격이 저렴하다. 7천원 정도에 와이파이 환경을 개발할 수 있다. (ESP-01 사지말자..)

    > LUA라는 언어기반이지만 아두이노IDE로 개발이 가능하다.

    > 많은 사람들이 이용하기 때문에 많은 정보를 쉽게 찾을 수 있다.


단점


       모듈이 아니기 때문에, 외부전원이 필요하다. 마이크로 USB케이블로 연결한다.

       Nodemcu 마다 다르지만 일부는 펌웨어 업그레이드가 필요하다.

NODEMCU 사용법


보드 뒷면에도 간략히 적혀 있다. CP2102 드라이버 설치하고, 9600의 통신속도를 이용한다.
NODEMCU는 크게 2가지 칩으로 나뉜다. CP2102 칩과 ch340 칩이 있다. 자기의 칩에 맞게 설치를 해야한다.

C2102 칩 


1. 드라이버 설치하기

https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers#windows 에 접속하면,

위와 같은 페이지가 나온다. 자신의 컴퓨터 운영체제에 맞는 SOFTWARE를 다운받는다.(Release notes 는 설명서 정도이다. 그 옆에 VCP로 끝나는 프로그램을 다운받자. 필자는 윈도우 10이라, 가장 상단에 있는 프로그램을 다운 받았다. 실행하면, x86, x64 버전이 있는데, 자신의 컴퓨터 램이 4gb이상이면 x64, 이하이면 x86을 선택한다. 설치가 끝나면 nodemcu를 연결하여 확인하다. 

1-1. 펌웨어 설치하기(연결이 안되는 분)

플래시 다운하기.
https://github.com/nodemcu/nodemcu-flasher 에서 초록색 버튼을 클릭하여 Download ZIP을 선택하여 다운받는다.

펌웨어 다운하기.
https://github.com/nodemcu/nodemcu-firmware/releases 에서 2.2.0-master_2018~의 파란 글씨가 보이는데, 날짜가 가장 최근의 글에서 Source code (zip) 을 다운받는다.

플래시 프로그램을 설치하고, 실행하여 config 을 클릭, 톱니바퀴 클릭하여 다운받은 펌웨어를 선택한다. 이후 Operation 의 Flash 버튼을 눌러 펌웨어를 보드에 업로드 한다.\

CH340시리즈



1. http://www.wch.cn/product/CH340.html 접속하여 하단에 os 별로 선택한다.

   window 10 같은 경우 ch341ser.exe 를 다운받는다.
 
2. 실행하여 INSTALL 버튼을 누르면 된다. 드라이버 설치가 잘 안되면 프로그램실행전 우

   측 클릭하여 관리자 권한으로 실행하길 바란다.

3. 아두이노 IDE를 실행하고 파일-환경설정을 들어간다.

4. 추가적인 보드 매니저 URLs 에 http://arduino.esp8266.com/stable/package_esp8266com_index.json 입력 후 확인.

5. 툴-보드-보드매니저를 클릭 후 검색에 esp8266을 입력하여 해다 보드를 다운 받는다.

6. 이 후 보드를 nodemcu 1.0 esp-12e를 선택 후 nodemcu 해당 포트를 선택하면 끝이다.













기초 회로의 이해


개요.


 비 전공자의 관점에서 강의를 듣고 강의를 요약한 내용이다. 이를 통해 회로의 기초와
이 회로가 LCD와 OLED에 어떻게 적용되어 있는지 이해할 수 있다.

기초 회로 이론.


     전압 : +에서 저항을 만나 -로 전류가 흐를 떄, 전위는 감소 혹은 '0'이 된다. 그 떄+, -                  사이의 전위 차를 전압이라 한다.
회로란? : 전자소자들을 연결하여 전류를 흐르게 하는 시스템(통로)을 회로란 한다.
            전자소자는 전압과 전류의 관계의 특성이라 말할 수 있다. 즉 전류에 따라 비례하              는 전압의 관계를 갖는 것을 의미한다. 한편 i,v 관계식이 같으면 모양이 달라도                같은 소자라 불린다. 이를 식으로 나타내면 옴의법칙 즉,

v=iR

이다. 달리 말하면 소자의 특성은 저항이라고 말할 수 있다.

  한편, 옴의 법칙은 '전류(원인)의 의해 저항을 만나면, 전압(결과)가 생긴다. 반대로 전압의 의해 저항을 만나 전류가 흐른다.'라고 볼 수 있다.

직렬

여러 저항들이 한 개의 회로에 위치할 떄 이를 직렬이라 불린다. 직렬의 특성은 각 저항마다 같은 전류가 흐른다.

병렬

병렬은 저항들이 여려 회로의 위치할 떄를 의미하고, 특성은 모든 회로의 전압이 동일하다는 것이다. 만약 R1과 R2가 병렬로 연결되어 있을 떄, 1개의 저항으로 모델링 한다면
 그 저항은


이 된다.  만약,

 이면

사라지므로 R2 가 된다. 즉, 큰 저항이 사라진다, 왜냐하면 저항이 너무 커 전류가 거의 안가기 떄문에 저항의 인지를 못하기 떄문이다. 

한편,  
이 된다.

Capacitor


C라고 표시하는데, 전극 사이가 비어 있고, 전압을 걸어 줄 때 이 현상이 나타난다. 
+전극에선 +가 모이게 되고 -전극에선 -가 모이게 되는데 두 전극의 면적 과 거리 만큼 전기력(전극사이의 밀고 당기는 힘)이 형성된다. 이를 전기장이라 한다. 
전하량은 전압에 비례하는데, 비례상수는 C이다.

유도체


유도체는 전극(도체)와 전극(도체)사이는 전류가 안흐르므로 부도체라 하는데, 부도체가 곧 유도체이다. 

C는 면적의 비례하고 거리의 반비례한다.
C=eA/d (e=유전율)
비례상수는 유도체의 유전율이다.

Q=CV 를 시간에 대해 미분

i=dQ/dt (시간당 전하량)

dQ/dt=d(CV)/dt

C는 면적과 거리, 유전율의 관계식인데, 모두 상수 이므로 

                                           dQ/dt=C(dV/dt) 가 된다.

따라서 i=C(dV/dt)이다.

이를 v로 표현하면 idt=Cdv 이므로 양변 적분을 하면

 =v(t)

이 된다. Cap(Capacitor)은 v와 i의 방정식이다. 
   
Cap의 일률(전력)=에너지/시간 의 표현

p=vi=Cv(dv/dt)

p*시간은 총 에너지 이므로 

t에 대해 적분 하면 

이다.

Cap의 직렬은 저항의 병렬과 같은 모델링 수식을 가지고, 반대도 마찬가지이다.
                                                v0(t)
                                                        C
v0(t)의 시간에 따른 전압과 그 식은 어떻게 될까??

v0(0)일 때는, 

Q=CV
  0     0   > V=0

시간이 갈 수록 전하는 채워짐.. 즉 전압이 증가.. 

SO, VS와V0의 전위 차이가 줄어듬.> 전류 낮아짐

전압이 같아 지게 됨...

액정은 Cap이다. ITO는 도체, ITO 사이에 액정이 있으므로 
Cap이다.

시상수

목표값에 몇 퍼센트 도달하는 데 걸린 시간



전류는


C를 양변에 나눠주면,

 t에대해 적분하면


시간 t를 rc라 하면 그 에 따른 목표값의 퍼센테이지를 알 수 있음.

ex) 5RC는 VS의 99%이다./

Cap 쪽으로 얘기하면, 충전을 99%까지 하늗네 5RC가 걸린다는의미이고,
RC의 단위는 s이다. 







                                             

릴레이 제어

0. 개요

릴레이의 개념을 이해하고, 220V로 작동되는 제품을 아두이노로 제어하는 법을 알 수 있다.

1. 릴레이란?

 낮은 전압(즉 아두이노)으로 고전압(220V작동되는 제품)을 ON/OFF 제어할 수 있는
장치이다.
 릴레이의 원리는 솔레노이드 코일을 이용하여 도체를 이동시켜 전류를 ON할지 OFF할 지 결정 짓는 것이다. 여기서 솔레노이드 코일은 전류가 흘려지면 전자석으로 성격이 변한다.
이런 전자석을 이용해 도체를 제어하여 전류를 제어하는 것이다.

2. 릴레이 구조 및 연결

 릴레이는 한쪽에 S, +, - 가 있다. S는 아두이노 디지털 핀에 연결하고, +는 5V 핀에 -는 GND에 연결을 해주면 된다. 또 다른 쪽엔 NC, COM, NO 가 있다. 이 부분은 220V 제품에 연결되어 진다.
NC는 Normal Close 의 약자이며, 평시 붙어 있는 접점이다. 솔레노이드가 작동되면 떨어진다. 전류가 흐르지 않으면 평시 붙어 있다.
NO는 Normal Open 의 약자로, 평시 떨어져 있는 접점이다. 솔레노이드가 흐르면 붙여진다. 마찬가지로 전류가 흐르지 않으면 평시 떨어져 있다. 즉, NC는 초기상태가 전원이 ON상태이며 NO는 초기상태가 전원 OFF 상태이다.
 마지막으로 COM은 Common Terminal(공통단자)의 약자이다. 항상 연결해 줘야 하는 포트이다. COM은 VCC로 보면 된다. 따라서 연결할 때 보통은 NC, COM 이나 NO, COM에만 연결한다. NC. NO는 각각  OUTPUT1, 2로 보면되고, COM은 VCC로 보면 된다.



3. 적합한 릴레이 모듈 선택하기

 릴레이마다 제어할 수 있는 전류나, 전압 등이 다양하다. 따라서 제품의 정확한 스펙을 확인 후 그에 맞는 릴레이를 사용해야한다. 릴레이 윗면에 10A 250VAC ~ 10A 30VDC 등이 적혀 있는데 이는 10암페어 250V 교류, 10암페어 30 직류 까지 제어할 수 있다는 것이다.
 필자는 전기밥솥을 제어하기 때문에 DATA SHEET를 찾아보니 소비전력이 최대 400W라는 것을 알게 되었다.  P=VI 이므로 I=1.82 A 가 나오므로 일반적인 릴레이를 사용해도 된다.

4. IDE를 통한 코딩 및 설계도.

 매우 간단하다. LED 제어 코딩과 거의 비슷하다.

void setup()
{
  pinMode(51, OUTPUT);  // 디지털 51번핀을 출력모드로 설정합니다.
}
  void loop() {
  digitalWrite(51, HIGH); // 릴레이가 연결된 디지털 51번핀에 HIGH(ON) 신호를 보냅니다.
  delay(3000);            // 3초동안 기다립니다.
  digitalWrite(51, LOW);   // 릴레이가 연결된 디지털 51번핀에 LOW(OFF) 신호를 보냅니다.
  delay(3000);            // 3초동안 기다립니다.
}
 




2018년 7월 30일 월요일

아두이노 간 시리얼 통신 (UART)

0. 개요


 시리얼 통신의 정의 및 종류를 알 수 있고, UART에 대한 코딩을 알 수 있다.


1. 시리얼 통신이란?

 시리얼 통신은 데이터를 주고 받을 수 있는 직렬 통신이다.
시리얼 통신은 아두이노간 통신을 할 수 있으며, 더 나아가 블루투스-아두이노,
WIFI-아두이노 등 데이터를 송/수신 할 수 있는 기초적이면 가장 핵심적인 수단이다.


2. 시리얼 통신의 종류

 시리얼 통신에는 SPI, I2C, UART 등이 있다.
하지만 아두이노 관점에서 가장 유용하고 많이 쓰이는 것은 UART 등이 있다.


3. UART

 UART의 개념 및 주의사항을 알아보자.
먼저 보레이트라는 것을 알아야 한다. 보레이트는 시리얼통신의 속도이다. 이것이 왜 중요하냐면 아두이노에서 데이터를 주고 받을 때, 시리얼 통신 속도가 같지 않게 설정한다면
디버깅할 때 오류가 생기기 때문이다.
보통은 9600 을 많이 쓰지만, 다른 속도를 사용하여도 상관없다. 다만 라이브러리에서 115200bps 까지 지원한다고 하니 이 아래 속도를 이용해야 한다.


4. UART 종류

 아두이노는 하드웨어 통신과 소프트웨어통신으로 데이터를 송/수신 할 수 있다.
하드웨어 통신은 우노의 경우 TX0, RX0 이 표신 된 곳으로 연결할 때 하드웨어 통신이라 한다. 하지만 아쉽게도 우리가 PC와 아두이노를 통해 데이터를 주고 받을 때 즉 업로딩 과정 및 시리얼 모니터를 이용해 데이터를 주고 받을 때 이 핀을 사용하기 때문에 아두이노간 통신 과 와이파이 통신은 불가능 하다(따로 핀이 비어있지만 비어있는 것이 아니다). 하지만 메가는 이러한 하드웨어가 1~3까지 총 3개가 있기 때문에 시리얼 통신(PC-아두이노)과 다른 보드와 데이터 통신을 동시에 할 수 있다.
 소프트웨어 통신은 눈치 챗다시피 하드웨어 핀이 아닌 일반 디지털 핀을 TX(TRANSFER 송신), RX(RECIEVE,수신)로 소프트웨어적으로 변경하여 통신하는 것이다. 이는 메가보단 우노에서 가장 많이 쓰인다.


5. UART 함수

 먼저 하드웨어핀을 이용한다면 따로 라이브러리를 불러올 필요가 없지만, 소프트웨어통신을 한다면 SoftwareSerial.h 함수를 불러와야 한다.

#include <SoftwareSerial.h> // 라이브러리 함수를 불러들인다.
SoftwareSerial BTSerial(10,11); //  BTSerial은 임의로 지정한 이름이다.  rx, tx 순이며 10, 11번 핀을 rx, tx로 사용한다는 의미이다.


void setup() {
  Serial.begin(9600); // 9600의 통신속도로 준비한다. 라는 명령어, 시리얼속도와 9600이 동일해야함
}


void loop() {

  if(BTSerial.available()) { //시리얼 모니터에 데이터가 출력(저장) 되어 있는지 여부
    char state = BTSerial.read(); // 있다고 하면 그 데이터를 읽어라 즉 수신해라,

   if(state =='y') digitalWrite(red, HIGH); // 수신한 값이 y이면 다음을 실행해라,
   else digitalWrite(red, LOW);
   BTSerial.println(state); // y값을 시리얼모니터에 출력해라
  }

}

----------------------------------------------------------------------------------------------
위와 같은 코딩을 해석해 보았다. 정리하면

데이터 송신할 때 쓰는 명령어는 Serial.print(), Serial.println(), Serial.write() 등이 있으며(serial은 이름으로 다른 단어로 바꿔도 된다), 수신할 때는 serial.read() 라는 함수를 많이 이용한다.

 6. 설계 시 주의점

pc와 아두이노 연결은 문제가 되지 않지만, 아두이노와 다른 보드를 송/수신 할때는 tx, rx 를 서로 연결하여 사용하는데 교차하여 연결해야 한다. 즉 tx 핀에 꼳힌 점퍼선은 다른 보드 rx 핀에 꼳아야 되고 rx핀도 마찬가지이다. 또한 아두이노간 연결할 때는 gnd 끼리 서로 연결해줘야 한다.

 7. 예제, pc-아두이노1-아두이노2 순으로 연결하여 아두이노2의 연결된 서보모터 제어하기.



위 사진은 설계 사진이다. 

메가는 시리얼 모니터로 데이터를 입력받으면 그 데이터를 우노에게 전송하고 우노는 그 데이터에 맞는 명령을 실행하는 것이다. 

메가 코딩

#include <SoftwareSerial.h>  // 메가 코딩은 실제로 필요 없다. 왜냐하면 하드웨어핀이 추가적으로 존재                                  하기 때문이다.
SoftwareSerial BTSerial(2,3);  // 2번을 rx 3번은 tx로 놓자
//
void setup(){
  Serial.begin(9600); // serial 9600 으로 통신 할거다.
  BTSerial.begin(9600); // BTSerial을 9600으로 통신 할거다.
}
//
void loop(){
  if(Serial.available()){  // 시리얼모니터에서 받은 데이터가 있는 지 여부
    char c=Serial.read();  // 있다면 그 데이터를 수신받아라. 그리고 c에 저장하라
    if(c=='y')BTSerial.write('y'); // 그 데이터가 'y'라면 BTSerial을 통해 우노에게 y를 전송해라
  }
}

우노코딩

#include <SoftwareSerial.h> // 우노는 무조건 설정해야함.
#include <Servo.h> // 서보모터를 돌릴 예정으로 라이브러리 추가.
SoftwareSerial BTSerial(2,3); // 2,3번핀을 설정..
Servo servo;
char state
const int servopin=9; // 변수 선언 9번으로
//
void setup(){
  Serial.begin(9600); // 위와 동일
  BTSerial.begin(9600); // 동일
  servo.attach(servopin); // 9번핀을 서브모터로 컨트롤하겠다.
}
//
void loop(){
  if(BTSerial.available()){ // btserial 통해 받은 데이터가 있는 지 여부
    state=BTSerial.read(); // 있으면 state에 수신받아 저장해라
    if(state=='y'){ servo.write(90); delay(1000); servo.write(-90); }  // 그 데이터가 y이면 모터를 90회전 하고 1초쉬고 -90회전해라
    Serial.write(state); Serial.println("y"); //시리얼모니터에 state데이터값을 보내라.
  }
}


위 코딩을 통해 시리얼모니터에 y를 입력하면 서보모터가 작동되는 것을 알 수 있다.
아래는 동영상이다.




                                






2018년 7월 29일 일요일

아두이노 없이 아두이노 작동시키기 (feat. tinkercad)

 현재 아두이노를 이용해 여러가지 테스트를 하는 중이다.

맨땅에 헤딩하는 지라 어떤 제품을 써야 내가 구현하려는 것을 충족 시킬 수 있을 지, GND

가 무엇인지 등 완전 기초적인 것들 조차 지식이 없어 공부하는 중이다.

그래서 시간 투자대비 원하는 결과를 얻지 못하고 있었다.

 하지만 적어도 비용낭비는 적어질 것 같다. 바로 아두이노가 없어도 아두이노를 설계해보

고 코딩하고 작동여부까지 알 수 있는 사이트를 알아냈기 때문이다.

https://www.tinkercad.com/  라는 사이트이다.

여기선 일반적인 아두이노 입문자 패키지 정도를 사지 않고도 컴퓨터로 코딩하고 작동여부

도 확인 할 수 있다.  물론 모터 쉴드나, 와이파이 쉴드 등은 없다..

하지만 기본적인 것을 돌려볼 때는 확실히 유용한 것 같다.

구글 스프레드 함수를 활용한 내 입맛대로 자산(주식) 통합 관리하기!(자산분배)-(1)

흩어진 주식계좌! 내 입맛대로 실시간 통합관리하기 1.  2% 아쉬운 MY데이터 활용한 자산 통합관리 지인에게서 퀀트투자라는 생소한 투자법을 들은 후 매력을 느껴 더욱 깊이 알아보고자 강형국의 퀀트투자라는 책을 읽게 되었다. 이 책은 나의 투자 가치관...