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

Raspberry Pi 传感器和执行器控制

通常作为程序员,您将使用磁盘上的数据,如果幸运的话,您将在屏幕上绘制图片。这与物理计算形成对比,物理计算允许您作为程序员处理从现实世界中感测到的数据并控制在现实世界中移动的设备。

目标

使用Raspberry Pi读取加速度计值并控制伺服电机。

定义

在本文中,我将通过四个基本的 Python 项目来演示 Raspberry Pi 的硬件功能。这些项目是:

闪烁 LED。

LED是发光二极管。二极管是一种电路元件,它允许电流沿一个方向流动,但不允许另一个方向流动。发光是指……它发光。您的典型 LED 需要 10-30 mA 范围内的电流,并且会下降约 2-3 伏。如果您将 LED 直接连接到 Pi 的 GPIO,它将提供超过 30 mA 的电流,并且可能会烧毁您的 LED(也可能是您的 Pi)。为了防止这种情况,我们必须放置一个电阻器。如果您想进行数学运算,可以使用以下等式计算适当的电阻:

R =(Vs - Vd) / I

但是,如果您不想进行数学运算,请选择 500-1500 欧姆之间的电阻。一旦你收集了所有的电路元件(LED 和电阻器)

代码也很简单。但首先你需要安装 RPi.GPIO。 (它可能已预装在您的操作系统上。)

import timefrom itertools import cycleimport RPi.GPIO as 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 伏)。运行上面连接到电路的代码,你应该看到你的 LED 每半秒闪烁一次。

读一壶。

电位器是电位器的简称,是一种可变电阻器。这只是旋钮的一个花哨词。基本上通过转动旋钮你会影响电阻,这会影响锅上的电压。 (V =IR , 记住?)。相对于某个物理值改变电压是多少传感器工作,而这类传感器被称为模拟传感器 .还记得我说过 GPIO 引脚只能代表二进制状态吗?我们将不得不求助于更多的芯片来将模拟电压值转换为我们的 Pi 可以处理的二进制位流。

那块硅片被称为模数转换器 (ADC)。我喜欢的是 MCP3008,它有 8 个 10 位通道,这意味着我们可以读取 8 个传感器值,每个值的分辨率为 1024 (2^10)。这会将我们 0 – 3.3 伏的输入电压映射到 0 到 1023 之间的整数。

我已经将 Pi 变成了短暂的黄色标签以简化图表

要与芯片通信,我们需要一个名为 spidev 的 python 包。有关该封装及其如何与 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] return adcoutwhile 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() 打印消息socket.send (“我在这里”)

客户

import zmqcontext =zmq.Context()socket =context.socket( zmq.REQ)a ='tcp://192.168.1.6:1980'socket.connect(a) for request in range(10):socket. send('你回家了吗?') message =socket.recv() 打印消息

现在我们可以使用 traits 和 enaml 在客户端制作漂亮的 UI。查看 github 存储库中的 acc_plot 演示,查看由客户端绘制的网络上 Pi 流数据的示例。


控制舵机

伺服器是(通常很小)电机,您可以将其驱动到某些位置。例如,对于给定的伺服系统,您可以将驱动轴设置为 0 到 18o 度,或介于两者之间的任何角度。可以想象,这对很多任务都有用,尤其是机器人技术。

轴旋转由脉宽调制 (PWM) 控制,您可以在 GPIO 引脚上的高压脉冲持续时间内对信息进行编码。大多数业余舵机都遵循标准的脉冲宽度含义。 0.5 ms 脉冲表示到达您的最小位置,2.5 ms 脉冲表示到达您的最大位置。现在每 20 毫秒重复一次这个脉冲,你就控制了一个舵机。

脉宽比频率更重要

Python 无法实现这种计时。事实上,它们在现代操作系统中是不可能的。在您的控制代码中随时可能出现中断,从而导致比预期更长的脉冲和伺服中的抖动。为了满足时序要求,我们必须进入内核模块的有趣世界。 ServoBlaster 是一个内核模块,它利用 DMA 控制块完全绕过 CPU。加载后,内核模块会在 /dev/servoblaster 处打开一个设备文件 您可以向其中写入位置命令。

我围绕这个编写了一个小的面向对象层,使伺服控制更简单。你可以在这里找到我的图书馆:

https://github.com/jminardi/RobotBrain

简单地将伺服器连接到 5v 并在您的 Pi 上接地,然后将控制线连接到引脚 4。

python代码很简单:

import timeimport numpy as npfrom robots_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 之间。查看 github 上的 servo_slider 演示,了解通过网络实现的伺服控制。

欲了解更多详情:Raspberry Pi 传感器和执行器控制


制造工艺

  1. NodeMCU 和 Raspberry Pi 3 B+
  2. Raspberry Pi 温度记录器
  3. 使用 1 线 DS18B20 传感器和 Raspberry Pi 测量温度
  4. Python 和 Raspberry Pi 温度传感器
  5. Raspberry Pi 气象站
  6. 超声波传感器 (HC-SR04) + Raspberry Pi
  7. 使用 Raspberry Pi 的运动传感器
  8. Raspberry Pi 土壤湿度传感器
  9. JAVA 中的树莓派数字霍尔传感器
  10. Raspberry Pi 温度和光传感器
  11. 使用 Raspberry Pi 和 Twilio 的支持语音和 SMS 的光传感器
  12. 使用 Raspberry Pi、DHT11 传感器和 Thingspeak 构建您的第一个物联网。