import time # 시간 관련 모듈
from machine import Pin, time_pulse_us # 핀 및 시간 관련 모듈
from ETboard.lib.pin_define import * # ETboard 핀 관련 모듈
from ETboard.lib.OLED_U8G2 import * # ETboard OLED 관련 모듈
from ETboard.lib.servo import Servo
#-------------------------------------------------------------------------------------------------------
# ETBoard 핀번호 설정
#-------------------------------------------------------------------------------------------------------
# global variable
oled = oled_u8g2()
#reset_pin = Pin(D6) # 카운트 리셋핀 ( D6 = 빨강 버튼 )
echo_pin = Pin(D8) # 초음파 센서 수신부
trig_pin = Pin(D9) # 초음파 센서 송신부
count = 0 # 카운터용 변수
pre_time = 0 # 이전에 물건이 지나간 시간
servo = Servo(Pin(D6)) # 서보모터 핀 지정
PUSH = Pin(D7) # 밀기 버튼 : 파랑 버튼 핀 지정
pos = 0
#=======================================================================================================
# setup
#=======================================================================================================
def setup():
# reset_pin.init(Pin.IN) # 리셋 버튼 입력 모드 설정
trig_pin.init(Pin.OUT) # 초음파 센서 송신부 출력 모드 설정
echo_pin.init(Pin.IN) # 초음파 센서 수신부 입력 모드 설정
PUSH.init(Pin.IN) # 밀기 버튼 입력모드 설정
#=======================================================================================================
# main loop
#=======================================================================================================
def loop():
#---------------------------------------------------------------------------------------------------
# 물체가 초음파 센서를 지나면 카운트 하기
#---------------------------------------------------------------------------------------------------
global pre_time, count
global pos
trig_pin.value(LOW) # 초음파 센서 거리 센싱 시작
echo_pin.value(LOW)
time.sleep_ms(2)
trig_pin.value(HIGH)
time.sleep_ms(10)
trig_pin.value(LOW) # 초음파 센서 거리 센싱 종료
duration = time_pulse_us(echo_pin, HIGH) # 물체에 반사되어 돌아온 초음파의 시간을 저장
distance = ((34 * duration) / 1000) / 2 # 측정된 값을 cm로 변환하는 공식
print("distance : ", distance, "cm")
if( distance > 1 and distance < 8 ) : # 물체와의 거리가 2cm초과 10cm 미만이면
now_time = int(round(time.time() * 1000))
if(now_time - pre_time > 500) : # 중복 카운트를 방지하기 위해 0.5초 초과인 경우만
count += 1 # 한 번 카운트
pre_time = now_time; # 이전 시각에 현재 시각 저장
time.sleep(0.5)
#---------------------------------------------------------------------------------------------------
# 리셋 버튼을 누르면 카운트 초기화 하기
#---------------------------------------------------------------------------------------------------
'''
if(reset_pin.value() == LOW) : # 리셋 버튼을 누르면
print("count reset")
count = 0 # 카운트 초기화
'''
print("count : ", count)
print("---------------------")
#---------------------------------------------------------------------------------------------------
# OLED 텍스트 표시
#---------------------------------------------------------------------------------------------------
text1 = "count: %d" %(count) # text1 count 값 표시
oled.clear()
oled.setLine(1, "* Smart Factory *") # OLED 첫 번째 줄 : 시스템 이름
oled.setLine(2, text1) # OLED 두 번째 줄 : count 값
oled.setLine(3, "---------------------") # OLED 세 번째 줄
oled.display()
time.sleep(0.06)
PUSH_state = PUSH.value()
print(PUSH_state)
if PUSH_state == LOW: #
print('pos')
print(pos)
pos = pos + 1
if (pos > 3):
pos = 0
servo.write_angle(180-(48*pos))
time.sleep(0.3)
if __name__ == "__main__":
setup()
while True:
loop()
'놀아보자 > 파이썬기초' 카테고리의 다른 글
raspberry camera (2) | 2024.10.03 |
---|---|
Discord 챗봇 view_3/3 (0) | 2022.08.09 |
Discord 챗봇 view_2/3 (0) | 2022.08.09 |
Discord 챗봇 view_1/3 (0) | 2022.08.09 |
Discord 챗봇 동작 테스트 (1) | 2022.08.09 |