Arduinoで作る自動アルコールディスペンサー


家にArduinoとサーボなんかが眠っている工作好き向け自動アルコールディスペンサーの作り方です。
作る手間と材料取り寄せの手間、知識の習得が面倒な人はamazonで買った方が正直早いです。

▼キングジム自動アルコールディスペンサー テッテ
https://www.amazon.co.jp/dp/B07N3HT8Q6/ref=emc_b_5_t

完成図

単純にサーボを動かして糸を引っ張る仕組みです。

準備するもの

名前 手に入る価格 備考
キリ 100円
ペットボトルの蓋 0円 今回は大きめのボルヴィックを使用
テグス 100円 切れなさそうな太めのもの
Arduino 700円 何でもいい安い互換製品を今回は使用
Servo×2 500円~1000円 トルク12kgぐらいであれば1つで良い
ブレッドボード 120円 小さいもので良い
ジャンパーワイヤー 1500円 オスオス、オスメスが必要
超音波センサー 150円~500円
台座となるもの 20円~100円 サーボが固定できるものが必要
強力接着剤 700円程度 サーボをがっちり固定できるような接着剤

合計3500円程度です。
今回は家にあったものを使用したので新たな部品代はかかっていません。

ペットボトルの蓋を改造

ノズルの場所にカットを入れ、矢印の場所にキリで穴をあけます。
適当な長さに切ったテグスをその穴に通します。

超音波センサーをノズルの先につける

段ボールでもなんでもいいので超音波センサーをノズルの先につけやすい形にします。今回は台座を作ってマスキングテープで固定しました。!

定規みたいな固いものの方が安定すると思います。

サーボをケースの側面に取り付ける

今回はトルクの力が足りなかったので同じものを左右対称に取り付けました。トルクの強いサーボを使用した方がどんなディスペンサーにも対応できるし、片側に設置するだけでディスペンサーを押せるほどの力が出せると思います。
写真のロックタイは接着剤が乾くまでの固定用に締めています。
サーボの先の白い部品とテグスはこの段階ではまだつけないでください。

Arduinoと各部品を接続する

ARduinoをブレッドボードに強く押し込み刺します。
ジャンプワイヤーを使用して各部品をArduinoへ接続します。

部品名 名称 Arduinoへ刺す場所
超音波センサー Vcc 5V
超音波センサー Trig D8
超音波センサー Echo D9
超音波センサー Gnd Gnd
サーボ左 オレンジ D2
サーボ左 5V
サーボ左 茶色 Gnd
サーボ右 オレンジ D3
サーボ右 5V
サーボ右 茶色 Gnd

Arduinoアプリから本体へコードの転送

Arduinoアプリのダウンロードやコードの転送方法は下記の方の記事がわかりやすかったのでこちらを参考にしてください。

▼マイコンによる入出力実験
https://qiita.com/hsgucci/items/085680123f758c8c3eb4#%E5%AE%9F%E9%A8%93%E6%89%8B%E9%A0%86

コード

#include <Servo.h>

// 超音波の宣言
int Trig = 8;
int Echo = 9;
double Duration;  // 超音波の間隔
double Distance;  // 距離
// 測定したい距離を下記に入力cm
int DetectionDistanceCm = 20;
// サーボの宣言
Servo MyservoLeft;
Servo MyservoRight;


void setup() {
  Serial.begin(9600);  
  // 超音波の初期設定
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
  // サーボの初期設定
  ServoInitialSet(MyservoLeft, 2, 0);
  ServoInitialSet(MyservoRight, 3, 180);
}


void loop() {
  digitalWrite(Trig, LOW);
  delayMicroseconds(1);
  digitalWrite(Trig, HIGH);
  delayMicroseconds(11);
  digitalWrite(Trig, LOW);
  Duration = pulseIn(Echo, HIGH);
  if(Duration > 0){
    Duration = Duration / 2; // 検知するのは往復併せた音波なので半分にする
    Distance = Duration * 340 * 100 / 1000000; // 音波は340m/sで進むのでそこから距離を割り出す
     if(Distance < DetectionDistanceCm){
      MyservoLeft.attach(2);
      MyservoRight.attach(3);
      MyservoLeft.write(180); // 左のサーボで引っ張った状態。引っ張りすぎる場合はここの数字を調整
      MyservoRight.write(0);  // 右のサーボで引っ張った状態
      delay(1000); 
      MyservoLeft.write(0);
      MyservoRight.write(180);
      delay(1000); 
      MyservoLeft.detach();
      MyservoRight.detach();
      } 
    }
  delay(500);
}


// servoの初期化設定
void ServoInitialSet(Servo Myservo, int AttachNumber, int SetAngle){
  Myservo.attach(AttachNumber);
  Myservo.write(SetAngle); 
  delay(500); 
  Myservo.detach();
  }

動作確認と最終組み立て

超音波センサーに手をかざしサーボが動くことを確認します。
初期状態でサーボの白いパーツが上向きになるようにセットし、ねじで止めます。
テグスを左右のサーボに取り付けた白いパーツへ結び、ピンと張った状態にし、結び目が伸びないように接着剤で固定します。

設置

設置には電力供給が必要になります。USB経由でコンセントに繋ぐか、モバイルバッテリーなどに接続して給電してください。
過電流防止機能の付いたモバイルバッテリーを使用すると使用していない間に電力供給が勝手に止められてArduinoが反応しなくなるのでモバイルバッテリーを使用する際は特に機能のついていない安物の方がよさそうです。