Adruino:传感器及步进电机
一、传感器*
1、温湿度传感器
DHT11它采用专用的数字采集技术和温湿度传感器技术,包括一个电阻式感湿元件和NTC测温元件,并与一个高性能的8位单片机连接。DATA端采用串行接口(单线双向)与微控制器进行同步和通信。
DHT11的供电电压为3~5.5V。传感器上电后,要等待1s以越过不稳定状态,在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用于去耦滤波。
温湿度传感器模块接口:
• VCC —电源引脚
• GND —电源引脚
• DATA —数字引脚
dht11类库函数
函数 | 解释 |
---|---|
DHT11.read(pin) | 获取返回状态码 pin:与DATA端连接的引脚。 返回:0:OK -1:Error -2:Timeout |
DHT11.humidity | 湿度值 |
DHT11.temperature | 温度值 |
2、空间运动传感器
3、温度传感器
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。测温范围 -55℃~+125℃,固有测温误差1℃。
DS18B20采用单总线接口方式,在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
单总线(One-Wire)采用单根信号线,实现数据的双向传输,具有节省I/O资源、结构简单、便于扩展和维护等特点。
二、电机
1、步进电机
步进电机是将电脉冲转化为角位移的执行元件。当步进电机驱动器接收到一个脉冲信号时,它就驱动步进电机按设定的方向转动一个固定的角度(即步距角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
工作模式
它的工作模式分为单四拍、双四拍、四相八拍三种工作模式。
单四拍
正转绕组的通电顺序: A→B→C→D→A→… 。
反转绕组的通电顺序: D→C→B→A→D→… 。
双四拍
正转绕组的通电顺序: AB→BC →CD→DA→AB。
反转绕组的通电顺序: DA→CD →BC→AB→DA。
四相八拍
正转绕组的通电顺序: A→AB→B→BC→C→CD→D→DA→A。
反转绕组的通电顺序: A→DA→D→CD→C→BC→B→AB→A。
2、直流电机
直流电机将直流电能转换成机械能(直流电动机)的旋转电机。
直流电机的调速方式:(1)改变电机两端的电压 (2)改变磁通量 (3)串联调节电阻。电压越大,转速越快,改变电压是调速常用办法,使用脉冲宽度调制PWM方法,输入不同占空量的方波,改变直流电机电枢两端的电压,即可改变直流电机转速,实现调速功能,可以实现无级调速。
直流电机的换向方法:通过改变输入电压极性实现,即反转电源输入端的正负极连接方向。
3、舵机
三、超声波测距*
HC-SR04是一种应用广泛的超声波测距模块,通过I/O接口给Trig端发测试信号,最少10us的高电平信号,模块会自动发送8个40kHz声波,并自动检测是否有声波返回。若有信号返回则通过Echo端输出高电平。(两次高电平的间隔时间*声音的速度)/2=距离。
HC-SR04类库函数
函数 | 解释 |
---|---|
SR04 sr04(echo,trig) | 类实例化。 |
sr04.Distance() | 读取测量距离,单位cm。 |
案例:
#include "SR04.h" //添加库函数
#define TRIG_PIN 6 //定义引脚
#define ECHO_PIN 7 //定义引脚
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN); //构造函数
long a;
void setup() {Serial.begin(9600); //定义串口波特率Serial.println("Example written by Coloz From Arduin.CN");delay(1000);
}
void loop() {a=sr04.Distance(); //读取障碍物和SR04的距离Serial.print(a); //送串口监视器显示Serial.println("cm");delay(1000);
}
四、蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作 发声器件。
有源蜂鸣器内部有振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,一旦供电,蜂鸣器就会发出声音。
无源蜂鸣器内部不带震荡源,需要加方波信号PWM能够发声。频率不同,震荡出来的音调也不同。
int buzzer = 8; //设置控制蜂鸣器的数字引脚
void setup() { pinMode(buzzer,OUTPUT); //设置数字引脚为输出模式
}
void loop() { unsigned char i, j; //定义变量 for(i=0; i<80; i++) { //输出一个频率的声音 digitalWrite(buzzer,HIGH); //发声 delay(1); //延时1ms digitalWrite(buzzer,LOW); //不发声 delay(1); } //延时1 ms for(j=0; j<100; j++) { //输出另一个频率的声音 digitalWrite(buzzer,HIGH); //发声 delay(2); //延时2ms digitalWrite(buzzer,LOW); //不发声 delay(2); } //延时2ms
}
五、SD卡读写模块
SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信(PC等设备使用)。而SPI方式采用4线制,使用CS、CLK、DataIn和DataOut进行数据通信。SD方式的数据传输速度比SPI方式要快,但采用单片机对SD卡进行读写时一般都采用SPI模式。
Arduino的I/O接口输出5V高电平,SD卡的工作电压是3.3V,故需要通过电平转换才可与Arduino连接,可以使用SD读写模块与Arduino连接。
引脚编号 | SPI模式 | ||
名称 | 类型 | 描述 | |
1 | CS | I | 片选 |
2 | DI | I | 数据输入 |
3 | VSS1 | S | 电源地 |
4 | VDD | S | 电源 |
5 | SCLK | I | 时钟 |
6 | VSS2 | S | 电源地 |
7 | DO | O或PP | 数据输出 |
8 | X | ||
9 | X |
SD卡类库函数
(1)name()
功能:返回文件名。
语法格式:file.name()。
参数说明:file:File类的一个实例 ( SD.open()的返回值)。
返回值:文件名。
(2)available()
功能:检查文件的字节数,available()继承了流实用类。
语法格式: file.available()。
参数说明:file:File类的一个实例 ( SD.open()的返回值)。
返回值:文件的字节数,int类型。
(3)close()
功能:关闭文件。
语法格式:file.close()。
参数说明:file:File类的一个实例 ( SD.open()的返回值)。
返回值:无。
(4)flush()
功能:确保写到文件里的字节存储到SD卡上。当文件关闭时,自动完成。
语法格式:file.flush()。
参数说明:file:File类的一个实例 ( SD.open()的返回值)。
返回值:无。
(5)peek()
功能:从文件中读取下一个字节,连续调用该函数将返回同一个值。peek()继承了流实用类。
语法格式:file.peek()。
参数说明:file:File类的一个实例 ( SD.open()的返回值)。
返回值:下一个字节或字符,若无则返回-1。
(6)position()
功能:获取文件的当前位置(将要读写的下一个字节的位置)。
语法格式:file.position()。
参数说明:file:File类的一个实例 ( SD.open()的返回值)。
返回值:文件位置,unsigned long类型。
(7)print()
功能:输出数据到以写方式打开的文件。按ASCII形式输出数字(例如:123按'1', '2', '3'输出)。
语法格式:file.print(data) 和file.print(data, BASE)。
参数说明:file:File类的一个实例 ( SD.open()的返回值)。 data:输出数据,char、 byte、 int、 long、或 string类型。 BASE (可选参数):输出数据的进制:BIN是二进制;DEC是十进制;OCT 是八进制;HEX是十六进制。
返回值:byte:输出的字节数,读取该数据是可选操作
六、无线射频识别RFID模块
射频识别技术通过无线电信号识别特定的目标并读写相关数据,常用的有低频30kHz~300kHz,高频3MHz~30MHz,超高频3GHz~30GHz等微波技术。RFID读写器有移动式和固定式两种。
一套完整的RFID系统由阅读器(Reader)、电子标签(TAG)也就是所谓的应答器(Transponder)及应用软件三个部分组成。
RFID的类库函数
函数 | 解释 |
---|---|
RFID rfid(SS,RST) | 类实例化对象。 |
rfid.isCard() | 寻卡。 |
rfid.readCardSerial() | 读取卡的串口信息,返回卡的4个字节和一个字节校验码序列号到字符数组serNum。 |
rfid.Init() | 初始化。 |
rfid.auth(authMode,BlockAddr,SectorKay,serNum) | 验证卡片密码。 unsigned char auth:密钥验证模式 unsigned char* SectorKey:扇区密码 |
rfid.read(blockAddr,recvData) | 读数据块。 unsigned char blockAddr:块地址 unsigned char* recvData:读出的数据块 |
rfid.write(blockAddr,writeData) | 写数据快。 unsigned char blockAddr:块地址 unsigned char* writeData:写入16字节数据到块 |
rfid.selectTag(serNum) | 选择卡片并读取卡的存储器容量。 unsigned char* serNum:卡的序列号。 |
rfid.Halt() | 命令卡片进入休眠状态。 |
七、继电器
继电器(英文名称:relay)是电控制器件,是一种能把小信号(输入信号)转换成高电压大功率控制信号(输出信号)的一种“自动开关”。继电器能控制多个对象和回路,能控制远距离对象,故继电器在自动控制及远程控制领域有较广泛的应用。例如控制电灯、电冰箱、洗衣机、车库门等。按继电器的工作原理或结构特征分类,继电器可分为:电磁继电器、固体继电器、舌簧继电器和时间继电器等。按继电器的外形尺寸可分为:微型继电器、超小型微型继电器和小型继电器等。