본문 바로가기

만들기/아두이노35

[밸런싱로봇] PID 제어 이해하기 (1) 밸런싱로봇을 만들면서 로봇이 넘어지지 않도록 모터를 컨트롤 하기위해 PID 제어가 사용되었다. PID 제어는 피드백제어의 일종으로 현재상태와 이전상태의 차이를 고려하여 시스템을 제어하는 방법이다. PID는 각각 비례(proportional), 적분(Integral) 그리고 미분(Derivative)제어를 나타낸다. 위 식은 PID제어를 수학적으로 나타낸 것으로 왼쪽부터 비례제어(P), 적분제어(I) 그리고 미분제어(D)를 나타낸다. 각 K 상수에 따라 시스템에 미치는 영향력을 조절할 수 있다. 비례제어(P) 비례제어는 목표값과 현재값의 차이를 계산하고 그 오차에 비례하여 시스템의 움직임을 조절하는 제어방법이다. 예를 들어, 바닥에 있는 드론을 50m 상공에 위치시킨다고 생각해보자 드론이 공중에 정지해 있.. 2021. 6. 25.
esp 8266에서 DHT 온습도센서 2147483647 혹은 nan 오류 DHT 온습도 센서는 가장 간단하게 사용되는 아두이노 센서이다. 사용법도 간단해서 DHT 라이브러리를 다운받고 data 케이블을 디지털핀에 연결해서 데이터를 받으면 작동한다. 하지만, 데이터 출력값이 2147483647 로 나오면서 작동하지 않는 경우가 있다. 2147483647 은 int 정수 32비트로 나타낼수 있는 최댓값인데 DHT센서로부터 데이터가 정상적으로 수신되지 않을 때 시리얼모니터로 정수값을 출력하면 나타나는 오류이다. DHT 센서의 오류원인 1. 센서의 종류 DHT 센서는 DHT11과 DHT22가 있는데 아두이노 IDE에서 센서종류를 정의할때 다르게 작성하면 올바른 데이터가 수집되지 않는다. 2. 전원 DHT 센서는 3 - 5.5 혹은 6V 의 전압에서 작동하는데 전원이 부족하거나 연결이.. 2021. 6. 25.
MPU 6050 센서값 보정하기 ( 90% 이해) MPU 6050을 SDA와 SCL을 통해서 ESP8266에 연결한 이후 데이터를 받아보면 가속도, 온도, 그리고 자이로값이 받아진다. 하지만 이 값들은 각 센서의 raw 데이터(가공되지 않은 데이너, (전압의 변화))이기 때문에 우리가 알고있는 중력가속도(g), 섭씨온도, 각속도로 변경시켜줘야한다. 값을 변경시키기 위해서는 센서의 데이터시트를 참고해야한다. https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf 다음 문서의 29페이지부터 31페이지까지 가속도센서, 온도센서, 자이로센서에 대한 레지스터 주소와 설명이 나와있다. 각센서에서 주어지는 값을 변환하는 공식에 대해서 살펴보면 온도의 경우 340를 나누고 36... 2021. 6. 22.
[로봇] GY-521 MPU6050 I2C 통신 이해하기 MPU6050이 I2C 통신을 사용하는 방법에 대해 80% 정도 이해한 후 작성하였습니다. ESP8266 에서 가속도/자이로 측정하기 위해 MPU6050 모듈을 사용하였습니다. MPU6050에는 X,Y,Z 축방향의 가속도센서와 온도센서 자이로센서가 있습니다. 수집된 데이터는 I2C 방식을 이용하여 데이터를 주고 받습니다. 1. I2C 통신방식은 무엇인가? I2C은 (Inter-Integrated Circuit, eye-squared-C)의 약자로 데이터를 주고받을 수 있는 선과(SDA, Serial Data Line) 송수신 타이밍을 알려주는 선으로(SCL, Serial Clck Line) 그리고 풀업저항으로 이루어져 있다.(풀업저항은 SDA, SCL의 기본상태를 high 로 만들어주기 위해서 연결된다,.. 2021. 6. 21.
[로봇] 밸런싱로봇 만들기 (2) (GY-521 MPU6050 ) 공부시간: 1시간 30분 밸런싱 로봇 만들기 1. ESP8266을 이용하여 스탭모터 움직이기 2. ESP8266을 이용하여 중력센서 데이터 받기 3. ESP8266을 이용하여 PID 모터제어하기 GY-521 MPU6050 MPU6050은 3축 중력센서와 3축 가속도 센서와 온도센서가 달린 모듈이다. I2C 통신을 이용하여 MCU과 연결할 수 있다. ESP8266에는 물리적 SDA와 SCL이 없기 때문에 핀번호를 직접 지정하여 I2C통신을 할 수 있다. 2) MPU6050에서 데이터 확인하기 위해서 다음과 같은 코드를 사용하였다. Wire.h 라이브러리를 이용해서 ESP8266과 MPU6050간 데이터를 I2C를 주고 받는다. ESP8266이 사용하는 115200 baudrate 로 설정하고 wire.be.. 2021. 6. 20.