피지컬컴퓨팅/라즈베리파이 피코

라즈베리파이 피코 : 아날로그 데이터 읽기 쓰기 - 습도 센서 , 조이스틱, 서보모터

오즈랩 2025. 5. 28. 15:37
반응형

참고사이트 : https://github.com/mtinet/picoW

 

GitHub - mtinet/picoW

Contribute to mtinet/picoW development by creating an account on GitHub.

github.com

 

실습하는 동안 기본 회로

1. 아날로그 데이터 읽기

(1) Analog1.py : 습도센서

- VCC : 3.3V

- GND : GND

- S : 26번

import machine
import utime
 
analog_value = machine.ADC(26)
 
while True:
    reading = analog_value.read_u16()/16
    print("ADC: ", reading)
    utime.sleep(0.2)

 

 

(2) Analog2.py : 조이스틱

- VCC : 3.3V

- GND : GND

- URX : 26번

- UTY : 27번

import machine
import utime
 
analog_valueV = machine.ADC(26)
analog_valueH = machine.ADC(27)
 
while True:
    readingV = analog_valueV.read_u16()/16
    readingH = analog_valueH.read_u16()/16
    print("ADCV: ",readingV, "ADCH: ", readingH)
    utime.sleep(0.2)

 

2. 아날로그 데이터 쓰기

(1) SevoTest1.py :  서보보터1개

- VCC : 3.3V

- GND : GND

- SIGNAL : 0번

from time import sleep
from machine import Pin, PWM

# 서보 핀, 주파수 설정
servo = PWM(Pin(0))
servo.freq(50)

# 서보 각도를 0~180도로 입력할 수 있도록 함수를 하나 만듬
def setAngle(servoName, angle):
    servo = servoName
    a = int(((((angle) * 2)/ 180) + 0.5)/20 * 65535)
    servo.duty_u16(a)

# 반복동작
while True:
    setAngle(servo, 0)
    print('0')
    sleep(1)
    setAngle(servo, 45)
    print('45')
    sleep(1)
    setAngle(servo, 90)
    print('90')
    sleep(1)
    setAngle(servo, 135)
    print('135')
    sleep(1)
    setAngle(servo, 180)
    print('180')
    sleep(1)

(2) SevoTest2.py :  서보보터2개

- VCC : 3.3V

- GND : GND

- SERVO1 SIGNAL : 0번

- SERVO2 SIGNAL : 1번

from time import sleep
from machine import Pin, PWM

# 서보 핀, 주파수 설정
servo0 = PWM(Pin(0))
servo0.freq(50)
servo1 = PWM(Pin(1))
servo1.freq(50)

# 서보 각도를 0~180도로 입력할 수 있도록 함수를 하나 만듬
def setAngle(servoName, angle):
    servo = servoName
    a = int(((((angle) * 2)/ 180) + 0.5)/20 * 65535)
    servo.duty_u16(a)
    
# 반복동작 
while True:
    setAngle(servo0, 0)
    setAngle(servo1, 0)
    sleep(1)
    setAngle(servo0, 45)
    setAngle(servo1, 45)
    sleep(1)
    setAngle(servo0, 90)
    setAngle(servo1, 90)
    sleep(1)
    setAngle(servo0, 135)
    setAngle(servo1, 135)
    sleep(1)
    setAngle(servo0, 180)
    setAngle(servo1, 180)
    sleep(1)

(3) SevoJoystick.py : 서보보터 + 조이스틱

- VCC : 3.3V

- GND : GND

- SERVO1 SIGNAL : 0번

- 조이스틱 URX: 26번

from time import sleep
import machine
from machine import Pin, PWM

# 아날로그 값 읽기
analog_value = machine.ADC(26)

# 서보 핀, 주파수 설정
servo = PWM(Pin(0))
servo.freq(50)

# 서보 각도를 0~180도로 입력할 수 있도록 함수를 하나 만듬
def setAngle(servoName, angle):
    servo = servoName
    a = int(((((angle) * 2)/ 180) + 0.5)/20 * 65535)
    servo.duty_u16(a)
    
# 반복동작 
while True:
    reading = analog_value.read_u16()/16
    reading = round((reading/4096) * 180)
    print("ADC: ", reading)
    setAngle(servo, reading)
    sleep(0.1)

 

- VCC : 3.3V

- GND : GND

- SERVO1 SIGNAL : 0번

- SERVO2 SIGNAL : 1번

- 조이스틱 URX: 26번

- 조이스틱 URY: 27번

from time import sleep
import machine
from machine import Pin, PWM

# 아날로그 값 읽기
analog_valueV = machine.ADC(26)
analog_valueH = machine.ADC(27)
  

# 서보 핀, 주파수 설정
servo0 = PWM(Pin(0))
servo0.freq(50)
servo1 = PWM(Pin(1))
servo1.freq(50)

# 서보 각도를 0~180도로 입력할 수 있도록 함수를 하나 만듬
def setAngle(servoName, angle):
    servo = servoName
    a = int(((((angle) * 2)/ 180) + 0.5)/20 * 65535)
    servo.duty_u16(a)
    
# 반복동작 
while True:
    readingV = analog_valueV.read_u16()/16
    readingH = analog_valueH.read_u16()/16
    readingV = round((readingV/4096) * 180)
    readingH = round((readingH/4096) * 180)
    print("ADCV: ",readingV, "ADCH: ", readingH)
    setAngle(servo0, readingV)
    setAngle(servo1, readingH)
    sleep(0.1)
반응형