Processor

【라즈베리파이】 wiringPi Python : 적외선 거리 센서

작성자 임베디드코리아 작성일26-02-20 00:37 조회103회 댓글0건
◎ 적외선 거리측정센서: GP2Y0A02YK0F, Sharp IR 센서
◎ ADC는 MCP3008


--->>> 예제 :  IR_mpc3008.py <<<-------------------------------------------
import spidev
import time

spi = spidev.SpiDev() # create spi object
spi.open(0,0) # open spi port 0, device (CS) 0, for the MCP8008
spi.max_speed_hz = 1000000 # set transfer speed

DISTANCE = 10 # 10cm
before = 0
now = 0

def readChannel(channel):
  val = spi.xfer2([1,(8+channel)<<4,0])
# 3 바이트의 데이터 1, (8+channel)<<4, 0을 순차적으로 보내고 3바이트를 받습니다.
  data = ((val[1]&3) << 8) + val[2]
  return data

def measure_distance():
  v = (readChannel(0)/1023.0)*3.3
  dist = 16.2537 * v**4 - 129.893 * v**3 + 382.268 * v**2 - 512.611 * v + 301.439
  print("distance: %dcm" %dist)
  return dist
 
def state(distance):
    global now
    if distance <= DISTANCE:
        now = 1
    else:
        now = 0
 
def change():
    global before
    distance = measure_distance()
    before = now
    state(distance)
   
    if before != now:
        return 1
    else:
        return 0
   
def sense():
    if change() == 0:
        print("stay")
        return 0    #stay
    elif now == 1:
        print("on")
        return 1    #on
    else:
        print("off")
        return -1  #off
   
 #---
   
try:
    while True:
        time.sleep(0.5)
        sns = sense()
        if sns == 0:
            pass
        elif sns == 1:
            print("on")
        else:
            print("off")

except KeyboardInterrupt:
    pass