Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Мастерство управления датчиками и исполнительными механизмами на Raspberry Pi: акселерометр, сервопривод и потоковая передача данных

Пока большинство разработчиков работают со статическими файлами или простой графикой, физические вычисления открывают дверь к взаимодействию с реальным миром. Считывая данные с датчиков и управляя исполнительными механизмами, можно создавать системы, которые чувствуют, принимают решения и действуют в физической среде.

Цель

Использовать Raspberry Pi для считывания значений акселерометра и управления сервоприводом, демонстрируя ключевые концепции физических вычислений.

Ключевые концепции

Статья рассматривает четыре практичных проекта на Python, иллюстрирующих аппаратные возможности Pi:

Мигающий светодиод

Светодиод излучает свет при прохождении тока в одном направлении. Для защиты Pi и светодиода используйте резистор 500 Ом – 1,5 кОм. Значение можно рассчитать по формуле 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 секунды, заставляя светодиод мигать.

Считывание потенциометра

Потенциометр — переменный резистор, преобразующий положение ручки в напряжение. Поскольку GPIO цифровые, нужен АЦП. MCP3008 предоставляет восемь 10-битных каналов, отображающих 0–3,3 В в целые числа 0–1023.

Установите spidev для связи с MCP3008 по SPI:

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 можно создать отзывчивый интерфейс для визуализации потоковых данных. Пример acc_plot demo на GitHub.

Управление сервоприводом

Сервоприводы перемещаются в точные позиции с помощью широтно-импульсной модуляции (PWM). Типичный хоббийный серво интерпретирует импульс 0,5 мс как минимальный угол, 2,5 мс — как максимальный, с периодом 20 мс.

Точное тайминг сложно в ОБНО. 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)

Используйте демо servo_slider на GitHub, чтобы увидеть сетевое управление сервой.

Для глубокого погружения в управление датчиками и актуаторами на Raspberry Pi обратитесь к оригинальной документации или сообществу.

Производственный процесс

  1. Бесшовная MQTT интеграция: NodeMCU DHT22 сенсоры с Raspberry Pi 3 B+ как брокер
  2. Сборка логгера температуры на Raspberry Pi с $5 I2C датчиком
  3. Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
  4. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  5. Создание метеостанции на Raspberry Pi с ежедневными email-отчётами о погоде
  6. Подключение ультразвукового датчика HC‑SR04 к Raspberry Pi 3 — полное руководство
  7. Управление светодиодом с PIR-датчиком движения на Raspberry Pi
  8. Построение низкобюджетного датчика влажности почвы на Raspberry Pi для умного полива
  9. Чтение линейного Холловского датчика с Raspberry Pi: руководство по Java и особенности ADC0832
  10. Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20