基于Arduino的泡茶机器人

news2024/11/26 15:44:06

打造你的完美泡茶助手

引言

你是否曾遇到过泡出的茶太淡或太苦?通过这个项目,你可以创建一个设备,为你的茶包提供完美的浸泡时间。只需附上一个茶包并放置你的杯子,设备就会开始工作!它将完美地按照你的喜好浸泡你的茶。
实物图:
在这里插入图片描述
在这里插入图片描述

材料清单

  • 4毫米厚的木材
  • Arduino Uno
  • SG90伺服电机
  • 超声波传感器
  • Arduino电缆和软排线
  • 胶带
  • 双面胶带
  • 夹子(或其它小夹具)
  • 杯子

所需机器/工具:

  • 3D打印机
  • 激光木材切割机
  • 热熔胶枪

制作步骤

步骤1:切割木质基座

在这里插入图片描述

首先,我们需要一个基座来构建我们的泡茶机器。使用激光切割机切割4毫米厚的木材。

开始根据提供的模板激光切割4毫米木材。如果你的激光切割机支持svg文件,可以使用.svg文件。我也包含了原始的Adobe Illustrator文件,以防你的激光切割机需要特定的导出设置。

注意:附带的图片中的前面板没有为超声波传感器预留孔。但是.svg和.ai文件中为这个传感器预留了空间。

步骤2:组装木质基座

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当然,在我们切割出木质模板后,我们还需要将其组装起来。

这一步你需要以下材料:

  • 胶带
  • 双面胶带
  • 步骤1中切割的木材
  • 热熔胶枪
  • 超声波传感器

首先,取“前面板”(带有两个小孔的面板),将你的超声波传感器“眼睛”插入孔中。然后使用一些热熔胶保持超声波传感器的位置。我不得不弯曲我的4个连接针脚,因为它们朝下。针脚应该像图片中那样朝外。

基座板
开始组装,在“基座1”模板顶部添加一些双面胶带。确保不要在圆形开口处粘贴胶带。

在“基座1”和“基座2”之间夹上双面胶带,然后将“基座2”板紧紧压在“基座1”板上。这将形成一个约8毫米厚的基座板,由两个基座板组成。

盒子
在组装基座板后,我们需要制作放在上面的“盒子”。首先取一个“侧板”并将其滑入基座板,另一侧重复此步骤。

现在插入带有已连接超声波传感器的前面板。你可能需要稍微抬起侧面以将其放入。

通过将“顶部”件放在侧面和前板上来组装屋顶。

你可以用一些胶带或热熔胶来固定“盒子”,具体取决于你的喜好。我使用了胶带将盒子的侧面固定在一起。

注意:完成所有这些步骤后,你应该还剩下一块木材,这块木材将在后面的步骤中使用。

步骤3:打印

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

现在我们想要打印一个保护和安装套件,用于我们的Arduino。下载并打印2个Arduino.stl文件,以获得套件的顶部和底部。

组装套件
首先将你的Arduino放入套件的底部部分。如果你有所需的螺丝,可以用螺丝固定,但我直接放了进去。然后取套件的顶盖,轻轻地将其放在底部盖和Arduino上,封闭套件。

对于我们的伺服电机,我们需要一些铰链系统来允许提起茶包。为此,请使用附件中提供的“臂”,“基座”和“盖子”.stl文件。

组装伺服铰链
首先取你的伺服电机,将其放入base.stl的合适插槽中。取cover.stl打印件并像图片一样放在基座上。我使用了双面胶带来固定它,但如果你有合适的螺母和螺栓,也可以使用它们。

在盖子上好后,你可以将臂部连接到基座上。为此,取下伺服臂,将大孔放在现在空的伺服臂连接部分上,然后轻轻旋转臂部,直到另一端适合基座孔。在它点击到位后,用螺丝将原始伺服臂连接到伺服上,并确保你得到所需的旋转,以不限制后续的旋转。

步骤4:电子设备

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

让我们使其移动。

这一步你需要以下材料:

  • 你的Arduino Uno及其套件
  • 超声波传感器(在前木板上)
  • 伺服电机
  • Arduino电缆和软排线
  • 双面胶带或热熔胶枪

