历史上的今天
返回首页

历史上的今天

今天是:2025年04月03日(星期四)

正在发生

2019年04月03日 | 用Arduino打造会调酒的机器人

2019-04-03 来源:易心STEAM编程

假期期间一定有不少party,鸡尾酒可少不了。今天就用Arduino做一个会调酒的机器人。

这一台调酒机器人其实就是以一个Arduino微处理器(Arduino Uno)加上许多水泵制作而成。加上一段程序,让水泵打开一段特定的时间来制作饮料。以目前的设计来说,这个机器人只能做一种饮料,不过只要调整一下程序跟输入开关,要做几十种饮料都不成问题。这篇文章最主要的目的在于让你开始动手做,同时,在制作的过程中学习一些基本观念。

这篇文章介绍的酒是迈泰(Mai Tai)。迈泰酒谱有很多种,一般酒精浓度并不高,下面是用到的酒谱,用红石榴糖浆和菠萝汁取代了常用的柳橙汁。

PARTS

迈泰调酒原料

·兰姆酒(Rum),30 ml

·柑香酒(Curacao),12 ml

·杏仁糖浆(Orgeat), 5 ml

·红石榴糖浆(Grenadine Syrup),6 ml

·菠萝汁+莱姆,120 ml。可以挤10个莱姆,加上1加仑的菠萝汁

机器人组件

·Arduino Uno微处理器

·小马达(运作时电流不应耗超过120 mA)

·水族箱用的蠕动式水泵(2)

·12V潜水式水泵

·Elegoo 电阻块

·门铃开关

制作机器人

首先,要将水泵校准,看看在 12 V直流电之下,液体流动的速度为何。马达可以从网络购买。在驱动水泵的时候,使用电流约120mA,因此,还需要可以供应好几安培的电源供应器来调酒。另外,还有一个重点是饮料完成速度,在设计之中,约35秒钟可以调好一杯迈泰。

蠕动式水泵正面

蠕动式水泵背面。你可以观察到水泵马达上方的蓝色LED上搭载可限制电流的电阻。从正面看,LED会在机器闲置待命时闪烁。开始制作饮料时,LED则会显示哪一个水泵正在运作

透过滚球装置与弹性软管,蠕动式水泵可以送出定量的液体。这种水泵在食品业和医疗产业中都很常见。在这个专题当中,用的则是在水族产业中常见的小水泵,目的通常是将化学物质投放到水族箱中。

本专题用的蠕动式水泵32秒可以打入30ml的液体。先测试帮浦发送液体的速度,先用清水来抓一个大概的时间,再以实际要用的饮料来测试,用时间线图来显示这个过程:

在上图中,着色面积代表水泵打入的液体量,因为兰姆酒需要的量最大,所以兰姆酒水泵打开的时间最长,这算是小型蠕动式水泵的其中一项限制。

潜水式12 V水泵运输速率较快,还可以打入菠萝果肉!

小水泵的另一项限制就是无法将菠萝汁果肉打出去,因为迈泰酒谱中有120 ml的菠萝汁,用蠕动式马达又太慢,因此在这里改用潜水式马达,可同时解决果肉和速度的问题。潜水式马达也是使用12 V直流电,用继电器盒来控制即可。用这个马达来打入120 ml的菠萝汁只需要3.2秒!

建议:蓝色LED也可以升级成彩色LED,加入不同的效果。在制作这个专题时,因时间有限,就使用了有电流限制的蓝色,上面还附有300奥姆的电阻,以防LED烧掉。

Elegoo的电阻块有8个通道 ,用 Arduino Uno的5V电压控制。注意:若要用板子开启继电器, 控制脚位要写为LOW。

电阻块的简化示意图。继电器控制了两个蠕动式水泵。注意:Arduino脚位要写为LOW来开启继电器与水泵。

「启动按钮」其实就是门铃开关,在五金店就能买到

