12

杨二凯 · 2019年12月26日

基于EAIDK-310 的传感器调试案例介绍(一)

1 介绍

EAIDK-310 开发套件集成 40 Pins IO 扩展接口,其中包括9个GPIO口,可用于高效的控制结构简单的外部设备或者电路,今天我们就介绍下基于EAIDK-310 的传感器调试应用。

1.1 术语

GPIO:通用型之输入输出
VCC:高电平
GND:地

1.2 目的

本案例的目的是:
A. 熟悉EAIDK-310的GPIO的pin角配置
B. 了解GPIO的操作
C. 实际操作传感器硬件接线,以及软件操作

1.3 EAIDK-310

EAIDK(Embedded Artificial Intelligence Development Kit)- 嵌入式人工智能开发套件,是全球首个采用Arm架构的人工智能开发平台,是OPEN AI LAB专为 AI 开发者精心打造,面向边缘计算的人工智能开发套件。硬件平台具备语音、视觉等传感器数据采集能力,及适用于多场景的运动控制接口;智能软件平台支持视觉处理与分析、语音识别、语义分析、SLAM等应用的基础平台和主流开源算法,满足端侧AI教育、算法应用开发、产品原型开发验证等需求。

EAIDK-310作为EAIDK产品系列中的一款套件,该套件硬件平台使用的是含有4核A53 CPU的高性能Arm SoC(瑞芯微rk3228H),通过搭载OPEN AI LAB开发的嵌入式深度学习框架Tengine,为AI应用提供简洁、高效、统一的API接口,加速终端AI产品的场景化应用落地实现。同时,使用自建的源服务器,便于用户快速上手使用。

EAIDK平台,配置专有更新源文档内容服务,该源服务器支持Tengine/Blade CV以及其他标准第三方软件安装和更新。
image.png

EAIDK-310 硬件规格
image.png

EAIDK-310 软件规格
image.png

2 GPIO概述

2.1 什么是GPIO

GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个通用可编程IO接口,即GPIO。

接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。

2.2 传感器

EAIDK-310能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。传感器能够对周围环境的变化做出反应,例如温度、声音、光照(包括红外)、距离、压力、重力、姿态、磁场、烟粉尘等,也就是说它能够将周围环境的变化变成电信号输出。正是因为有了他们,我们就可以根据这些传感器输出的信号来调整设备的工作状态,达到与环境互动与世界互动的目的。

本次调试的是37款主流传感器包,基于EAIDK-310调试平台,通过杜邦线连接/调试/实验。

2.3 GPIO分布图

EAIDK-310管脚分布如下图,Pin1和Pin2已经用红圈标出,其他管脚以此类推。
image.png

各个管脚定义如下图
image.png

从上表可以得出。PIN7, PIN11, PIN12, PIN13, PIN15, PIN16, PIN18, PIN22, PIN36为GPIO。

GPIO设置成输出模式时,高电平为3.3V,低电平为0V。

GPIO设置成输入模式时,高于1.8V为高电平,低于1.8V为低电平。

2.4 命令控制gpio

从GPIO管脚定义图可以看出,GPIO的Name格式都是GPIOX_YZ形式,其中X,Z是一个数字,Y是A-D的大写字母,引脚号计算公式为

X*32+F(Y)*8+Z                                                式1

其中当Y=A,B,C,D时, F(Y)分别为0,1,2,3。

以GPIO2_B7为例。通过式1,计算出GPIO2_B7引脚号为232+18+7=79。

切换root权限。

[openailab@localhost ~]$ sudo su

进入 /sys/class/gpio/ 目录 。

[root@localhost openailab]# cd /sys/class/gpio/

生成一个gpio79 的目录。

[root@localhost gpio]# echo 79 > export

进入gpio79目录。

[root@localhost gpio]# cd gpio79/

gpio79目录下主要有以下文件

1)direction: 设置输出还是输入模式

设置输入模式。

[root@localhost gpio79]# echo in > direction

设置输出模式。

[root@localhost gpio79]# echo out > direction

2)value :输出时,控制高低电平;输入时,获取高低电平

设置高电平。

