SRF02 초음파 센서를 i2c를 사용하여 파이톤으로 움직였습니다.

초음파 센서 SRF02





아키즈키에서 2400 엔 정도 htp // 아키즈키덴시. 코 m/분 g/g/gM-06685/
・사용 마이크로컴퓨터:16F687-I/ML
· 측정 범위 : 16cm ~ 6m.
・전원:5V(소비 전류 4mA Typ.)

초음파 거리 센서에서 정확도가 좋습니까?
이것을 라즈파이에 연결하여 12c 통신으로 제어

i2c 연결




핀 헤더를 납땜
Mode 핀은 i2c의 경우 미접속
각 핀을 라즈파이에 연결
라즈파이의 경우는 풀업 저항 불필요
터미널에서
sudo i2cdetect -y 1
주소 확인 기본값이라면 0x70(112)이어야 합니다.

통제



파이썬으로 프로그래밍
from time import sleep
import smbus

i2c = smbus.SMBus(1)
address = 0x70
SLEEPTIME = 0.5
DELAY = 0.1

if __name__ == '__main__':
    try:
        print ("cancel:CTRL+C")
        cnt = 1
        while True:
            i2c.write_i2c_block_data(0x70,0x00,[0x51])
            time.sleep(DELAY)

            block = i2c.read_i2c_block_data(address,0x00,4)
            distance = (block[2]<<8 | block[3])
            print(int(cnt),distance)
            cnt = cnt + 1
            time.sleep(SLEEPTIME)

    except KeyboardInterrupt:
        print("finishing...")
    finally:
        print("finish!!")

세세하게 쓴다


i2c.write_i2c_block_data(0x70,0x00,[0x51])

0x51이 측정 커맨드 센티미터 단위
(0x50이면 인치)
time.sleep(DELAY)

측정 커맨드 후에는 지연을 걸어야 한다
데이터시트에서는 70ms
block = i2c.read_i2c_block_data(address,0x00,4)
distance = (block[2]<<8 | block[3])

Location2가 High Byte, Location3이 Low Byte
8bit 어긋남 결합

가끔 값이 날아



가끔 위의 프로그램이라면 값이 날 수 있습니다.
분명히 측정에 사용하는 소프트웨어가 다르다.
location0은 Read시 데이터시트에 따르면 "Software Revision"입니다.
평소에는 여기가 6이지만 가끔 134를 돌려준다
값의 의미는 알 수 없습니다 ...
    i2c.write_i2c_block_data(0x70,0x00,[0x51])
    time.sleep(DELAYTIME)
    block = i2c.read_i2c_block_data(address,0x00,6)
    if(block[0]==6):
        distance = (block[2]<<8 | block[3])
    else:
        distance = (block[2]<<8 | block[3]) + block[4]

그 경우는 여기에 변경으로 문제 없음

좋은 웹페이지 즐겨찾기