arduino多功能垃圾桶

             目录

 

 

智能垃圾桶.................................................................................... 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. 了解OLED显示屏工作原理
  2. 了解舵机原理
  3. 了解超声波模块工作原理
  4. 了解DS18B20温度传感器
  5. 了解按钮控制LED灯

 

     技能目标:

1.学会使用if函数

2.串口通讯监视

3.学会任用do函数

4.学会while函数

5.学会自定义函数

6.学会舵机角度控制

 

 

二.背景知识

   垃圾桶在我们身边随处可见,我们的目标是实现智能化生活,让垃圾桶智能化,在创造便利生活的同时,努力让智能垃圾桶融入每一个家庭的生活之中。迎接人工智能时代的来临,全力让生活充满智能。

 

 

三.知识储备

按键开关:四脚按键开关工作原理
  这种开关的工作原理,其实和普通按钮开关的工作原理差不多,由常开触点、常闭触点组合而成,在四脚按键开关中,常开触点的作用,就是当压力向常开触点施压时,这个电路就呈现接通状态;当撤销这种压力的时候,就恢复到了原始的常闭触点,也就是所谓的断开。这个施压的力,就是用我们的手去开按钮、关按钮的动作。总而言之,四脚按键开关的工作原理还是很好理解的。四脚按键开关怎么接
  
                   
  

上图是接线图,1、2 脚是一端,3、4脚是另一端,不同厂家标示不同。
  轻触开关是按一下接通电路,手松开后电路依然接通,再按一次电路断开;轻触按键是按下去接通电路,手松开电路就断开。
  由于元件体积小、机械强度差,为了可靠接通电路,降低接触电阻,用两组触点并联工作,所以有4个脚,而不是像继电器那样,一组是常开触点,另一组是常闭触点。四脚按键开关怎么接。
  上图是接线图,1、2 脚是一端,3、4脚是另一端,不同厂家标示不同。
  轻触开关是按一下接通电路,手松开后电路依然接通,再按一次电路断开;轻触按键是按下去接通电路,手松开电路就断开。
  由于元件体积小、机械强度差,为了可靠接通电路,降低接触电阻,用两组触点并联工作,所以有4个脚,而不是像继电器那样,一组是常开触点,另一组是常闭触点。

示范简单程序:

可以试一试打开串口监视器看看结果。

 

 

         OLED屏:



OLED特点
(1)功耗低——与LCD相比,OLED不需要背光源,而背光源在LCD中是比较耗能的一部分,所以OLED是比较节能的。例如,24in的AMOLED模块功耗仅仅为440mw,而24in的多晶硅LCD模块达到了605mw。
(2)响应速度快——OLED技术与其他技术相比,其响应速度快,响应时间可以达到微秒级别。较高的响应速度更好的实现了运动的图像。根据有关的数据分析,其响应速度达到了液晶显示器响应速度的1000倍左右。
(3)较宽的视角——与其他显示相比,由于OLED是主动发光的,所以在很大视角范围内画面是不会显示失真的。其上下,左右的视角宽度超过170度。
(4)能实现高分辨率显示——大多高分辨率的OLED显示采用的是有源矩阵也就是AMOLED,它的发光层可以是吸纳26万真彩色的高分辨率,并且随着科学技术的发展,其分辨率在以后会得到更高的提升。
(5)宽温度特性——与LCD相比,OLED可以在很大的温度范围内进行工作,根据有关的技术分析,温度在-40摄氏度到80摄氏度都是可以正常运行的。这样就可以降低地域限制,在极寒地带也可以正常使用。
(6)OLED能够实现软屏——OLED可以在塑料、树脂等不同的柔性衬底材料上进行生产,将有机层蒸镀或涂布在塑料基衬上,就可以实现软屏。
(7)OLED成品的质量比较轻——与其他产品相比,OLED的质量比较小,厚度与LCD相比是比较小的,其抗震系数较高,能够适应较大的加速度,振动等比较恶劣的环境。

 

        

示例程序

看看这是不是你的结果。

 

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,分析分析看看结果。

  1. if :通过if指令,用户可以让Arduino判断某一个条件是否达到,并且根据这一判断结果执行相应的程序。

 

