树莓派通过 I2C 驱动 LCD1602 液晶屏

LCD 1602 液晶屏模块的使用,之前在「基于PHP探针和Python爬虫的服务器监控」一文中有详细介绍。这个屏幕还有一种 I2C 方式的驱动模块,可以极大的简化接线和驱动程序。下面树莓派实验室将对这个模块的使用做一个介绍。

硬件说明

带 I2C 模块的 1602 屏幕背面如图所示。模块上有一颗可调电阻,用于调节显示的对比度。(购买链接,如果你新拿到一块屏幕无论怎么调试都不见显示,记得调节一下这里)

接线

GND — GND VCC — 接树莓派 5V SDA — I2C 数据 SCL — I2C 时钟

启用树莓派的I2C功能

sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools sudo raspi-config

按照下面的步骤设置开启 I2C 功能。

重启树莓派。

sudo reboot

然后运行下面的命令看一下是否识别到屏幕。

sudo i2cdetect -y 1

看到地址为 0x27,这说明已经成功连接了 LCD1602 屏幕。接下来就可以用 Python 控制 LCD1602 显示信息了。

编程

这里用到一个驱动程序,将下面的代码保存为 LCD1602.py。

import time import smbus BUS = smbus.SMBus(1) LCD_ADDR = 0x27 BLEN = 1 #turn on/off background light def turn_light(key): global BLEN BLEN = key if key ==1 : BUS.write_byte(LCD_ADDR ,0x08) else: BUS.write_byte(LCD_ADDR ,0x00) def write_word(addr, data): global BLEN temp = data if BLEN == 1: temp |= 0x08 else: temp &= 0xF7 BUS.write_byte(addr ,temp) def send_command(comm): # Send bit7-4 firstly buf = comm & 0xF0 buf |= 0x04 # RS = 0, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) # Send bit3-0 secondly buf = (comm & 0x0F) << 4 buf |= 0x04 # RS = 0, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) def send_data(data): # Send bit7-4 firstly buf = data & 0xF0 buf |= 0x05 # RS = 1, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) # Send bit3-0 secondly buf = (data & 0x0F) << 4 buf |= 0x05 # RS = 1, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) def init_lcd(): try: send_command(0x33) # Must initialize to 8-line mode at first time.sleep(0.005) send_command(0x32) # Then initialize to 4-line mode time.sleep(0.005) send_command(0x28) # 2 Lines & 5*7 dots time.sleep(0.005) send_command(0x0C) # Enable display without cursor time.sleep(0.005) send_command(0x01) # Clear Screen BUS.write_byte(LCD_ADDR ,0x08) except: return False else: return True def clear_lcd(): send_command(0x01) # Clear Screen def print_lcd(x, y, str): if x < 0: x = 0 if x > 15: x = 15 if y <0: y = 0 if y > 1: y = 1 # Move cursor addr = 0x80 + 0x40 * y + x send_command(addr) for chr in str: send_data(ord(chr)) if __name__ == ‘__main__’: init_lcd() print_lcd(0, 0, ‘Hello, world!’)

然后编写一个显示当前时间的示例程序,将下面的代码保存为 time.py。文件需要保存与 LCD1602.py 同一个目录下面。

#!/user/bin/env python import smbus import time import sys import LCD1602 as LCD if __name__ == ‘__main__’: LCD.init_lcd() time.sleep(1) LCD.print_lcd(2, 0, ‘WWW.QUWJ.COM’) for x in xrange(1, 4): LCD.turn_light(0) LCD.print_lcd(4, 1, ‘LIGHT OFF’) time.sleep(0.5) LCD.turn_light(1) LCD.print_lcd(4, 1, ‘LIGHT ON ‘) time.sleep(0.5) LCD.turn_light(0) while True: now = time.strftime(‘%m/%d %H:%M:%S’, time.localtime(time.time())) LCD.print_lcd(1, 1, now) time.sleep(0.2)

其中 LCD.print_lcd() 用来显示字符,前两个参数分别表示 X、Y 坐标(从 0 开始),后面的内容将从这个坐标的位置开始显示。第三个参数就是要显示的内容了。

LCD.turn_light(0) 表示关闭背光,LCD.turn_light(1) 表示打开背光。

在程序目录下执行下面的命令运行。

sudo python time.py

你还可以根据自己的需求,编写显示 IP 地址(参考这里)、系统状态信息的程序,并设置成开机启动(参考这里)来使用这块屏幕。

工业树莓派的进阶 RevPi Flat:能源行业的开源平台

前言

今天能源工业面临着巨大的挑战。可再生能源、电动汽车和电网扩建是目前政治、媒体和社会讨论的一些流行词汇。此外,电力市场的自由化,以及由此带来的竞争加剧和数字化,使全新的结构和商业模式成为可能。

工业树莓派作为小型的开源工控机,灵活多变,不断地在开拓其应用领域,在各工业领域发挥着其作用。在能源工业上,尤其是对能源的管理上,工业级树莓派正发挥着越来越多的作用。

RevPi Flat,年内发布上市

为应对能源行业的挑战,KUNBUS公司将在年内发布新品工业级树莓派的改进版本-RevPi Flat,不论从接口上的变化,还是软件的优化,或者是外观的设计,都做了比较大的升级,它将成为真正的能源行业的开源平台。

RevPi Flat基本规格如下:

– 1.2 GHz 四核处理器

– 1 GB RAM

– 8 GB eMMC 闪存

– 24 VDC 电源

– IP20 DIN轨道外壳(聚碳酸酯)

– 108 x 90 x 65 mm (W x H x D)

– 带有RT-patch的定制Raspbian操作系统

接口更丰富:

– 2个独立的以太网接口

– 集成3端口交换机

– 2 x USB 2.0 连接器

– 1 x RS485 (螺丝端子)

– 1 x RS485 (RJ12 连接器)

– 1 x 数字量输出(无源)

– 1 x 模拟量输入 (0-10 VDC)

– 1 x 模拟量输出(0-10 VDC)

– 1 x Wifi (SMA 连接器)

– 可选:1 x ISM 868 MHz (SMA连接器)

Revpi Flat开源平台的亮点有以下几个方面:

– TPM和IT安全

– 无线M-Bus

– Wifi

– 平面设计

– 两个独立的以太网接口

– 集成3口交换机

– 8 GB内部eMMC内存

通过使用RevPi Flat,可以实现相关的复杂要求和任务。基于Raspberry Pi的该模块以其真正的工业适用性和大量接口而令人信服。由于采用开放平台的概念(包括完整的根权限),该设备可在实施项目时确保最大的设计自由度。

能源行业的应用

在最初Revolution Pi系列产品发布之后,我们的树莓派产品就已经应用在能源行业上了,比如与Oxygen Technologies这家公司合作推进Revolution Pi的产品应用。Oxygen Technologies是Fraunhofer在能源信息学领域的分支机构,并与KUNBUS合作开发了算法和IT解决方案,用于从分散式能源系统进行能源的自动对等(P2P)交易。

这到底是怎样的项目应用呢?Oxygen Technologies的想法是私人和商业电力生产商(例如通过屋顶的太阳能系统)可以每分钟在本地和直接进行电力交易而无需中介。这种新型基础设施的目的尤其是要以较低的电价作为消费者,并减少对大型电力供应商的依赖。

为了使系统正常工作,各个电力生产者和消费者当然必须能够不断地相互交换数据。Oxygen Technologies选择了RevPi Core作为硬件,并将其用作将每个参与者集成到分散式网络中的智能网关。

而新产品RevPi Flat构成了一个多功能的,基于Raspberry Pi和LINUX的,可自由编程的平台,用于过程优化,更有效的数据处理以及能源行业新营销策略的实施。此外,厂家还为您提供全面的服务,如编程、传感器选择等。

RevPi Flat的愿景是去彻底改革能源工业,RevPi Flat正在等待您实现的可能的应用构想:

– 现代、分散的能源管理

– 虚拟电厂

– 在小型发电厂的控制中提供平衡功率/控制功率范围

– 能源交易

– 控制光伏、沼气和风力发电厂

– 控制充电站和氢电池

– 电动汽车充电成本和时间优化/充电时间优化

– 管理替代临时缓冲存储器,例如电动汽车

– 数字主数据、文件和维护协议的一站式管理

– 通过M-Bus远程抄表

– 云解决方案

– 可信平台模块(TPM)的IT安全性

赶快用工业级树莓派来实现您的工业应用吧!如果您这边对我们的新产品感兴趣,欢迎联系我们。

Linux 下使用 systemd 设置开机启动项

下面的教程将介绍如何将命令或程序配置为开机启动时自动运行的服务。完成配置之后,就可以通过 Linux 命令行来「启动/停止/禁用」这个服务了。

创建服务

在树莓派上创建一个 .service 文件。例如:

myscript.service

[Unit] Description=My service After=network.target [Service] ExecStart=/usr/bin/python3 -u main.py WorkingDirectory=/home/pi/myscript StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target

在上面的范例中,服务会去以 Python 3 来运行 /home/pi/myscript 目录下面的 main.py 脚本。用这种方法,你不仅可以配置 Python 脚本,只需要将 ExecStart 这行改为需要启动的任何程序或脚本即可。

将这个文件用 root 用户保存到 /etc/systemd/system 目录:

sudo cp myscript.service /etc/systemd/system/myscript.service

然后就可以用下面的命令尝试启动服务了:

sudo systemctl start myscript.service

停止服务:

sudo systemctl stop myscript.service

设置开机时自动运行:

sudo systemctl enable myscript.service

systemctl 命令还可以用来重启或禁用它。

一朵预报天气的云,基于树莓派+3D打印

MAKER:keebie81/译:趣无尽 Cherry(转载请注明出处)

卧室有朵彩色的云会不会很可爱呢?就像晴天娃娃一样告诉你今天的天气。云朵基于树莓派 Zero W 构建,连接到 Yahoo Weather API 获取天气信息,再通过设定的不断变化的颜色告诉你天气变化的情况。我觉得把云朵悬挂在家中的墙壁上会非常的好看。

云朵颜色变化所代表的天气信息如下:

如果第二天温度比当日高 10%,就会变成红色。

如果第二天温度比当日低 10%,就会变成金色。

如果同时满足这两个条件,会保持红色。

如果这两个条件都不满足,会保持蓝色。

如遇雨或雪,它将会闪烁。

温馨提示:

项目中使用的雅虎的 API 会中断。所以要随时注意更新。更多的信息可以访问:https://developer.yahoo.com/weather/ 。

材料清单

树莓派 Zero W × 1

Micro SD 卡 × 1

USB 电线(白色) × 1

Neopixels 灯环(60 LED/每米) × 若干

锯齿框架挂钩(双孔) × 若干

3M 胶脚垫 × 若干

1/2″ S4S 橡木板 × 若干

6″ S4S 橡木板 × 若干

3″ S4S 橡木板 × 若干

1/8″ 硬质纤维板 × 若干

1/8″ 白色半透明亚克力板 × 若干

1/8″ 木销钉 × 若干

Watco 木制油漆 × 1

25ft 26AWG 红线 × 若干

25ft 26AWG 黑线 × 若干

25ft 26AWG 蓝线 × 若干

木胶 × 1

热胶枪 × 1

订书机 × 1

切割云朵

所有切割的图纸都在 svg 文件中。如图所示,云朵一共有四层。在第二层和第四层,内部路径和中间路径之间包含有 1/8″ 深的凹层。以便将扩散层和背板嵌入其中。扩散层使用半透明亚克力板,用于光的漫反射,背板使用硬质纤维板。

如图所示,这是未切割前的在 Shapeoko3 上的预览图像。稍后会重复使用到,请保存好。

云朵形状的来源:

http://www.softicons.com/web-icons/vector-stylish-weather-icons-by-bartosz-kaszubowski/cloud-icon

切割文件请在项目文件库中下载。

https://make.quwj.com/project/232

组装云朵

1、将切割好的组件粘在一起,只需要将中间的两层粘连起来即可。

2、将 1/8″ 木销钉插入孔中以便对齐。木销没有使用胶水固定,因此一旦使用就无法自由取下来了。

3、干燥时,使用夹子将组件固定在一起并擦去溢出的多余胶水。

4、在等待胶水干燥的过程中,我从内部取下组件,并先用 150 粒度的砂纸打磨再使用 220 粒度的砂纸打磨。擦拭干净后,使用深核桃色的木制油漆刷满表面,使其表面光滑并保持干燥。

这是给顶层上色的好时机。而且不会将整个扩散层弄脏。

5、给主云朵上色。胶水晾干后,使用木制油漆对主要云朵进行打磨和上色。

安装 Neopixel 灯环

1、将灯带放入云朵中确定所需要的长度,要让灯带覆盖到整个云朵。经过测量,需要要十九条灯带,考虑到要粘合的部分,最好预留一些长度,最终采用了二十条。

2、拆除灯带周围的橡胶保护带,再将电线添加到插排上以便连接到树莓派 Zero W 上。

3、将焊条的末端与电线的末端提前焊接在一起效果会更好。

4、将电线焊接到灯带。

5、在背面插板上涂一点热熔胶,以将 NeoPixel 灯条带固定到云朵的边缘。尽量的使条带尽可能靠近背板。如图所示,我应该在灯条上使用另一个 LED。

安装扩散层和顶层

1、将扩散层放置在图中的位置,并在顶部周围涂抹少量胶水。

2、将顶层固定好。确保其尽可能的与其他层对齐,并擦去多余的胶水。

焊接

1、如图所示,接线方式非常简单。

树莓派上 GPIO 18 针脚连接到 Din Neopixel

树莓派的 5V 连接到 Neopixel 的 5V

树莓派的 GND 连接到 Neopixel 的 GND

2、在焊接 USB 电线之前,需要先为其钻孔。我的线是 3mm 粗的线,所以我用 3mm 的钻头钻洞,并确保不要钻到 neopixel 灯带上。

3、切断没有插入计算机的公头的一端。然后去掉一些不需要的线。项目只需要红线(5V)和黑线(GND)。

4、焊接完成后的样子。

设置树莓派

将操作系统下载至 SD 卡。我使用的是:

https://www.raspberrypi.org/downloads/raspbian/

使用 etcher.io 的程序将图像刻录到 SD 卡。完成后,在启动目录中添加两个文件,以便树莓派启用 ssh 并提供正确的 wifi 信息。

使用文本编辑器打开 wpa_supplicant.conf 文件,输入 wifi 的 ssid 和密码。然后将文件添加到 sd 卡,启用 ssh。我们需要建立一个标有 ssh 的文件,因为 sd 卡上没有扩展名。

具体的详情你可以参考:

无屏幕和键盘配置树莓派WiFi和SSH

连接到树莓派

在树莓派中使用 putty 和 SSH 的程序。你可以访问以下网址,找到相关的操作文档。https://shumeipai.nxez.com/2013/09/07/using-putty-to-log-in-to-the-raspberry-pie.html

唯一的区别是,你可以找到树莓派的 IP。我发现使用 raspberrypi.local 连接到主机更容易。

安装所需的库

安装 pip ,运行以下命令:

sudo apt-get install python-pip

安装 requests 模块:

pip install requests

接下来,安装 NeoPixels 所需的项目。这些步骤的说明来源于:

https://learn.adafruit.com/neopixels-on-raspberry-pi?view=all#software

sudo apt-get install build-essential python-dev git scons swig

运行命令:

git clone https://github.com/jgarff/rpi_ws281x.git cd rpi_ws281x scons

下一步

cd python sudo python setup.py install

现在,所需的库都已安装完毕。

在树莓派上部署程序

从 GitHub 库中获取文件:

https://github.com/keebie81/Weather-Forecast-Cloud

你可以将内容剪切并粘贴到新文件中,或使用 WinSCP 传输文件:

https://winscp.net/eng/download.php

如果你需要剪切和粘贴,就要使用此命令制作一个新文件。

sudo nano cloud.py

然后粘贴内容到 cloud.py。

下一步,你可能需要更改一些数值。如果你使用了不同数量的 NeoPixels 或 GPIO 引脚

如果 NeoPixels 的使用量不同,则更改 LED_COUNT。如果使用的 GPIO 引脚不同,请更改 LED_PIN。

在第 72 行,你需要更改位置,如果你使用了 sheboygan 来预测天气。

运行代码

更改完毕后,就可以测试代码。

sudo python cloud.py

现在,云朵应该会亮起来,在终端窗口中,你看到它输出了今天和明天的最高温度和最低温度。

设置开机自动运行

配置自动启动,添加下面的代码到 rc.local 文件中。

python /home/pi/cloud.py &

所需的代码请在项目文件库中下载。

https://make.quwj.com/project/232

完成组装

1、使用记号笔找到中心做好标记。然后,我将锯齿框架挂钩和两个橡胶垫安装到位。

2、使用热熔胶将树莓派固定到位。将一小撮热胶放在树莓派的背面,然后将其连接到背面板上。

3、用螺丝刀给钉书钉留出空间。

4、将弯曲的订书钉固定背板。

5、给每朵云添加挂钩和两个橡胶垫,所有的云朵就完成了。

3D 打印

如果你没有木工 CNC 机床的访问权限,下面提供了 STL 文件。其中括 Autodesk Fusion 360 的设计文件。你也可以修改设计并优化打印。

STL 文件请在项目文件库中下载。

https://make.quwj.com/project/232

作者后话

我原本想用 esp8266 开发板来实现这个项目,但是我在 Arduino IDE 和 JSON 方面的技能不如树莓派。未来这个项目还会增加一些功能,例如在扩散层后的七段显示器上显示当前温度。

我将把文件放在 GitHub 上并添加代码,如果你采用了 Pimoroni Blinkt,Pimoroni Unicorn PHAT 或 Raspberry PI Sense Hat,就可以去使用。

https://github.com/keebie81/Weather-Forecast-Cloud

via

树莓派智能变频散热风扇开售,驱动开源

这是一款针对树莓派 4B 特别设计的散热风扇,也兼容树莓派 3B+/3A+/3B/2B。

项目地址: https://make.quwj.com/project/272

购买地址: http://link.nxez.com/buy/rpi-fan

GitHub: https://github.com/nxez/rpi-fan

特性

高转速风扇,强大的散热性能

可通过编程 PWM 方式控制风扇速率

四颗 RGB LED 可通过编程实现状态指示和其他特效

提供开源的程序控制代码,散热方案让树莓派运行更稳定、性能更优秀、散热更安静

控制代码功能

实时监测树莓派的 CPU 温度

当 CPU 温度达到设置值时启动风扇

多组温度阈值设置,对应不同的风扇运行速率

多组温度阈值设置,匹配不同的 RGB LED 颜色,让你轻松了解实时温度和散热效果

实时监测树莓派工作频率

当树莓派工作频率达到最大频率限制时,无论是否达到散热温度阈值,都全速运行风扇,应对发热更智能

程序基于 Python 编写,便于 DIY

https://www.bilibili.com/video/BV1kf4y1175U/

安装风扇

在树莓派未通电的状态下,将风扇安插在树莓派的 1 ~ 12 号引脚上,如图。

如果引脚安装出错,可能会损坏硬件。所以一定要确认好位置,没问题再给树莓派通电。

如果配合外壳使用,请确认好外壳是否与风扇和树莓派兼容。例如下面这款外壳兼容树莓派 4B 和风扇,组装完成之后效果如下。

启用树莓派的 SPI

在终端运行下面的命令进入配置界面。

sudo raspi-config

选择 Interfacing Options – SPI,启用 SPI。完成后重启树莓派。

安装 Python 库

我们提供的风扇驱动包含了风扇速率智能控制,以及 RGB LED 的状态显示。RGB LED 依赖 apa102-pi 这个库来驱动。因此,为了使用完整的风扇功能,需要预先安装好这个库。当然如果你不需要 LED 状态显示功能,则没有必要安装,并在我们提供的驱动代码中移除与 LED 控制有关的代码即可。

在终端运行下面的命令。

sudo apt install -y python3-pip python3-rpi.gpio sudo pip3 install apa102-pi

风扇驱动程序

风扇驱动程序开源,下载到树莓派上即可运行,在终端输入下面的指令。

sudo apt install -y git cd ~ git clone https://github.com/nxez/rpi-fan cd rpi-fan

我们准备了两份源码,rpi-fan.py 是全功能版本。rpi-fan-lite.py 是简化版,去掉了 RGB LED 的驱动。

在终端输入下面的指令即可运行。

sudo python3 rpi-fan.py

sudo python3 rpi-fan-lite.py

如需在后台运行,请在命令后添加 &,例如:

sudo python3 rpi-fan.py &

设置开机运行

编辑 rc.local 文件。

sudo nano /etc/rc.local

在 exit 0 之前添加一行(其中脚本的路径请根据实际情况修改):

sudo python3 /home/pi/rpi-fan/rpi-fan.py &

大功告成。

附录:源码说明

以完整版本为例,下面对源码中可配置的变量进行说明。

# 风扇运行速率计算公式,速率=基础速率+(当前温度-温度阈值)*速率单位增量。 speed = speed_base + (current_temp – threshold_temp) * speed_step # 风扇基础转速。 speed_base = 70 # 速率单位增量。 speed_step = 1.5 # 启动风扇的温度阈值,默认为 40 度。 threshold_temp = 40 # RGB LED 显示的颜色值,不同的 CPU 温度对应不同的颜色,默认依次为蓝色、绿色、黄色、品红色、红色。 # 数值使用 RGB 色值,从 0x000000 到 0xFFFFFF,色彩的明暗度也可以通过改变色值来体现。 c_temp = [0x000008, 0x000800, 0x080800, 0x080008, 0x080000] # 下面设置用来匹配温度和 LED 颜色,修改上面的 c_temp 和下面的 temp 调节匹配,可以自行设置更多温度级别和 LED 色彩。 c_temp_i = 4 if temp < 60: c_temp_i = 3 if temp < 55: c_temp_i = 2 if temp < 50: c_temp_i = 1 if temp < 40: c_temp_i = 0 项目地址: https://make.quwj.com/project/272 购买地址: http://link.nxez.com/buy/rpi-fan GitHub: https://github.com/nxez/rpi-fan 教程:https://make.quwj.com/project/272/instructions

基于树莓派 CribSense 的婴儿监视器

MAKER:lukehsiao/译:趣无尽 Cherry(转载请注明出处)

CribSense 是一款能监测宝宝活动并能发出警报的监视器。只需一个周末的时间,你完全可以根据教程 DIY 来实现。根据自家宝宝的情况配置好软件部分,例如如果监测到宝宝不动了,则会发出警报。另外,项目中所有软件都是免费的,并且易于扩展。

该监视器是基于 Video Magnification 的 C++ 实现:

http://people.csail.mit.edu/mrub/vidmag/

所有的源文件和文档信息请点击下方链接:

https://github.com/lukehsiao/CribSense

我们将其作为一个有趣的原型项目项目来研究,任何市场上的产品都需要做更多的测试。因此,如果你使用这个项目,还需要自行做额外的探索。

材料清单

树莓派摄像头配置工具

树莓派 3 Model B×1

5V 2.5A Micro USB 电源×1

树莓派 NoIR(夜视红外)摄像头模块V2×1

MicroSD 卡×1

树莓派软排线12英寸×1

3.5mm 输入扬声器×1

HDMI 显示器×1

USB 键盘×1

USB 鼠标×1

树莓派散热片(可选)×1

弱光操作下的 IR LED 电路

1N4001 二极管×3

1 ohm 1W 电阻×1

1W 红外 LED×1

电线×2

烙铁×1

外壳

