실행 환경과 목표
사용 회로:
[그림6-9]와 같이 멀티원 실드를 옥토보드의 내부 핀 영역에 장착합니다. 멀티원 실드에서는 포텐시오미터가 L2핀에 연결되어 있습니다.
대체 회로:
[그림7-9]과 같이 브레드보드에 C3 mini와 부품들로 회로를 구성합니다. 또는 옥토보드의 외부 핀 영역에 C3 mini와 멀티원 실드을 장착해도 됩니다.
목표:
0.5초 단위로 포텐시오미터의 값을 읽고, 이전 값과의 차이가 0.5% 이상이면 읽은 갑과 4095에 대한 백분율을 출력합니다.
AI 프롬프트 7-3:
코드 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 코드가 복사됩니다.마이크로파이썬 프로그램을 다음 조건에 따라 만들고, 코드를 설명해줘 [조건] from machine import … import time time.sleep() 대신 time.sleep_ms()를 사용 모듈 pinno에는 핀 번호 상수 값이 저장되어 있음 import pinno POTENTIOMETER_PIN = pinno.L2_IN POTENTIOMETER의 전압은 3.3V까지 읽음 프로그램 시작하면 print("0.5초간격으로 포텐시오미터의 값을 읽고 처리합니다") first = True 다음은 연속 실행이야: 0.5초 단위로 포텐시오미터의 값을 읽음 first가 True 또는 prev_값과 current_값의 차이가 4095의 0.5% 이상이면 읽은 값과 4095에 대한 백분율을 프린터함
마이크로파이썬 코드:
다음은 주어진 조건에 맞춘 MicroPython 프로그램입니다:
코드 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 코드가 복사됩니다.from machine import ADC, Pin import time import pinno # 핀 번호 설정 POTENTIOMETER_PIN = pinno.L2_IN # ADC 설정: 포텐셔미터 입력 핀을 ADC로 사용 potentiometer = ADC(Pin(POTENTIOMETER_PIN)) # ADC 감쇠 설정 (11dB로 설정하여 3.3V까지 읽을 수 있음) potentiometer.atten(ADC.ATTN_11DB) # 첫 번째 실행 플래그 first = True # 이전 값 초기화 prev_value = potentiometer.read() # 시작 메시지 출력 print("0.5초 간격으로 포텐시오미터의 값을 읽고 처리합니다") while True: # 현재 포텐시오미터 값 읽기 current_value = potentiometer.read() # 4095의 0.5% 기준 차이값 threshold = 0.005 * 4095 # 첫 번째 실행이거나 값 차이가 0.5% 이상이면 출력 if first or abs(current_value - prev_value) > threshold: percentage = (current_value / 4095) * 100 # 4095에 대한 백분율 계산 print(f"포텐시오미터 값: {current_value}, 백분율: {percentage:.2f}%") # 이전 값 갱신 및 first 플래그 False로 설정 prev_value = current_value first = False # 0.5초 대기 (500ms) time.sleep_ms(500)
코드 설명:
포텐시오미터 입력 설정:
POTENTIOMETER_PIN
핀에서 포텐시오미터 값을 읽기 위해 ADC를 사용합니다.ADC.ATTN_11DB
감쇠 설정으로 0V에서 3.3V까지의 전압을 읽을 수 있습니다.
first
플래그 설정:- 프로그램이 처음 실행될 때 무조건 값을 출력하기 위해
first
변수를True
로 설정했습니다.
- 프로그램이 처음 실행될 때 무조건 값을 출력하기 위해
포텐시오미터 값 읽기:
- 0.5초마다
potentiometer.read()
로 포텐시오미터 값을 읽습니다. 이 값은 0에서 4095 사이의 정수입니다.
- 0.5초마다
값 차이 판단:
prev_value
와current_value
의 차이가 4095의 0.5% 이상일 때만 값을 출력합니다. 이 조건이 처음 실행 시에도 적용되도록 했습니다.
백분율 계산 및 출력:
- 포텐시오미터 값과 4095에 대한 백분율을 계산하여 출력합니다.
0.5초 간격 실행:
time.sleep_ms(500)
을 사용하여 매 0.5초마다 포텐시오미터 값을 읽고 처리합니다.
이 프로그램은 포텐시오미터 값이 처음 실행되거나, 이전 값과의 차이가 0.5% 이상일 때만 값을 출력하도록 구현되었습니다.