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

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

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

#完成図
単純にサーボを動かして糸を引っ張る仕組みです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666820/49ee97b5-4089-742e-f83b-f76d762ae04e.png)


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

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


#ペットボトルの蓋を改造
ノズルの場所にカットを入れ、矢印の場所にキリで穴をあけます。
適当な長さに切ったテグスをその穴に通します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666820/160ddb8b-c2dc-4763-32ed-8d5855b2f052.png)
#超音波センサーをノズルの先につける
段ボールでもなんでもいいので超音波センサーをノズルの先につけやすい形にします。今回は台座を作ってマスキングテープで固定しました。!
![IMG_20200909_130834_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666820/3ba0a27d-1384-db00-45a4-34f0fa72b98d.jpeg)
定規みたいな固いものの方が安定すると思います。
![IMG_20200909_131020_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666820/36245a61-dbd3-84bd-d60e-a464622590a6.jpeg)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666820/ea9b08f2-0140-0e49-e37d-e0bf80b8c93c.png)

#サーボをケースの側面に取り付ける
今回はトルクの力が足りなかったので同じものを左右対称に取り付けました。トルクの強いサーボを使用した方がどんなディスペンサーにも対応できるし、片側に設置するだけでディスペンサーを押せるほどの力が出せると思います。
写真のロックタイは接着剤が乾くまでの固定用に締めています。
サーボの先の白い部品とテグスはこの段階ではまだつけないでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666820/6a5df7ed-099d-8558-3621-b7079db27c0a.png)

#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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666820/c0f3e938-004b-4034-fca8-adb64670483d.png)

###コード
````c
#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が反応しなくなるのでモバイルバッテリーを使用する際は特に機能のついていない安物の方がよさそうです。