手把手教你做一个物联网垃圾桶(ARDUINO ESP8266)

这篇具有很好参考价值的文章主要介绍了手把手教你做一个物联网垃圾桶(ARDUINO ESP8266)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近自创的项目结题了,就顺手将相关的技术细节记录一下,也给需要做自创的同学提供一个简单的可复制的小项目

智能垃圾桶的选型智能垃圾桶diy,物联网,嵌入式硬件,单片机

通过充分考虑实际生活场景,加入了IP65级别防水设计,可以满足大多数需要场景,此外采用升压和可充电电池,践行环保理念,实现长续航和低碳设计,采用金属齿轮舵机充分考虑长期使用,可以实现一年以上的使用,加入物联网模块,实现智能交互

防水紫外线灯带 

智能垃圾桶diy,物联网,嵌入式硬件,单片机

UNO主板

智能垃圾桶diy,物联网,嵌入式硬件,单片机

ESP8266

智能垃圾桶diy,物联网,嵌入式硬件,单片机

可充电电池(12500)

智能垃圾桶diy,物联网,嵌入式硬件,单片机

升压模块(自己选就行)

智能垃圾桶diy,物联网,嵌入式硬件,单片机

超声波模块(SR04)

智能垃圾桶diy,物联网,嵌入式硬件,单片机

金属齿轮舵机(MGS90)

智能垃圾桶diy,物联网,嵌入式硬件,单片机

12V继电器

研究现状:

   市面上现阶段智能垃圾桶成本相对较为高昂,此外智能化程度不高,难以作为将来物联网的智能家居的一部分此外市场上没有智能开盖的桌面垃圾桶,开盖多半是按压式,非常不便捷

   随着生活水平的提高,人们更加追求干净、健康、绿色的生活方式。

研究趋势:

             智能化

 提高人们生活舒适精致度

  以低成本实现需求

     实用耐用好用

研究意义:

增强大学生的创新意识和创新能力

增强我们的机械设计制造的动手能力

实现对生活废弃物的病菌消杀

为生活中的卫生健康提供保障。

项目简介:本装置通过紫外线等消毒方式对携带病毒的生活废弃物进行一定程度的消杀,从而大大降低清洁人员和拾荒者的感染概率,省财省力省时,减轻人们除了防疫以外的其它生活负担,对当前社会现状具有一定的实用性及创新性。同时充分考虑紫外线对人眼的刺激,做了开盖前自动关灯处理,考虑到紫外线灯长时间工作会产生较大热量,设计了照明和休息时长。

实施方案:

通过超声传感器实现位置距离的准确获取,从而实现对用户状态的信息精确判别

通过设计的电路实现对于紫外线灯和舵机的精确控制,并留存状态标志位,使得可以无线智能控制

智能垃圾桶diy,物联网,嵌入式硬件,单片机

 智能垃圾桶diy,物联网,嵌入式硬件,单片机

网络安全方面,使用加密网络控制MQTT协议,只有知道特定密钥才可以访问,并且适配了图形化控制界面,接入专门软件点灯blinker”,任何用户只要获得分享权限就可以使用

充分的可拓展性和共享性,专门的密钥可以通过手机号共享,且可以接入小爱同学等AI助手

运行逻辑:本次设计采用了双机通信技术,实现了较好的WIFI通信效果,其中UNO作为主机,ESP8266作为从机

智能垃圾桶diy,物联网,嵌入式硬件,单片机

 本装置做到在实现感应开盖,杀毒灭菌的智能逻辑和灵敏基础上,实现wifi互联,从而实现远程开盖,通过利用紫外线等装置,定时自动消杀废弃物,对生活垃圾进行预消毒工作。实现物联网,互联网与垃圾桶的融合创新

智能垃圾桶diy,物联网,嵌入式硬件,单片机

 智能垃圾桶diy,物联网,嵌入式硬件,单片机

具体代码

