亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

DIY 自动喂猫器

组件和用品

机械插座定时器
× 1
步进电机
× 1
步进电机驱动器 L9110S
× 1
线性轴支持 SHF8
× 1
USB 壁式充电器
× 1
SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
USB 公接头转 DIP 适配器
× 1
USB 延长线
× 1
括号角撑
× 1

关于这个项目

当我离开家几天时,喂养我的猫总是一个巨大的挑战。我不得不请朋友或亲戚来照顾我的猫。我在互联网上寻找解决方案,我发现了很多宠物食品分配器产品,但我不喜欢它们。首先,它们非常昂贵。其次,它们只适合处理干猫粮(mycat 大部分时间吃湿猫粮)。最后,它们太大了,我的公寓没有足够的空间。所以我决定建造一个紧凑的、自动的、湿食物优化的猫喂食器。湿食物的问题是,它很快变质。我意识到,打开罐装猫粮后,我最多有 1 天的时间可以使用它。为了节省空间并保持食物质量并使这个项目尽可能便宜和简单,我设计了一台机器,它只能给宠物吃一顿饭。这将让我两天不去喂猫(自由:))。

喂料器的操作非常简单。我将食物装满食物容器(空酸奶盒),关上容器门,然后将带有插座定时器的电缆插入 230VAC 网络。我设置了计时器,以便一天后它会为馈线供电。当仪器通电时,食品容器将被伺服电机打开。一天后,门会打开,猫可以吃一顿美餐了。当我到家时,我取出食物容器并清理剩余的食物并装满新鲜食物,然后将其放回去,关闭盒子的顶部,循环可以重新开始。......

在此视频中可以看到所有主要步骤:

代码

  • Automatic_cat_feeder arduino 代码
