亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

树莓派传感器与执行器控制实战:加速度计、舵机与数据流

大多数开发者习惯处理静态文件或简单图形,但物理计算打开了与现实世界交互的大门。通过读取传感器数据并驱动执行器,你可以构建能够感知、决策并在物理世界中行动的系统。

目标

使用树莓派读取加速度计数值并控制舵机电机,演示物理计算的核心概念。

关键概念

本文通过四个实用的 Python 项目展示树莓派的硬件能力:

点亮 LED

LED(发光二极管)在电流单向流动时发光。为保护树莓派和 LED,需串联 500Ω 至 1.5kΩ 的电阻。电阻值可用 R = (V_s - V_d) / I 计算,但上述范围适用于大多数套件。

import time
from itertools import cycle
import RPi.GPIO as io
io.setmode(io.BCM)
io.setup(12, io.OUT)
for state in cycle([1, 0]):
    io.output(12, state)
    time.sleep(0.5)

代码将引脚 12 设为输出,每 0.5 秒切换一次,使 LED 闪烁。

读取电位器

电位器是可变电阻,将旋钮位置转换为电压。由于 GPIO 为数字引脚,我们需要模数转换器(ADC)。MCP3008 提供八个 10 位通道,将 0–3.3V 映射为 0–1023 的整数值。

安装 spidev 以通过 SPI 与 MCP3008 通信:

pip install spidev

运行以下脚本读取通道 0 的值:

import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0)
def readadc(adcnum):
    if not 0 <= adcnum <= 7:
        return -1
    r = spi.xfer2([1, (8 + adcnum) << 4, 0])
    adcout = ((r[1] & 3) << 8) + r[2]
    return adcout
while True:
    val = readadc(0)
    print(val)
    time.sleep(0.5)

使用 ØMQ 进行数据流传输

ØMQ 通过高性能消息库简化网络编程。使用 REQUEST/REPLY 模式,可在 Python 中构建轻量级服务端和客户端。

服务端

import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind('tcp://*:1980')
while True:
    message = socket.recv()
    print(message)
    socket.send(b"I'm here")

客户端

import zmq
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect('tcp://192.168.1.6:1980')
for _ in range(10):
    socket.send(b'You home?')
    message = socket.recv()
    print(message)

结合 traits 和 enaml,可创建响应式 UI 以可视化流式数据。详见 acc_plot 演示。

控制舵机电机

舵机通过脉宽调制(PWM)实现精确定位。典型舵机将 0.5ms 脉宽视为最小角度,2.5ms 为最大角度,周期 20ms。

在通用操作系统中实现精确时序很难。ServoBlaster 是一个内核模块,将 PWM 生成卸载给 DMA 控制器,暴露简单的 /dev/servoblaster 接口。

我将其封装为一个小型面向对象库:RobotBrain。下例演示将舵机从 0% 移动到 100% 占空比。

import time
import numpy as np
from robot_brain.servo import Servo
# 初始化引脚 4 上的舵机,自定义最小/最大脉宽(微秒)
servo = Servo(0, min=60, max=200)
for val in np.arange(0, 1, 0.05):
    servo.set(val)
    time.sleep(0.1)

在 GitHub 上使用 servo_slider 演示查看如何通过网络控制舵机。

深入了解树莓派传感器与执行器控制,请参考原始文档或社区教程。

制造工艺

  1. NodeMCU DHT22接入树莓派3B+ MQTT Broker:无缝物联网集成指南
  2. 树莓派+$5 I²C传感器打造温度记录仪
  3. 树莓派多路DS18B20 1-Wire温度监测:接线与编程全指南
  4. 树莓派与 Python 构建远程温度传感器:分步实战指南
  5. 树莓派自制气象站:每日邮件推送温湿雨数据
  6. 树莓派 3 接 HC‑SR04 超声波测距传感器完全指南
  7. 树莓派 PIR 运动传感器控制 LED 实战指南
  8. 树莓派低成本土壤湿度传感器:智能灌溉 DIY 指南
  9. 树莓派读取线性霍尔传感器:Java 指南与 ADC0832 深度解析
  10. 树莓派多传感器温度光照监测系统:DS18B20 实战构建
  11. 基于树莓派的卫生间占用传感器:通过 Twilio 实现语音与短信提醒
  12. 树莓派 + DHT11 + ThingSpeak:打造你的第一个物联网项目