原作者Valentin Fg Guo yipu量子比特制作編譯|公眾號(hào)QbitAI
“兩杯美式的,謝謝。
”“主人的兩杯咖啡好啦,歡迎品嘗~”
醒醒,你不是在看日漫,你家里也沒(méi)有咖啡女仆。
不過(guò),作為萬(wàn)能的工程師,自己DIY也不是不可以。硬件愛(ài)好者Valentin Fg就把家里的咖啡機(jī)改裝成了“咖啡女仆”,只要一句話(huà),不用跑去咖啡機(jī)旁自己動(dòng)手做,TA就乖乖地開(kāi)始給你做咖啡。
后來(lái),他還整理了一份DIY咖啡女仆攻略,只要7步就可完成。
Step 1:剁手一些物料
首先,你需要一臺(tái)咖啡機(jī)。作者選用的是德龍的Delonghi Ecam 22.140B型號(hào),國(guó)內(nèi)電商也有這個(gè)牌子。
然后,你需要買(mǎi)五塊控制器,分別是:
樹(shù)莓派3B+主板,親測(cè)某寶可購(gòu)。
ReSpeaker 2-Mics Pi HAT,適配樹(shù)莓派的雙麥克風(fēng)擴(kuò)展板,可以拿來(lái)做AI語(yǔ)音應(yīng)用。
Arduino nano,一款基于ATmega328P(Arduino Nano 3.x)的小型主板。
8通道繼電器板
步進(jìn)電機(jī)+控制板
另外還需要充電器、microSDHC卡、USB 2.0轉(zhuǎn)接線(xiàn)、8x8耦合器、一些18AWG導(dǎo)線(xiàn)(最好是紅黑的)、2xM3x15螺絲釘、2xM3x45螺絲釘。
然后準(zhǔn)備一些工具,包括一個(gè)熱熔膠槍、不同尺寸的一套鉆頭、一臺(tái)電磨機(jī)、一些熱縮套管、一個(gè)電烙鐵、一個(gè)飛利浦螺絲刀、一個(gè)Torx TS 20螺絲刀,另外最好有3D打印機(jī),沒(méi)有的話(huà)就去萬(wàn)能的某寶找人幫你做。
Step 2:拆咖啡機(jī)
現(xiàn)在,可以把買(mǎi)來(lái)的咖啡機(jī)大卸八塊了(別哭,后面我們還會(huì)裝回去)。
先把后面的這五個(gè)螺絲擰下來(lái),注意螺絲釘不要丟。
然后可以吧咖啡機(jī)的“左臉”和“右臉”悄咪咪往后滑動(dòng)拖下來(lái)。
現(xiàn)在把固定“頭蓋骨”的兩個(gè)螺絲擰下來(lái),先不要著急掀起咖啡機(jī)的頭蓋骨。
這個(gè)時(shí)候,你會(huì)發(fā)現(xiàn)咖啡機(jī)的“右臉頰”有一個(gè)用于固定“頭蓋骨”的螺絲釘,把它擰下來(lái)?!白竽橆a”也有一個(gè),同樣擰下來(lái)。
然后把蒸汽主開(kāi)關(guān)拉向你站立的方向,取下來(lái)。
現(xiàn)在可以掀起咖啡機(jī)的“頭蓋骨”啦!
掀完之后,可以“面對(duì)”你的咖啡機(jī)正臉,把左右兩側(cè)的兩個(gè)螺絲擰下來(lái)。
再把面板背面的4個(gè)螺釘擰下來(lái)。面板左右兩側(cè)有兩個(gè)灰色的塑料卡,取下面板的時(shí)候輕一點(diǎn)不要弄壞它們,不然就裝不回去了。
面板下面的PCB板右上角有個(gè)連接處,輕輕地把它拔出來(lái)。
完美,現(xiàn)在你的咖啡機(jī)成功被大卸八塊了。
Step 3:前面板焊接
現(xiàn)在,你可以把咖啡機(jī)正臉上的面板拿下來(lái),準(zhǔn)備加工它了。
先在面板上戳5個(gè)洞,位置如下圖。注意洞的大小,需要保證兩根18AWG導(dǎo)線(xiàn)通過(guò)。
現(xiàn)在,拿起你的電烙鐵,開(kāi)始把導(dǎo)線(xiàn)焊道面板按鈕下面的引腳處,面板上7個(gè)按鈕分別連一對(duì)紅黑導(dǎo)線(xiàn)。
Step 4:把咖啡機(jī)的臉再裝回去
先裝按鈕和透明殼,注意導(dǎo)線(xiàn)的站位,不要卡住。
不過(guò),考慮到反正你要用語(yǔ)音控制咖啡機(jī)了,不裝按鈕也不會(huì)怎樣,略略略略略~
這塊面板的背殼也要和面板一樣,戳一些洞洞,方便導(dǎo)線(xiàn)通過(guò)。
現(xiàn)在,在咖啡機(jī)外殼正臉的最上方中央戳個(gè)半圓的洞,也是為了過(guò)導(dǎo)線(xiàn)。
另外,作者還3D打印了一個(gè)部件,這個(gè)部件的下邊中央是另外一個(gè)半圓。
兩個(gè)半圓的位置如下圖紅色大圓圈所示,而兩個(gè)紅色小圓圈的位置需要打直徑2.8毫米的孔。
現(xiàn)在,可以把正面的PCB板、外殼等連在一起了。電線(xiàn)留20厘米左右的長(zhǎng)度。
用M3x15螺絲釘將步進(jìn)電機(jī)固定到3D打印部件上。
在步進(jìn)機(jī)的尖端添加耦合器(暫不夾緊)。使用M3X45螺釘將3D部件固定到正面外殼上。
現(xiàn)在,把所有電線(xiàn)順到咖啡機(jī)右側(cè),把整個(gè)咖啡機(jī)正面裝回卡飛機(jī)上,注意現(xiàn)在也不要夾住耦合器。
Step 5:原理和安裝
下面是整體的電路圖,可以按照這個(gè)來(lái)連接導(dǎo)線(xiàn)。
連好之后,可以把所有器件一股腦兒塞在咖啡機(jī)的右側(cè),當(dāng)然要保證里面沒(méi)有短路的情況,然后找個(gè)合適的位置,拿熱熔膠固定好。
Step 6:寫(xiě)代碼和安裝程序
可以直接復(fù)制這段聲控代碼
1#include <Wire.h> 2#include <S; 3 4#define STEPS 64 5#define REVOLUTION 2048 6#define SLAVE_ADDRESS 0x04 7 8//naming Arduino pin 9int ONOFF = 2; 10int x1short = 3; // button for 1 short coffee 11int x2short = 4; // button for 1 short coffee 12int clean = 5; // button clean 13int vape = 6; // button vape 14int x1long = 7; // button for 1 long coffee 15int x2long = 8; // button for 2 long coffee 16 17int count = 0; 18int number = 0; 19int state = 0; 20int steps = 0; 21int max_step = (in / 180.0 * (float)REVOLUTION / 2.0); 22int nb_step = 330; 23Stepper stepper(STEPS, 9, 11, 10, 12); 24 25int servo_pos = 0; 26 27void setup() { 28 // start serial for output 29 Serial.begin(9600); 30 Serial.println("Ready!"); 31 32 // setup pin Mode 33 pinMode(ONOFF, OUTPUT); 34 pinMode(x1short, OUTPUT); 35 pinMode(x2short, OUTPUT); 36 pinMode(x1long, OUTPUT); 37 pinMode(x2long, OUTPUT); 38 pinMode(vape, OUTPUT); 39 pinMode(clean, OUTPUT); 40 41 //set default status 42 digitalWrite(ONOFF, HIGH); 43 digitalWrite(x1short, HIGH); 44 digitalWrite(x2short, HIGH); 45 digitalWrite(x1long, HIGH); 46 digitalWrite(x2long, HIGH); 47 digitalWrite(vape, HIGH); 48 digitalWrite(clean, HIGH); 49 (200); 50 (0); 51 turn_right(1); 52 turn_left(1); 53} 54 55/* 56 * Run undefinitly 57 */ 58void loop() { 59 if () > 0) { 60 // read the incoming byte: 61 int incomingByte = Serial.read(); 62 if (incomingByte == 'B') { 63 // command have to start with 'B' 64 number = 0; 65 count = 0; 66 } else if (incomingByte == 'E') { 67 // command have to end with 'E' 68 start_coffee(number); 69 number = 0; 70 count = 0; 71 } 72 else if (incomingByte >= '0' && incomingByte <= '9') { 73 // save as an int all the character coming from Serial 74 int tmp = incomingByte - '0'; 75 number *= 10; 76 number += tmp; 77 count++; 78 } 79 } 80} 81 82/* 83 * Utils 84 */ 85 86/* 87 * turn the stepper motor to the left 88 */ 89void turn_left(int v) { 90 Serial.println("turn left\n"); 91 if (v == 0) 92 return; 93 if (v == 1) { 94 (400); 95 return; 96 } 97 if (v == 2) { 98 (800); 99 return; 100 } 101 if (v == 3) { 102 (1300); 103 return; 104 } 105} 106/* 107 * turn the stepper motor to the right 108 */ 109void turn_right(int v) { 110 Serial.println("turn right\n"); 111 if (v == 0) 112 return; 113 if (v == 1) { 114 (-400); 115 return; 116 } 117 if (v == 2) { 118 (-800); 119 return; 120 } 121 if (v == 3) { 122 (-1300); 123 return; 124 } 125} 126 127/* 128 * simulate push a button 129 */ 130void touch_button(int pin) { 131 digitalWrite(pin, LOW); 132 Serial.print(" touchdown\n"); 133 delay(500); 134 digitalWrite(pin, HIGH); 135} 136 137/* 138 * simulate push button for 2 short coffees 139 */ 140void touch_x2() { 141 Serial.println("touch x2\n"); 142 touch_button(x2short); 143} 144/* 145 * simulate push button for 2 long coffees 146 */ 147void touch_x2_long() { 148 Serial.println("touch x2 long\n"); 149 touch_button(x2long); 150} 151/* 152 * simulate push button for 1 short coffee 153 */ 154void touch_x1() { 155 Serial.println("touch x1\n"); 156 touch_button(x1short); 157} 158/* 159 * simulate push button for 1 long coffee 160 */ 161void touch_x1_long() { 162 Serial.println("touch x1 long\n"); 163 touch_button(x1long); 164} 165 166/* 167 * simulate push button for cleaning 168 */ 169void touch_clean() { 170 Serial.println("touch rince\n"); 171 touch_button(clean); 172} 173 174/* 175 * simulate push button for on and off 176 */ 177void onoff() { 178 Serial.println("turn on/off\n"); 179 touch_button(ONOFF); 180} 181 182/* 183 * Select the intensity fort the coffee by moving the stepper motor 184 * 0 -> mild 185 * 1 -> standard 186 * 2 -> strong 187 * 3 -> extra strong 188 */ 189void select_intensity(int intensity) { 190 turn_right(intensity); 191} 192 193/* 194 * Set the stepper motor to its default position 195 */ 196void default_intensity(int intensity) { 197 turn_left(intensity); 198} 199 200/* 201 * compute int into order 202 */ 203void start_coffee(unsigned int type) { 204 int number = type % 10; 205 int coffee_type = type / 10 % 10; 206 int coffee_size = type / 100 % 10; 207 int intensity = type / 1000 % 10; 208 int special = type / 10000 % 10; 209 Serial.print(type); 210 if (special != 0) { 211 switch (special) { 212 case 1: 213 onoff(); 214 return; 215 } 216 } else if (coffee_type == 9) { 217 select_intensity(intensity); 218 if (number == 1) 219 if (coffee_size == 1) 220 touch_x1(); 221 else 222 touch_x1_long(); 223 else if (coffee_size == 1) 224 touch_x2(); 225 else 226 touch_x2_long(); 227 delay(20000); 228 default_intensity(intensity); 229 } 230}之后需要設(shè)置一下你的樹(shù)莓派主板,確保它安裝了Raspbian Stretch Lite。
然后在樹(shù)莓派主板上設(shè)置Snips語(yǔ)音平臺(tái),先連上網(wǎng),然后啟用SSH,安裝SAM。
把Snips要安裝在SAM上,重啟即可啟動(dòng),把上面的咖啡機(jī)程序裝進(jìn)Snips控制臺(tái)。
Step 7:喝咖啡走起
現(xiàn)在大功告成啦,連上電源,打開(kāi)樹(shù)莓派程序,打開(kāi)咖啡機(jī),你就可以“點(diǎn)”一杯咖啡試試:
“Hey Snips,我要兩杯咖啡,蟹蟹。”
傳送門(mén)
作者原文:
內(nèi)附各種亞馬遜鏈接,不過(guò)大家完全可以去(準(zhǔn)備退休的)馬爸爸那里剁手。
就醬,做手工愉快~
— 完 —
誠(chéng)摯招聘
量子位正在招募編輯/記者,工作地點(diǎn)在北京中關(guān)村。期待有才氣、有熱情的同學(xué)加入我們!相關(guān)細(xì)節(jié),請(qǐng)?jiān)诹孔游还娞?hào)(QbitAI)對(duì)話(huà)界面,回復(fù)“招聘”兩個(gè)字。
量子位 QbitAI · 頭條號(hào)簽約作者
?'?' ? 追蹤AI技術(shù)和產(chǎn)品新動(dòng)態(tài)
1.《【2048攻略】專(zhuān)題如何手動(dòng)養(yǎng)成一只「咖啡女仆」?丨全套攻略+材料清單》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《【2048攻略】專(zhuān)題如何手動(dòng)養(yǎng)成一只「咖啡女仆」?丨全套攻略+材料清單》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/yule/2099883.html