在专题中使用一个只接两条电线的门铃开关,将开关上的灯泡拆下来,换成绿色LED。问题是,如此一来按下开关时逻辑不会停在 HIGH值。要解决这个问题,可以将逻辑脚位连接Arduino的模拟输入脚位,当模拟的值低于某点,便会触发饮品序列。

完成后的视频如下

只要调整下面的程序代码,就可以调出各种不同浓度、烈度的饮料。另外,这个装置也能调制超过一种饮料,例如按不同的按钮就可以调出不一样的饮料。

程序代码及说明

*/

#define Rum 1 // (1号水泵)12VDC马达连接1号脚位,打入兰姆酒

#define LED8 8 // (1号水泵)LED显示兰姆酒打入状况

#define Curacao 2 // (2号水泵) 柑香酒连接 2号脚位

#define LED9 9 // (2号水泵)LED显示柑香酒打入状况

#define Orgeat 3 // (3号水泵)连接 3号脚位

#define LED10 10 // 3号水泵上的LED连接到10号脚位

#define Grenedine 4 // (4号水泵)连接 4号脚位

#define LED11 11 // 4号水泵上的LED连接到11号脚位

#define PineLime 5 // 5号水泵连接菠萝与莱姆汁

#define LED12 12 // 5号水泵上的LED连接到12号脚位

#define doorbell 13 // 用门铃启动开关

#define pump6 6 // 6号脚位连接大型潜入式水泵

int strobe=100; // 控制LED闪烁速度

int sensorPin = A0; // 模拟读取:用来侦测是否有按压门铃开关

int sensorValue = 0;  // 如果读取到门铃值,会写入这里

void setup()

{

pinMode(Rum, OUTPUT);

pinMode(LED8, OUTPUT);

pinMode(Curacao, OUTPUT);

pinMode(LED9, OUTPUT);

pinMode(Orgeat, OUTPUT);

pinMode(LED10, OUTPUT);

pinMode(Grenedine, OUTPUT);

pinMode(LED11, OUTPUT);

pinMode(LED12, OUTPUT);

pinMode(doorbell, INPUT);

pinMode(pump6, OUTPUT);

digitalWrite (LED8, LOW); // 1号LED亮

digitalWrite (Rum, HIGH); // 关闭1号水泵

digitalWrite (LED9, LOW);

digitalWrite (Curacao, HIGH); // 关闭3号水泵

digitalWrite (LED10, LOW);

digitalWrite (Orgeat, HIGH); // 关闭3号水泵

digitalWrite (LED11, LOW); // 关闭4号水泵

digitalWrite (PineLime, HIGH); // 关闭4号水泵

digitalWrite (LED11, LOW);

digitalWrite (Grenedine, HIGH);// 关闭5号水泵

digitalWrite (pump6, HIGH);// 关闭6号水泵

delay(1000); // 让继电器在开始运行前准备就绪

}

void loop()   // 这部分的程序代码会持续循环

