- Arduino案例实战(卷Ⅳ)
- 李永华
- 4921字
- 2021-03-23 22:59:55
4.3 功能及总体设计
本作品主要分为三部分进行设计:网络控制模块、显示模块和振动开门模块。
4.3.1 功能介绍
本开门装置可通过网络控制一个继电器来实现振动传感器的开关,即决定是否启用振动开门方式。启动振动传感器,进入游戏状态后,开门者根据显示屏提供的开门提示敲击对应歌曲旋律,由固定在门上的振动传感器感受两次敲击之间的时间间隔,在误差允许范围内敲击旋律正确则启动直流电机拉开门锁。若开门者敲击节奏错误则更换歌曲,可以继续验证,从安全方面考虑,总尝试次数有限,无论验证成功还是失败,均会亮起对应的提示灯。
4.3.2 总体设计
本项目开关部分选用ESP8266 WiFi模块与单路继电器模块来控制振动传感器的状态;显示部分选用12864液晶屏显示开门提示;主程序部分采用振动传感器感应敲门的节奏频率。若开门节奏正确,则驱动直流电机,门成功打开,同时接入1个RGB三色灯来对应是否成功开启。
1.整体框架图
项目的整体框架如图4-1所示。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P107_3490.jpg?sign=1739694693-BV8TevhFubwON8m03JC2aDOosGI2a3cd-0-f356b2fb28a18ce5ec9d1554d8afccf8)
图4-1 整体框架图
2.系统流程图
系统的流程如图4-2所示。
接通电源以后,服务器发送指令“on”,使继电器处于闭合状态,振动传感器开始工作,显示屏显示开门提示,开门者需按一定频率敲门,振动传感器感受振动频率。频率正确,驱动模块驱动直流电机,开门成功,RGB三色灯的绿灯亮;否则开门失败红灯亮;开门次数超过3次后,需等待10min后才有开门机会。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P108_3496.jpg?sign=1739694693-NqRwK35p03RIKYRJvSUvERS8glk89UWp-0-c3526cba19ec1f0ed697fcb4fb472e10)
图4-2 系统流程图
3.总电路图
系统总电路及Arduino UNO开发板引脚如图4-3所示。
本电路图较为复杂,下面分模块说明各元器件间的引脚连线。
LCD显示模块:12864液晶显示屏采用SPI接线方式。其D/I口、R/W口、E口分别与开发板的数字I/O端10、11、13相连,K(-)、CS1及VSS与开发板GND相连,A(+)、VDD与+5V端口相连。
网络控制模块:ESP8266的VCC端连接Arduino开发板的3.3V来通电,CH_PD通过10kΩ的电阻连接到Arduino开发板的3.3V电源上,模块上的RX、TX作为通信端口,RX接Arduino上的TX,TX接Arduino开发板上的RX端口,两元件的地线相连即可;继电器接通电源,IN端接开发板数字信号I/O口5,COM端接+5V,NC端与振动传感器正极相连,振动传感器负极接地。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P109_3502.jpg?sign=1739694693-KwXkF1NWyenGihOxyVGH0A7i4STl9fOh-0-5ad89066ffdc98fafb2c9049b5616664)
图4-3 总电路图
开门模块:振动传感器的DO口与开发板数字I/O端2相连;小直流电机与直流电机驱动板OA1、OB1相连,2个引脚无方向;电机驱动板的A-IA、A-IB口与开发板数字I/O端3、4相连,VCC和GND端分别接+5V和地;RGB三色灯的GND端口接地,R、G、B端分别接数字I/O口7、6、8。
4.3.3 模块介绍
本项目主要包括三个模块:网络控制模块、主程序模块和LCD显示模块。下面分别给出各部分的功能、元件、电路图和相关代码。
1.网络控制模块
1)功能介绍
Arduino通过ESP8266连接贝壳物联网服务,实现远程控制继电器的闭合断开状态,并将结果反馈至控制界面。
选用贝壳物联网,通过ESP8266-01S、Arduino开发板与PC连接。以AT指令将WiFi模块与物联网连接,并将其设置为透传模式,使其达到通电自动连接的功能;将WiFi模块通过Arduino开发板与继电器、振动传感器连接,进而通过控制继电器的闭合开关状态,控制传感器的工作。
所用元器件:1个Arduino UNO R3,1只继电器,1只振动传感器,1只ESP8266-01S,1只10kΩ电阻,1块面包板,若干杜邦线;ESP8266需先进行透传设置。电路如图4-4所示,元件间的连线如表4-1和表4-2所示。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P110_3511.jpg?sign=1739694693-DnDf1S6aUuZILXssdIROoRHQ6bpBtnjx-0-c8db825498b8a28ada972f042e0788c0)
图4-4 网络控制模块
表4-1 ESP8266-01S接线对照表
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-T110_11451.jpg?sign=1739694693-vlplckpLsM8JBBE2UTjmdHqjsRL91pH7-0-e32e589d9f4a5fcbfaf58f1056e463e2)
表4-2 继电器与常开型振动传感器
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-T110_11452.jpg?sign=1739694693-JrjyHIZQNkECKnI0GKPc4td55WVFjD0I-0-7fa57829abe5ce370aaf9d480ca8b001)
继电器线圈没有电压时,继电器没有吸合,公共端与常闭端接通;当有电压时,继电器吸合,公共端与常开端接通。在这里采用继电器接常闭端法,如图4-5所示。
(1)ESP8266的透传设置。硬件包括USB转TTL模块,ESP8266-01S。软件包括网络调试助手。接线实物如图4-6所示,接线如表4-3所示。
表4-3 接线对照表
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-T110_11453.jpg?sign=1739694693-nqCM7wuTZMhxtLSjIZTWeFpKh2UZqVsh-0-ca0479aed3197148da2fbbdf68314adf)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P111_3581.jpg?sign=1739694693-FxTI3i7qe5lJwx3V4Cm1oP5nUIAQ1h1d-0-e9675e91b97a741a322bedee6ae516f3)
图4-5 接常闭端接法图
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P111_3585.jpg?sign=1739694693-BAnRCvoujeRajuLTxnJM64VhE5zT1Thy-0-cc565edf5a9893f7e35e89a1fba5fe25)
图4-6 接线实物图
(2)串口调试工具及AT指令调试示例。在串口调试工具中选择正确的串口及波特率,本项目采用的波特率为115200,打开“计算机”→“设备管理器”→“端口”,设置如图4-7所示。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P111_3589.jpg?sign=1739694693-sGuJgm65tZxqA04pei87VukkZeuWX0Ut-0-fb84f67fea02187d0b65c431efd508bb)
图4-7 串口及波特率图
打开网络调试助手,设置ESP8266的波特率,如图4-8所示。
(3)AT指令。
①查看版本号(这个非常重要),不同的版本AT指令的操作不太一样。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P111_3593.jpg?sign=1739694693-PL4KUGLPcYd1iKurmaIO3wIWob1nuXXi-0-dae9327677824b3ad5bc80d70c36bbfb)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P112_3596.jpg?sign=1739694693-wS5e01YsMAM9DNjkrgjPpKDN4W1b5Kxq-0-7d905507d4a7a734d01f5032ac245f6e)
图4-8 ESP8266的波特率图
②V1.0+固件命令如下:
第一步:关闭回显功能ATE0。第二步:重启AT+RESTORE。第三步:连接WiFi。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P112_3600.jpg?sign=1739694693-EP3fwCUrZjlZmk6IotEeMRHBmX8WmkqK-0-fd2b25060ed4c98cbed3bfa74d37cbaa)
第四步:ESP8266设备连接服务器。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P112_3602.jpg?sign=1739694693-GyBm0YxO7ZN7hkDuDcqHx0sqHXvbIMCw-0-c88b390ec8bb503f5f1b9ccced9b0391)
需要注意:在连接WiFi的AT指令中,必须使用字符串输入名称和密码,因此需要使用双引号;通过串口发送AT指令时,一定要回车换行,若没有回车换行,会导致发送和返回是一样的,同时串口也不承认"\r\n"指令,只能通过键盘来操作。
至此,ESP8266已经成为一个透传模块,只要给ESP8266通上电,它即可连上WiFi,最终显示结果如图4-9所示。
(4)ESP8266与服务器的通信。
①打开贝壳物联网,注册1个账号并创建1个设备,将会得到设备ID(DEVICEID)、设备密码(APIKEY),记录下来,此时设备不在线。
②将设置好的ESP8266与Arduino、继电器、振动传感器按上面所描述的接线方式连接。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P113_3606.jpg?sign=1739694693-OPO9bfAsJg9ci9RF5VlqNMIXtdSxOQQE-0-130176fe7ab5409cb782eec505483693)
图4-9 ESP8266连接成功
③烧录代码,上传程序。
④刷新贝壳物联网的界面,这时设备显示在线,如图4-10所示;需要注意的是,如果设备不在线,请检查透传是否正确、设备ID及设备密码是否正确。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P113_3610.jpg?sign=1739694693-txBCAhBf1c5eDOTSblocNjDmdhOU1UVW-0-32e03755466c110b2719933edae022f7)
图4-10 贝壳物联界面
⑤点开智能设备中的设备对话,选择上线设备后,命令发送目标选择“设备ID”,发送框内“play”,可观察到振动传感器的指示灯亮了,说明此时振动传感器在工作状态,网络控制模块运行成功。运行过程如图4-10所示。输入和反馈结果如下:
命令输入栏里,输入:play。
命令记录栏里,反馈:sensor on——振动传感器工作。
命令输入栏里,输入:stop。
命令记录栏里,反馈:sensor off——振动传感器不工作。
2)相关代码
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P114_11446.jpg?sign=1739694693-1LbX2tudT0pMhRW470TYjBFvGpZzKLxC-0-b8ce9fca8a4235882dc7b027701dae01)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P115_11445.jpg?sign=1739694693-KATJRbrrRhMW9255M4xbV9ASwUDqE5nB-0-6deccb7f5e943056e06d3529f89b46e9)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P116_11444.jpg?sign=1739694693-mrWMEa6lnmadftH577ZQIWngQ9tLusX7-0-89c0e1845f4b67b6c27d227524bb8eba)
2.LCD显示及振动模块
由于液晶屏显示文字与振动传感器获取的游戏者验证情况有关,代码连续,故将两模块合写。
1)功能介绍
主程序模块:继电器开关闭合使振动传感器接通电源后,振动传感器感受振动频率并与代码内设频率相比较。若敲击次数及时间间隔在容错范围内测试为验证成功,则绿色LED亮,直流电机转动拉动门锁开门;否则红色LED亮,换下一首歌,继续验证。连续错3次后,RGB三色灯闪烁,开门者被禁止继续尝试,10min后可进行下一轮验证。
显示屏模块:每次验证时显示内设歌曲名称,并在验证后显示验证成功或失败信息。
所用元件包括:1个Arduino UNO R3、1个振动传感器、1个普通小直流电机、1个12864LCD液晶屏、1个直流电机驱动板、1个面包板、若干杜邦线。
(1)振动传感器SW-1801P。
基本原理:振动传感器SW-1801P基于弹簧摆动原理,如图4-11所示。塑料管里有一个软弹簧围绕着中心的金属杆,两者平时互不接触,当受到一定外界振动时,就会令弹簧摇晃并碰到金属杆,输出一个接通信号。在静止时任何角度都为开路OFF状态,当受到外力碰撞或者大力晃动时,弹簧变形和中心电极接触导通使两个引脚瞬间为ON状态,当外力消失时,电路恢复为开路OFF状态。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P117_3653.jpg?sign=1739694693-1nRHdDi7r7IY5dB2VaidbkbcyYzjTvKx-0-128cd9c7a8b881b81f90b53419678a3a)
图4-11 振动传感器SW-1801P
对于该振动传感器模块来说,无振动或者振动强度达不到设定阈值时,D0口输出高电平;当外界振动强度超过设定阈值时,模块D0输出低电平。由于导通时间和弹簧的刚性有关,所以该振动传感器的输出带宽很窄,在使用Arduino读取时,使用外部中断功能,如图4-11所示。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P117_3657.jpg?sign=1739694693-bromYhIeEmEDDPJcHQz2YHdF43c8KXmD-0-0c507def53ea83ef99bb67111a17a7e4)
图4-12 振动传感器调试
振动模块VCC接开发板VCC,GND接开发板GND,连接正常,模块电源指示灯会亮。将模块轻放桌面上,调节板上蓝色电位器,直到开关指示灯亮,然后稍微回调电位器,让开关指示灯灭,再用手敲打桌面,使振动传感器有震感,此时,开关指示灯再回到亮状态。振动停止,开关指示灯也会灭。即振动可以触发模块,从而使开关指示灯点亮,如图4-12所示。
示例程序如下:
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P118_11440.jpg?sign=1739694693-awP3bmtM8fD60S37VbRod6o2KS1pIKEB-0-8242ba774d894bad1fdfc7bc5b697ba5)
串口输出部分数据举例如下:
1023 1023 1023 1023 1023 1023 1023 67 257 1023 1023 1023 1023
通过串口监视器,观察敲击振动传感器使其静止时的数据变化,大致确定该振动传感器能否正常工作。可以看到,当传感器感受到振动时,数字会变小。
另外,由于传感器本身质量问题,金属棒可能不在弹簧正中间,此时传感器放置在不同方向(例如竖直和平放)时串口输出数据也不同,所以也要测试一下传感器向不同方向倾斜时的情况,以寻找摆放传感器的合适角度。
(2)12864LCD液晶显示屏(带字库)。
硬件连接:SPI连接方式如总电路所示,汉字内码转换软件、LCD12864RSPI库文件可从网络获取。如果12864库文件适用版本低,需要修改文件。操作如下:Arduino UNO的SPI为10(SS),11(MOSI),12(MISO),13(SCK)。所以,把LCD12864RSPI.h头文件中的
Static const int latchPin = 8; Static const int clockPin = 3; Static const int dataPin = 9;
修改为
Static const int latchPin = 10; Static const int clockPin = 13; Static const int dataPin = 11;
同时,将“LCD12864RSPI.cpp”中的开始部分修改为
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P119_11438.jpg?sign=1739694693-ubhkC2WM2TBoV6fexCc4rAxhhPPbi6Vz-0-9328edf6c43dbb12d7cbe567de5b524c)
(3)普通小直流电机+直流电机驱动板。
L9110 S桥两路直流电机驱动板,如果要将装置应用在真实的房门上,需要动力更大的直流电机,本项目的示意模型只用一个小直流电机即可实现。在后续测试中发现,直流电机驱动板在与其他元件接同一个5V电源时,容易出现问题,所以用另一块开发板单独给它供电。
①模块接口说明。
6P黑色弯排针说明:
1引脚VCC外接2.5~12V电压;
2引脚GND外接GND;
3引脚IA1外接单片机I/O口;
4引脚IB1外接单片机I/O口;
5引脚IA2外接单片机I/O口;
6引脚IB2外接单片机I/O口。
4P绿端子说明:
1引脚OA1 OB1接直流电机2个引脚,无方向;
2引脚OA2 OB2接直流电机2个引脚,无方向。
②模块使用说明。
接通VCC,GND模块电源指示灯亮;
IA1输入高电平,IA1输入低电平,【OA1 OB1】电机正转;
IA1输入低电平,IA1输入高电平,【OA1 OB1】电机反转;
IA2输入高电平,IA2输入低电平,【OA2 OB2】电机正转;
IA2输入低电平,IA2输入高电平,【OA2 OB2】电机反转。
测试程序如下,将电机驱动板的A-IA、A-IB口与开发板数字I\O端3、4相连,OA1、OB1接直流电机两个引脚,无方向,VCC外接5V电压,GND接地。
#define MOTO_A 3 #define MOTO_B 4 void setup() { pinMode(MOTO_A,OUTPUT); pinMode(MOTO_B,OUTPUT); } void loop() { digitalWrite(MOTO_A,LOW); digitalWrite(MOTO_B,HIGH); delay(2000); digitalWrite(MOTO_A,HIGH); digitalWrite(MOTO_B,LOW); delay(2000); }
(4)RGB三色灯。
RGB三色灯原理和一般的LED不同的是,在RGB LED封装内有3个LED,分别为红色、绿色和蓝色。通过控制各个LED的亮度,可以混合几乎任何颜色。实验中用到的是共阴极RGB LED,1个引脚接地,另外3个引脚分别接到Arduino UNO开发板,注意颜色对应。下面是测试程序,这里用到了Arduino开发板的D6、D7、D8引脚。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P120_11434.jpg?sign=1739694693-w8p3XRTg5x9EcV0GNzlZf5LudQUAtkex-0-aadd7db900e48f334334b4ba0c4b0b8f)
程序下载好后,就可以看到颜色的依次循环变化。显示固定颜色的代码则更简单,下面以红灯闪烁为例,红灯对应脚与Arduino开发板D6相连,GND脚接地。
#define red_led 6 void setup() { pinMode(6,OUTPUT); } void loop() { digitalWrite(6,LOW); delay(1000); digitalWrite(6,HIGH); delay(1000); }
(5)歌曲旋律的设置。
①按如下步骤连接好测试电路。12864液晶显示屏:其D/I口、R/W口、E口分别与Arduino开发板的数字I/O端10、11、13相连,K(-)、CS1及VSS与开发板GND相连,A(+)、VDD与+5V端口相连;振动传感器:DO口与开发板的数字I/O端口2相连,VCC接5V,GND接地;小直流电机与直流电机驱动板OA1、OB1相连,两个引脚无方向;电机驱动板的A-IA、A-IB口与开发板的数字I/O端3、4相连,VCC和GND引脚分别接+5V和地;RGB三色灯的GND端口接地,R、G、B引脚分别接数字I/O口7、6、8。
②在Arduino IDE中写入该模块整体代码。
③修改测试程序。将代码内设置每两拍时间间隔的数组(这个数组同时确定了每首曲子的总拍数)设到足够大,以统计足够的拍数。以设置三首歌为例:
int SingGameArr0[] = {100,100,100,100,100,100,100,100,100,100,100,100,100,100 100,100,100,100,100,100,100,100,100,100,100,100,100,100}; int SingGameArr1[] = {100,100,100,100,100,100,100,100,100,100,100,100,100,100 100,100,100,100,100,100,100,100,100,100,100,100,100,100}; int SingGameArr2[] = {100,100,100,100,100,100,100,100,100,100,100,100,100,100 100,100,100,100,100,100,100,100,100,100,100,100,100,100};
④将程序下载到Arduino UNO开发板上,打开串口监视器和音乐播放软件,选一首节奏感比较强的歌,选一段旋律,一边听一边敲振动传感器,如果熟悉要设置的歌,并且能保证每次敲的节奏快慢都一样,那么就不用播放音乐了。
但是,出于准确性的考虑,代码中设置每两拍的时间间隔只有50ms的容错,总错拍数不超过两个,要求精确度高,所以建议在设置节奏时还是听着歌敲击。
⑤观察记录串口输出数据,对同一段旋律进行多次试验,对每段旋律统计每两拍间隔的平均值,记录的数据如表4-4所示。
表4-4 旋律统计数据
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-T122_3721.jpg?sign=1739694693-UzR2TVGBJxYh0wXH9uBimujhSrIdMzYf-0-dabe749cb58e1ae9b1b78004e9099e7e)
⑥如果出现只敲一下却出现一串数据的情况,导致每次敲同一段旋律时得到的拍数不一致,说明这个地方的阈值需要再调大一点,如图4-13所示。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P122_3724.jpg?sign=1739694693-iGSeKROk5nWOUwsHTnvM21HgUGSJfp81-0-be6a7b0276bc50e731d0872b7a75cc57)
图4-13 阈值设置点
⑦统计出全部所需旋律后,修改代码,将它们填入数组。
⑧重新下载新代码,敲击尝试。因为有误差存在,不能每次都验证成功也是正常的。
一般来说,设置代码的人更容易开门成功,因为不同的人对同一段旋律的把握也会有差别,就算敲门的人所敲击的节奏实际上是准确的,只要设置旋律的人听的旋律节奏有偏差,即使旋律正确也无法验证成功。
⑨电路图。电路图如图4-14所示。
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P123_3731.jpg?sign=1739694693-zjLSpy2AQX0ajKJbP4GtYEEuaOHPmfuw-0-d80ea2e70a48ced827ea1ee60fc01f3a)
图4-14 各模块的电路图
2)相关代码
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P124_3737.jpg?sign=1739694693-Wap9AktSATa6mzsJg2RzPxHzUynljwgP-0-c380cd3582f73e833411494bd5c2c4df)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P125_3740.jpg?sign=1739694693-LYUB0j8paHxCFU91HlCi9bOFXtMEG4Ed-0-ace7e0004956a4cc4210502f74bd6c4d)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P126_11429.jpg?sign=1739694693-hYM5D15KqHIUyBPtxQNMNF7gg79AvA7z-0-4d0697eaaabcf896a91b9ad278611f10)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P127_11428.jpg?sign=1739694693-rNC2XB2Mphs2RHJfcCTwXAHIa5KFu87L-0-16ab4e21dc4a72cc1086077b54eeebff)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P128_3774.jpg?sign=1739694693-jRTxH6bu6mAV2hgta2epyCjJq12yN2Uq-0-6825436e117079214bf24fe40d3b8672)
3.主程序代码
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P129_11427.jpg?sign=1739694693-tFicPoQZtQcTLLdu3pSlD83Ifea1DGyQ-0-24db12fd85d85db09e3047d2e201cc0e)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P130_3793.jpg?sign=1739694693-HvTCpmuRkP8J57AvexTFt33Ksi46j8EY-0-269d4b80301eeb5ef7ab63e2c10c5587)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P131_11426.jpg?sign=1739694693-KExjU0y03EHcdeSahUsbiJN3J2cQo4ee-0-b10c37f75829b70cdf7fa9bb5424ea57)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P132_11425.jpg?sign=1739694693-A6WChbuZErQciJQlNyo7kXHXwsxvpJCQ-0-db8a4950d92d5bee933dd21c4ae5577c)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P133_11424.jpg?sign=1739694693-q93e1mFyXyTNhF90VcKLKVIDDk73J7hj-0-d0764ff986243bc507ecc962efd91def)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P134_11423.jpg?sign=1739694693-bDlzFkJm3ax2TUnnYPAWNr7Sn4l0zSWk-0-fd666fa1b86f096c2a1b9f824d356088)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P135_11422.jpg?sign=1739694693-ueT59f0qKKb5IndjXBK62rJ19CrB8zHR-0-16462782ab26297bf1b2cce9c06e979a)
![](https://epubservercos.yuewen.com/1759EC/15253385105228106/epubprivate/OEBPS/Images/Figure-P136_11421.jpg?sign=1739694693-iEDCaQJQsrlpYebnS7FPReuZyLtXziAs-0-37d4b4dbc33237e3abe399301e1a1f89)