레이블이 Arduino인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Arduino인 게시물을 표시합니다. 모든 게시물 표시

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 해당 포트를 선택하면 끝이다.













릴레이 제어

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데이터 활용한 자산 통합관리 지인에게서 퀀트투자라는 생소한 투자법을 들은 후 매력을 느껴 더욱 깊이 알아보고자 강형국의 퀀트투자라는 책을 읽게 되었다. 이 책은 나의 투자 가치관...