From 96bdda753ab396a57383d51558c2a4381070aa1c Mon Sep 17 00:00:00 2001 From: Ahhmagi Date: Fri, 13 Mar 2026 16:37:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0180=C2=B0=E8=88=B5=E6=9C=BA?= =?UTF-8?q?=20=E5=92=8C=20tmp36=E6=B8=A9=E5=BA=A6=20py=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- servo.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tmp36.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 servo.py create mode 100644 tmp36.py diff --git a/servo.py b/servo.py new file mode 100644 index 0000000..946031f --- /dev/null +++ b/servo.py @@ -0,0 +1,76 @@ +from microbit import * + +class SERVO: + def __init__(self, pin): + """基本描述 + + 舵机控制类 + + Args: + pin: 连接舵机的引脚 + + Returns: + None + """ + self._pin = pin + self._angle = 90 # 初始角度 + + def write(self, angle): + """ + + 设置舵机角度 + + Args: + angle: 角度值,范围 0-180 + + Returns: + None + """ + # 确保角度在有效范围内 + if angle < 0: + angle = 0 + elif angle > 180: + angle = 180 + + self._angle = angle + # 映射角度到PWM值 (0°=26, 90°=78, 180°=130) + # 公式: pwm = (angle * 104 / 180) + 26 + pwm_value = int((angle * 104 / 180) + 26) + self._pin.write_analog(pwm_value) + + def set_angle(self, angle): + """ + + 设置舵机角度 + + Args: + angle: 角度值,范围 0-180 + + Returns: + None + """ + self.write(angle) + + def get_angle(self): + """ + + 获取当前舵机角度 + + Returns: + int: 当前角度值 + """ + return self._angle + + +if __name__ == '__main__': + # 初始化舵机(假设连接到pin1) + servo = SERVO(pin1) + + while True: + # 测试舵机转动 + servo.set_angle(0) + sleep(1000) + servo.set_angle(90) + sleep(1000) + servo.set_angle(180) + sleep(1000) diff --git a/tmp36.py b/tmp36.py new file mode 100644 index 0000000..87d62a0 --- /dev/null +++ b/tmp36.py @@ -0,0 +1,64 @@ +from microbit import * + +class TMP36: + def __init__(self, pin): + """基本描述 + + TMP36温度传感器 + + Args: + pin: 连接TMP36的模拟引脚 + + Returns: + temperature 摄氏温度 + """ + self._pin = pin + self._temperature = 25.0 # 初始温度值 + + def read(self, unit='C'): + """ + + 读取温度 + + Args: + unit: 温度单位, 'C' 表示摄氏温度, 'F' 表示华氏温度 + + Returns: + float: 温度值 + """ + # 读取模拟值 (0-1023) + analog_value = self._pin.read_analog() + # 转换为电压 (0-3.3V) + voltage = analog_value * 3.3 / 1023.0 + # 应用TMP36公式: 温度 = (电压 - 0.5) * 100 + self._temperature = (voltage - 0.5) * 100 + + if unit.upper() == 'F': + # 转换为华氏温度 + return self._temperature * 9 / 5 + 32 + else: + # 返回摄氏温度 + return self._temperature + + def get_temperature(self, unit='C'): + """ + + 读取温度 + + Args: + unit: 温度单位, 'C' 表示摄氏温度, 'F' 表示华氏温度 + + Returns: + float: 温度值 + """ + return self.read(unit) + + +if __name__ == '__main__': + sensor = TMP36(pin1) # 假设TMP36连接到pin1 + while True: + temp_c = sensor.get_temperature('C') + temp_f = sensor.get_temperature('F') + print("TMP36_temperature_C: {:.2f}C".format(temp_c)) + print("TMP36_temperature_F: {:.2f}F".format(temp_f)) + sleep(1000)