电子设备
我们想要将Arduino Uno连接到伺服电机和超声波传感器。为了连接这些组件,我使用了第一张图片中提供的布线方案。

首先,将超声波传感器的GND和VCC引脚连接到Arduino的GND和3.3V端口。TRIG和ECHO引脚应按顺序连接到端口2和3。

你想将伺服电机的GND和PWR引脚连接到Arduino的5V和GND引脚。伺服数据应连接到引脚4。理想情况下,你只会将伺服PWR连接到外部电源,但在我的情况下,我不需要它。

代码

#include <Servo.h>
// pins
const int trigPin = 2; // trig pin for ultrasonic sensor
const int echoPin = 3; // echo pin for ultrasonic sensor
const int servoPin = 4; // pin for writing to servo

// distance
float minCheckDistance = 2.0; // min check distance in CM
float maxCheckDistance = 8.0; // max check distance in CM
float echoDuration, distance;
float averageDistance[10] = {0};

// servo
Servo serv;
const int minPos = 75; // servo maximum position while dipping
const int maxPos = 100; // servo minimum position while dipping
const int restingPos = 130; // servo resting position when not dipping
int targetPos = restingPos;
int pos = restingPos;

// time
unsigned long time = millis();
unsigned long startTime = time;
unsigned long dipDuration = 60000; // duration of commenced dipping in milliseconds
bool dipping = false;
bool reset = false;

void setup() {
    // enable pins
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    serv.attach(servoPin);
    serv.write(pos);
    delay(300);
}

void loop() {
    time = millis();

    // insert a distance into the array
    distance = checkDistance();
    for (int i = 0; i < 9; i++) {
        averageDistance[i] = averageDistance[i + 1];
    }
    averageDistance[9] = distance;

    // handle the setting down cup and removing it again
    if (checkAverageDistance()) {
        if (time >= startTime + dipDuration && dipping) {
            dipping = false;
            reset = true;
        } else if (!dipping && !reset) {
            startTime = time;
            dipping = true;
        }
    } else if (!checkAverageDistance()) {
        dipping = false;
        reset = false;
    }

    // handle servo
    if (!dipping) {
        targetPos = restingPos;
    } else {
        if (pos >= maxPos) {
            targetPos = minPos;
        } else if (pos <= minPos) {
            targetPos = maxPos;
        }
    }
    moveServo();
    delay(50);
}

void moveServo() {
    if (pos < targetPos) {
        pos += 1;
        serv.write(pos);
    } else if (pos > targetPos) {
        pos -= 1;
        serv.write(pos);
    }
}

float checkAverageDistance() {
    // check if the average distance in the last 10 echoes is still around our target (3 echoes or more)
    int avg = 0;
    for (byte i = 0; i < 10; i++) {
        if (averageDistance[i] <= maxCheckDistance && averageDistance[i] >= minCheckDistance) {
            avg++;
        }
    }
    return avg >= 3;
}

float checkDistance() {
    // pulse the signal so we get echoes
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    echoDuration = pulseIn(echoPin, HIGH);
    return (echoDuration * 0.0343) / 2;
}

这段代码为我们的泡茶设备提供动力,通过使用超声波传感器读取物体(茶杯)的距离,我们可以选择开始移动伺服电机。如果茶杯放在传感器前,伺服电机将开始在两个位置(minPos和maxPos)之间来回摆动,持续选择的时间(dipDuration)。如果杯子被移除,伺服电机将被告知返回到休息位置(restingPos)。通过改变这4个值(minPos,maxPos,dipDuration,restingPos),你可以告诉伺服电机浸泡的高度、低度、持续时间和不浸泡时的位置。

将代码更改为你首选的设置,并上传到你的Arduino Uno。

步骤5:手臂

在这里插入图片描述

对于设备的最后部分,我们需要一些东西来握住茶包。

这一步你需要以下材料:

  • 步骤1中的最后一块木材
  • 双面胶带
  • 胶带
  • 热熔胶枪
  • 夹子或其它小夹

完成结果

在这里插入图片描述
是时候测试你的泡茶助手了。

首先,将Arduino连接到电源。然后选择你最喜欢的茶叶,烧些开水,倒入杯中。使用夹子将茶包固定在泡茶机的臂上。然后,魔法就发生了。将你的杯子放在圆形的凹槽上,让它将茶包浸入杯中。

