Beetle 树莓派RP2350 - 电位计
本文介绍了 DFRobot Beetle RP2350 开发板结合 电位计 模块,实现 OLED 显示的电位曲线演化的项目设计。
扩展板及 3D 外壳详见:Beetle-RP2350扩展板 - 立创开源硬件平台 .https://oshwhub.com/lijinlei0907/beetle-rp2350-expansion-board
项目介绍
本项目包括旋转电位器模块介绍、工作原理、应用等信息,在此基础上实现工程代码编写、硬件测试等流程,最终实现电位计的制作。
旋转电位器
旋转电位器 (Rotary Potentiometer) 是一种常见的模拟输入设备,通过旋转轴来改变电阻值。
物理构造
电阻轨道:通常由碳膜、导电塑料或金属丝制成
滑动触点(电刷):与旋转轴相连,在电阻轨道上滑动
旋转轴:用户操作的旋转部件(通常有300°左右旋转范围)
三个引脚:两端接电源/VCC和GND,中间为可变的输出信号
工作原理
根据旋转角度改变电阻轨道与滑动触点之间的接触位置
形成分压电路,输出与角度成比例的电压信号
旋转角度与输出电压呈线性(线性电位器)或对数(音频电位器)关系
应用场景
参数调节(音量、亮度、速度等)
用户输入控制
模拟信号生成
位置/角度传感器(低成本应用)
原理图
硬件连接
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 的开发设计和产品应用提供了参考。