if(表达式) { 语句块 } [/c]  上述结构表示:如果 “表达式” 的条件得到满足则执行语句块。否则Arduino将不执行该语句块。(如图所示)

  1. while:  while循环将会连续地无限地循环,直到圆括号()中的表达式变为假。被测试的表达式变量必须被改变,否则while循环将永远不会中止。可以在代码改变测试变量,比如让该变量递增,或者通过外部条件改变测试变量,比如将一个传感器的读数赋值给测试变量。

while(表达式/循环条件){ 语句块/循环体 }先计算表达式的值,当值为真(非0)时, 执行循环体语句;执行完循环体语句,再次计算表达式的值,如果为真,继续执行循环体……这个过程会一直重复,直到表达式的值为假(0)才退出循环。其执行过程如图所示:

  1. set up函数:   当Arduino程序开始运行时会调用setup()函数。通常我们setup()函数其中初始化一些变量、引脚状态及一些调用的库等。当Arduino控制器通电或复位后,setup函数会运行一次。

 

  1. Loop函数:   在setup()函数对程序完成了初始化后,loop()函数将会运行。loop函数是一个循环体,在Arduino启动后,loop()函数中的程序将会不断运行。通过loop()函数你可以利用你的程序来控制Arduino。
  2. Arduino 库 :通过库的使用可以拓展Arduino开发板的功能。因为有了库,我们可以很轻松的实现Arduino与外部硬件的协作或进行数据通讯。

 

逻辑运算符:

<= ; >= 比较运算符用于和 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

案例描述:

  1. 按照电路图原理图连

红色引线表示5V电源,黑色引线表示接地口,黄色引线和橙色引线表示不同的信号线连接的引脚口也会不同,下文会对不同装置不同的信号引脚口进行分析。

 

 

 

 

 

 

  1. 编写DS18B20显示于OLED程序:

 

 

 

首先我们要用到第4行 #include“U8glib.h”这个关于OLED的库,#include <OneWire.h>

#include <DallasTemperature.h>

 

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行可以通过串口监视器观察变化

 

 

 

 

 

  1. 编写超声波控制舵机:

 

 

首先超声波模块有多个信号引脚Trig,Echo。

 

如图通过7行代码我们知道,我们将两个信号口设置成了Arduino的模拟引脚口 A2 A3. 切记这些命令是在set up loop函数之外,因为这样便于我们任意使用于这两个函数之间。第2行可知我们调用了关于舵机(servo)的库,并了解到servo.write可控制角度变化.   4行可知我们将舵机的引脚口设置为数字9号引脚,并且我们把这个舵机取名叫mysevo  切记舵机只可连接 35691011号引脚口Echo INPUT输入信号,Trig OUTPUT输出信号,serial.begin 设置串口监视器切实观察舵机角度变化。 13行中我们定义了距离如何取,并通过他的变化控制舵机角度。

 

 

7.编写按键控制LED灯程序:

将LED设置为8号引脚,使他输出高电流,其中按钮只是用作开关一样,不按按钮线路断开,按下开关线路闭合。

 

 

电路设计:

本实验主要是三部分,

  1. 通过Arduino和库实现舵机和超声波模块沟通连接.
  2. DS18B20温度值传输给OLED显示
  3. 简单程序按钮控制LED灯

 

 

 

  • 任务扩展:
  1. 制作一个靠近舵机能通过超声波自动打开的程序
  2. 制作一个温度传感器读取OLED显示屏的程序
  3. 制作一个按下按键,LED灯亮,松开熄灭的程序

 

  • 智能垃圾桶实验程序

 

程序编写:

 

  1. 任务要求

 

程序编写:

 

 

参数设置:

 

          初始化:超声波接口Echo A2 ;Trig A3 变量距离;舵机设置 9号引脚;温度传感器4号数字引脚变量温度;OLED设置SCL设置A4;SDA设置A5;按钮设置为8号数字引脚。  延时1000毫秒。

 

 

它的程序就是以上程序的拼装,当你明白以上程序时相信你也会编写了。

#include <Servo.h>

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 <OneWire.h>

#include <DallasTemperature.h>

#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/

此文章不用于商业性,非盈利手段,仅用于参考学习

 

  • 15
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RouDragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值