본문 바로가기

아두이노 (Arduino)

(7)
[Serial] 3. C# 아두이노 센서값 실시간 동기화하기 이전에는 아두이노에 시리얼 값을 전송하여 RGB LED를 제어하였다. 이번에는 반대로 아두이노에서 측정한 센서값을 데스크탑 C# 프로그램에 동기화를 해보자 윈도우 폼을 위와 같이 심플하게 구성한다. TrackBar의 Value 범위는 0 - 1000으로 설정한다. 센서는 HC-SR04 초음파 센서를 mm 단위로 측정하여 C# 프로그램에 송신 및 동기화할 것이다. 실시간 동기화를 위해서는 쓰레드가 필요하다. 쓰레드를 사용하기 위해 using 해주자 거리변수 Distance와 쓰레드 객체를 만든다. Thread1의 Update 레퍼런스 값은 함수이다. Update 함수는 static 으로 정의하자 쓰레드 자동시작 및 종료를 위해서 폼을 열고 닫을 때 이벤트 코드를 작성해준다. 이전 타이머 이벤트 함수를 위와..
[Serial] 2. C# 아두이노 실시간 제어하기 이전 포스팅에서 아두이노의 내장 LED를 제어하는 간단한 통신 제어 프로그램을 만들었다. 이번에는 데스크탑에서 송신한 데이터를 아두이노가 수신받아 RGB LED를 실시간으로 제어할 수 있도록 해볼 것이다. 회로는 11번 ~ 9번까지 순서대로 R, G, B를 연결해준다. 윈도우 폼을 대충 이렇게 만들어보았다. TrackBar의 경우 0 ~ 200까지의 범위를 가지도록 세팅하였다. 그리고 타이머를 추가하여 상시 Enable이 될 수 있도록 상태를 조정한다. Interval 주기는 원하는 값으로 설정한다. 1000으로 지정하면 1초 주기로 데이터를 전달하도록 제작될 것이다. 기본 값 100 or 50ms가 적당하다고 판단된다. 타이머가 Interval 주기때마다 호출하는 함수를 위와 같이 작성한다. 시리얼 프..
[Serial] 1. C# 아두이노와 시리얼 통신하기 C#을 사용해서 아두이노와 시리얼 통신을 해보겠다. C#은 C++과 다르게 Serial 객체를 선언하면 쉽게 그 시리얼 정보를 읽어서 사용할 수 있다. C# 윈도우 폼을 사용해서 아두이노의 기본 LED를 제어해볼 것이다. 윈도우 폼은 위와 같이 구성한다. 먼저 시리얼 포트를 선택할 수 있도록 시리얼 포트를 콤보박스에 넣어야 한다. 콤보박스를 클릭하면 시리얼 포트를 새로고침해서 콤보박스에 넣어주게 할 것이다. IO.Ports 객체를 불러와 using 한다. 콤보박스 클릭시 시리얼 정보를 콤보박스에 새로고침한다. 아두이노와의 연결을 위한 SerialPort 객체를 Form1 클래스 내에 선언한다. 다른 호출 함수, 쓰레드 등에서 공유가 가능해야하기에 Form1 클래스 내에 선언한다. 만약 서로 다른 Form..
[Serial] 2. C++ 아두이노와 프로토콜 통신하기 이전 시간에는 아두이노 공식 포럼에서 제공한 시리얼 클래스 라이브러리를 사용하여 아두이노와 시리얼 통신을 해보았다. 이번에는 단순 시리얼 통신이 아니라 프로토콜을 직접 만들어서 통신을 해보겠다. 프로토콜 통신은 전자장비 간에 통신하는 규칙을 말하며 직접 만들어서 통신이 가능하게끔 만들어 볼 것이다. 규칙은 간단하게 가장 앞 기호가 "#"이 들어가면 다음 명령어와 값에 따라 아두이노를 제어할 수 있도록 만들어보자 이전 프로젝트 파일을 열어서 수정을 해보자 cpp 코드는 입력된 내용을 아두이노로 전달하고, 아두이노는 입력된 값을 검산하여 규칙에 맞다면 내장 LED를 제어한다 여기서의 프로토콜 규칙은 다음과 같다. '#'으로 시작하며 '+'로 구분을 하고, 앞 뒤로 커맨드와 데이터 값으로 분류하는 것이다. c..
[Serial] 1. C++ 아두이노와 시리얼 통신하기 아두이노는 UART 시리얼 통신을 통해 컴퓨터와 데이터를 주고 받는다. 이번에는 C++을 사용하여 아두이노와 시리얼 통신을 하여 데이터를 주고 받아보자 아두이노 공식 포럼에서는 C++를 사용한 시리얼 통신 라이브러리를 제공하고 있다. https://playground.arduino.cc/Interfacing/CPPWindows/ Arduino Playground - CPPWindows Interfacing... Arduino and C++ (for Windows) As I found it pretty hard finding the good information, or an already working code to handle Serial communication on windows based syste..
[MPU6050] 2. 각도값 계산 및 진동 제거하기 지난 게시글에서 데이터시터의 기본 정보를 확인하여 센서로부터 값을 읽어오는 것을 해보았다. 이번에는 읽은 값을 계산하여 각도를 계산해보자 MPU6050은 칩에 점의 방향으로 X, Y, Z축을 찾을 수 있다. 위 데이터 역시 데이터시트에서 가져온 자료이다. 해당 센서에 대한 모든 정보를 데이터시트를 통해 계산하면된다. 먼저 가져온 중력가속도의 값을 계산하여 각도를 측정해보자 X축과 Y축의 각도를 각각 계산하기위해서는 바닥을 가르키는 중력의 값을 알아야한다. 따라서 X축의 기울기를 구하기위해 Y, Z 중력가속도 벡터를 합한다. 이후 중력가속도와 X축을 atan 함수를 통해 계산하면 각도값을 얻을 수 있다. 하지만 atan, atan2 함수는 RAD 단위를 출력하기 떄문에 RAD_TO_DEG 를 곱하여 DEG..