如何快速DIY一个智能语音垃圾桶

今日头条

1151人已加入

描述

随着大众环保意识的提升以及社会环境保护监管的加强,全国各地逐步实行垃圾分类政策。

家庭、社区和企业对智能垃圾分类设备的需求也愈发强烈。无论是自己家中还是公司里,随着垃圾分类政策的普及,垃圾桶的功能性也有个更高的要求!

因此,涂鸦开发者基于涂鸦 IoT 平台智能垃圾桶产品的 MCU 接入方案,配合涂鸦三明治语音 Wi-Fi 通信板(VWXR2)和 涂鸦三明治直流供电电源板开发的智能语音垃圾桶,通过语音识别和云端垃圾分类标准数据库对接功能,实现了对垃圾类型的快速识别和垃圾的准确、无接触投放,提供了更加卫生和高效的垃圾分类解决方案。

本教程内容均为涂鸦开发者 @田洋 提供,经其授权编辑发布。

接下来康康我们的技术大牛怎么DIY出一款智能语音垃圾桶吧~

物料清单

硬件 (3)

涂鸦三明治语音 Wi-Fi 通信板(VWXR2)

数量:1

MG996R 舵机控制

数量:1

涂鸦三明治直流供电电源板

数量:1

步骤

第 1 步:作品框图

智能垃圾桶

 

智能垃圾桶

第 2 步:开发过程

硬件部分

语音控制模块

MCU 通信板

MG996R 舵机控制

供电模块

软件部分

采用涂鸦智能 MCU 接入方式完成接入。

1、创建产品。
      使用智能垃圾桶的模型,自定义 DP 云云对接。

2、创建 DP 点。
      添加垃圾分类网站 URL 。

智能垃圾桶

3、创建设备面板。

智能垃圾桶

4、点击保存,扫描二维码可在手机端查看。

第 3 步:MCU_SDK 移植

登录 IoT 平台。

选择目标模组,在产品>硬件开发页面的底部的下载资料区域,下载 MCU SDK。

配置开发板,移植 SDK。

说明: Demo 采用 Arduino Uno 开发板。

1、在 Arduino IDE 中单击文件 > 新建,新建项目。

智能垃圾桶

工程中,您需要注意以下函数:

setup():用于初始化,只执行一次

loop():循环执行函数

2、将 MCU 开发包中文件复制至新建的项目路径下。

3、将.c文件后缀改为.cpp。

4、打开 .ino 文件,即可在 IDE 中发现添加的 MCU SDK 文件。

智能垃圾桶

5、移植代码和报错排查。
MCU SDK 初次导入工程未进行任何移植操作前,编译会参数报错,属于正常现象。后续步骤中,您需要依次对代码进行移植修改,直到编译后没有错误。

说明: 调试方法参见 MCU SDK开发包移植调试。

登录 IoT 平台。

选择目标模组,在产品>硬件开发页面的底部的下载资料区域,下载 MCU SDK。

智能垃圾桶

配置开发板,移植 SDK。

说明: Demo 采用 Arduino Uno 开发板。

4、编写主函数

#include "wifi.h" #include "protocol.h" #include  SoftwareSerial mySerial(6, 7); // RX, TX #define _SS_MAX_RX_BUFF 300 #define relay 10 int PC13 = 3; int s1=4; int time_cnt = 0, cnt = 0, init_flag = 0;

void setup() {   pinMode(relay, OUTPUT);   // 继电器 I/O 初始化   digitalWrite(relay, LOW);      pinMode(PC13, INPUT);     // 重置 Wi-Fi 按键初始化   pinMode(2, OUTPUT);       // Wi-Fi 状态指示灯初始化      Serial.begin(9600);        Serial.println("serial init successful!");   wifi_protocol_init(); } void loop() {    if (init_flag == 0) {     time_cnt++;     if (time_cnt % 6000 == 0) {       time_cnt = 0;       cnt ++;     }

void key_scan(void) {   static char ap_ez_change = 0;   unsigned char buttonState  = HIGH;   buttonState = digitalRead(PC13);   if (buttonState == LOW) {     delay(3000);     buttonState = digitalRead(PC13);       printf("----%d",buttonState);     if (buttonState == LOW) {       printf("123\r\n");       init_flag = 0;       switch (ap_ez_change) {         case 0 :           mcu_set_wifi_mode(SMART_CONFIG);           break;         case 1 :           mcu_set_wifi_mode(AP_CONFIG);           break;         default:           break;       }       ap_ez_change = !ap_ez_change;     }   } } void wifi_stat_led(int *cnt) { #define wifi_stat_led 2   switch (mcu_get_wifi_work_state())   {     case SMART_CONFIG_STATE:  //0x00       init_flag = 0;       if (*cnt == 2) {         *cnt = 0;       }

 if (*cnt % 2 == 0)  //LED 快闪       {         digitalWrite(wifi_stat_led, LOW);       }       else       {         digitalWrite(wifi_stat_led, HIGH);       }       break;     case AP_STATE:  //0x01       init_flag = 0;       if (*cnt >= 30) {         *cnt = 0;       }       if (*cnt  == 0)      // LED 慢闪       {         digitalWrite(wifi_stat_led, LOW);       }       else if (*cnt == 15)       {         digitalWrite(wifi_stat_led, HIGH);       }       break;     case WIFI_NOT_CONNECTED:  // 0x02       digitalWrite(wifi_stat_led, HIGH); // LED 熄灭       break;     case WIFI_CONNECTED:  // 0x03       break;     case WIFI_CONN_CLOUD:  // 0x04       if ( 0 == init_flag )       {         digitalWrite(wifi_stat_led, LOW);// LED 常亮         init_flag = 1;                  // Wi-Fi 连接上后该灯可控         *cnt = 0;       }       break;     default:       digitalWrite(wifi_stat_led, HIGH);       break;   } }

编辑:jq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分