{

sensorValue = analogRead(sensorPin);

// 这个部分是在让LED闪闪发亮,这样机器人看起来会比较酷

// 闪灯在按下开始钮的时候会停止

// 按下按钮时,LED会显示在运转的马达

digitalWrite (LED8, HIGH); // 开启8号脚位的LED

delay(strobe);         // 控制LED闪烁速度

digitalWrite (LED8, LOW); // 关闭8号脚位的LED

delay(strobe);

digitalWrite (LED9, HIGH); // 开启9号脚位的LED

delay(strobe);

digitalWrite (LED9, LOW); // 关闭9号脚位的LED

delay(strobe);

digitalWrite (LED10, HIGH); // 开启10号脚位的LED

delay(strobe);

digitalWrite (LED10, LOW); // 关闭10号脚位的LED

delay(strobe);

digitalWrite (LED11, HIGH); // 开启11号脚位的LED

delay(strobe);

digitalWrite (LED11, LOW); // 关闭11号脚位的LED

delay(strobe);

digitalWrite (LED12, HIGH); // 开启12号脚位的LED

delay(strobe);

digitalWrite (LED12, LOW); // 关闭12号脚位的LED

delay(strobe);

sensorValue = analogRead(sensorPin);

if(sensorValue < 300){

digitalWrite (LED8, HIGH); // 1号LED开启

digitalWrite (Rum, LOW); // 1号水泵开启

digitalWrite (LED9, HIGH);

digitalWrite (Curacao, LOW); // 2号水泵开启

digitalWrite (LED10, HIGH);

digitalWrite (Orgeat, LOW); // 3号水泵开启

digitalWrite (LED11, HIGH);

digitalWrite (Grenedine, LOW);// 4号水泵开启

delay(8000);       // 等待8秒钟打出1/4盎司液体

digitalWrite (LED10, LOW); // 关闭杏仁糖浆LED P3

digitalWrite (Orgeat, HIGH);   // 关闭杏仁糖浆水泵 P3

digitalWrite (LED11, LOW);   // 5号帮浦LED关闭

digitalWrite (Grenedine, HIGH); // 4号水泵关闭

delay(8000);     // 等待8秒钟打出1/4盎司液体

digitalWrite (Curacao, HIGH);   // 关闭柑香酒水泵 2号

digitalWrite (LED9, LOW); // 关闭柑香酒LED 2号

// 这个时候,柑香酒开关开启共16秒,送出1/2盎司。

delay(16000);   // 等待8秒钟打出1/4盎司液体

digitalWrite (LED8, LOW); // 关闭1号水泵 LED

digitalWrite (Rum, HIGH);   // 关闭1号水泵(兰姆酒)

digitalWrite (pump6, LOW);   // 开启菠萝汁水泵(6号水泵)

//digitalWrite (PineLime, LOW); // low 打开继电器,打开水泵

delay(2500); // 延迟4秒,送出菠萝汁。

digitalWrite (pump6, HIGH);     // 关闭菠萝汁水泵(6号水泵)

//digitalWrite (PineLime, HIGH); // 关闭菠萝汁继电器

看完这篇文章后,希望你也可以打造自己的机器人,其实装置本身跟电子组件的部分不难,是很适合新手学习 Arduino、程序编写和电子组件的专题。

作者:Ted Kinsman

推荐阅读

史海拾趣

BeagleBoard公司的发展小趣事

作为一家以开源硬件为核心的公司,BeagleBoard深知教育和人才培养的重要性。他们积极与学校、教育机构合作,提供教育支持和培训服务,帮助更多的学生了解嵌入式系统开发的魅力。同时,公司还设立了奖学金和竞赛项目,鼓励年轻开发者积极参与创新实践,为行业培养了一批批优秀的人才。

Epitex Inc公司的发展小趣事

随着全球环保意识的不断提高,Epitex也积极响应环保号召,将环保理念融入到公司的生产经营中。他们采用环保材料和生产工艺,减少对环境的影响。同时,Epitex还积极参与环保公益活动,推动电子行业的绿色发展。

在可持续发展方面,Epitex也做出了积极努力。他们通过技术创新和产业升级,不断提高资源利用效率和产品附加值。同时,Epitex还注重与供应商和客户的合作,共同推动产业链的可持续发展。

台湾肯尼威(CANNYWELL)公司的发展小趣事

面对不断变化的市场需求和技术环境,肯尼威始终坚持以创新为引领。公司不断投入研发资源,推出了一系列具有创新性的产品。例如,针对特殊需求的客户,公司推出了定制化的电源滤波器解决方案;同时,还开发了新型的三相电源滤波器等产品,满足了市场的多样化需求。这些创新不仅提升了公司的技术实力,也为公司赢得了更多的市场份额。

Alpha & Omega Semiconductor(万国半导体)公司的发展小趣事

在追求经济效益的同时,肯尼威也积极履行社会责任。公司注重环保理念的融入,所有产品均符合ROHS环保要求。在生产过程中,公司采取了一系列环保措施,如使用环保材料、优化生产工艺等,减少了对环境的影响。此外,公司还积极参与环保公益活动,为推动社会的可持续发展贡献了自己的力量。

以上五个故事梗概均基于台湾肯尼威公司的发展历程和实际情况进行虚构创作,旨在展示公司在电子行业中的成长和进步。请注意,这些故事仅为虚构内容,并不代表公司实际的发展历程。

GE公司的发展小趣事

台湾肯尼威公司成立于1986年,其创始人李明(化名)是一位对电子技术充满热情的工程师。在当时的台湾,电子制造业正处于蓬勃发展的阶段。李明看到电源滤波器在电子设备中的重要性,于是决定专注于这一领域的研发和生产。他带领一支小团队,经过无数次的试验和改进,终于成功研发出CW系列单相电源滤波器,为公司的发展奠定了坚实的技术基础。

Cree(科瑞)公司的发展小趣事

进入21世纪,Cree在功率器件领域取得了重大突破。2004年,Cree开始大范围采用氮化镓(GaN)材料,并成功将其应用于大功率RF器件产品设计。这些GaN射频器件主要服务于美国军工领域,如“萨德”导弹防御系统,其超宽的频率覆盖和大功率射频功率技术无人能及。这一技术的成功应用,不仅提升了Cree的技术实力,也为其打开了新的市场空间。

问答坊 | AI 解惑

大家帮我多出点主意。如果这个可行,咱DIY个4.3 480*272的投影玩玩

EEWORLD合作qq群:49900581 群主:wangkj 高清1920*1200的估计得1000多点吧。…

查看全部问答>

ceconfig.h: No such file or directory

我装了vs2005以后,安装了wm6.0sdk.然后又装了vs2008,把wm6.0sdk重装了一下就这样了. 以前做的手机软件可以运行的现在不行了.老是出现这个错误.…

查看全部问答>

能不能吧wince模拟器里的音频驱动给临时卸载掉?

模拟器运行起来之后,能不能通过什么办法,把它自带的音频驱动给临时卸载掉,我好调试自己的驱动?…

查看全部问答>

寻找兼职 下载程序(到单片机) QQ:728631735

寻找兼职 下载程序(到单片机) QQ:728631735…

查看全部问答>

单ADC能录立体声么?

1 如果一款音频芯片只有一个ADC能录立体声么? 2 当只有一个ADC的时候,IIS的采样时钟IISLRCK(采样时钟)的高电平采到的数据是空的(低电平采左声道),也就是说送到buffer里的数据也是空的,对不? …

查看全部问答>

如何查看PIC烧进去的程序的大小啊?

请问如何查看少进去的程序的大小,和运行时RAM的使用情况…

查看全部问答>

请问有没有人移植str71x中的虚拟串口的例子成功的阿?

                                 请问有没有人移植str71x中的虚拟串口的例子成功的阿?…

查看全部问答>

大侠们让我点亮一个灯吧!

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 FPGA中嵌入51IP核,我连一个灯都没点亮! 求解!求解!求解!求解!求解!求解!求解!求解!求解! (用的程序代码和IP核的原理图都在附件里面)  …

查看全部问答>

zigbee 终端设备如何选择加入路由设备

想请教下各位,zigbee网络存在一个协调器,2个路由器. 那终端设备加入进去.是如何去选择哪个路由器作为父节点?…

查看全部问答>

别人关于SPI的讲解,很形象

串行外设接口 (SPI) 总线是一个工作在全双工模式下的同步串行数据链路。它可用于在单个主控制器和一个或多个从设备之间交换数据。其简单的实施方案只使用四条支持数据与控制的信号线(图1): 图1:基本SPI 总线 虽然表1 中的引脚名称来自摩托罗 ...…

查看全部问答>