希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。

作者:Svan.


注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数通--3

一、动态路由 内部 路由器之间要互联互通&#xff0c;必须遵循相同的协议 企业内部用 IGP&#xff0c;企业之间用BGP RIP&#xff08;已淘汰&#xff0c;不考&#xff09; 距离就是长短&#xff0c;矢量就是方向&#xff0c;即路由的出接口 一台路由器 A 配好RIP&#xff0c;…

【Fargo】5:根据网络带宽动态调整发送速率

根据网络带宽动态调整发送速率 原理:这个简单实现的原理是 改变包的发送速率就可以改变发送码率了。例如1秒发1000个1KB 的包,带宽8Mbps,如果带宽是4Mbps,那么1秒发500个就够了。D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-only\worker\src\fargo\zhb_uv_udp_sender.…

好书分享《大模型应用开发极简入门》

本书为大模型应用开发极简入门手册&#xff0c;为初学者提供了一份清晰、全面的“可用知识”&#xff0c;带领大家快速了解GPT-4和ChatGPT的工作原理及优势&#xff0c;并在此基础上使用流行的Python编程语言构建大模型应用。 通过本书&#xff0c;你不仅可以学会如何构建文本生…

大数据开发基础实训室设备

大数据实验实训一体机 大数据实验教学一体机是一种专为大数据教育设计的软硬件融合产品&#xff0c;其基于华为机架服务器进行了调优设计&#xff0c;从而提供了卓越的性能和稳定性。这一产品将企业级虚拟化管理系统与实验实训教学信息化平台内置于一体&#xff0c;通过软硬件…

微软十月补丁星期二发现了 118 个漏洞

微软将在2024 年 10 月补丁星期二解决 118 个漏洞&#xff0c;并且有证据表明发布的 5 个漏洞被野蛮利用和/或公开披露&#xff0c;尽管微软尚未将其中任何一个漏洞评定为严重漏洞。 在这五个漏洞中&#xff0c;微软列出了两个已被利用的漏洞&#xff0c;这两个漏洞现在都已列…

【2025】springboot贫困地区捐助系统(源码+文档+调试+答疑)

&#x1f345; 简介&#xff1a;2000精品计算机源码学习 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学习内容欢迎领取&#xff1a; 二、文档资料截图&#xff1a; 三想了解更多&#xff0c;请收藏、评论、留言&#xff1a…

python如何对变量赋值

Python 中的变量赋值不需要类型声明。 每个变量在内存中创建&#xff0c;都包括变量的标识&#xff0c;名称和数据这些信息。 每个变量在使用前都必须赋值&#xff0c;变量赋值以后该变量才会被创建。 等号&#xff08;&#xff09;用来给变量赋值。 等号&#xff08;&…

GitHub简介与安装使用入门教程

1、Git与GitHub的简介 Git是目前世界上最先进的分布式控制系统&#xff0c;它允许开发者跟踪和管理源代码的改动历史记录等&#xff0c;可以将你的代码恢复到某一个版本&#xff0c;支持多人协作开发。它的核心功能包括版本控制、分支管理、合并和冲突解决等&#xff0c;其操作…

FP7126:DC-DC降压恒流LED芯片,65536级高辉无频闪调光 支持大功率舞台灯

产品概述&#xff1a; FP7126是在恒定关闭时间模式下工作的平均电流模式控制LED驱动器IC。具有稳定输出恒流的能力。FP7126不产生峰值到平均的误差&#xff0c;因此大大提高了LED电流的精度、线路和负载调节&#xff0c;输出的LED电流精度为2%。而不需要任何回路补偿或高侧电流…

通义灵码 Visual Studio 下载安装指南(附安装包)

文章目录 前言一、下载和安装指南方法 1&#xff1a;从插件市场安装方法 2&#xff1a;下载安装包安装方法 3&#xff1a;登录并开启智能编码之旅 二、使用指南总结 前言 通义灵码是基于通义大模型的智能编程辅助工具&#xff0c;它提供了多种强大的功能&#xff0c;旨在助力开…

02 线性结构——数组(特性、优缺点、基本使用、可变长的动态数组)