3D 打印外壳×1(9.9″ 长 x 7.8″ 宽 x 5.9″ 高)

热熔胶×1

准备工作

在项目开始之前,请在 SD 卡上安装了最新版本的 Raspbian,并确保树莓派的功能正常。

Windowns 下安装树莓派系统到SD卡

你还需要启用摄像头模块,才能访问摄像头。

树莓派摄像头模块应用程序文档翻译[转]

安装 CribSense 软件

CribSense 依赖于 autoconf,libtool,OpenCV 和 libcanberra 等常见的软件工具。

https://www.gnu.org/software/autoconf/autoconf.html

https://www.gnu.org/software/libtool/

Home

http://0pointer.de/lennart/projects/libcanberra/

autoconf 和 libtool 用于许多平台(例如 Linux,OSX 和树莓派),可以自动配置 Makefile 和构建脚本。

OpenCV 是一款强大的计算机视觉软件包,它是以 Video Magnification 和运动检测代码的基础,用于进行图像处理。它具有强大的支持,易于使用且性能良好。

libcanberra 是一个简单播放声音的库。用于播放 CribSense 的警报声。

你可以访问它们的页面,获取完整的信息。

在树莓派上打开一个终端并运行以下命令来安装它们:

sudo apt-get install git build-essential autoconf libtool libopencv-dev libcanberra-dev

接下来,将 bcm2835-v4l2 添加到 /etc/modules-load.d/modules.conf 中,摄像头驱动程序将设置为自动加载。你的 modules.conf 应该是这样:

# /etc/modules: kernel modules to load at boot time. # # The file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with “#” are ignored. i2c-dev bcm2835-v4l2

文件编辑完后,重新启动树莓派。CribSense 将从 NoIR 摄像头获取画面。

然后,通过运行以下命令来复制存储库:

git clone https://github.com/lukehsiao/CribSense.git

接下来,进入存储库并通过运行以下命令构建软件。

cd CribSense ./autogen.sh –prefix=/usr –sysconfdir=/etc –disable-debug make sudo make install sudo systemctl daemon-reload

现在,所有的软件都安装完毕。

配置

CribSense 可通过简单的 INI 配置文件进行自定义。运行

make install

后,配置文件位于 /etc/cribsense/config.ini 中。你可以通过运行以下命令查看和编辑这些参数。

sudo nano /etc/cribsense/config.ini

默认配置中对每个参数,都做了简要说明。更多详细信息请点击:

https://lukehsiao.github.io/CribSense/setup/config/

运行 CribSense

CribSense 是通过使用 systemd 服务在启动时运行的。使用键盘和鼠标连接到树莓派,确保配置参数适用于你的婴儿床。如果将其移动,则需要重新调整这些参数。

当你调整参数时,请输入以下命令,就可在命令行随意运行 cribsense。

cribsense –config /etc/cribsense/config.ini

调试完成后,就可以启用自动运行。

sudo systemctl enable cribsense

你可以通过输入以下命令来停止 cribsense 的自动运行。

sudo systemctl disable cribsense

软件简介

CribSense 软件是该项目的核心和灵魂。在 MIT 的有很多关于 Video Magnification 的优秀演示。

http://people.csail.mit.edu/mrub/vidmag/

我想在树莓派上运行类似的算法。为了在树莓派上实时运行,就必须要求 tbl3rd 在其 C++ Video Magnification 实现的要比原来快 10 倍以上。

https://github.com/tbl3rd/Pyramids

这就需要优化指导我们的软件设计。

CribSense 通过软件实现下面的循环。

1、它将每个 640×480 的灰度视频帧分为三个水平部分(640×160),以便实现更好的缓存位置。

2、它会在单独的线程中放大每个段,并监视帧中看到的运动。在监视运动几秒钟后,它确定运动的主要区域并将帧裁剪到该区域。这种算法减少了需要处理的像素总数。

3、CribSense 监视裁剪后的视频流中的运动量,如果在配置的时间内未感知到运动,就会发出警报。CribSense 会定期重新打开视图并监视整个帧,如果婴儿已移动并在新的区域,将其范围进行重新修剪。

4、视频放大率用于提高例如婴儿呼吸之类的细微运动的信噪比。较大的动作不会起作用,但对于非常细微的动作却有很大的帮助。请注意,我们项目的实现只能粗略适用于 MIT 中描述的算法并且使用他们的代码,性能没有那么好。

多线程优化,自适应裁剪和编译器优化之类的优化分别使我们的速度提高了约 3 倍,3 倍和 1.2 倍。这就使我们达到了在树莓派上运行所需的 10 倍提速。

更多详细信息可以在 CribSense 存储库的 Software Architecture 上找到。

https://lukehsiao.github.io/CribSense/setup/sw-setup/#software-architecture-details

更多有关 Video Magnification 的信息,请点击 MIT 页面查看。

http://people.csail.mit.edu/mrub/vidmag/

硬件部分

连接摄像头

将摄像头附带的 6″ 软排线换成 12″ 的。

IR LED

CribSense 相对容易构建,并且项目所需组件也容易购买。如图所示,项目由五个主要的硬件构成,其中只有两个是定制的。下面将逐步介绍如何构建 IR LED 电路,先来介绍如何构建底盘。

这一部分你需要烙铁、电线、二极管、IR LED 和电阻器。如图所示构建电路。

为了在夜间提供充足的照明,我们使用了红外 LED,人眼不可看,但 NoIR 摄像头可见。与树莓派相比,IR LED 不会消耗很多功率,因此为方便,我们将 IR LED 保持打开状态。

在早期版本的树莓派中,针脚的最大电流输出为 50mA。

https://pinout.xyz/pinout/pin1_3v3_power

树莓派 B+ 将其增加到 500mA。但为简单起见,我们仅使用 5V 电源针脚,它可以提供高达 1.5A 的电流。

https://pinout.xyz/pinout/pin2_5v_power

根据测量,IR LED 的正向电压约为 1.7-1.9V。尽管 IR LED 可以吸收500mA 电流而不出现损坏,但我们还是将电流减小到 200mA 左右,以减少热量和总功耗。实验结果还表明,在输入电流为 200mA 的情况下,红外 LED 足够亮。为了桥接 5V 和 1.9V 之间的间隙,我们使用了三个 1N4001 二极管和一个与 IR LED 串联的 1 Ohm 的电阻。导线,二极管和电阻上的电压分别约降为 0.2V、0.9V(每一个)和 0.2V。因此,IR LED 上的电压为 5V-0.2V-(3 * 0.9V)-0.2V = 1.9V。LED 的散热量为 0.18W,电阻的散热量为 0.2W,均在其最大额定值之内。

为了更好与 3D 打印的外壳相匹配,我们使 IR LED 透镜从底座中伸出,并使 PCB 板与孔齐平。右下角的小光电二极管会挡住。如图所示,为了解决这个问题,我们将其拆焊并将其翻转到板子的另一侧。这个光电二极管不需要,因为我们希望 LED 一直亮着。只需将其换到另一侧,即可保持原始 LED 电路不变。

注意:焊接电线时,请确保电线至少 12″ 长,并可与树莓派 GPIO 上的针脚接头。

外壳

源文件包括:

外壳的 STL

https://github.com/lukehsiao/CribSense/blob/master/chassis/case.stl

外壳 机型

https://raw.githubusercontent.com/lukehsiao/CribSense/master/chassis/case.makerbot

盖子 STL

https://github.com/lukehsiao/CribSense/blob/master/chassis/cover.stl

盖子的机型

https://raw.githubusercontent.com/lukehsiao/CribSense/master/chassis/cover.makerbot

打印的最小尺寸为:9.9″(L)x 7.8″(W)x 5.9″(H)。你可在某宝打印外壳。最小打印分辨率为 0.015″。建议使用 PLA 打印外壳。

3D 打印的外壳可以容纳树莓派、摄像头和 LED。是否使用这个外壳可选,但这款外壳可以防止幼儿接触裸露的电子电路。因为每个婴儿床都不一样,因此外壳不包括安装支架。

