일단 아래 소스를 다운로드 해주세요. 라이브러리 없이 밸런싱 로봇 소스만 포함한 소스입니다. pid쪽으로 약간의 수정이 된 버전입니다.
가장처음으로 모터드라이버와 아두이노의 회로배선상태되도 소스를 수정합니다.
아래 사진에 보이는 부분입니다.
두번째는 센서와 차체의 방향에 따라서 각도를 읽어 오는 부분을 수정합니다. 바퀴축과 나란한 축이 X축이면 아래와 같이 m_Gyro.GetKalAngleX()를통해서 x축 각도를 읽도록하고 Y축이라면 m_Gyro.GetKalAngleY()를 통해서 Y축각도를 읽도록 합니다.
소스를 업로드 하고 밸런싱로봇 작동상태를 확인합니다.
만일 바퀴가 움직이지 않으면, 아두이노와 모터드라이버의 핀연결 상태가 소스에서 설정한 핀과 일치하는지 확인합니다.
배선상태와 핀설정이 일치한다면, 테스터기 같은것으로 모터드라이버의 출력측을 측정해서 출력이 있는지 확인합니다. 출력이 있고, 차체의 기울어짐에 따라서 출력전압 극성에 변동이 있다면 일단 소스와 회로 구성은 올바르지만, 모터를 구동시킬만큼 출력전류가 충분하지 않아서 그러것입니다.
이때는 아래소스에 보이는 것처럼 PID_SCALE을 높여 보시기 바랍니다. 모터가 움직일때까지 해당값을 조금씩 높여가면서 테스트 해봅니다.
저부분은 원래 소스에는 없던 부분입니다. 새로 추가한 부분인데,
소스상에도 설명되어 있지만, 제공된 소스는 제가 만든 밸런싱 로봇에 맞게 PID설정이 되어 있습니다. 밸런싱로봇의 무게나, 무게중심, 모터특성등에 따라서 적절한 PID값을 조정해야 합니다. 최적의 PID값을 찾아내지 못하면 밸런싱 로봇의 중심잡기는 실패 하게 됩니다.
PID_SCALE조정으로 바퀴가 움직이고, 기울어짐에 따라 회전 방향이 정상적으로 바뀐다면 30%정도는 성공한것입니다.
만일 기울어진 방향과 반대 방향으로 모터가 움직인다면 반대로 움직이는 쪽 부분만 http://eltgroup.tistory.com/299 글을 참고해서 코드를 수정합니다
이제남은 일은 최적의 PID값을 찾는 일입니다. 밸런싱로봇을만들때 가장 힘든부분입니다. 운이좋아 PID_SCALE값 조정만으로 밸런스가 유지된다면 따로 PID값 조정할 필요는 없습니다.
위소스에 보이는것처럼, PID_KP, PID_KI, PID_KD 값을 자신의 차체에 맞는 값으로 찾아서 수정해야 합니다.
동역학이론을 동원해서 실험과 특성을 추출해서 계산해내지 않는이상은, 3가지 값을 조금씩 바꿔가면서 차체가 밸런스를 잡을때까지 무한 수정 노가다를 할 수 밖에 없습니다.
'아두이노' 카테고리의 다른 글
Node mcu 와이파이 속도 테스트 (0) | 2017.11.26 |
---|---|
nodemcu v3 핀맵 (0) | 2017.11.12 |
밸런싱로놋 mpu6050 센서방향 (0) | 2015.12.19 |
MPU6050 자이로 가속도 센서 (0) | 2015.07.25 |
DHT11 온습도 센서 (0) | 2015.05.25 |