Automatic_cat_feeder arduino 代码C/C++
Arduino 固件源代码。我在 Arduino IDE 软件 (https://www.arduino.cc/en/Main/Software)、FTDI 适配器和 Mini-B USB 电缆的帮助下将代码上传到 Arduino pro 迷你板。这是有关如何执行此过程的视频:https://www.youtube.com/watch?v=78HCgaYsA70
代码很简单。在设置中,它会转动步进器而不是在主循环中它等待直到按钮被按下然后它会再次移动。
//自动喂猫器由:J.Rundhall//步进器的原始代码来自: R. Jordan Kreindler 于 2016 年 10 月撰写的草图,用于rotatefloat RPM;boolean isButtonpressed =false;unsigned long timee;// Pin assignmentsint buttonPIN =6;int aPin =4; //IN1:线圈 a one endint bPin =3; //IN2:线圈 b one endint aPrimePin =5; //IN3:线圈 aPrime 线圈的另一端 aint bPrimePin =2; //IN4:coil bPrime 线圈的另一端 bint one =aPin;int two =bPin;int 三 =aPrimePin;int 四 =bPrimePin;int degree =0;//int delay1 =20; // 每一步之间的延迟,以毫秒为单位int delay1 =5; // 每一步之间的延迟,以毫秒为单位//int delay2 =50; // 每次完整旋转后的延迟,以毫秒为单位int delay2 =200; // 每次完整旋转后的延迟,以毫秒为单位int count =0; // 步数int numberOfRotations =1; // 转子的次数 // 转动 360 度。void setup() {// 将所有引脚设置为输出以将来自 Arduino // UNO 的输出信号发送到定子串行的线圈绕组。开始(9600); // 打开串口,设置数据速率为 9600 bps pinMode(6, INPUT_PULLUP); //ButtonpinMode(aPin, OUTPUT);pinMode(bPin, OUTPUT);pinMode(aPrimePin, OUTPUT);pinMode(bPrimePin, OUTPUT);Serial.println("Clockwise");// 从所有线圈开始 offdigitalWrite(aPin, LOW );digitalWrite(bPin, LOW);digitalWrite(aPrimePin, LOW);digitalWrite(bPrimePin, LOW);for(int ii=0;ii<20;ii++) doTurn();}void loop() { //读取按钮值转换为变量 int sensorVal =digitalRead(6); // 请记住,上拉意味着按钮的逻辑被反转。 // 当它打开时它会变高,当它被按下时它会变低。 // 按钮按下时打开引脚 13,未按下时关闭: if (sensorVal ==LOW) { isButtonpressed =true; } else { if(isButtonpressed) { isButtonpressed =false; doTurn();数字写入(aPin,低);数字写入(bPin,低);数字写入(aPrimePin,低);数字写入(bPrimePin,低); } }}void doTurn(){ // 将电流发送到 // 1. aPin // 2. aPin 和 bPin // 3. bPin // 4. 然后到 bPin 和 aPrimePin // 5.然后是 aPrimePin // 6。然后是 aPrimePin 和 bPrime Pin // 7。然后是 bPrimePin // 8。然后是 bPrimePin 和 aPin。 // 因此使用半步法生成步骤 // 1. 设置 aPin High digitalWrite(aPin, HIGH);数字写入(bPin,低);数字写入(aPrimePin,低);数字写入(bPrimePin,低); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 所以,delay1 // 2. 将 aPin 和 bPin 通电到高电平 digitalWrite(aPin, HIGH);数字写入(bPin,高);数字写入(aPrimePin,低);数字写入(bPrimePin,低); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 因此,延迟 1 毫秒 // 3. 将 bPin 设置为高 digitalWrite(aPin, LOW);数字写入(bPin,高);数字写入(aPrimePin,低);数字写入(bPrimePin,低); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 因此,延迟 1 毫秒 // 4. 将 bPin 和 aPrimePin 设置为 HIGH digitalWrite(aPin, LOW);数字写入(bPin,高);数字写入(aPrimePin,高);数字写入(bPrimePin,低); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 因此,延迟 1 毫秒 // 5. 将 aPrime Pin 设置为高电平 digitalWrite(aPin, LOW);数字写入(bPin,低);数字写入(aPrimePin,高);数字写入(bPrimePin,低); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 因此,延迟 1 毫秒 // 6. 将 aPrimePin 和 bPrime Pin 设置为 HIGH digitalWrite(aPin, LOW);数字写入(bPin,低);数字写入(aPrimePin,高);数字写入(bPrimePin,高); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 因此,延迟 1 毫秒 // 7. 将 bPrimePin 设置为 HIGH digitalWrite(aPin, LOW);数字写入(bPin,低);数字写入(aPrimePin,低);数字写入(bPrimePin,高); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 因此,延迟 1 毫秒 // 8. 将 bPrimePin 和 aPin 设置为 HIGH digitalWrite(aPin, HIGH);数字写入(bPin,低);数字写入(aPrimePin,低);数字写入(bPrimePin,高); // 在给线圈通电之间允许一些延迟,以允许 // 步进转子有时间响应。延迟(延迟1); // 所以,延迟 1 毫秒 count =count + 8;度数 =(360.0 * (count / 400.0)); if ((numberOfRotations % 2) ==1) { // 检查旋转次数是否为偶数 Serial.println(" Clockwise "); Serial.println(度); // 以度为单位打印角度位置 } else { // 如果 numberOfRotations 是奇数 Serial.println(" Anti-Clockwise ");度数 =360 - 度数; Serial.print("-"); // 打印一个减号 Serial.println(degrees); // 以度为单位打印角度位置 } if (count ==160) { // 步进器的完整旋转 numberOfRotations =++numberOfRotations;时间=毫秒(); RPM =timee / numberOfRotations; // 旋转的平均时间 RPM =(60000.00 / RPM); // 每分钟转数 if (numberOfRotations>=10) { Serial.print("RPM:"); Serial.println(round(RPM)); //将 RPM 打印为整数 } delay(delay2); // 每次完整旋转后延迟 2/1000 秒计数 =0; // 将计步器重置为零 //每圈后反转方向 if ((numberOfRotations) % 2 ==0) { // 检查旋转次数是否为偶数 // 如果是,则反转方向 aPin =4; bPin =三; aPrimePin =2; bPrimePin =一; } else { // 如果旋转次数是奇数 aPin =one; bPin =2; aPrimePin =三; bPrimePin =四;数字写入(aPin,低);数字写入(bPin,低);数字写入(aPrimePin,低);数字写入(bPrimePin,低); } }

示意图

首先,我完成了电子设备的布线。我只用了两次烙铁将电源线连接到 USB 适配器 PCB。在连接到 230V 网络之前,我建议使用具有电流控制和电流测量功能的实验室工作台电源。如果接线错误,此检查可以避免对适配器或其他组件造成任何损坏。在 5 伏特下,总消耗量应小于 1 安培。
其次,我组装了角撑,然后修改了盒子并固定到机器的结构上。

制造工艺

  1. 自动滴滤咖啡机
  2. CAT 扫描仪
  3. 制作 DIY Thermocam
  4. 自动送料机的来龙去脉
  5. 什么是自动冲压机?
  6. 什么是压送纸器?
  7. 什么是自动动力压力机?
  8. 什么是气动棒材送料机?
  9. 什么是自动弯管机?
  10. 什么是自动转台?
  11. 了解自动变速器系统
  12. 了解自动润滑系统