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

Управление датчиком и исполнительным механизмом Raspberry Pi

Обычно, как программист, вы будете работать с данными на диске, и, если вам повезет, вы будете рисовать картинки на экране. Это контрастирует с физическими вычислениями, которые позволяют вам как программисту работать с данными, полученными из реального мира, и управлять устройствами, которые перемещаются в реальном мире.

Цель

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

Определения

В этой статье я рассмотрю четыре основных проекта Python, чтобы продемонстрировать аппаратные возможности Raspberry Pi. Эти проекты:

Мигать светодиодом

Светодиод - это светоизлучающий диод. Диод - это элемент схемы, который позволяет току течь в одном направлении, но не в другом. Светоизлучающий означает… он излучает свет. Вашему типичному светодиоду требуется ток в диапазоне 10–30 мА, при этом он будет падать примерно на 2–3 вольта. Если вы подключите светодиод напрямую к GPIO вашего Pi, он будет давать намного больше 30 мА и, вероятно, сожжет ваш светодиод (и, возможно, ваш Pi). Чтобы этого не произошло, мы должны поставить резистор. Если вы хотите заниматься математикой, вы можете рассчитать соответствующее сопротивление, используя следующее уравнение:

 R =(Vs - Vd) / I 

Но если вы не хотите заниматься математикой, выберите резистор между 500-1500 Ом. Как только вы соберете все элементы схемы (светодиод и резистор)

Код также довольно прост. Но сначала вам нужно будет установить RPi.GPIO. (Он может быть предустановлен в вашей ОС.)

 время импорта из itertools import cycleimport RPi.GPIO как ioio.setmode (io.BCM) io.setup (12, io.OUT) o =cycle ([1, 0]) while True:io.output (12, o .next ()) time.sleep (0,5) 

В основном это следующие важные строки:

 io.setup (12, io.OUT) io.output (12, 1) 

Эти строки кода устанавливают вывод 12 как выход, а затем выводят 1 (3,3 В). Запустите приведенный выше код, подключенный к цепи, и вы должны увидеть, как ваш светодиод будет мигать каждые полсекунды.

Читайте горшок

Горшок - это сокращение от потенциометра, который представляет собой переменный резистор. Это просто причудливое слово для обозначения ручки. В основном, поворачивая ручку, вы влияете на сопротивление, которое влияет на напряжение на потенциометре. ( V =IR , Помните?). Количество работающих датчиков зависит от изменения напряжения относительно некоторого физического значения, и этот класс датчиков известен как аналоговый датчик . . Помните, я сказал, что контакты GPIO могут представлять только двоичное состояние? Нам придется вызвать помощника еще одного кремния, чтобы преобразовать это аналоговое значение напряжения в двоичный поток битов, с которым может справиться наш Pi.

Этот кусок кремния называется аналого-цифровым преобразователем (АЦП). Один, который мне нравится, называется MCP3008, он имеет 8 10-битных каналов, что означает, что мы можем считывать значения 8 датчиков с разрешением 1024 каждый (2 ^ 10). Это сопоставит входное напряжение 0–3,3 вольта с целым числом от 0 до 1023.

Я превратил число Пи в эфемерные желтые метки, чтобы упростить диаграмму

Чтобы общаться с чипом, нам понадобится пакет python под названием spidev. Для получения дополнительной информации о пакете и о том, как он работает с MCP3008, прочтите этот замечательный пост в блоге

С установленным spidev и построенной схемой запустите следующую программу для чтения значений датчиков в реальном времени и печати их на стандартный вывод.

 import spidev import timespi =spidev.SpiDev () spi.open (0,0) def readadc (adcnum):если не 0 <=adcnum <=7:return -1 r =spi.xfer2 ([1, ( 8 + adcnum) <<4, 0]) adcout =((r [1] &3) <<8) + r [2] вернуть adcout while True:val =readadc (0) print val time.sleep (0.5) 

Наиболее важными частями являются эти две строки:

 r =spi.xfer2 ([1, (8 + adcnum) <<4, 0]) adcout =((r [1] &3) <<8) + r [2] 

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

<час />

Потоковые данные.

Для потоковой передачи данных по сети мы будем использовать сетевую библиотеку ØMQ и реализовать шаблон REQUEST / REPLY. ØMQ упрощает настройку клиента и сервера на Python. Ниже приводится полный рабочий пример.

Сервер

 import zmqcontext =zmq.Context () socket =context.socket (zmq.REP) socket.bind ('tcp:// *:1980') while True:message =socket.recv () print message socket.send («Я здесь») 

Клиент

 import zmqcontext =zmq.Context () socket =context.socket (zmq.REQ) a ='tcp://192.168.1.6:1980'socket.connect (a) для запроса в диапазоне (10):socket. send ('Ты дома?') message =socket.recv () распечатать сообщение 

Теперь мы можем использовать traits и enaml для создания красивого пользовательского интерфейса на стороне клиента. Ознакомьтесь с демонстрацией acc_plot в репозитории github, чтобы увидеть пример потоковой передачи данных Pi по сети, которые будут построены клиентом.

<час />

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

Сервоприводы - это (часто небольшие) двигатели, которые можно перемещать в определенные положения. Например, для данного сервопривода вы можете установить приводной вал от 0 до 18 градусов или где-то посередине. Как вы понимаете, это может быть полезно для множества задач, в том числе для робототехники.

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

Ширина импульса гораздо важнее, чем частота

Такие тайминги невозможны с Python. Фактически, это невозможно в современной операционной системе. Прерывание может произойти в любой момент в вашем управляющем коде, вызывая более длительный, чем нужно, импульс и дрожание в вашем сервоприводе. Чтобы соответствовать требованиям по времени, мы должны войти в забавный мир модулей ядра. ServoBlaster - это модуль ядра, который использует блоки управления DMA для полного обхода ЦП. После загрузки модуль ядра открывает файл устройства по адресу / dev / servoblaster . в которую вы можете писать команды положения.

Я написал небольшой объектно-ориентированный слой вокруг этого, который упрощает сервоуправление. Вы можете найти мою библиотеку здесь:

https://github.com/jminardi/RobotBrain

Просто подключите сервопривод к 5 В и заземлению на Pi, а затем подключите провод управления к контакту 4.

Код на Python довольно прост:

 import timeimport numpy as npfrom robot_brain.servo import Servoservo =Servo (0, min =60, max =200) for val in np.arange (0, 1, 0.05):servo.set (val) time.sleep ( 0.1) 

Все, что вам нужно сделать, это создать сервопривод и вызвать его set () со значением с плавающей запятой от 0 до 1. Посмотрите демонстрацию servo_slider на github, чтобы увидеть, как сервоуправление реализовано по сети.

Подробнее:Управление датчиком и исполнительным механизмом Raspberry Pi


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

  1. Связь MQTT между NodeMCU и Raspberry Pi 3 B +
  2. Регистратор температуры Raspberry Pi
  3. Измерение температуры с помощью однопроводного датчика DS18B20 и Raspberry Pi
  4. Датчик температуры Python и Raspberry Pi
  5. Метеостанция Raspberry Pi
  6. Ультразвуковой датчик (HC-SR04) + Raspberry Pi
  7. Датчик движения с использованием Raspberry Pi
  8. Датчик влажности почвы Raspberry Pi
  9. Цифровой датчик Холла Raspberry Pi в JAVA
  10. Датчик температуры и освещенности Raspberry Pi