[PJT] RC카

정재훈·2022년 5월 13일
0

간단 PJT

목록 보기
2/6

나사 치수

나사산의 크기는 직경의 크기와 비례된다. 나사산은 범용적으로 쓰이기 의해 직경의 크기에 비례하여 고정되었다. 같은 직경의 크기의 나사의 모든 나사산은 동일하다.

나사 머리 모양

체결하려는 장소에 따라 사용하는 머리 모양이 달라집니다.
접시머리 나사는 홈이 나있는 곳에 써서 체결 시 튀어나오지 않아 평평하게 체결하기 위해 쓴다.

큰기어

큰기어 -> 작은기어 : 속도를 높인다.
1바퀴 -> 3바퀴 : 힘이 1/3로 줄어들지만, 3배 만큼 속도가 높아진다.

키 : 축과 기어가 같이 돌어가게 고정시키는 나사 구멍

베어링

베어링 : 안쪽 원과 바깥 쪽 원 사이에 구슬같은 회전에 용이하게 하는 것이 포함되어 있다.

조향장치(핸들)

서보모터를 통해 조향장치를 구현할 것입니다. 포텐셜모터가 엔코더 역할을 한다. 180도 범위를 갖는다.

너클

바퀴의 방향을 바꾸는 역할

충전형 배터리

18650 : 직경 18mm 길이 650mm 3.6V 2600mAh 리튬 이온 배터리
3개를 연결해서 11.8v로 약 12v를 전원어탭터에 전원을 인가합니다.
전원 어댑터에 인가된 전압은 라즈베리파이와 모터 드라이버에 각각 5V씩 인가된다.

모터 드라이버

모터 드라이버 사용 이유

라즈베리파이에서 공급할 수 있는 전류는 너무 한정되어있다. 하지만, 차량용 모터를 동작시키기 위해서는 전류가 턱없이 부족합니다. 또한, DC모터를 역으로 회전시키기위해서 배선을 일일히 바꿔줘야하는 번거롭습니다.

I2C 통신 연결

모터 드라이버와 라즈베리파이를 I2C을 통해 연결합니다.

I2C란?

I2C는 여러 장치를 동시에 연결하여 제어할 수 있지만, 장치 구분 및 송수신 판별로 인해 속도 및 효율이 떨어진다.
클럭과 데이터 전송 선만으로 연결이 가능할만큼 단순하다.
장치 구분을 위해 각 Slave마다 주소를 갖는다. 데이터에 주소가 실린다.

sudo i2cdetect -y 1 명령어를 통해 사용할 모터드라이버의 주소는0x6f임을 확인할 수 있다.

I2C 설정 및 설치

sudo raspi-config 명령어를 통해 설정창을 열고, interface options > i2c >켜기로 I2C를 가능토록 설정합니다.

모터드라이버 라이브러리 설치 :
wget http://wiki.geekworm.com/images/a/ac/Raspi-MotorHAT-python3.zip
압축해제 : unzip Raspi-MotorHAT-python3.zip

cd Raspi-MotorHAT-python3를 통해 확인해보자!
test 예제를 제외한 필수적인 라이브러리를 홈 디렉토리로 옮겨준다. => cp Raspi_* ~/

파이썬에서 I2C를 사용하기 위한 툴 설치 : sudo apt-get install python-smbus i2c-tools

RC카 이동 코드

DC 모터 제어 : 이동 제어

# motor move
from Raspi_MotorHAT import Raspi_MotorHAT, Raspi_DCMotor

mh = Raspi_MotorHAT(addr = 0x6f)
motor = mh.getMotor(2)  # because of dc motor connected with M2

try:
    while True:
        motor.setSpeed(125) # speed limit : 0~255
        motor.run(Raspi_MotorHAT.FORWARD) # FORWARD
        # motor.run(Raspi_MotorHAT.BACKWARD) # BACKWARD

finally: 
    motor.run(Raspi_MotorHAT.RELEASE) # STOP

PWM 제어

디지털 신호를 강약으로 나타내는 방법

Servo 제어

Pulse의 폭에 따라 특정 각도로 움직인다.

코드

Servo 모터 제어 : 방향 제어

# servo motor control
from Raspi_MotorHAT import Raspi_MotorHAT

mh = Raspi_MotorHAT(0x6F) # motor-HAT i2c address
servo = mh._pwm

servo.setPWMFreq(60) # 사용할 서보모터의 주파수

# because of sevro motor is connected with #1
# 1주기 2^12 = 4096
# 0degree = 200, 90degree = 400, 180degree = 600 
servo.setPWM(1, 0, 400)  # 3개의 파라미터 : 장치번호, 시작, 끝
profile
여러 방향으로 접근하는 개발자

0개의 댓글