无垠的广袤 发表于 4 天前

Beetle 树莓派RP2350 - 电位计

本帖最后由 无垠的广袤 于 2025-6-3 00:54 编辑

Beetle 树莓派RP2350 - 电位计

本文介绍了 DFRobot Beetle RP2350 开发板结合 电位计 模块,实现 OLED 显示的电位曲线演化的项目设计。
扩展板及 3D 外壳详见:Beetle-RP2350扩展板 - 立创开源硬件平台 .
项目介绍

本项目包括旋转电位器模块介绍、工作原理、应用等信息,在此基础上实现工程代码编写、硬件测试等流程,最终实现电位计的制作。
旋转电位器

旋转电位器 (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 = * 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, 0, 65535, 0, 63)
      y2 = 63 - map_value(adc_values, 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 的开发设计和产品应用提供了参考。

页: [1]
查看完整版本: Beetle 树莓派RP2350 - 电位计