siroitori0413 が 2021年01月15日21時39分18秒 に編集
初版
タイトルの変更
自宅でドリンクバーできる装置
タグの変更
M5Stack
秋葉原2021
メイン画像の変更
本文の変更
# 自宅ドリンクバー いつでも冷えたジュースが飲めるドリンクバーを作りました。 # 材料 - シリコンチューブ 内径4mm 外径6mm - 2Lペットボトル - 段ボール - DC 12V マイクロ真空ポンプ  - M5Stack Core2 - DC-DCコンバーター 2USB 12v To 5v 3a 15w  - DC-DC 直流電圧 コンバータ 降圧型 5v-24v → 0.93v-18v  - 12V 5.8A 65W ペルチェ素子 冷却ペルチェプレートモジュール  - CPUウォーターブロック  - 5.5 x 2.1mm 3A 12VDC電源アダプタコネクタ  - Grove リレー  - 12V 10A 汎用ACアダプター - CPUファン # 構成  # 作り方 ## ジュースを冷やす機構 ペルチェ素子のモジュールを使って冷やします。 とても冷えますが裏面が熱くなるので熱くなる面にCPUクーラーをあてます。  さらにこの上(ペルチェ素子の冷たくなる面の上)にCPUウォーターブロックをのせます。 ## ジュースをくみ出す機構 ペットボトルのふたには穴を2つあけておきそれぞれにシリコンチューブを図の長さのように差し込んでおきます。このときペットボトルのふたとシリコンチューブには隙間のないようにぴったりと差し込みます。  そしてシリコンチューブの長い方(ペットボトルの中でジュースに浸かる長さの方)は、ペルチェ素子と重なる前述のCPUウォーターブロックの一方の穴につなぎます。 ペットボトルに繋がるもういっぽうのシリコンチューブの短い方(ペットボトルの中でジュースに触れない長さの方)は、ポンプの空気が出る方につなぎます。 ここまでやると、以下の動作が確認できます。 @[twitter](https://twitter.com/siroitori0413/status/1347084553505054721?s=20) ## M5Stackによる制御 M5Stack Core2ではボタンが押されている間ジュースを注ぐように作成しました。 構成図のとおりリレーモジュールを配置してポンプのON/OFFを行います。 リレーはGrove接続のものを利用し、M5Stack Core2のGroveポートに接続します。 なおM5Stackの電源はACアダプタから引っ張ってきたものをDC-DCコンバータで5Vに変換してUSBポート(type-C)につないでおり、すべての電源を1口にまとめるようにしています。  ## 段ボールによる筐体の作成 程よい大きさの段ボールに以下の穴をあけました。 - M5Stackがはめ込める穴 - ACアダプタの穴 - 外置きのペットボトルへつながるシリコンチューブが通る穴 - ジュース注ぎ口の穴  ちょっとごちゃごちゃしてますが・・ # プログラム(M5Stack) ```arduino:coke.ino #include <M5Core2.h> #include <AXP192.h> AXP192 M5Power; uint16_t color(uint8_t red, uint8_t green, uint8_t blue) { return ((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3); } void setup() { // put your setup code here, to run once: M5.begin(); pinMode(33, OUTPUT); digitalWrite(33, LOW); M5.Lcd.setTextFont(2); M5.Lcd.fillScreen(WHITE); M5.Lcd.setTextColor(BLACK, WHITE); M5.Lcd.setTextSize(3); M5.Lcd.setCursor(5, 0); M5.Lcd.println("Coca-Cola"); M5.Lcd.setTextSize(2); M5.Lcd.setCursor(5, 50); M5.Lcd.print("A cool coke. yummy"); M5.Lcd.setCursor(5, 175); M5.Lcd.println("Hold POUR button."); M5.Lcd.setCursor(5, 210); M5.Lcd.setTextColor(color(255, 154, 38), WHITE); M5.Lcd.print(" BACK "); M5.Lcd.setTextColor(BLUE, WHITE); M5.Lcd.print(" POUR "); M5.Lcd.setTextColor(color(255, 154, 38), WHITE); M5.Lcd.print("LABL "); } void loop() { // put your main code here, to run repeatedly: if (M5.Touch.ispressed()) { TouchPoint_t pos = M5.Touch.getPressPoint(); if (pos.y > 240) { if (pos.x < 120) { //btnA Serial.println("btnA"); while (M5.Touch.ispressed()) {} } else if (pos.x > 240) { //btnC Serial.println("btnC"); while (M5.Touch.ispressed()) {} } else if (pos.x >= 150 && pos.x <= 200) { //btnB digitalWrite(33,HIGH); while (M5.Touch.ispressed()) {} digitalWrite(33,LOW); } } } if (!M5Power.isCharging()) {M5Power.PowerOff();} } ```  ソースコード中、 ・BACK : btnA ・POUR : btnB ・LABL : btnC となっており、現状POUR(btnB)のみ機能します。 このボタンを押したときに ```arduino: digitalWrite(33,HIGH); ``` 離したときに ```arduino: digitalWrite(33,LOW); ``` とすることでリレーを制御しています。(Grove接続なので33ピンを制御) # 完成品 @[youtube](https://youtu.be/EtveSsW_PYc) # 注意点 注ぎ口よりもペットボトルが高い位置にあると注ぐのを止めても液体の流れが止まらなくなるので注意してください(#サイフォンの原理) また今回注ぐのをストップしても流れが止まるのに少し時間がかかります。 止めたときにペットボトル内の圧を抜くような仕組みを作ったら止まりやすくなると思いますが、今回はそこまでは作成しませんでした。