材料
- esp32开发板*1
- 步进电机
- 电源
- 无源蜂鸣器(可替换成有源,程序要修改)
目录
控制原理
基于趣讨教MQTT控制平台,MQTT订阅话题为:用户id/自定义加密字符串/
可通过MQTT Dash安卓软件进行订阅,画面如下:
ESP32接收MQTT的报文信息,报文内容为:步进数-wg
通过程序解析报文,步进电机转相应的步数,带动连接步进电机上的狗粮容器,倾倒到地上,实现远程喂狗。
也增加了蜂鸣器,当接收到喂狗指令,开始喂狗的时候,蜂鸣器发出报警,召唤狗子。
程序
[scu name=”arduino-ide-post”]
/*
*趣讨教创客网:https://www.qutaojiao.com
*一个有趣好玩的网站
*/
#include "AccelStepper.h"
const int motorPin1 = 19; // 连接ULN2003模块引脚 A或in1
const int motorPin2 = 18; // 连接ULN2003模块引脚 B或in2
const int motorPin3 = 5; // 连接ULN2003模块引脚 C或in3
const int motorPin4 = 17; // 连接ULN2003模块引脚 D或in4
const int stepMode = 8; //单拍(全步):4 双拍(半步):8
int moveFlag = 1; // 移动标记位
//喂食表示变量
bool wsz=false;
//蜂鸣器
int freq = 2000;
int channel = 0;
int resolution = 8;
int bzPin=16;
// EN
int resPin=4;
AccelStepper stepper(stepMode, motorPin1, motorPin3, motorPin2, motorPin4);
long int oldtime,oldtime2;
void setup(){ //初始化函数
stepper.setMaxSpeed(1000); // 步进电机最大速度800
stepper.setAcceleration(50); // 步进电机加速度50
Serial.begin(115200);
stepper.setCurrentPosition(0); // 设置初始位置
Serial.println("输入新的位置值 0-归位: ");
//蜂鸣器
ledcSetup(channel, freq, resolution);
ledcAttachPin(bzPin, channel);
oldtime=millis();
oldtime2=millis();
}
void loop(){ //主循环函数
// if(millis()-oldtime>60000){
// client.publish("1/mtopic", "在线");
// oldtime=millis();
// }
if(millis()-oldtime2>300000 && wsz){
ledcAttachPin(bzPin, channel);
ledcWriteTone(channel, 3000);
client.publish("1/mtopic", "重启中~");
delay(2000);
// oldtime2=millis();
pinMode(resPin,OUTPUT);
digitalWrite(resPin,0);
delay(500);
digitalWrite(resPin,1);
// ESP.reset();
}
// if(millis()-oldtime>3000){
// // client.publish("1/mtopic", "on-line");
// oldtime=millis();
// ledcDetachPin(bzPin);
// }
if(idMsg=="wg"){
client.publish("1/mtopic", "Begin~");
ledcAttachPin(bzPin, channel);
ledcWriteTone(channel, 2000);
int newPosition = msg.toInt();
moveFlag = 0;
Serial.printf("正移动到新的位置: %dn", newPosition);
stepper.move(newPosition); // Set new moveto position of Stepper
msg="0";
idMsg="0";
delay(2000);
wsz=true;
ledcDetachPin(bzPin);
}else if(idMsg=="s"){
client.publish("1/mtopic", "在线");
}
// while (Serial.available() > 0) {
// }
if ((stepper.distanceToGo() != 0)) {
stepper.run(); // Move Stepper into position
}
if ((moveFlag == 0) && (stepper.distanceToGo() == 0)) {
Serial.printf("移动到指定位置!nn");
Serial.println("输入新的位置值 0-归位: ");
moveFlag = 1;
client.publish("1/mtopic", "OK~");
}
}
[/scu]
很好很好很好 加油努力 你可以的
非常棒!学习了!
日常打卡
你终于复活了 这个网站很有前途 可是收费方面把网站的聚焦点给废了 应该放开讨论 资源共享 先把敌人干掉占有市场,然后再进行有偿提供资源分享 创客迟早普民化 尽早拥有自己的粉丝团肯定是好事
大部分都是不收费的呢,只有小部分原创的是需要的,这也是为了让网站有经费维持下去才不得已为之!
很好很好很好 加油努力 你可以的