传感器的使用
开发环境搭建
该教程适用于瑞莎大部分 SBC 产品,此处使用 ROCK 4C+ 进行实际演示,其他 SBC 可参考此操作。
// 下载示例代码
rock@rock-4c-plus:~$ sudo apt-get install cmake build-essential git python3-dev -y
rock@rock-4c-plus:~$ git clone https://github.com/nascs/sample_code.git
rock@rock-4c-plus:~$ source sample_code/env.sh
// 安装 wiringX 库
rock@rock-4c-plus:~$ git clone https://github.com/wiringX/wiringX.git
rock@rock-4c-plus:~$ cd wiringX
rock@rock-4c-plus:~/wiringX/$ mkdir build
rock@rock-4c-plus:~/wiringX/$ cd build
rock@rock-4c-plus:~/wiringX/build$ cmake ..
rock@rock-4c-plus:~/wiringX/build$ make -j4
rock@rock-4c-plus:~/wiringX/build$ cpack -G DEB
rock@rock-4c-plus:~/wiringX/build$ sudo dpkg -i libwiringx*.deb
LCD 1602/2004
keyestudio 1602 I2C 模块是一个 16 个字符的 2 行 LCD 显示器,采用蓝色背景和白色背光。 keyestudio 2004 I2C 模块是一个 20 个字符 4 行液晶显示屏,蓝色背景,白色背光。下面是在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 LCD 按以下方式接线
LCD <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9 # 开启后可检测到 /dev/i2c-7
- 通过以下命令检查 LCD 是否正常被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 运行 LCD 测试程序
sudo python LCD1602.py
该程序会显示系统当前时间。
ADXL345
ADXL345 是一款小巧、轻薄、低功耗的三轴 MEMS 加速计,具有高分辨率(13 位)测量功能,最大 +-16 g。数字输出数据格式为 16 位二进制,可通过 SPI(3 线制或 4 线制)或 I2C 数字接口访问。ADXL345 非常适合测量倾斜感应应用中的静态重力加速度,以及运动或冲击产生的动态加速度。其高分辨率(4 mg/LSB)可测量小于 1.0 度的倾角变化。下面是在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 sensor 按以下方式接线
ADXL345 <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc adxl345.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会显示 x y z 三个方向上的加速度数据。
Button + LED
这有一个按钮和一个发光二极管。二者皆可通过编程控制,可实现按下按钮对发光二极管的控制。下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
led <--> Radxa ROCK 4
s <--> Pin 3
v <--> 3.3V/5V
g <--> GND
button <--> Radxa ROCK 4
s <--> Pin 5
v <--> 3.3V/5V
g <--> GND
- 运行测试程序
radxa@rock-4c-plus:~$ gcc button_led.c -lwiringx
radxa@rock-4c-plus:~$ sudo ./a.out
该程序会显示 button 是否被按下,若 button 被按下,则 led 是灭的。
Ultrasonic sensor
Keyestudio SR01 超声波传感器价格实惠,可检测超声波传感器与障碍物之间的距离。它采用 CS100A 芯片,兼容 3.3V 和 5V。其最大探测距离为 3 米,盲区小于 4 厘米。与蝙蝠的原理一样,超声波模块发出的是人体听不到的高频信号。如果遇到障碍物,它们就会返回。接收到返回的信息后,它将通过确定发射信号和接收信号的时间差来计算传感器与障碍物之间的距离。下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
ultrasonic sensor <--> Radxa ROCK 4
trig <--> Pin 3
echo <--> Pin 5
v <--> 3.3V/5V
g <--> GND
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc ultrasonic_sensor.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会输出超声波传感器测得的距离。
4-digit 7-segment Display
keyestudio 4 位 LED 显示器模块集成了一个 0.36" 4 位 7 段显示器共阳极,有 12 个引脚。它使用 TM1637 驱动芯片。 该模块有 4 个间距为 2.54 毫米的控制引脚,可通过跳线直接连接到微控制器。因此,控制矩阵非常简单,无需大量布线。可让微控制器通过信号接口控制 4 位 LED 段显示屏,大大节省了微控制器的 IO 引脚资源。模块上有两个 3 毫米的固定孔,方便安装到其他设备上。如果您一直在关注矩阵显示屏,但因其复杂性而犹豫不决,那么这款产品就是您一直在寻找的解决方案!下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
4-digit 7-segment Display <--> Radxa ROCK 4
CLK <--> Pin 40
DIO <--> Pin 38
VCC <--> 3.3V/5V
GND <--> GND
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc tm1637.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会显示数字 "1024"。
OLED module
OLED 是有机发光二极管的简称。在微观层面上,OLED 显示屏是由有机发光二极管组成的矩阵,当它们发出能量时就会发光。旧的 LCD(液晶显示器)技术使用电子控制的偏振片来改变光线通过或不通过的方式。这就需要一个外部背光灯来照亮整个显示屏。这需要消耗大量能源,因为在显示屏打开时,必须为所有像素提供足够的光线。新的 OLED 技术只消耗每个像素的电能。因为每个像素都能产生自己的光,所以只有开启的像素才用电。这使得 OLED 技术非常高效;此外,与 LCD 相比,这类 OLED 的制造方式使其非常薄。下面是在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 sensor 按以下方式接线
OLED <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 检查 OLED 是否正常被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc oled.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会显示字符 "Radxa ROCK 4"。
Buzzer/LED/IR transmitter
这里有一个蜂鸣器,一个led和一个红外发射器。三者均可以通过编程来进行控制。下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
buzzer/led/ir transmitter <--> Radxa ROCK 4
s <--> Pin 3
v <--> 3.3V/5V
g <--> GND
- 运行测试程序
radxa@rock-4c-plus:~ cd sample_code/wiringX
radxa@rock-4c-plus:~/sample_code/wiringX$ gcc blink.c -lwiringx
该程序会每隔一秒闪一次灯,蜂鸣器的话会每个一秒响一次。
TCS34725
keyestudio TCS34725 传感器主要使用 TCS34725 色彩传感器芯片。它可以通过 I2C 通信接口与其他控制器通信。Keyestudio TCS34725 色彩传感器是一款低成本、高性价比的 RGB 全彩色彩识别传感器。该传感器可通过光学感应识别物体的表面颜色。传感器在强光照射下输出相应的 RGB 值,帮助还原颜色。此外,为了避免周围环境的干扰,提高准确度,我们还特别在传感器底部增加了一块红外光屏蔽板,使入射光的红外光谱元素降到最低,从而使色彩管理更加准确。在传感器底部可以看到 4 颗黄色高亮 LED,可以保证传感器在环境光较弱的情况下正常使用,真正实现了补光功能。该传感器具有高灵敏度、宽动态范围和红外遮光滤镜。它是一种理想的色敏元件解决方案。它广泛应用于 RGB LED 背光控制、固态照明、健康产品等领域。下面是在 radxa 平台上的使用方法:
- 拉取测试代码
radxa@rock-4c-plus:~$ git clone https://github.com/nascs/TCS34725.git
radxa@rock-4c-plus:~$ cd TCS34725
radxa@rock-4c-plus:~/TCS34725$ git checkout -b test origin/test
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 sensor 按以下方式接线
TCS34725 <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 检查 TCS34725 是否被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 运行测试程序
radxa@rock-4c-plus:~/TCS34725$ sudo python3 example.py
该程序需要在光线比较暗的情况下运行,会识别物体的表面颜色,并输出 RGB 值。
DS3231
DS3231 集成了 TCXO 和晶体,是一款高性价比、高精度的 I2C 实时时钟。该器件带有电池输入,因此即使断开主电源,它仍能保持精确的计时。集成振荡器确保 了器件的长期精度,并减少了元件数量。DS3231 提供商用和工业温度范围,支持 16 引脚小型外线封装(300mil)。模块本身可适应 3.3V 和 5V 系统,无需电平开关,非常方便!下面是在 radxa 平台上的使用方法:
-
使用 rsetup 打开 ds3231 overlay
-
将 sensor 按以下方式接线
DS3231 <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 检查 DS3231 是否被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 添加一个新的 RTC 设备
root@rock-4c-plus:/home/radxa# echo ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-7/new_device
- 检查新的 RTC 设备
root@rock-4c-plus:/home/radxa# ls /dev/rtc*
/dev/rtc /dev/rtc0 /dev/rtc1
- 从 RTC 模块中读取时间
root@rock-4c-plus:/home/radxa# hwclock -r -f /dev/rtc1
2000-01-01 00:01:40.083622+08:00
- 设置系统时间
root@rock-4c-plus:/home/radxa# apt-get install ntp -y
root@rock-4c-plus:/home/radxa# sudo service ntp start
or
date -s "2023-05-09 15:16:35"
- 写入时间到 RTC 模块
- 确保 linux 时间正确后,将时间写入 rtc 模块
root@rock-4c-plus:/home/radxa# hwclock -w -f /dev/rtc1
- 然后读取硬件 RTC 的时间,看看它是否正确
root@rock-4c-plus:/home/radxa# hwclock -r -f /dev/rtc1
2023-05-09 15:18:45.390726+08:00
- 将 Linux 系统时间设置为硬件 RTC 时间
root@rock-4c-plus:/home/radxa# hwclock -s -f /dev/rtc1
- 使用 timedatectl 查看所有时间信息
root@rock-4c-plus:/home/radxa# timedatectl
Local time: Tue 2023-05-09 15:21:49 CST
Universal time: Tue 2023-05-09 07:21:49 UTC
RTC time: Thu 1970-01-01 00:04:27
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
- 设置开机自启
root@rock-4c-plus:/home/radxa# touch /etc/rc.local
root@rock-4c-plus:/home/radxa# chmod 777 /etc/rc.local
root@rock-4c-plus:/home/radxa# cat /etc/rc.local
#! /bin/bash
echo ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-3/new_device
sudo hwclock -s -f /dev/rtc1
DS18B20
DS18B20 是一款数字温度传感器。它可用于量化环境温度测试。温度范围为 -55 ~ +125 ℃,固有温度分辨率为 0.5 ℃。它还支持多点网状网络。部署 DS18B20 可实现多点温度测量。它具有 9-12 位串行输出。下面是在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 one wire
-
断电关机
-
按以下接线方式连接
DS18B20 <--> Radxa ROCK 4
s <--> Pin 37 (GPIO4_D6)
v <--> 3.3V/5V
g <--> GND
- 重启,并检设备是否被识别
若接线正常,目录 /sys/bus/w1/devices/ 下会有一个 28 开头的设备
- 运行测试程序
radxa@rock-4c-plus:~/sample_code/modules/keyestudio$ gcc ds18b20.c
radxa@rock-4c-plus:~/sample_code/modules/keyestudio$ sudo ./a.out
该程序会输出当前温度。
Fan motor
keyestudio L9110 风扇控制模块采用 L9110 电机控制芯片。它可以控制电机的旋转方向,从而控制风扇。该模块设计有安装孔,可兼容伺服电机控制。该模块效率高,配合高质量的风扇,可轻松吹灭 20 厘米距离内的灯火。它是消防机器人开发中必不可少的部件。以下是它在 radxa 平台上的使用方法:
- 按以下方式接线
fan <--> Radxa ROCK 4
INA <--> Pin 13
INB <--> Pin 14
VCC <--> 3.3V/5V
GND <--> GND
- 运行测试程序
radxa@rock-4c-plus:~/sample_code/modules/keyestudio$ gcc fan_motor.c -lwiringx
radxa@rock-4c-plus:~/sample_code/modules/keyestudio$ sudo ./a.out
IR Receiver
红外线被广泛应用于遥控领域。 有了这个红外接收器,如果您有合适的解码器,您的项目就能接收来自任何红外遥控器的指令。在我们的 radxa 平台上,我们适配了 Car Mp3 遥控器。以下是它在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 IR receiver
-
按以下方式接线
IR Receiver <--> Radxa ROCK 4
s <--> Pin 13
v <--> 3.3V/5V
g <--> GND
- 安装测试软件,进行测试
radxa@rock-4c-plus:~$ sudo apt-get install evtest -y
radxa@rock-4c-plus:~$ sudo evtest
我们适配的是 "Car MP3" 遥控器, 按下遥控器的按键,终端上可以看到相应的信息。
MG90s
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。以下是它在 radxa 平台上的使用方法:
- 按以下方式接线
MG90s <--> Radxa ROCK 4
s <--> Pin 13
v <--> 3.3V/5V
g <--> GND
- 运行测试程序
radxa@rock-4c-plus:~/sample_code/modules/keyestudio$ gcc servo.c -lwiringx
radxa@rock-4c-plus:~/sample_code/modules/keyestudio$ sudo ./a.out 90 //90 is angle