0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

智能垃圾桶DIY教程

454398 来源:wv 2019-08-30 09:37 次阅读

第1步:项目

垃圾桶设计为在超声波距离传感器检测到人员时打开。当传感器没有检测到任何人3秒钟时,它会向后运行电机直到它按下按钮。温度和湿度传感器(DHT)在垃圾桶中记录条件并计算内容物何时会腐烂。液晶显示屏显示时间,直到清空为止。

步骤2:零件清单

1 - Arduino MEGA 2560

1 - 面包板

1 - 10k欧姆电位器

1 - LCD屏幕(与Hitachi HD44780驱动程序兼容)

1 - DHT11

3 - 10k欧姆电阻

1 - 220欧姆电阻

1 - 电机控制L298N带H桥

1 - 12伏直流电机

1 - 12伏电源

1 - 超声波传感器HC-SR04

1 - 按钮

步骤3:机械设置

为了打开垃圾桶,我们制作了一个机械臂。它有两个接头,连接到电机和垃圾桶的盖子。就像在第一张照片中一样。

在秒图中可以看到它安装在电机上。

对于电机,我们钻了一些孔并使用了拉链。可以看到在第三张照片中安装在垃圾箱内。手臂粘在盖子顶部

对于超声波测距仪,我们在垃圾桶前面钻了2个孔,直径= 16mm,间距为1厘米(见4和5图片)。/p》

对于其他部件,我们刚刚为拉链或螺钉钻孔。在为其钻孔之后,LCD用螺栓和结安装在盖子上。带拉链的arduino和马达驱动器

臂部件采用3D打印。原理图是在Autofusion 360中制作的,并使用了以下文件:

第4步:Fritzing

第一张图显示了如何系统已连线。

步骤5:代码

代码分为五个不同的功能,每个功能控制一个不同的传感器或一个传感器的一部分。为了利用代码,必须为每个函数创建一个“新选项卡”。

arduino项目文件夹必须包含每个函数的代码作为文件。

为了程序运行不间断我们使用millis()和micros()而不是delay()。

该程序还需要以下库,这些库都可以在库管理器中找到:

LiquidCrystal v1.0.7(内置)

Adafruit Unified Sensor 1.0.2

DHT传感器库v1.3.0

主程序:

//Global variables are defined here. They‘re read through out the entire program.

//Local variables are defined within each function. They can only be changed or read within the function.

//Records whether the ultrasonic sensor has detected something.

//It’s controlled within the DistanceSensor function. It will stay on for four seconds when something is within range.

//Everytime it registers something it refreshes the timer.

boolean Distance_Close;

//Remembers if trashcan is open or closed. One is open and zero is closed.

bool TrashcanState;

//Monitors for local variables.

int ButtonMonitor;

int DistanceMonitor;

int CloseMonitor;

unsigned long TimeOpenMonitor;

unsigned long TimeUsedMonitor;

int DetectedMonitor;

int TemperatureMonitor;

int HumidityMonitor;

//Sets the pin numbers.

const int DCmotorIn1 = 5;

const int DCmotorIn2 = 6;

const int TrigPin = 8;

const int EchoPin = 7;

const int ButtonPin = 9;

const int rs = 13, en = 12, d4 = 11, d5 = 10, d6 = 22, d7 = 24; //Pin numbers for the LCD.

//Libraries, make sure to install all of them.

//All libraries can be found inside the Library Manager.

//“Adafruit Unified Sensor Library” must also be installed in order for dht to work even though it is not loaded.

#include

#include “DHT.h”

#define DHTPIN 3 //Defines which pin should be used for the temperature and humidity sensor

#define DHTTYPE DHT11 //Defines which type of DHT is used. If you have a DHT22 replace DHT11 with DHT22.

DHT dht(DHTPIN, DHTTYPE); //Loads the defined pin and type.

LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Tells the program which pins are installed.

void setup() {

// Code that needs to be run once:

Serial.begin(9600); //Starts communication with the monitor. Make sure that the monitor have the same BAUD speed.

//Determine if pins are reading or writing.

pinMode(TrigPin,OUTPUT);

pinMode(EchoPin,INPUT);

pinMode(DCmotorIn1, OUTPUT);

pinMode(DCmotorIn2, OUTPUT);

pinMode(ButtonPin,INPUT);

dht.begin();

lcd.begin(16, 2); //Sets the dimension of the LCD

}