[root@localhost gpio79]# echo 1 > value

设置低电平。

[root@localhost gpio79]# echo 0 > value

3)edge :控制中断触发模式,引脚被配置为中断后可以使用poll() 函数监听引脚

非中断引脚:

[root@localhost gpio79]#  echo “none” > edge

上升沿触发:

[root@localhost gpio79]# echo “rising” > edge

下降沿触发:

[root@localhost gpio79]# echo “falling” > edge

边沿触发:

[root@localhost gpio79]# echo “both” > edge

5.如果想要卸载gpio79,需要回到/sys/class/gpio/ 目录并执行echo 79 > unexport

2.5 GPIO接线指引

实际接线时,先准备好5条以上杜邦线,如下接线能满足大部分传感器。

EAIDK-310接线:

红色接线:5v电源pin脚
黑色接线:GND pin脚
绿色接线:默认称为第1个GPIO口,对应pin编号是79
灰色接线:默认称为第2个GPIO口,对应pin编号是82
白色接线:默认称为第3个GPIO口,对应pin编号是81

当传感器需要接多个gpio口时,按顺序接gpio口即可。
image.png

传感器接线:

一般传感器,示例接线如下:

“S”接GPIO口,下图中绿线是GPIO79;
“-”号表示接GND;
中间没有标的一般是VCC,也可能是GPIO,要根据具体传感器来接。
image.png

2.6 实验时长

运行实验时,实验结束后会自动退出,运行时长不定。

  1. 有的传感器现象比较容易观察,运行的时间较短,比如LED灯显示类实验。
  2. 有的传感器需要实验者手动操作设备,运行的时间会长一点。
  3. 当实验者觉得已经完成实验,不需要继续实验,可以在程序的终端用ctrl+C手动结束实验。

3 获取实验源代码

3.1 下载源码代码:

ftp地址:ftp://ftp.eaidk.net/EAIDK310_Source/eaidk310_sensor_kit/

3.2 GPIO控制源码解读

输入、输出是GPIO常用功能模式,如按键开关案例使用输入模式,蜂鸣器案例使用输出模式。本案例中所有传感器实验源码较简单,下面分别对按键开关、蜂鸣器这两个案例做源码解读示例,其他传感器类似,就不再贴源码解读了。

3.2.1 按键开关

void eaidk310_sensor_pushbotton (int pin)
{
    gpio_init(pin, INPUT);                      //初始化pin脚方向,设置按键开关传感器的方向为input
    for(int i=0; i<EAIDK310_LOOP*3; i++){
        if(read_value(pin)){                     //读取pin脚的值,根据input的值做出不同的响应
            printf("button is not pushed.\n");
        }else{
            printf("button is pushed.\n");
            printf("developer can add codes here.\n");
        }
        usleep(1000*10);                         //延时10ms
    }
}

3.2.2 无源蜂鸣器

void eaidk310_sensor_passive_buzzer (int pin)
{
    gpio_init(pin, OUTPUT);           //初始化pin脚方向,设置无源蜂鸣器的方向为output
    int i,j;
    while(1){
        for(i=0;i<80;i++)
        {
            set_value(pin, HIGH);       //设置无源蜂鸣器的值,发出声音
            usleep(1000);                       //延时1ms
            set_value(pin, LOW);       //设置无源蜂鸣器的值,不发声音
            usleep(1000);                       //延时1ms
        }
        for(j=0;j<80;j++)
        {
            set_value(pin, HIGH);      
            usleep(2000);                      
            set_value(pin, LOW);      
            usleep(2000);                      
        }
    }
}

3.3 编译

本案例源码不依赖第三方库,下载代码后,可通过如下操作进行编译:

unzip eaidk310_sensor_kit.zip
cd eaidk310_sensor_kit
cmake .
make

编译完成后会在当前目录生成可执行文件eaidk310_sensor_test

4 实际操作介绍

4.1 火焰传感器

火焰传感器(即红外接收三极管)是一种对火焰特别敏感的传感器。其利用红外线对火焰的敏感特性,用特制的红外线接收管来检测火焰,然后将火焰的亮度转化成电平信号供控制器处理。