ESP8266(上)和UNOR3(下)

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//支持小爱同学
#define BLINKER_WITHOUT_SSL      //非SSL加密通信接入,省堆栈  
#include <Blinker.h>

#define LED  LED_BUILTIN  // 板子上的灯 
#define PASSIO  2  // 板子上的io2
char auth[] = "4a633cdd91eb"; // blinker app提供的秘钥
char ssid[] = "小琮的Xiaomi 13 Pro";// wifi 名字
char pswd[] = "23456789";// wifi 密码

bool wsState;
uint8_t wsMode = BLINKER_CMD_MIOT_DAY;
// 新建组件对象
BlinkerButton Button1("btn-abc");//注意:要和APP组件’数据键名’一致
BlinkerButton Button2("btn-open");//注意:要和APP组件’数据键名’一致
// 按下BlinkerAPP按键即会执行该函数
void button1_callback(const String & state) {
 BLINKER_LOG("get button state: ", state);
 digitalWrite(LED, !digitalRead(LED));
 Blinker.vibrate();
}
 void button2_callback(const String & state)
{
    digitalWrite(PASSIO, !digitalRead(PASSIO));
    BLINKER_LOG("get button state: ", state);
    Button1.icon("icon_2");
    Button1.color("#FFFFFF");
    Button1.text("一直开盖");
    Button1.print("on");
}

//小爱电源类回调
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
        digitalWrite(LED_BUILTIN, LOW);       
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(LED_BUILTIN, HIGH);
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}

void setup() {
 // 初始化串口,并开启调试信息,调试用可以删除
 Serial.begin(115200); 
 BLINKER_DEBUG.stream(Serial);
 // 初始化IO
 pinMode(LED_BUILTIN, OUTPUT); 
 digitalWrite(LED_BUILTIN, HIGH); // 初始化 led 高电平 ,则灯熄灭状态
 pinMode(PASSIO, OUTPUT); 
 digitalWrite(PASSIO, LOW); // 初始化 2 低电平 ,则灯熄灭状态
 // 初始化blinker
 Blinker.begin(auth, ssid, pswd);
 Button1.attach(button1_callback);
 Button2.attach(button2_callback);

 //小爱同学务必在回调函数中反馈该控制状态 
 BlinkerMIOT.attachPowerState(miotPowerState);//注册回调函数
// BlinkerMIOT.attachQuery(miotQuery);
} 
void loop()
{
  Blinker.run();

}
/*程序说明:基于UNO 本程序通过超声波判断距离实现舵机角度变化 并且通过定时器实现扫描超声波 实现闭盖时进行紫外线消杀(每工作10分钟休息10分钟) 单位cm*/
//当您使用Servo库时,开发板的9号和10号引脚的PWM功能是无法使用的。
/*注意事项:
(1)如果你使用了 MsTimer2 库, 则 pin11 和 pin3 就不能再用做 PWM 输出了! 因为该 pin3 和 pin11 的 PWM 是靠 timer2 帮忙的! (tone()也是)
(2)注意 Servo.h 库与 TimerOne 都是使用内部定时器 timer1 会影响pin 9, pin 10 的 PWM
(3)tone() 使用 timer2 定时器; 若使用 Tone 库的 Tone 对象(Tone 变量)也是优先使用 timer2 定时器,若用两个 Tone 变量则 timer1 也会被用掉, 用三个 Tone 则连控制 millis( )的 timer0 也会被用掉。
(4)别忘了, timer0 负责帮忙控制 pin 5 和 pin 6 的 PWM 输出。只要不去改变 timer 的 Prescaler 就不会影响其控制的 PWM pin, 但MsTimer2 库与 tone( )都会改变 Prescaler ! !*/
#include <Servo.h>            //加载文件库
#include <MsTimer2.h>  //没安装的自己安装