目录 1 数组基础知识 1.1 认识数组 1.2 数组的声明 1.3 数组的特性 2 数组的优缺点 2.1 优点 2.1.1 查找容易 2.1.2 高效的访问和修改 2.2 缺点 2.2.1 插入和删除效率低 2.2.2 扩展相对繁琐 3 数组的基本使用 3.1 遍历数组 3.2 修改数组元素 4 可变长的动态数组…

Nature 正刊丨突变与ecDNA形成尿路上皮癌症演变的相互作用

01摘要 晚期癌症是一种常见的致死性疾病&#xff0c;其特征是明显的遗传异质性1。在这项研究中&#xff0c;我们研究了由内源性和外源性诱变过程引起的基因组特征的进化及其与复杂结构变异&#xff08;SV&#xff09;的相互作用。我们叠加了癌症患者匹配序列肿瘤的突变特征和系…

设计模式之组合模式(Composite)

一、组合模式介绍 组合模式(Composite Pattern) 的定义是&#xff1a;将对象组合成树形结构以表示整个部分的层 次结构。组合模式可以让用户统一对待单个对象和对象的组合。 如在windows操作系统中的目录结构&#xff0c;其实就是树形目录结构&#xff0c;可以通过 tree /f 命令…

81.【C语言】数据结构之空间复杂度

目录 1.定义 2.例题 计算下列代码中BubbleSort函数的空间复杂度 解: 3.练习 1.求下列代码的空间复杂度 解: 2.求下列代码的空间复杂度 解: 1.定义 对一个算法在运行过程中临时占用存储空间大小的量度,不是程序占用了多少bytes的空间,通常用多少个变量来衡量,也使用大…

公开课学习:软件测试面试3大难题

1.验证码机制的处理&#xff1a;自动化遇到验证码怎么办?怎么测试? 流程&#xff1a;先识别元素&#xff0c;再对元素进行操作。实际上&#xff0c;验证码无法用自动化技术操作解决&#xff0c;都是由开发给万能码&#xff0c;或者屏蔽验证码去解决&#xff01;那如果不能屏…

2.1 HTML5 - Canvas标签

文章目录 引言Canvas标签概述定义实例&#xff1a;创建画布 理解Canvas坐标系概述实例&#xff1a;获取Canvas坐标 获取Canvas环境上下文概述实例&#xff1a;获取Canvas上下文设置渐变色效果 结语 引言 大家好&#xff0c;今天我们要一起探索HTML5中一个非常有趣且强大的特性…

一文通透OpenAI o1:从CoT、Self-Correct/STaR、Self-play RL、MCST等技术细节到工程复现

前言 注意&#xff0c;本文自10.12日起&#xff0c;正在每天更新的过程中.. 可能是去年写或讲的关于ChatGPT原理的文章和课程&#xff0c;影响力太大了 导致​​自从OpenAI o1出来后&#xff0c;每过两天&#xff0c;就有朋友问&#xff0c;“校长 o1啥时候出解读或课程”&…

ESP-01S 通过MQTT控制舵机

一、硬件准备 1. ESP-01S 模块 负责控制和联网的单片机为 ESP-01S,其核心是乐鑫科技(ESPRESSIF)设计的 ESP8266,也是大部分嵌入式开发发烧友常用的 WiFi 模块。 外观和引脚分布如下图: 具体引脚定义如下表: 脚序 名称 功能说明 1 GND 接地 2 IO2 GPIO…

IP地址如何支持远程办公?

由于当今社会经济的飞速发展&#xff0c;各个方向的业务都不免接触到跨省、跨市以及跨国办公的需要&#xff0c;随之而来的远程操作的不方便&#xff0c;加载缓慢&#xff0c;传输文件时间过长等困难&#xff0c;如何在万里之外实现远程办公呢&#xff1f;我们以以下几点进行阐…

【NLP自然语言处理】探索注意力机制:解锁深度学习的语言理解新篇章

目录 &#x1f354; 注意力机制介绍 1.1 注意力概念 1.2 注意力计算规则 1.3 常见的注意力计算规则 &#x1f354; 什么是注意力机制 &#x1f354; 注意力机制的作用 &#x1f354; 注意力机制实现步骤 4.1 步骤 4.2 代码实现 &#x1f354; 小结 学习目标 &#x1…