4.1.1 实验材料实图

EAIDK-310,4条杜邦线,火焰传感器
image.png

4.1.2 实验步骤

  1. 正确接好硬件接线
  2. 执行如下软件程序命令
sudo ./eaidk310_sensor_test -s flame

4.1.3 预期结果

当没有火焰靠近时,打印 “the device flame is negative.
当有火焰靠近时,打印“the device flame is positive.“ ”the device active now.

4.2 电磁继电器

继电器是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。

4.2.1 实验材料及实图

image.png

4.2.2 实验步骤

  1. 正确接好硬件接线
  2. 执行如下软件程序命令
sudo ./eaidk310_sensor_test -s relay

4.2.3 预期结果

打印:the device relay is active,继电器有实际继电器打开的动作和声音。

两种方式结束实验:

  1. 程序运行一小段时间后,程序自动退出;
  2. 在该程序的终端按键ctrl + C

4.3 按键开关

三按键模块包含3个四脚按键,依靠金属弹片来保护受力情况;在三脚按键开关中,当某个按钮被按压时,电路导通;当撤销这种压力的时候,电路断开。这个施压的力,就是用我们的手去开按钮、关按钮的动作。

4.3.1 实验材料及实图

image.png

4.3.2 实验步骤

  1. 正确接好硬件接线
  2. 执行如下软件程序命令
sudo ./eaidk310_sensor_test -s pushbotton

4.3.3 预期结果

当没有按键时,打印:button is not pushed.
当按键时,打印:button is pushed. developer can add codes here.

两种方式结束实验:

  1. 程序运行一小段时间后,程序自动退出;
  2. 在该程序的终端按键ctrl + C

4.4 震动开关

震动传感器,从字面意思可以判断,传感器能够检测震动中的物体。其内部含有导电珠子,器件一旦震动,珠子随之滚动,就能使两端的导针导通。

4.4.1 实验材料及实图

image.png

4.4.2 实验步骤

  1. 正确接好硬件接线
  2. 执行如下软件程序命令
sudo ./eaidk310_sensor_test -s shock

4.4.3 预期结果

当没有震动时,打印:the device is not shocked.
当有震动时,打印:the device active now. the device shocked.

两种方式结束实验:
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C

4.5 迷你磁簧

磁簧开关是一种可以通过磁场控制的电气开关,即它是磁性的操作开关。在内部,簧片开关由一对铁磁金属触点或簧片组成。根据是否存在磁场,簧片开关触点将关闭或打开。

4.5.1 实验材料及实图

image.png

4.5.2 实验步骤

1.正确接好硬件接线
2.执行如下软件程序命令

sudo ./eaidk310_sensor_test -s minireed

4.5.3 预期结果

当没有磁铁靠近时,打印:the device minireed is not magnetic inductive.
当有磁铁贴近时,打印:the device active now. the device mini reed is magnetic inductive.

两种方式结束实验:
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C

4.6 磁簧开关

磁簧开关是一种可以通过磁场控制的电气开关,即它是磁性的操作开关。在内部,簧片开关由一对铁磁金属触点或簧片组成。根据是否存在磁场,簧片开关触点将关闭或打开。

磁簧开关比迷你磁簧多了一个LED的显示,即需要多连接一个pin脚。

4.6.1 实验材料及实图

image.png

4.6.2 实验步骤

1.正确接好硬件接线
2.执行如下软件程序命令

sudo ./eaidk310_sensor_test -s reed

4.6.3 预期结果

当没有磁铁靠近时,打印:the device minireed is not magnetic inductive.
当有磁铁贴近时,打印:the device active now. the device mini reed is magnetic inductive. ,伴有传感器LED灯的显示。

两种方式结束实验:
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C

4.7 蜂鸣器

蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。

有源蜂鸣器与无源蜂鸣器的区别:内部有否震荡源。注意:这里的“源”不是指电源,而是指震荡源。有源蜂鸣器内部带震荡源,所以只要一通电就会叫;无源蜂鸣器内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K-5K的波形脉冲信号去驱动它。

有源蜂鸣器往往比无源的略贵,就是因为里面多个震荡电路。从外观上看,两种蜂鸣器好像一样. 一般有源有源蜂鸣器比无源蜂鸣器厚一点。但是, 从外观上并不能绝对的区分出有源与无源,最可靠的做法除了查看产品的参数手册以外。另一种方式是使用万用表测试蜂鸣器电阻,只有8Ω或者16Ω的是无源蜂鸣器,电阻在几百欧以上的是有源蜂鸣器。

4.7.1 实验材料及实图

image.png

4.7.2 实验步骤

1.正确接好硬件接线
2.执行如下软件程序命令

sudo ./eaidk310_sensor_test -s passivebuzzer

4.7.3 预期结果

蜂鸣器发出吱吱的声音。

两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C

4.8 双色LED(含小双色LED)

双色LED是一种可以显示二色颜色的LED灯, 可以有三种状态: 灭, 颜色1亮, 颜色2亮 . 根据颜色组合的不同, 分为红蓝双色, 黄蓝双色, 红绿双色等等。
注意: LED类的传感器不需要接VCC,可以查看如下硬件接线示意图。

4.8.1 实验材料及实图

image.png

4.8.2 实验步骤

1.正确接好硬件接线
2.执行如下软件程序命令

sudo ./eaidk310_sensor_test -s twocolor

4.8.3 预期结果

LED灯闪烁。

两种方式结束实验:
1.程序运行一小段时间后,程序自动退出
2.在该程序的终端按键ctrl + C

4.9 七彩闪烁

RGB彩色流水灯的原理以及点亮一个LED灯的方法。依次点亮LED灯,在点亮的同时,改变RGB的输出值,就可以改变RGB灯显示的颜色,从而实现彩色的流水灯。

4.9.1 实验材料及实图

image.png

4.9.2 实验步骤

1.正确接好硬件接线
2.执行如下软件程序命令

sudo ./eaidk310_sensor_test -s sevencolor

4.9.3 预期结果

LED灯7彩轮流点亮。

两种方式结束实验:
1.程序运行一小段时间后,程序自动退出
2.在该程序的终端按键ctrl + C

4.10 激光发射

激光头发射的是红色激光束,即平行光束。只有在有雾或者有其他介质的前提下才能看到微弱的红线,而在通常情况下看到的是一个红点。

4.10.1 实验材料及实图

image.png

4.10.2 实验步骤

1.正确接好硬件接线
2.执行如下软件程序命令

sudo ./eaidk310_sensor_test -s laseremit

4.10.3 预期结果

此设备发出红色激光。

两种方式结束实验:
1.程序运行一小段时间后,程序自动退出
2.在该程序的终端按键ctrl + C

4.11 3色RGB LED & SMD RGB

RGB LED灯可以通过混合红色、绿色和蓝色这三种基本颜色来发出不同的颜色。实际上由3个独立的LED组成,红色、绿色和蓝色包装在一个器件上。它有4个引脚,3种颜色中的每一种都有一种引线,而RGB LED类型则有一种共用阴极或阳极。

SMD,它是Surface Mounted Devices的缩写,意为:表面贴装器件,它是SMT(Surface Mount Technology)元器件中的一种。

4.11.1 实验材料及实图

image.png
3色RGB LED

image.png
SMD RGB

4.11.2 实验步骤

1.正确接好硬件接线
2.执行如下软件程序命令

sudo ./eaidk310_sensor_test -s threecolor

4.11.3 预期结果

此设备交替显示3色光。

两种方式结束实验:
1.程序运行一小段时间后,程序自动退出
2.在该程序的终端按键ctrl + C

5 总结

该实验包含了13种传感器(4.8、4.11两节,每节包含2种传感器),本期全部概述数字IO控制,计划后续再分2期介绍剩下传感器,共3期来介绍在EAIDK-310开发套件通过GPIO使用传感器的案例。

如有疑问或想要了解更多关于EAIDK开发平台方面的内容,欢迎加入EAIDK开发者大本营,QQ群:625546458。

image.png

推荐阅读
关注数
3509
内容数
57
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息