#define limit_distance 15     //宏定义感应距离单位cm
#define uvcpin  10 //紫外线灯控制引脚(正)
#define worktime 600 //工作时间 单位10ms
#define resttime 600 //休息时间 单位10ms
#define pospin 9 //舵机引脚
#define posclose 120
int pos = 0; //舵机角度
Servo myservo; //设置伺服对象
const int trigpin = 2;  //超声波输出
const int echopin = 3;  //超声波输入
int posflag = 0; //判断盖子是否开启
int uvcflag = 0; //判断uvc是否开启
int uvctimeflag = 0; //判断uvc休息时间
volatile int pastflag = 0;//用于扫描后传递超声波距离比较信息
long int uvctime = 0; 
long int uvcnotime = 0;
volatile float distance; 

void scanTimer()//中断函数
{
  distance = 0;
  digitalWrite(trigpin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigpin,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigpin,LOW);
  distance = pulseIn(echopin,HIGH)/59.70;
  delay(10);  // 前面为超声波检测程序
  if(distance < limit_distance)
  {
     pastflag = 1;
  }
  else pastflag = 0;
}

void poscontrol()
{
  while(pastflag == 1) //判断距离确定是否开关
  {
    digitalWrite(uvcpin,LOW);
    myservo.write(posclose);
    delay(1000);	
    posflag = 1;
  } 
  if(posflag == 1)
  {
    for (pos = posclose; pos >= 0; pos -= 1)
    {
        myservo.write(pos);
        delay(15); 					
    }
    delay(100);
    posflag = 0;
  }
} 

void setup() {
  pinMode(trigpin,OUTPUT);
  pinMode(uvcpin,OUTPUT);
  pinMode(echopin,INPUT);
  myservo.attach(pospin, 500, 2500); //修正脉冲宽度
  myservo.write(0);//每次开启自动关闭盖子
  delay(500);
  scanTimer(); //每次启动先扫描一下
  MsTimer2::set(300, scanTimer); //设置中断,每1000ms进入一次中断服务程序 scanTimer()
  MsTimer2::start(); //开始计时_开启定时器中
}

void loop() {
  if(pastflag == 1)
  {
    poscontrol();  //调用舵机函数
   pastflag = 0;  //清除标志位
 }
  if(posflag == 0 && pastflag == 0)
  {
      digitalWrite(uvcpin,HIGH);
      uvcflag = 1;
  }
  else
  {
    uvcflag = 0;
    digitalWrite(uvcpin,LOW);
  }
  //每工作10分钟休息10分钟
  if(uvcflag == 1 && uvctimeflag == 0)
  {
    uvctime++;
    delay(10);
    if(uvctime >= worktime)
    {
      uvctime = 0;
      uvctimeflag = 1;
      digitalWrite(uvcpin,LOW);
      //break;
    }
    
  }
  if(uvctimeflag = 1 && pastflag == 0)
  {
    uvcnotime++;
    delay(10);
    if(uvcnotime >= resttime)
    {
      uvcnotime = 0;
      uvctimeflag = 0;
      digitalWrite(uvcpin,HIGH);
      //break;
    }
  }
} 

如果对于接线有疑问可以留言咨询。文章来源地址https://www.toymoban.com/news/detail-773713.html

