라즈파이에서 Servo Driver HAT를 사용해보십시오.

Raspberry Pi 4와 우분투, ROS2의 조합으로 플레이하려고 Amazon에서 PWM Servo Motor Driver을 구입했습니다.

  • 공식 페이지
  • 사용자 매뉴얼


  • Servo Driver HAT 사양



    사양







    전원
    6V~12V(VIN 단자)

    서보 전압
    5V

    로직 전압
    3.3V

    운전자
    PCA9685

    제어 I/F
    I2C

    치수
    65.0mmx36.0mm

    장착 구멍 크기
    3.0mm


    PIN 사양



    흰색 프레임으로 둘러싸인 곳



    PIN 색상



    블랙
    GND (서보 모터의 갈색과 연결)

    레드
    5V VCC

    노랑
    PWM 신호선


    모터



    갈색 선을 GND에 연결


    이곳은 갈색이 없어 블랙을 GND에 연결


    I2C 활성화



    ubuntu이므로 raspi-config를 사용할 수 없으므로/boot/firmware/config.txt를 직접 다시 씁니다.

    /dev/firmware/config.txt의 끝에 다음을 추가합니다.



    /boot/firmware/config.txt
    dtparam=i2c_arm=on
    

    /etc/modules의 끝에 다음을 추가한다.


    i2c-dev
    i2c-bcm2708
    

    재부팅


    $ sudo reboot
    

    재부팅 후 i2c가 활성화되어 있는지 확인
    $ dmesg | grep i2c
    [    2.824095] i2c /dev entries driver
    $ lsmod | grep i2c
    i2c_bcm2708            20480  0
    

    도구 설치


    $ sudo apt install i2c-tools
    $ sudo apt install python3-smbus
    

    i2c가 유효한지 확인


    $ sudo i2cdetect -y 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: 70 -- -- -- -- -- -- --
    

    Python에서 PCA9685를 사용할 수 있습니다.



    Adafruit Python PCA9685 에서 라이브러리와 샘플 가져오기

    pip가 설치되지 않았기 때문에 먼저 pip 설치
    $ sudo apt install python-pip python3-pip
    

    그런 다음 PCA9685용 라이브러리 설치
    $ sudo pip install adafruit-pca9685
    
  • Adafruit Library Reference

  • FS90R을 사용한 경우



    이번에는 FS90R을 0번으로 연결하여 아래와 같은 샘플을 동작시켜 보았더니 모터가 on→off했다.

    sample.py
    #!/usr/bin/python
    
    import Adafruit_PCA9685
    import time
    
    pwm = Adafruit_PCA9685.PCA9685()
    
    pwm.set_pwm_freq(60)
    
    pwm.set_pwm(0, 0, 1)
    
    time.sleep(1)
    
    pwm.set_pwm(0, 0, 0)
    

    set_pwm의 최초로 인수는 몇번에 접속하고 있는지, 2,3번째는 좀 더 공부하지 않으면….

    SG92R을 사용하는 경우



    PCA9685는 펄스 150 ~ 650이 각도 0 ~ 180에 해당하므로 다음 방정식을 사용하여 펄스를 생성합니다.
    pulse = ( 650 - 150 ) / 180 * 角度 + 150
    

    sample.py
    #!/usr/bin/python
    
    import Adafruit_PCA9685
    import time
    
    pwm = Adafruit_PCA9685.PCA9685()
    pwm.set_pwm_freq(60)
    # 180度
    pwm.set_pwm(0, 0, 650)
    time.sleep(1)
    # 90度
    pwm.set_pwm(0, 0, 400)
    time.sleep(1)
    # 0度
    pwm.set_pwm(0, 0, 150)
    

    FS90R(추기)



    360도 서보 모터는 각도를 90을 기준으로 0~180 사이에서 변화시킴으로써 회전 방향과 속도를 제어하는 ​​것 같기 때문에 다음과 같은 샘플을 만들어 보았습니다.

    sample.py
    #!/usr/bin/python
    
    import Adafruit_PCA9685
    import time
    
    pwm = Adafruit_PCA9685.PCA9685()
    pwm.set_pwm_freq(60)
    # 180度
    pwm.set_pwm(0, 0, 650)
    time.sleep(1)
    # 0度
    pwm.set_pwm(0, 0, 150)
    time.sleep(1)
    # 90度
    pwm.set_pwm(0, 0, 400)
    

    를 실행해 보면, 0도와 180도에서는, 같은 속도로 역회전이 되었습니다.
    하지만 90도라고 생각했던 400에서는 멈추지 않았다.
    그렇지만 372~382정도라면 멈추는구나-.

    벌써 사서 와서 시험했더니 375에서는 멈추지 않고 380으로 멈췄다.
    개체 차이?
    펄스는 130~630 사이에서 380 정도로 정지가 좋은 느낌일까.

    아키즈키의 PCA9685의 기판의 취설에는 펄스 150~600이 되어 있었다. 이것이라면 375는 그냥 가운데 값이야-.
    htp // 아키즈키덴시. 이 m/두w응아 d/ds/아키즈키/아에-P인가 9685. pdf

    FS90R 및 micro:bit



    micro : bit의 서보 드라이버를 사용하여 다음과 같은 샘플을 동작시킨 곳 90도에서 멈추지 않았기 때문에, 역시 어긋나 있을 것 같다.

    sample.js
    input.onButtonPressed(Button.A, function () {
        kitronik_i2c_16_servo.servoWrite(kitronik_i2c_16_servo.Servos.Servo1, 0)
    })
    input.onButtonPressed(Button.AB, function () {
        kitronik_i2c_16_servo.servoWrite(kitronik_i2c_16_servo.Servos.Servo1, 90)
    })
    input.onButtonPressed(Button.B, function () {
        kitronik_i2c_16_servo.servoWrite(kitronik_i2c_16_servo.Servos.Servo1, 180)
    })
    

    좋은 웹페이지 즐겨찾기