本帖最后由 无垠的广袤 于 2025-6-3 00:54 编辑
Beetle 树莓派RP2350 - 电位计
本文介绍了 DFRobot Beetle RP2350 开发板结合 电位计 模块,实现 OLED 显示的电位曲线演化的项目设计。
项目介绍
本项目包括旋转电位器模块介绍、工作原理、应用等信息,在此基础上实现工程代码编写、硬件测试等流程,最终实现电位计的制作。
旋转电位器
旋转电位器 (Rotary Potentiometer) 是一种常见的模拟输入设备,通过旋转轴来改变电阻值。
物理构造工作原理
应用场景
参数调节(音量、亮度、速度等) 用户输入控制 模拟信号生成 位置/角度传感器(低成本应用)
原理图
硬件连接
- GP26 -> S (rotate sensor)
- GP4 -> SDA (OLED)
- GP5 -> SCL (OLED)
- BAT -> Battery Positive
- GND -> Battery Negative
流程图
代码
打开 Thonny IDE 软件,连接开发板,新建 main.py 文件,并添加如下代码
- from machine import Pin, I2C, ADC
- import ssd1306
- import utime
-
- # 初始化ADC
- potentiometer = ADC(26)
-
- # 初始化OLED (I2C0)
- i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)
- oled = ssd1306.SSD1306_I2C(128, 64, i2c)
-
- # 用于存储ADC值的数组
- adc_values = [0] * 128
-
- def map_value(value, in_min, in_max, out_min, out_max):
- """将值从一个范围映射到另一个范围"""
- return (value - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
-
- def draw_graph():
- """在OLED上绘制ADC值曲线"""
- oled.fill(0) # 清屏
-
- # 绘制坐标轴
- oled.hline(0, 63, 128, 1) # X轴
- oled.vline(0, 0, 64, 1) # Y轴
-
- # 绘制刻度标记
- for x in range(0, 128, 16):
- oled.vline(x, 61, 3, 1)
- for y in range(63, 0, -16):
- oled.hline(0, y, 5, 1)
-
- # 绘制曲线
- for x in range(1, 128):
- y1 = 63 - map_value(adc_values[x-1], 0, 65535, 0, 63)
- y2 = 63 - map_value(adc_values[x], 0, 65535, 0, 63)
- oled.line(x-1, y1, x, y2, 1)
-
- # 显示当前值
- current_value = adc_values[-1]
- oled.text("Value: {}".format(current_value), 0, 0)
- oled.rotate(0)
- oled.show()
-
- while True:
- # 读取ADC值并更新数组
- adc_value = potentiometer.read_u16()
- adc_values.pop(0)
- adc_values.append(adc_value)
-
- draw_graph()
-
- utime.sleep_ms(50)
复制代码
将该文件上传至 Beetle RP2350 开发板根目录,上电自动运行程序。
效果
旋转电位计旋钮,可实现对应 ADC 数值的输出与动态演化曲线
总结
本文介绍了 DFRobot Beetle RP2350 开发板结合 电位计 模块,实现 OLED 显示的电位曲线演化的项目设计,为 RP2350 的开发设计和产品应用提供了参考。
|