假期期间一定有不少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
- AM1DR-1203SH30Z 3.3V 1 瓦 DC-DC 转换器的典型应用
- LTC2942-1 的典型应用 - 具有内部检测电阻器和温度 / 电压测量功能的 1A 电池电量计
- LT1634BCS8-5 单节锂离子电池监控电路的典型应用 (IQ = 20uA)
- ADA4841-2YRMZ 低功耗、低噪声运算放大器的典型应用电路,用于两极 500kHz 重构滤波器原理图
- 使用基于 LTC4162IUFD-LADM USB PD (C 电缆) 的电池充电器和电源路径的典型应用
- 钢铁侠水滴门禁卡
- ADR434A 4.096 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- 使用 Microchip Technology 的 TC04AC 的参考设计
- LT3970EMS 5V 降压转换器的典型应用
- AKD4112B-B,AK4112B 96kHz 数字音频接收器评估板