void loop() {

// put your main code here, to run repeatedly:

DistanceSensor(); //Constantly checks if someone is near the trashcan

OpenTrashcan(); //Checks if the trashcan should opened.

CloseTrashcan(); //Checks if the trashcan should be closed.

LCD();

TempHumid();

//Creates a table for monitoring all the different variables.

Serial.print(“Trashcan State : ”);

Serial.print(TrashcanState);

Serial.print(“ ”);

Serial.print(“Distance_Close: ” );

Serial.print(Distance_Close);

Serial.print(“ ”);

Serial.print(“Button: ” );

Serial.print(ButtonMonitor);

Serial.print(“ ”);

Serial.print(“Temperature: ” );

Serial.print(TemperatureMonitor);

Serial.print(“ ”);

Serial.print(“Humidity: ” );

Serial.print(HumidityMonitor);

Serial.print(“ ”);

Serial.print(“Distance: ” );

Serial.println(DistanceMonitor);

控制距离传感器的功能:

int DistanceSensor(){

//Local variables used only in this function

unsigned long TimeUsed;

unsigned long Wait;

unsigned long WaitExtra;

unsigned long TimeOpen;

bool Detected;

long Duration;

int Distance;

TimeUsed = micros(); //Reads how long the arduino have been on in microseconds.

//Writes the local variables into global variables for monitoring

DetectedMonitor = Detected;

DistanceMonitor = Distance;

//Make the ultrasonic sensor send out a sonic wave and starts two timers.

//It is activated after 12 microseconds as the timer is exceeded and the function restarts.

if (WaitExtra 《 TimeUsed){

digitalWrite(TrigPin,HIGH); //Sends out a sonic wave

Wait = TimeUsed + 10; //Takes the current time and adds 10 microseconds to create a timer

WaitExtra = TimeUsed + 12; //Takes the current time and adds 12 to create a timer

}

//Turns off the sonic wave and reads how long it took for it to return.

//Afterwards it calculates the distance it have traveled.

//The distance is calculated in cm.

if (Wait 》= TimeUsed){

digitalWrite(TrigPin,LOW); // Stops the sonic wave

Duration = pulseIn(EchoPin,HIGH); //Reads how long it took for the wave to return in microseconds.

Distance = Duration*0.034/2; //Calculates the distance

}

//Checks if anyone is within a certain distance.

//This can be changed depending on when you want it to trigger.

//Remember this can‘t be less than 2 cm (0.79 inches) unless you use a different sensor.

if ((Distance 》= 10) && (Distance 《= 30)){

Detected = 1; //Something is detected

}

else{

Detected = 0; //Nothing has been detected

}

//Allows the Distance_Close to be set if someone if within the distance set.

//Refreshes if something is detected again.

if (Detected == 1){

TimeOpen = TimeUsed + 4000000; //Refreshes or sets the time that must pass to reset Distance_Close.

}

//Sets Distance_Close to 1, if the time set in detected hasn’t been exceed.

if (TimeOpen 》 TimeUsed){

Distance_Close = 1;

}

//Sets Distance_Close to 0, if the time set in detected has been exceed.

if (TimeOpen 《= TimeUsed){

Distance_Close = 0;

}

}

控制LCD的功能:

int LCD(){

lcd.setCursor(0, 0); //Begins writing at the top row, from the beginning

lcd.print(“Temperature: ”); //Writes “temperature” on the LCD

lcd.print(TemperatureMonitor); //Writes the number measured by the DHT

lcd.setCursor(0,1); //Begins writig at the bottom row, from the beginning

lcd.print(“Humidity: ”); //Writes “humidity” on the LCD

lcd.print(HumidityMonitor); //Writes the number measured by the DHT

}

打开垃圾桶:

bool OpenTrashcan() {

//If someone is detected within a set range in DistanceSensor, the trashcan open.

if ((TrashcanState == 0) && (Distance_Close == 1)){

//Sets the motor to run at full speed in a certain direction. In our case it is CLOCKWISE???

analogWrite(DCmotorIn1, 0);

analogWrite(DCmotorIn2, 255);

//Stops the entire program to make sure it doesn‘t stop while opening.

delay(600);

//After the delay is over the motor is turned off.

analogWrite(DCmotorIn1, 0);

analogWrite(DCmotorIn2, 0);

//Tells the rest of the program that the trashcan is open.

TrashcanState = 1;

}

}

关闭垃圾桶的功能:

bool CloseTrashcan() {

//Local variable to control the button.

int button;

button = digitalRead(9); //Continually check if the button is pressed or not

//Local variable saved as a global varaible for monitoring

ButtonMonitor = button;

//If the trashcan is open and no one has been within the range of the DistanceSensor for the set time the trashcan closes.

if ((TrashcanState == 1) && (Distance_Close == 0)){

//Starts the motor at full power. It turns COUNTER CLOCKWISE???

analogWrite(DCmotorIn1, 255);

analogWrite(DCmotorIn2, 0);

}

//If the trashcan is open and the button is pressed, the trashcan will close.

if ((button == 1) && (TrashcanState == 1)){

//Stops the motor

analogWrite(DCmotorIn1, 0);

analogWrite(DCmotorIn2, 0);

TrashcanState = 0; //Sets the trashcan as open.

}

}

读取温度和湿度的函数:

int TempHumid(){

//Local variables used only in this function

unsigned long TimeUsed;

unsigned long Wait;

TimeUsed = millis(); //Counts how long the program have been running in millis

//Reads the temperature and humidity every 2.5 seconds.

if (Wait 《 TimeUsed){

int Humidity;

int Temperature;

Humidity = dht.readHumidity(); //Reads the current humidity in percentage.

Temperature = dht.readTemperature(); //Reads the current temperature in celcius.

HumidityMonitor = Humidity; // The humidity is saved in a global variable for monitoring.

TemperatureMonitor = Temperature; // The temperature is saved in a global variable for monitoring.

Wait = TimeUsed + 2500; //Takes the current time and adds 2500 milliseconds to create a timer.

}

}

为了获得灵感和帮助,我们使用了以下来源:

超声波传感器

https://howtomechatronics.com/tutorials/arduino/u.。.

DHT11

http://www.circuitbasics.com/how-to-set-up-the-dh。 。.

该代码基于DHT库提供的示例。它被命名为DHTtester。

L298电机驱动模块

https://www.instructables.com/id/How-to-use-the-L 。..

LCD

https://www.arduino.cc/en/Tutorial/HelloWorld

第6步:评估

自动垃圾桶功能齐全,但还有很多不足之处。

第一个问题是它无法检测何时打开。这可以通过安装伺服而不是直流电机来解决,通过使用可以检测何时打开的按钮或类似物。

秒的问题是超声波传感器有角度和一些困难时间材料太吸音了。它可以通过使用PIR传感器来解决。如果安装了PIR传感器,它可以成角度以便更有可能检测到人。

代码也缺少显示何时应该清空垃圾桶的部分以及可以判断垃圾桶何时清空的部分被清空了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 智能垃圾桶
    +关注

    关注

    2

    文章

    51

    浏览量

    10548
收藏 人收藏

    评论

    相关推荐

    智能垃圾回收箱及其控制系统

    智能高效远程控制智能垃圾桶回收箱本文设计了基于机械传动、嵌入式系统和物联网技术的智能垃圾回收箱及控制系统,包括结构、硬件和软件设计,以及基于
    的头像 发表于 04-13 08:10 362次阅读
    <b class='flag-5'>智能</b><b class='flag-5'>垃圾</b>回收箱及其控制系统

    OpenHarmony南向开发案例:【智能垃圾桶

    智能垃圾桶可以通过数字管家应用来监测垃圾桶当前可用容量,提醒主人及时处理垃圾;通过日程管家可以实现和其他智能设备联动。
    的头像 发表于 04-11 16:01 179次阅读
    OpenHarmony南向开发案例:【<b class='flag-5'>智能</b><b class='flag-5'>垃圾桶</b>】

    智能垃圾回收箱控制系统硬件设计-机智云

    将超声波传感器安装在垃圾桶正上方,根据超声波传播时间计算得到智能垃圾回收箱顶部与垃圾的距离数据,用智能
    发表于 04-09 17:37

    基于机智云物联网平台的智能垃圾回收箱与控制系统研究

    、安全防护和自动报警等功能,满足了设计目标。 文章的主要内容 物联网技术可提高垃圾回收管理效率,可开发智能回收系统,实时监控回收过程,通过物联网协作,收集分析数据,及时清理满载垃圾桶,降低人力成本
    发表于 04-09 17:25

    智能垃圾桶,让生活更便捷——红外测距模块WTU201F2B004引领革新

    智能垃圾桶开发背景: 随着科技的飞速发展,智能家居已经逐渐融入我们的日常生活,带来了前所未有的便捷与舒适。而智能垃圾桶,作为
    的头像 发表于 03-19 13:58 146次阅读

    AI垃圾溢出识别摄像机

    随着城市化进程的加快,垃圾处理成为城市管理中的一项重要工作。然而,垃圾桶溢出现象经常发生,给城市环境卫生和市民生活带来不便。为了解决这一问题,AI垃圾溢出识别摄像机应运而生,利用人工智能
    的头像 发表于 03-13 11:04 144次阅读
    AI<b class='flag-5'>垃圾</b>溢出识别摄像机

    东莞鹏利全自动垃圾桶清洗机——垃圾桶清洗演示

    智能垃圾桶
    鑫金晖
    发布于 :2023年11月09日 14:04:03

    东莞鹏利智能垃圾桶暂存中转站——垃圾桶进出演示#环卫车 #智能垃圾桶

    智能垃圾桶
    鑫金晖
    发布于 :2023年11月09日 14:03:25

    基于CW32的智能语音分类垃圾桶设计

    基于CW32的智能语音分类垃圾桶设计
    的头像 发表于 11-06 16:51 556次阅读
    基于CW32的<b class='flag-5'>智能</b>语音分类<b class='flag-5'>垃圾桶</b>设计

    STM32智能垃圾桶自动识别各类垃圾概述

    离线语音识别识别垃圾种类并且垃圾桶自动翻盖:** 说出唤醒词“垃圾桶”后,再说一句垃圾名称,语音识别模块端识别到相应关键词
    的头像 发表于 10-25 09:58 782次阅读
    STM32<b class='flag-5'>智能</b><b class='flag-5'>垃圾桶</b>自动识别各类<b class='flag-5'>垃圾</b>概述

    基于ARM的家用智能垃圾桶电路图设计

    电子发烧友网站提供《基于ARM的家用智能垃圾桶电路图设计.pdf》资料免费下载
    发表于 10-11 09:59 0次下载
    基于ARM的家用<b class='flag-5'>智能</b><b class='flag-5'>垃圾桶</b>电路图设计

    基于CW32的智能语音分类垃圾桶

    基于武汉芯源半导体CW32F030C8T6和启英泰伦CI-C22GS02制作的智能语音分类垃圾桶,能够实现识别语音来判断垃圾种类,同时打开相应的垃圾桶,可外接普通按键或者触摸按键,也可
    的头像 发表于 08-01 15:39 948次阅读
    基于CW32的<b class='flag-5'>智能</b>语音分类<b class='flag-5'>垃圾桶</b>

    新型智能垃圾桶方案设计介绍

            目前市面上销售的带盖垃圾桶,开盖时均需采用手动或脚踩方式实现,这种开盖方式主要的缺点是给使用者带来既不卫生又不方便。       这种卫生、自动、耗能低、有趣的新型智能垃圾桶是人类
    的头像 发表于 06-29 09:37 1022次阅读
    新型<b class='flag-5'>智能</b><b class='flag-5'>垃圾桶</b>方案设计介绍

    WT588F02B语音芯片在智能垃圾桶上的应用设计方案介绍

    智能化已经成为一种时代趋势,现如今人们的需求使智能化家居成为必不可少的一部分。而垃圾桶是人们日常生活中不可缺少的家居用品,甚至街道上也定点有垃圾回收站。但是现有的
    的头像 发表于 05-23 10:09 647次阅读
    WT588F02B语音芯片在<b class='flag-5'>智能</b><b class='flag-5'>垃圾桶</b>上的应用设计方案介绍

    基于51单片机智能垃圾桶Proteus仿真程序

    基于51单片机智能垃圾桶Proteus仿真设计(包含仿真程序原理图等)
    发表于 05-19 16:18 0次下载