到了这里,关于手把手教你做一个物联网垃圾桶(ARDUINO ESP8266)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你做计算机网络基础大题—地址分配

    某单位分配到一个起始地址为14.24.74.0/24的地址块。该单位需要用到三个子网,它们的三个子网地址块的具体要求是:子网N1需要120个地址,子网N2需要60个地址,子网N3需要10个地址。请给出地址的分配方案。 起始地址为 14.24.74.0/24 的地址块,它代表前三个字节为网络前缀(网

    2024年02月09日
    浏览(58)
  • FPGA之手把手教你做多路信号发生器(STM32与FPGA数据互传控制波形生成)

    最近趁热打铁做了一个关于STM32与FPGA通信并且控制高速DA模块产生不同频率信号的正弦波、方波、三角波和锯齿波的项目,从中收获到了很多东西,也踩了一些雷和坑,将分为几篇文章将整个过程分享出来。 这一次准备分享的是将串口解析的出来的波形频率数据以及波形类型

    2024年02月15日
    浏览(50)
  • 手把手教你玩物联网(二)---onenet云平台产品创建

    《手把手教你玩物联网》系列推文将介绍使用RT-Thread----小而美的物联网操作系统,制作一个室内温湿度数据采集,并实现终端采集数据上传物联网云平台onenet,实现云端远程数据监控功能。       上期介绍了ESP8266的使用(手把手教你玩物联网(一)---ESP8266软件包的使用),今

    2024年02月07日
    浏览(50)
  • 手把手教你搭建一个Minecraft 服务器

    这次,我们教大家如何搭建一个我的世界服务器 首先,我们来到这个网站 MCVersions.net - Minecraft Versions Download List MCVersions.net offers an archive of Minecraft Client and Server jars to download, for both current and old releases! https://mcversions.net/   在这里,我们点击对应的版本,从左到右依次是稳定版

    2024年02月09日
    浏览(54)
  • 手把手教你用MindSpore训练一个AI模型!

    首先我们要先了解深度学习的概念和AI计算框架的角色( https://zhuanlan.zhihu.com/p/463019160 ),本篇文章将演示怎么利用MindSpore来训练一个AI模型。和上一章的场景一致,我们要训练的模型是用来对手写数字图片进行分类的LeNet5模型 请参考( http://yann.lecun.com/exdb/lenet/ )。 图1 M

    2024年02月04日
    浏览(56)
  • 【手把手教你制作一个简易版的shell】

    为了简便,命令行中的提示符我们可以直接用printf打印,而具体执行命令可以交给子进程去做,现在的关键是如何将获得的命令行中的命令切割。我们在学习C语言时提到了strtok函数,正好这个函数可以用来作为切割。 基本框架: 不知道大家注意到了没有,我们从键盘中读取

    2023年04月16日
    浏览(51)
  • 手把手教你实现一个循环队列(C语言)

    这是一道leetcode关于队列的经典题: 622. 设计循环队列 https://leetcode.cn/problems/design-circular-queue/  大家注意这个题目要求,这个队列是定长的,如果满了则不能再添加数据。那么我们设计一个队头front和队尾rear,每次添加数据rear向后走,这时就有一个问题, 怎么区分空和满呢

    2024年02月04日
    浏览(57)
  • 手把手教你写出第一个C语言程序

    大家好,我是努力学习游泳的鱼。这篇文章将手把手带你写出人生中第一个C语言程序, Hello, World 。在阅读本文之前,建议先百度 visual studio ,在微软官网下载并安装VS的最新版本,安装时记得勾选“C++桌面开发”选项。 2.1 环境 工欲善其事必先利其器,我们需要写C语言代码

    2024年02月10日
    浏览(55)
  • 手把手教你开发第一个HarmonyOS (鸿蒙)移动应用

    移动应⽤开发: Android IOS HarmonyOS (鸿蒙) 文档概览-HarmonyOS应用开发官网 2.1 系统的定义 2.1.1 系统的定位 HarmonyOS有三⼤特征: 搭载该操作系统的设备在系统层⾯融为⼀体、形成超级终端,让设备的硬件能⼒可以弹性 扩展,实现设备之间 硬件互助,资源共享。 对消费者⽽⾔,

    2024年02月02日
    浏览(74)
  • 手把手教你新建一个winform项目(史上最全)

    最近有粉丝订阅了我的博客专栏《winform控件从入门到精通》,但是却来问我平时使用什么软件来开发winform程序,我本以为订阅我专栏的粉丝至少应该是掌握Microsoft Visual Studio的基本用法,也能够创建winform项目,看来是我大意了,我的错,粉丝们!对于不会创建winform项目但是

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包