目录
智能垃圾桶.................................................................................... 1
一、学习目标................................................................................... 2
知识目标....................................................................................... 2
技能目标....................................................................................... 2
二、背景知识................................................................................... 2
三、知识储备................................................................................... 3
按键开关....................................................................................... 2
OLED屏.........................................................................................4
LED................................................................................................5
面包板............................................................................................6
DS18B20温度传感器......................................................................4
舵机................................................................................................5
Arduino编程语句.............................................................................6
Arduino逻辑运算符........................................................................ 7
四、案例实现.................................................................................. 14
案例描述...................................................................................... 14
器械清单.......................................................................................15
电路接线...................................................................................... 16
电路设计...................................................................................... 16
电路仿真...................................................................................... 16
单元调试...................................................................................... 16
各个程序编写............................................................................... 21
五、任务扩展.................................................................................. 21
六、智能垃圾桶试验程序................................................................ 21
七、 知识扩展..................................................................................24
八、反思总结.................................................................................. 24
九,参考文献...................................................................................25
知识目标:
技能目标:
1.学会使用if函数
2.串口通讯监视
3.学会任用do函数
4.学会while函数
5.学会自定义函数
6.学会舵机角度控制
二.背景知识
垃圾桶在我们身边随处可见,我们的目标是实现智能化生活,让垃圾桶智能化,在创造便利生活的同时,努力让智能垃圾桶融入每一个家庭的生活之中。迎接人工智能时代的来临,全力让生活充满智能。
三.知识储备
按键开关:四脚按键开关工作原理
这种开关的工作原理,其实和普通按钮开关的工作原理差不多,由常开触点、常闭触点组合而成,在四脚按键开关中,常开触点的作用,就是当压力向常开触点施压时,这个电路就呈现接通状态;当撤销这种压力的时候,就恢复到了原始的常闭触点,也就是所谓的断开。这个施压的力,就是用我们的手去开按钮、关按钮的动作。总而言之,四脚按键开关的工作原理还是很好理解的。四脚按键开关怎么接
上图是接线图,1、2 脚是一端,3、4脚是另一端,不同厂家标示不同。
轻触开关是按一下接通电路,手松开后电路依然接通,再按一次电路断开;轻触按键是按下去接通电路,手松开电路就断开。
由于元件体积小、机械强度差,为了可靠接通电路,降低接触电阻,用两组触点并联工作,所以有4个脚,而不是像继电器那样,一组是常开触点,另一组是常闭触点。四脚按键开关怎么接。
上图是接线图,1、2 脚是一端,3、4脚是另一端,不同厂家标示不同。
轻触开关是按一下接通电路,手松开后电路依然接通,再按一次电路断开;轻触按键是按下去接通电路,手松开电路就断开。
由于元件体积小、机械强度差,为了可靠接通电路,降低接触电阻,用两组触点并联工作,所以有4个脚,而不是像继电器那样,一组是常开触点,另一组是常闭触点。
OLED屏:
|
示例程序
看看这是不是你的结果。
LED:
发光二极管简称为LED。由含镓(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。
当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光,氮化镓二极管发蓝光。因化学性质又分有机发光二极管OLED和无机发光二极管LED。
面包板:面包板是由于板子上有很多小插孔,专为电子电路的无焊接实验设计制造的。由于各种电子元器件可根据需要随意插入或拔出,免去了焊接,节省了电路的组装时间,而且元件可以重复使用,所以非常适合电子调试和训练。
DS18B20:DS18B20(如上图)内部结构如图5-6所示,主要由4部分组成:温度传感器、64位ROM、非挥发的温度报警触发器TH和TI、配置寄存器。由图5-6可见,DS18B20只有一个数据输入输出口,属于单总线专用芯片之一。DS18B20工作时被测温度值直接以“单总线”的数字方式传输,大大提高了系统的抗干扰能力。其内部采用在线温度测量技术,测量范围为55~125°C,在-10~85℃时,精度为±0.5°C。每个DS18B20在出厂时都已具有唯一的64位序列号,因此一条总线上可以同时挂接多个DS18B20,而不会出现混乱现象。另外用户还可自设定非易失性温度报警上下限值TH和TL(掉电后依然保存)。DS18B20在完成温度变换后,所测温度值将自动与存储在TH和TL内的触发值相比较,如果测温结果高于TH或低于TL, DS18B20内部的告警标志就会被置位,表示温值超出了测量范围,同时还有报警搜索命令识别出温度超限的DS18B20。
舵机:指在自动驾驶仪中操纵飞机舵面(操纵面)转动的一种执行部件。分有:①电动舵机,由电动机、传动部件和离合器组成。接受自动驾驶仪的指令信号而工作,当人工驾驶飞机时,由于离合器保持脱开而传动部件不发生作用。②液压舵机,由液压作动器和旁通活门组成。当人工驾驶飞机时,旁通活门打开,由于作动器活塞两边的液压互相连通而不妨害人工操纵。此外,还有电动液压舵机,简称“电液舵机”。舵机的组成 一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路等,舵机的输入线共有三条,如图6所示,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会搞错。
示例程序:
Arduino 编程语句:打开sweep,分析分析看看结果。
if(表达式) { 语句块 } [/c] 上述结构表示:如果 “表达式” 的条件得到满足则执行语句块。否则Arduino将不执行该语句块。(如图所示)
while(表达式/循环条件){ 语句块/循环体 }先计算表达式的值,当值为真(非0)时, 执行循环体语句;执行完循环体语句,再次计算表达式的值,如果为真,继续执行循环体……这个过程会一直重复,直到表达式的值为假(0)才退出循环。其执行过程如图所示:
逻辑运算符:
<= ; >= 比较运算符用于和 if 联合使用,测试某一条件是否达到。例如测试Arduino的某一个引脚输入值是否达到设定数值。如果是则执行特定程序。换句话说,如果圆括号中的语句为真,大括号中的语句就会运行。否则,程序跳过该代码。【逻辑】-【比较运算符】
模块介绍
|
oled配置:
有了iic操作函数,接着根据oled命令表封装相关操作函数,不知道oled操作命令的可以翻我之前的文章,在oled配置那里有详细介绍,搬过来用即可
oled写命令函数:void oled_Write_cmd(unsigned char cmd);
oled写数据函数:void oled_Write_data(unsigned char dat);
oled清屏函数:void oled_clear(void);
oled初始化函数:void oled_initial(void);
oled显示函数,这个函数是确定将要显示的位置,以及数据采样的格式:void oled_put_char_16x16(unsigned char x,unsigned char y,unsigned char t);
//设置显示坐标函数,t为0时,字符为8x16t为1时,字符为16x16
然后通过oled_Write_data(),将采样到的字符数据写入即可显示。
ds18b20配置(在之前文章也有讲过ds18b20如何驱动及运用):
根据ds18b20操作手册:
检测是否有ds18b20:unsigned char DS18B20_Check(void);
ds18b20初始化:void DS18B20_Init(void);
复位信号:void Rest_sign(void);
读一位数据:unsigned char DS18B20_Read_Bit(void);
读一字节数据:unsigned char DS18B20_Read_Byte(void);
写一字节数据:void DS18B20_Write_Byte(unsigned char dat);
开始信号:void DS18B20_Start(void);
获取温度函数:void get_Temperature(void);
图一
再把所作的三个程序组装,智能垃圾桶的程序就出来了。
名称 |
数量 |
Arduino UNO开发板 |
1 |
杜邦线 |
1扎 |
OLED屏 |
1 |
面包板 |
1 |
DS18B20温度传感器 |
1 |
超声波模块 |
1 |
按钮 |
1 |
舵机 |
1 |
电池 |
2 |
案例描述:
红色引线表示5V电源,黑色引线表示接地口,黄色引线和橙色引线表示不同的信号线连接的引脚口也会不同,下文会对不同装置不同的信号引脚口进行分析。
首先我们要用到第4行 #include“U8glib.h”这个关于OLED的库,#include
#include
OneWire oneWire_9(9);
DallasTemperature sensors_9(&oneWire_9);
DeviceAddress insideThermometer;这都是温度传感器的库和必备条件,
其次自定义一个函数第24行 viod draw();这个函数中的u8g.就可以通过arduino把我们想输入资料或文字输入进OLED,第七行是OLED显示必须的代码,具体不做过多解释。第30行print(temperatrue);后文会提到它在loop函数中而draw()函数也在loop中。10,11行中的数字(1,10),(100,25)是字符的位置OLED板定义是128*64行。Long函数和int差不多都是字符定义成一个数字。
43行可以通过串口监视器观察变化
首先超声波模块有多个信号引脚Trig,Echo。
如图通过7行代码我们知道,我们将两个信号口设置成了Arduino的模拟引脚口 A2 A3. 切记这些命令是在set up 和loop函数之外,因为这样便于我们任意使用于这两个函数之间。第2行可知我们调用了关于舵机(servo)的库,并了解到servo.write可控制角度变化. 4行可知我们将舵机的引脚口设置为数字9号引脚,并且我们把这个舵机取名叫mysevo 切记舵机只可连接 3,5,6,9,10,11号引脚口。Echo INPUT输入信号,Trig OUTPUT输出信号,serial.begin 设置串口监视器切实观察舵机角度变化。 第13行中我们定义了距离如何取,并通过他的变化控制舵机角度。
7.编写按键控制LED灯程序:
将LED设置为8号引脚,使他输出高电流,其中按钮只是用作开关一样,不按按钮线路断开,按下开关线路闭合。
电路设计:
本实验主要是三部分,
程序编写:
程序编写:
参数设置:
初始化:超声波接口Echo A2 ;Trig A3 变量距离;舵机设置 9号引脚;温度传感器4号数字引脚变量温度;OLED设置SCL设置A4;SDA设置A5;按钮设置为8号数字引脚。 延时1000毫秒。
它的程序就是以上程序的拼装,当你明白以上程序时相信你也会编写了。
#include
Servo servo_9;
volatile int distance;
float checkdistance_A2_A3() {
digitalWrite(A2, LOW);
delayMicroseconds(2);
digitalWrite(A2, HIGH);
delayMicroseconds(10);
digitalWrite(A2, LOW);
float distance = pulseIn(A3, HIGH) / 58.00;
delay(10);
return distance;
}
#include
#include
#include "U8glib.h"
String i="Tepture:";
int s=0;//变量秒 用来显示
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // 小E开发板上面就是用的这个
volatile int temperture;
OneWire oneWire_4(4);
DallasTemperature sensors_4(&oneWire_4);
DeviceAddress insideThermometer;
float ds18b20_4_getTemp(int w) {
sensors_4.requestTemperatures();
if(w==0) {
return sensors_4.getTempC(insideThermometer);
}
else {
return sensors_4.getTempF(insideThermometer); }}
void draw() {
u8g.setFont(u8g_font_unifont); // 设置字体 这句必要
u8g.drawStr( 1, 10, "Hello world!");//第一个是x第二个是y坐标
u8g.setFont(u8g_font_ncenB14);//还是先设置一个字体
u8g.setPrintPos(0,44);//然后设置一个位置
u8g.print(i);//然后就是数据
u8g.print(temperture);
}
void setup(){
servo_9.attach(9);
distance = 0;
servo_9.write(0);
delay(0);
pinMode(A2, OUTPUT);
pinMode(A3, INPUT);
Serial.begin(9600);
temperture = 0;
sensors_4.getAddress(insideThermometer, 0);
sensors_4.setResolution(insideThermometer, 9);
Serial.begin(9600);
}
void loop(){
distance = checkdistance_A2_A3();
Serial.println(distance);
if (distance <= 15) {
servo_9.write(120);
delay(500); }
if (distance >= 35) {
delay(1000);
servo_9.write(0);
delay(500); }
delay(1000);
temperture = ds18b20_4_getTemp(0);
Serial.println(temperture);
if(s!=millis()/10)
s=millis()/10;
//上面这一句是取系统运行秒数 单位ms除以1000就是秒
u8g.firstPage();
do {draw(); }
while( u8g.nextPage() ); //延迟一段时间后重新生成图片
delay(10);}
七.知识拓展:
而实用,垃圾桶内内置蜂鸣器和RTC时钟模块,可以进行精准定时和报时。DS18B20提供的温度数据使得垃圾桶摇身一变成为了温度播报员。当夜幕降临,桶内内置的LED小夜灯可以将垃圾桶摇身一变成为可爱的小精灵,在寂静的黑夜中发出温暖而和蔼的光芒
1.通过这节课我们学会了超声波模块是如何工作尝试了让 OLED显示我们想要显示的内容,学会了按钮的工作原理,了解LED灯
2.软件方面,了解了if函数学会了自定义函数
3. 本节课所学内容为垃圾箱控制,OLED显视
参考文献
arduino中文社区
https://www.arduino.cn/forum.php
太极创客
http://www.taichi-maker.com/homepage/arduino-basic-tutorial-index/
此文章不用于商业性,非盈利手段,仅用于参考学习