无线传感网络课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口可以调试你的 程序,很方便
digitalWrite(1,HIGH); //当光线暗时,点亮led灯
else
中断Interrupt(INT)
什么是中断
中断的类型 中断三要素 中断作用
什么是中断
单片机暂停正在运行的程序,保存现场,自动转去执行相应 的程序,执行完以后再返回断点继续执行被打断的程序。这个过 程就叫中断。
val = analogRead(A0);
在实际应用中,对于某些温敏、光敏、压敏、热敏传 感器来说,为了测出它们的电阻变化,必要的分压电 路也是必须的,下面是一个简单的光敏测量电路:
IO口D1拉高,相 当于电源。 为了使信号的输入 符合Zigduino的电 压采样范围,对信 号进行必要的分压 是必须的。
外部中断点亮LED
定时器的使用 1602型LCD的应用
常用传感器驱动开发和应用
DHT11:温湿度传感器 ADXL345:三轴加速度传感器 BH1750FVI :光照传感器
DS18B20:温度传感器
单片机IO接口
I/O口是输入/输出的简写,I/O口分数字I/O口和外设I/O口两种。 外设I/O口有ADC接口,TIMER接口(时钟),中断接口,I2C接口, 串口等等。 一个芯片的I/O口引脚是用于数字I/O口还是外设I/O口,可以通过寄存 器配置进行选择。
Serial.print(75); // 输出"75"
Serial.print(75, DEC); // 输出"75"
串口实验一: Serial.print和Serial.write的区别
int i=52;
void setup() { Serial.begin(57600); } void loop() {
中断的类型
可分为:内部中断和外部中断
内部中断有:内部定时器中断、串口中断、AD中断、SPI中断等。 这些设备或者接口都集成在单片机内部。
外部中断有:外部信号引起的中断
中断三要素
1.
中断源:中断产生的来源。
中断方式(外部中断):高电平、低电平、上升沿、下降沿等。 中断服务程序:中断产生以后,单片机去执行的程序。
Arduino核心库函数和系统库函数
void setup()// 初始化配置函数,在 main 函数中首先 被执行,只执行一次
void loop()//无限循环函数 delay()//延迟函数 ……
Zigduino基础实验
通用数字IO口点亮LED 串口的使用 ADC口光敏传感器控制
Arduino包含的以下数字IO口库函 数
void pinMode(uint8_t pin, uint8_t mode):设置管脚的方向, pin表示管脚的序号,mode表示方向,只能取INPUT,OUTPUT 两个值,如下面的代码把管脚10设成输入:
pinMode(10,INPUT); void digitalWrite(uint8_t pin, uint8_t val):设置管脚的数字电 平, pin表示管脚的序号,value表示电平,只能取HIGH,LOW两 个值,如下面的代码把管脚5设成高电平: digitalWrite(5,HIGH); int digitalRead(uint8_t pin):返回管脚的数字电平, pin表示管 脚的序号,返回值只能是HIGH或LOW,如下面的代码将返回管脚 7的数字电平:
Zigduino里面 串口的英文单词用Serial
串口通信有两个方向:发送和接收
串口有一个参数:波特率,(单位是bps)即数据通信的 传输速率。常用波特率数值有( 300、600、1200、 2400 、 4800 、 9600 、 19200 、 38400 、 43000 、 56000 、 57600 、 115200bps )。通信的接收方需要 设置与发送方一致的波特率才可以正确接收到数据。
Serial.print( )打印的是原来的 内容; 而Serial.write( )打印出来的是 ASCII码值
Serial.print(i);
Serial.println(); Serial.write(i); Serial.println();
串口实验二: 实现单片机与计算机之间的串口通信
pinMode(3,OUTPUT); //配置3号数字引脚为输出模式
pinMode(1,INPUT); //配置1号数字引脚为输入模式 } void loop() { if (digitalRead(1)) //读取1号引脚的电平判断是否为高电平
digitalWrite(3,HIGH); //将3号引脚的电平设置为高电平
课程内容
传感技术应用 无线传感网络通信基础 无线传感网络应用
考核办法
பைடு நூலகம்
平时成绩:20% 期末大作业:80%
6
Zigduino开发平台
Arduino体系 优点:易上手,可实现快速应用 单片机开发实质:配置寄存器
硬件平台
软件平台
Eclipse,相比Arduino IDE、KEIL、IAR Arduino程序特点
2.
3.
中断如何使用
三个步骤:
1. 设置需要开启的中断源。 2. 设置中断方式。 3. 编写中断服务程序。
中断的作用
中断使得单片机实现系统调度,实时响应。
使用中断,可以实现定时报警、外部中断报警等功能。
中断库函数
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) 其中的第一个参数表示Arduino中的中断号,第二个参数是中 断处理函数名称(需要用户定义),第三个参数是中断模式,就是什么 情况下触发中断,一共有四种模式:LOW表示低电平触发,CHANGE 表示电平改变时触发,RISING表示电平由低变高时触发,FALLING表 示电平由高变低时触发。
void detachInterrupt(uint8_t interruptNum) 有些中断是会持续产生的,如低电平产生的中断,此时如果不加以控制, 系统会陷入持续的中断处理中,为此在处理中断函数时首先需要把中断 禁止掉,detachInterrupt就是用于完成此目标,后面的唯一参数就是中 断号。
假定我们自己是单片机,单片机读,是输入;写则是 输出。
串口库函数
void begin(unsigned long baud): 串口使能,并工作在数值为 baud 的波特率下,如下面的代码启动了 UART,并工作在57600的波特率下:
Serial.begin(57600); int available(void):返回串口缓冲区中有多少字节没有读取的数据; int read(void): 返回串口读取到的当前数据,同时从缓冲区中删除此数据; size_t write(uint8_t):往串口写入一个字节; size_t write(const char *str):往串口写入一个字符串; size_t write(const uint8_t *buffer, size_t size):往串口写入一个字节数组的前面的大小为size的部分; print(data):往串口写入数据,可以是数字型的也可以是字符串; print(data, encoding):往串口写入格式化数值数据,encoding 可以是十进制(DEC),十六进制(HEX), 八进制(OCT),二进制(BIN),字符(BYTE),如下面的输出;
ADC实验一:自动光感led灯
用到的元器件:
电阻470欧姆一个,
(左)用于限流。
电阻2K欧姆一个,
(右)用于分压。
10k光敏电阻一个
Led一个 导线5根
程序
int sensevalue=0;
void setup() { pinMode(0,OUTPUT); pinMode(1,OUTPUT); Serial.begin(38400); } void loop() { digitalWrite(0,HIGH); //供电 sensevalue=analogRead(A1); //读取ADC0口模拟值 if (sensevalue>500)
IO口实验二
电路连接
新建IO2工程项目
#include "io2.h"
void setup() { 下载程序后,LED红 灯亮了。然后你用黑 色导线的另外一端插 入到GND即地,此时 就可以发现灯灭了, 因为3号引脚读取的 电平是低电平。(默 认情况下管脚输入的 读取值是高电平)
IO 口实验一 数字 IO口实验一
第一步:
连接电路
IO口实验一
第二步:写程序,新建名字叫IO1的工程项目;
在setup()函数里面写入:
pinMode(3,OUTPUT); 怎么理解delay( )函数?就好像 一个要走路的人在原地踏步! MCU一旦上电,根本停不下来
digitalWrite(3,HIGH); 在loop()函数里面写入: delay(1000);//延时1000ms digitalWrite(3,LOW); delay(1000);
台式机也有串口,所以可以与单片机通信
只需要usb线连接台式机和单片机开发板就可以了 用到AcessPort串口软件 这里程序的功能是将计算机发给单片机的数据发回给计算机
思考:为什么这里Serial.write没有打印出ASCII码值?
void setup() {
Serial.begin(57600); } void loop() { while (Serial.available())
总结
数字IO口既可以是输入,也可以是输出。但是无论是输入还是输 出,它是都是数字型的,要么是 0 (零电压 LOW ),要么是 1 (电源电压HIGH)。
当它为高电平即电源电压,它相当于电源正极,但是它的输出电 流受限于单片机IO口。为低电平时,相当于GND即地。
(UART)串口:串行通信接口
void analogReference(uint8_t mode)
其中mode可选列表如下:
INTERNAL1V5:1.5V内部参考电压; INTERNAL1V6:1.6V内部参考电压; DEFAULT:默认内部1.8V参考电压;
int analogRead(uint8_t pin):返回管脚的模拟电平,即AD采样的结果,只能用 在模拟管脚上, pin表示管脚的序号,返回值的范围是0-1023,如下面的代码将返 回管脚A0的采样结果:
无线传感网络(WSN)
无线传感网络关键词
英文:Wireless Sensors Networking
传感 无线网络
概念
无线传感器网络是一种分布式传感网络,它的末梢是可以感知和检查外部世 界的传感器。WSN中的传感器通过无线方式通信,因此网络设置灵活,设备 位置可以随时更改,还可以跟互联网进行有线或无线方式的连接。通过无线 通信方式形成的一个多跳自组织网络。
Serial.write(Serial.read());
delay(1000); }
ADC
ADC,英文解释为Analog-Digit Convert(模拟数字转换),简 单意思是单片机可以读取外部的模拟电压值转化成数字值。
Zigduino一共有6个AD管脚即模拟输入管脚
为了实现Zigduino管脚的模拟输入,我们需要了解最基本的AD采样。所谓AD采 样就是把模拟信号转换成数字信号,在转化的过程中需要关注采样精度、采样频 率和采样范围,对于Zigduino使用的Atmega128RFA1来说,它内置的是10位的 AD采样精度,即采集出来的数值范围是0-1023,采样频率则和应用程序相关, 但最快不能超过 MCU 的限制,采样范围表示的是允许的模拟信号的幅度。对于 Atmega128RFA1 来说,用户可 以选择 1.5V,1.6V,1.8V 或任意外 部输入的在 01.8V之间的电压作为参考电压,也是采样的最高电压,iDuino默认的采样范围是01.8V,用户可以通过下面的函数来改变参考电压: