놀아보자/파이썬기초

SmartFactory basic

nolja 2023. 11. 30. 15:51
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()

'놀아보자 > 파이썬기초' 카테고리의 다른 글

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
turtle 실습  (0) 2022.01.08