关于支架有以下几个选项:电线扎带、3M 双锁、魔术贴以及胶带。

组装硬件

准备好所有硬件后,即可开始组装。在过程中建议使用热熔胶,速干且可易于移除后再使用。

1、将树莓派装入外壳。你需要稍微弯曲一下才能插入音频端口。安装到位后,请确保仍可以访问所有端口。

2、使用热熔胶将树莓派固定到位,然后将摄像头连接到树莓派。你也可以选择螺丝固定。

3、将 LED 和摄像头粘到前盖。将 NoIR 摄像头粘到摄像头孔中。确保摄像头紧贴并与外壳对齐。请不要使用太多胶水,否则你将无法将摄像头安装到主机壳中。给树莓派通电后,检查摄像头(例如 raspistill -v ),确保其具有良好的视野。如果视角不佳,将重新放置。

4、将 IR LED 粘贴到盖子颈部的孔中。颈部与婴儿床侧面成 45°。在光线不足的情况下会产生更多阴影,需要增加图像的对比度,便于更容易检测运动。

5、如图所示,将 IR LED 电线连接到树莓派。

6、小心处理内部的电线,将所有组件安装到位后,使用热熔胶密封到位。

校准部分

有关配置参数的详细信息,请参见 CribSense 存储库文档。

https://lukehsiao.github.io/CribSense/setup/config/

也可观看视频校准 CribSense。

这是配置文件的示例:

[io] ; I/O configuration ; input = path_to_file ; Input file to use input_fps = 15 ; fps of input (40 max, 15 recommended if using camera) full_fps = 4.5 ; fps at which full frames can be processed crop_fps = 15 ; fps at which cropped frames can be processed camera = 0 ; Camera to use width = 640 ; Width of the input video height = 480 ; Height of the input video time_to_alarm = 10 ; How many seconds to wait with no motion before alarm. [cropping] ; Adaptive Cropping Settings crop = true ; Whether or not to crop frames_to_settle = 10 ; # frames to wait after reset before processing roi_update_interval = 800 ; # frames between recalculating ROI roi_window = 50 ; # frames to monitor before selecting ROI [motion] ; Motion Detection Settings erode_dim = 4 ; dimension of the erode kernel dilate_dim = 60 ; dimension of the dilate kernel diff_threshold = 8 ; abs difference needed before recognizing change duration = 1 ; # frames to maintain motion before flagging true pixel_threshold = 5 ; # pixels that must be different to flag as motion show_diff = false ; display the diff between 3 frames [magnification] ; Video Magnification Settings amplify = 25 ; The % amplification desired low-cutoff = 0.5 ; The low frequency of the bandpass. high-cutoff = 1.0 ; The high frequency of the bandpass. threshold = 50 ; The phase threshold as % of pi. show_magnification = false ; Show the output frames of each magnification [debug] print_times = false ; Print analysis times

算法的校准是一个反复的工作,没有确切的解决方案。你可以尝试各种值,并将它们与调试功能结合起来,以便找到最适合你的环境的参数组合。在开始校准之前,请确保将 show_diff 和 show_magnification 设置为 true。

原则上,增加放大率和 phase_threshold 值会增加应用于输入视频的放大倍数。你应该更改这些值,直到在视频帧中清楚地看到物体的运动为止。如果你看到伪影,在保持相同放大率的同时减小 phase_threshold 可能会有所帮助。

运动检测参数有助于补偿噪声。在检测运动区域时,使用 erode_dim 和 dilate_dim 来确定用于腐蚀和扩张运动的 OpenCV 内核的尺寸,以便首先消除噪声,然后将剩余的运动信号用于扩张以使运动区域明显。

https://docs.opencv.org/2.4/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html

如果你的婴儿床的对比度很高,则可能需要调整这些参数。在一般情况下,你需要设置更高的 erode_dim 高对比度,以及较低的 erode_dim 低对比度。

如果在 show_diff = true 的情况下运行 CribSense,会发现累加器输出的大部分为白色,或者视频的某些完全不相关的部分被检测为运动(例如,闪烁的灯),增加 erode_dim 直到视频的一部分仅对应婴儿的部分,大部分为白色。如图所示,侵蚀尺寸对于帧中的运动而言太小。

校准良好。

校准之后,请确保将 pixel_threshold 设置为一个值,以使“像素移动”仅报告像素移动的峰值,而不是所有峰值(你需要消除噪声)。理想情况下,你将在终端中看到类似这样的输出,存在一个与运动相对应的清晰的周期性模式:

[info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 44 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 161 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 121 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 86 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 97 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 74 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 60 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 48 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 38 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 29 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 28 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 22 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz

你的输出想这样:

[info] Pixel Movement: 921 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 736 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 666 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 663 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 1196 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 1235 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 1187 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 1115 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 959 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 744 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 611 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 468 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 371 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 307 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 270 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 234 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 197 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 179 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 164 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 239 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 733 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 686 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 667 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 607 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 544 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 499 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 434 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 396 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 375 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 389 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 305 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 269 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 1382 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 1086 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 1049 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 811 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 601 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 456 [info] Motion Estimate: 1.312346 Hz

调整 pixel_threshold 和 diff_threshold 直到只看到峰值,否则像素移动为 0。

安装示例

这是一段关于 CribSense 工作的演示。仪器安装在婴儿床的侧面。

将仪器安装到婴儿床时,需要优化婴儿和摄像头之间的距离。理想情况下,婴儿的胸部将不超过帧的 1/3。摄像头太远,得到的低分辨率的视频,画面放大后也没有内容。摄像头相机太近,容易造成婴儿跑出画面。如果婴儿“包裹”在毯子下,毯子和婴儿胸部之间接触有限,可能很难检测到运动。

你还需要考虑婴儿床周围的照明情况。如果你的婴儿床就在窗户旁边,当天气多云时或窗外物体移动时会形成的阴影或者需要改变光线值。照明环境始终如一效果最好。

在未来,软件会得到提升,从而使校准过程更加顺利。还可以添加其他功能,例如推送通知等。

故障排除

安装 CribSense 时,你可能会遇到一些常见问题。例如,在构建或运行程序时遇到问题,或听不到任何声音。你需要进行调整,当你进行改进时,请反应到我的 GitHub 库。

https://github.com/lukehsiao/CribSense

以下是我们收集的一些故障排除技巧。

1、没有闹钟响。

请检查的扬声器是否在工作。

你在 CribSense 闹钟之外是否播放了由树莓派发出的其他声音吗?

你的树莓派是否尝试通过 HDMI 而不是音频端口播放音频?检查“树莓派音频配置”页面,以确保你选择了正确的输出。

https://www.raspberrypi.org/documentation/configuration/audio-config.md

CribSense 软件是否检测到运动?如果 CribSense 在后台运行,请在终端中使用 journalctl -f 进行检查。

如果 CribSense 感应到很多运动,则可能需要校准 CribSense。

2、红外指示灯不工作。

当你查看红外线 LED 时,你能看到淡红色的环吗?LED 亮起时,应该可以看到。

检查连接的极性。如果 +5V 和 GND 接反,则将不起作用。

将 LED 连接到电压/电流限制为 5V/0.5A 的电源。通常,它在 5V 时应消耗 0.2A 的电流。如果不是,则你的 LED 可能故障。

3、即使没有婴儿,CribSense 仍在检测运动。

你是否正确校准 CribSense?

请记住,CribSense 只在寻找时像素值的变化。

画面内是否有阴影的移动?

是否有闪烁或灯光的变化?

CribSense 是否安装妥当(即如果有人经过它,它不会摇动)?

画面中是否还有其他运动源(镜面反射光等)?

4、即使有运动,CribSense也不会检测到运动。

你是否正确校准 CribSense?

摄像头上是否有其他东西?

是否从树莓派连接到摄像头?在终端中运行 raspistill -v 进行检查,打开树莓派上的摄像头几秒钟。

查看sudo systemctl status cribsense,可 CribSense 是否在运行?

查看婴儿是否在被“包裹”起来的毛毯下,导致无法检测到婴儿?如果毯子和婴儿之间存在较大的间隙,毯子可能挡住运动。

如果放大视频后,是否可以看到动画?

如果你调整低频和高频截止频率,是否能看到运动?

如果仅在弱光下发生这种情况,确定校准是否在弱光下工作吗?

5、CribSense无法建立。

你是否安装了所有依赖项软件?

6、不能运行 cribsense 的命令行。

在运行软件时 ./autogen.sh –prefix=/usr –sysconfdir=/etc –disable-debug 时是否存在偶然性输入错误?

cribsense 是否存在于 /usr/bin 中?

如果运行“which cribsense”,将提供什么路径?

via

EdgeBox-RPI:树莓派的工业现场应用

随着树莓派在 Maker 与 STEAM 领域越来越普及,很多公司开始尝试把树莓派计算平台,用在更多的专业领域。例如深圳欧比特测控有限公司的EdgeBox-RPI,就是国内一款把树莓派部署在工业控制领域的物联网边缘计算机。

(整体造型)

为了达到更好的结构设计与鲁棒性,EdgeBox-RPI没有采用常见的树莓派开发板,而是采用了树莓派发布的CM3+ 计算模块。树莓派3+计算模块核心部分基本与树莓派3+的开发板是兼容的,只是为了更好得抗震,取消了原有的TF卡座设计,转向了板载 eMMC, 同时提供了三种容量,有 8GB、16GB 与 32GB 可选。

(EdgeBox-RPI实物构成)

EdgeBox-RPI 的核心部分包括定制的树莓派公司出品的CM3+, 定制的底板、铝合金外壳,导轨安装支架,配套螺丝等。

系统特性与亮点

大家对树莓派开发板都很熟悉,常用参数例如CPU、内存、USB、网口等这里就不做介绍了,参考相关的文档即可。我们这里谈一下官方的开发板没有,而我们这里设计的亮点。这些设计基于我们十多年来在工业控制的积累与沉淀,把其他一些系统的相关经验与教训移植到了树莓派这个平台上。

供电设计

树莓派原厂厂的供电很简单,比较适合常用桌面的5V电源,例如电脑的USB接口,手机充电器等都可以用。但这带来一个问题,就是不适合在工业现场应用。EdgeBox-RPI为宽电压设计,在10.8V到36伏都可以完美工作。并且加了工业常用的共模滤波器与TVS防静电,以及可恢复保险丝过流保护。

散热与外壳设计

树莓派开发板没有搭配散热片,虽然有很多第三方的散热片可以使用,但上面没有多少空间安装合适的散热片,实验室应用还可以,如果过热会烧毁CPU,或者CPU内部会自动降频,不适合工业现场使用。EdgeBox-RPI 的设计中把CPU直接通过散热硅脂传导到外壳上,而外壳与散热器是一体的,这个硕大的散热片经过实际使用检验,温升很小,不需要风扇即可24小时*7工作。

隔离与保护

板载RS485使用了ADI的ADM2587, 这颗IC 内部集成电源隔离与TVS, 我们外部另外加了可恢复保险丝与二次保护。

CAN-FD

CAN 总线在工业现场,车载设备与各种传感器中有越来越多的应用,MCP2517是microchip公司的CAN控制器,支持最新的CAN-FD协议,最高客户达到8m的总线速度,同时与CAN的收发器之间采用了ADI的磁隔离与独立的隔离电源模块。

实时时钟

为了在断电后保存系统时钟,我们加了RTC模块,配套的大容量法拉电容可以维持大约15天的系统时间。

看门狗

有些客户的无人值守设备,部署在野外或者其他不方便接触的地方,或者对系统鲁棒性要求比较高的地方,看门狗可以保证系统陷入死机之后,进行自动复位,不需要人工干涉。

Mini-PCIe 插座

Mini-PCIe 插座支持常用的移远EC20 4G/LTE模块,Lora SX1301 网关模块以及其他一些第三方的 Zigbee 与UWB通讯与定位模块

加密单元

为了保护客户一些算法,工艺数据与知识产权,板上设计了microchip的 ATECC608 加密芯片。支持椭圆算法,AES,与3DES等加密算法。可能需要签NDA。

总结与展望

经过近一年的现场应用与几十位用户的反馈,欧比特测控发现 EdgeBox-RPI 是一个很稳定的通用计算平台。鉴于有的客户需要软PLC,欧比特测控与一家意大利的公司合作,推出了这个硬件平台的软PLC解决方案。推荐他们与合作伙伴的几个链接,这里有拆解与介绍。

商品链接:

https://www.openembed.com/products/51.html

淘宝链接:

https://item.taobao.com/item.htm?id=603991102464

B站拆解与应用指南:

https://www.bilibili.com/video/BV1dz411B71R

树莓派®中测量IEPE的DAQ HAT – MCC172

之前我们预告过基于树莓派的一款 DAQ HAT——MCC 172。最新消息,MCC 172 已经正式开售,价格 3799 元人民币(购买链接)。

MCC 172是一款24位,应用于测量声音和振动中IEPE传感器信号的MCC DAQ HAT,用于市场中最流行的单板计算机树莓派。

特点

2路IEPE输入

2个24-bit, 51.2kS/s A/D转换器(每通道1个)

±5 V AC耦合

10-32和螺丝端子连接

多板之间同步ADC转换

支持高速采集的板载缓存器

外部数字触发功能

支持C, C++,Python API

在GitHub上提供全套开源库

支持系统:Linux®/Raspbian

多至8块MCC HATs安装至1台树莓派上

MCC 172 直接安装于树莓派40-pin通用输入输出(GPIO)连接器上。 MCC 172已在树莓派全部型号(配有40引脚GPIO连接器)上测试。

可堆叠 HATs

最多可将8块MCC HATs堆叠到单个树莓派上。用户可以混合和搭配MCC HAT模块。

模拟电压输入

配有2路同步24位差分模拟输入通道,采集速率高达51.2kS/s。 用户可开启/关闭IEPE励磁电流。

每路通道配有专用A/D转换器。ADC共享时 钟并同步转换,同时采集数据。

多 HATs 同步

可同步多个MCC 172 HAT到1个采样时钟。可编程时钟的采样率介于51.2kS/s至200S/s。

采样率

单板:最大吞吐量 102.4KS/s (51.2KS/sx 2通道)

多板:最大吞吐量 307.2 KS/s合计。

数字触发器

使用触发输入(TRIR端口)延迟信号输入扫描至指定时间触发采集开始。

触发输入信号可以是3.3V或5V TTL或CMOS逻辑信号。输入类型可以是边缘或水平电压。上升或下降沿触发,高低电压。此端口可用于触发多个同步采集MCC 172 HATs。

MCC DAQ HAT 库

通过开源的MCC DAQ HAT命令库(C/C ++和Python),用户可在基于Linux系统的树莓派上开发应用程序。

此命令库可从 GitHub下载。综合的API和硬件文档,现已全面支持。

MCC DAQ HAT库支持同时运行多个MCC DAQ HATs的操作。

每个API都有基于控制台(Console-based)和用户接口(User Interface)的示例程序。

Web 服务器示例

允许用户配置采集选项并从浏览器窗口查看采集的数据。此示例是Python™编写(包含源代码)。

https://v.qq.com/x/page/g0970utd9m4.html

数据记录仪示例(C/C++®)

显示如何从MCC 172获取数据,在条形图上显示数据,并将数据保存至CSV文件。

https://v.qq.com/x/page/c09706ua000.html

购买地址:http://link.nxez.com/ad/mcc172-buy

更多 MCC 的数据采集方案:https://www.nxez.com/partner-mcc

BlockPi:开源的树莓派图形化编程平台

一个专门为树莓派设计的图形化编程平台,基于 Google Blockly 构建,适用于树莓派爱好者或者少儿编程学习。

特点

完整的Blockly移植到树莓派上,完全免费使用。

集成树莓派GPIO控制,支持Sense HAT,未来支持更多树莓派外设和功能。

程序可直接在应用内运行,同时可转化成Python代码,方便学习Python。

支持繁简体中文、英语。

支持保存、载入程序。

前置需求

安装好官方最新 Raspbian 桌面系统(Raspbian Buster with desktop and recommended software)的树莓派(4B、3、3B、3B+等有40pin GPIO的型号)。

如果不是,请确保树莓派系统中安装了 Nodejs 12 以上的版本和 Python 3。

安装

在 release 页面下载最新版deb(推荐)或者 AppImage 安装包,保存到你的树莓派上。

deb

双击deb文件直接安装。

或者使用用终端命令:

sudo dpkg -i blockpi_1.0.1_armv7l.deb

注意自己的文件名。

如果安装失败,通常是系统内缺少必要模块导致的,输入

sudo apt install -f

安装模块后重新输入安装命令。

AppImage

右键 AppImage 文件,选择文件属性-权限-执行-所有人,确定。双击直接运行程序。

如果不是官方最新系统,可能需要手动安装前置包:

sudo apt update sudo apt install python3-gpiozero sense-hat python3-sense-emu sense-emu-tools

安装完成之后,在树莓派菜单中可以看到多了 BlockPi 的菜单项。

启动 BlockPi 之后可见图形化编程界面。

FAQ

开发和构建

需要NodeJS 12以上稳定版,以及npm或者Yarn(推荐Yarn)。如果你使用npm,下方的命令中的yarn需要替换为npm。

克隆仓库:

git clone https://github.com/alienzhangyw/BlockPi.git

安装:

cd BlockPi yarn install

关于如何创建新积木,可以参考谷歌Blockly的文档。

打包所有积木脚本:

yarn build:blocks

打包Python代码生成脚本:

yarn build:generator

运行BlockPi:

yarn start

打包发行Windows版本:

yarn dist:win

打包发行树莓派版本:

yarn dist:linux

树莓派版本只能在非arm架构的Linux系统(如Ubuntu或WSL)上打包,遇到权限问题需要在命令前加上sudo。

开发和打包过程中最容易遇到的是需求包的下载问题,网上有很多解决方法,比如使用国内镜像或者自行翻墙,就不详细讲了。

项目地址:

https://github.com/alienzhangyw/BlockPi

教程案例:

https://github.com/alienzhangyw/BlockPi/wiki/%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B

作者的知乎专栏:

https://zhuanlan.zhihu.com/BlockPi

趣小组讨论:

https://talk.quwj.com/topic/797

KUNBUS RevPi Nodes:工业级树莓派的Node-RED应用

Node-RED和RevPi节点:适用于小型解决方案和快速原型制作

开发工具Node-RED实际上来自家庭自动化和智能家居领域,并以一种简单易懂的方式帮助将设备和服务相互连接。但是在某些情况下,它也用于工业物联网(IIoT)。为了能够协调服务和设备使其结合,记录它们的状态并对其进行远程控制,我们必须进行网络连接并将它们彼此连接。在某种程度上,它们必须彼此“交谈”,交换信息,以便它们还可以远程接收和执行命令。

例如,在智能家居中,气象站和服务通过互联网连接到电动百叶窗和窗户:如果天气晴朗和炎热,百叶窗会自动降低;如果下雨,则窗户可以在开始前关闭自己。如果您已将设备连接到Alexa或Siri等数字助理,则还可以按需控制百叶窗和窗户—即使出门在外也可以通过智能手机进行控制。

家庭自动化的这一原则适用于所有应用领域:即使使用工业物联网,流程也仍然是:“如果发生这种情况,就会触发该功能。” 精确地,这些流可以在Node-RED中清晰,可理解地显示。

举一个例子:

Node-RED流

Node-RED的魔力在于图形用户界面:输入,输出和处理节点可以简单地从节点面板拖放到工作表面板中并进行连接和配置。

可执行流将在后台自动生成,并且可以通过调试面板轻松找到可能的错误。通过这种方式,可以快速且易于理解地映射不同的场景,并且还可以立即对其进行测试:可以在开发过程中提供已部署的代码(即代码)。

得益于Apache 2.0 下的Node-RED许可,一个庞大的开源社区聚集在一起,从智能家居或工业的所有应用领域开发和提供解决方案。这也是使此开发工具如此吸引人的原因。

Node-RED和erminas RevPi节点,用于快速原型制作

通过流程生成快速运行的代码和连贯的视觉表示的可能性帮助我们通过快速原型制作解决方案:Node-RED支持我们向现场客户提供实用的解决方案,进行尝试并与客户的员工一起发展没有编程和软件开发经验的人。

因此,Erminas和KUNBUS共同分享了软PLC Revolution Pi, 我们可以在RevPi节点开发的IIoT项目中使用它。这使我们能够在概念阶段从系统和机器中获取数据,并与客户一起开发最小可行产品(MVP)和概念验证(PoC)。基于此,我们后面可以开发更复杂的解决方案,以与erPUB和OPC UA一起使用以及在云(Azure,AWS)中使用数据。

对于小型工业物联网解决方案,Node-RED和Revolution Pi的结合以及某些传感器的结合可以是车间数字化的良好第一步。但是只是一小部分。

关键任务应用的专业解决方案

由于使用Node-RED可以很好地,快速且容易地映射和控制许多小进程,因此它不太适合作为关键任务应用程序的runtime环境。因为在安全性和可靠性方面,Node-RED在复杂而关键的业务流程中迅速达到了极限。尽管如此,在Node-RED中创建的原型仍非常适合作为专业应用程序的信息基础,该应用程序可根据客户需求量身定制并满足所有安全标准。

(本文内容材料来自erminas)

8GB内存版树莓派4已发布,官方定价75美元

树莓派4已经发布了将近一年,基金会公布了这一年的销售量将近 300 万片。今天官方宣布 8GB 内存的树莓派4已开售,定价为 75 美元。

我们在树莓派4上使用的BCM2711芯片可以寻址高达16GB的LPDDR4 SDRAM,我们提供更大内存版本的真正障碍是缺少8GB LPDDR4封装。但是我们在美光的合作伙伴在今年初的努力下,今天我们能很高兴地宣布 8GB 内存的树莓派4即将上市,价格仅为75美元。

如果你是发烧级用户,需要编译大型软件,或者运行大负载的服务,或者只是希望一次可以开更多浏览器选项卡,那么 8GB 内存的树莓派会很适合你。

为了为新的内存封装提供更高的电流,8GB 版本的树莓派调整了电源组件。从 PCB 右侧的 USB2.0 接口附近移除了开关模式的电源适配器,同时在 USB-C 电源连接器旁添加了一个新的开关。

树莓派的默认操作系统镜像使用 32 位 LPAE 内核和 32 位 Userland。这允许多个进程共享所有 8GB 的内存,但要受到限制——即单个进程不能使用超过 3GB 的内存。对于大多数用户而言,这并不是一个严格的限制,特别是因为Chromium 中的每个标签都有自己的进程。坚持使用 32 位 Userland 的好处是,从 2011 年的 Alpha 板到现在的 8GB 内存版树莓派,都可以使用同一套系统镜像。

但是,希望将所有 8GB 映射到单个进程的地址空间中的高级用户们则需要 64 位 Userland。之前已经有很多选择,包括 Ubuntu 和 Gentoo。

顺带一提,今天树莓派官方发布了自己的 64 位操作系统映像的早期测试版(early beta)。它包含与之前常规的 32 位系统镜像相同的一组应用程序和相同的桌面环境,但是基于 Debian arm64 port 构建。

官方的 32 位和 64 位操作系统镜像都有一个新名称:Raspberry Pi OS,期待树莓派社区更加繁荣!

下载地址:https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2020-05-28/2020-05-27-raspios-buster-arm64.zip

Barrier:PC 与树莓派的键盘鼠标共享方案

常见一种树莓派的使用场景,桌子上一台 PC、一块树莓派、各用一套键盘鼠标和显示器。PC 作为工作站安装了 Windows 系统,树莓派作为学习 Linux 的环境使用。

下面给大家介绍一个名叫 Barrier 的软件,专门为类似上面的场景而设计,使用一套键盘和鼠标即可操作多台电脑(或树莓派)。

Barrier 允许你在多台计算机之间共享外围设备,从而可以将键盘和鼠标托管在一台计算机上。可以简单地将光标从一个屏幕拖到另一个屏幕,从一个设备拖到另一个设备,剪切板都可以互相打通,就好像是魔术一样。

支持不同的系统之间使用,Windows、Linux、macOS 都不在话下。

软件下载页面:

https://github.com/debauchee/barrier/releases

Windows 下载 exe 安装包安装,macOS 下载 dmg 安装包安装。树莓派系统的话更简单,一行命令即可完成安装。

sudo apt install barrier

安装完成之后需要配置当前的机器是服务器还是客户端,这里会将服务器连接的键盘鼠标共享给多个客户端。

服务器和客户端之间通过 IP 相互通讯。通过软件设置多个主机屏幕的位置,来调整共享鼠标时显示器的位置关系。主要的功能配置界面如下图。

想象一下自己就是站在一面显示器墙前面的男人的那种赶脚吧。

via https://github.com/debauchee/barrier

工业级树莓派在软PLC logi.CAD 3上的使用

Logi.CAD3是用于在Revolution Pi上创建控制应用程序的工程软件。logi.RTS runtime已经预安装在工业树莓派RevPi上,并在RevPi启动时自动启动。利用logi.CAD3,你可以使用软件PLC将你的应用提高至工业等级。

本示例演示了一个程序,运行时将输出端口轮流循环置1。如果将输入端置1,输出端的循环将停止。如果再次将输入端置0时,输出端将继续开始循环置1。

下面开始正式操作。

– 将RevPi Core连接到电源。

– 打开网页浏览器。

– 在浏览器的地址栏中输入RevPi Core的IP地址。

之后将进入登录界面。

– 使用用户名“admin”登录。

– 输入密码。你可以在RevPi Core侧面的标签上找到它。

– 单击“LOGIN”。

现在你可以看到RevPi Core的当前设备状态。第一步是要激活logi.CAD3运行时:

– 单击“SERVICES”标签。

– 单击“Enable/Disable Modbus Slave” 行中的“Enabled”。

– 单击“SAVE ALL”按钮。

– 单击“APPS”标签。

– 单击“PiCtory”后面的开始按钮。

进入到PiCtory界面。

– 打开设备目录中的“I/O Devices”文件夹。

– 选择RevPi DIO。

– 按住鼠标左键将RevPi DIO拖到RevPi Core左侧。

– 单击“File>Save”以保存文件。

– 单击“Tools>Reset Driver”。这将激活设备的更改。

运行logi.CAD3。打开后可以看到“Project Explorer”,初次打开时这里是空白的。

接下来通过点击“File>Import”来导入提供的Demo代码。

– 选择“General>Existing Projects into Workspace”。

– 单击“Next”。

– 选择“Select archive file”之后单击“Browse…”选中提供的Demo压缩包。

– 单击“Finish”。

这样就成功地导入了Demo项目。

– 双击“Revolution Pi”打开文件。

– 在代码行中设置你的RevPi Core的IP地址。

下面我们需要换个视角。

– 单击右上角的“Application Testing”。

进入界面之后可以看到窗口里已经设置好了程序对应的变量。

变量栏的下方依次是源代码和错误日志。

然后单击Tutorial项目前的展开箭头,再单击RevolutionPi前的展开箭头。选中RevolutionPiResource。

单击绿色齿轮图标建立PLC连接。

建立连接后的状态如下图。

单击向上的箭头来编译和上传该应用。

可以看到程序自动开始运行。输出端口将轮流循环置1。此时如果将输入置1,输出信号将停止循环置1。

如果再次将输入置0,输出端将继续开始循环置1。那么输入输出端口又是如何在软件中定义的呢?单击右上角的“Application Creating”按钮回到Application Creating视角。

在“Project Explorer”窗口中单击Tutorial前面的展开箭头,然后单击globals前面的展开箭头。双击打开RevolutionPiResource文件。

在打开的窗口可以看到使用的全局变量,以及每个变量在RevPi Core中对应的寻址地址。

在PiCtory中勾选变量中的Export选项,将允许后续在logi.CAD3中使用该变量。选择“File>Export”,将打开一个选项框。

选择“Structured Text IEC 61131-3”并输入文件名后,将在编辑器中创建并打开全局变量的定义,里面含有变量名及变量地址信息。用这个导出的文件替换globals下的RevolutionPiResource文件,就可以使用这些变量了。

该软件还有一个快捷的操作方式。当展开RevolutionPi后,在RevolutionPi Resource文件上单击右键,然后选中“Load IO configuration”。

所有在PiCtory中勾选了Export选项的变量都会自动地导入到该项目中。在程序中使用这些变量时,需要在VAR_EXTERNAL部分中插入变量的定义。

以上就是工业树莓派在logi.CAD 3的使用,除了logi.CAD 3以外,诸如Codesys的软PLC也可以在Codesys上使用,想了解更多可联系广州虹科电子或搜索工业物联网技术关注公众号。

使用树莓派和MCC 134搭建远程温度监控

工业上的零下200摄氏度超低温数据该如何采集?下面我们将基于 MCC 134 HAT 做一个远程的数据采集监控,并通过 Python 编程将数据自动发布到 Twitter 上。

冰柜部件清单:

热电偶 T-Type,-200°C 至 260°C 传感器

树莓派套件 – 包括电源、SD卡(预装OS)、HDMI连接线

MCC-134 树莓派热电偶HAT

安装配件:

1台支持HDMI输入的显示器或电视机

USB 鼠标

USB键盘

1把螺丝刀

注意:由于这里用到了 Twitter,所以呢还需要具备访问 Twitter 的技能。

配置 Twitter 开发者账号

创建 Twitter 账号,填好账号的 email 和 phone number。

到 Twitter Apps 注册成开发者,然后创建一个 App。

获取并保存 Consumer keys 并生产访问 token/secrets。

安装硬件

按照图下所示安装好排针插座、MCC 134 HAT 和树莓派。

拧下热电偶上的公扁平引线连接器,并记下哪根电线是(+)和(-)。

将(+)连接到 MCC 134 的 CH0H 端子,将(-)连接到 CH0L 端子。

将热电偶传感器安装在冰柜上。

将装好了系统的 SD 卡插入树莓派,连接网线并给树莓派上电。

配置树莓派并安装 MCC 134 库

运行下面的命令安装 MCC 134 库。

cd ~/Documents mkdir freezercheck sudo cp /usr/bin/python3 /usr/bin/python git clone https://github.com/mccdaq/daqhats.git cd daqhats sudo ./install.sh

继续部署发推的程序。

cd ~/Documents/freezercheck pip install tweepy wget https://raw.githubusercontent.com/hsiaolab/MinusEightyBaby/master/scripts/freezerbot.py

修改脚本中的 Keys。

用文本编辑器或 nano 命令打开 /Documents/freezercheck/freezerbot.py

用 Twitter Bot Keys 替换其中的 ‘XXX’。

运行脚本。

python freezerbot.py

译自:https://github.com/hsiaolab/MinusEightyBaby

相关视频:

基于树莓派的温度采集模块MCC 134网络服务器范例

https://url.cn/3uqjQpdL?sf=uri

基于树莓派的温度采集模块MCC 134数据记录仪范例

https://url.cn/65DSrqb0?sf=uri

目前 MCC 118 扩展板可通过 Measurement Computing 公司官网购买获得 http://china.mccdaq.com。

有关本产品的相关问题和支持可以在 https://talk.quwj.com/topic/916 讨论,可获得 MCC 工程师专业的解答和技术支持。

更多 MCC 的数据采集方案:https://www.nxez.com/partner-mcc