# カエルの自動開閉ゴミ箱 ### <font color='red'>自動開閉ゴミ箱が欲しい</font> --- 自分は自身の生活を快適にするのが好きで, コストコで見かけた自動開閉ゴミ箱がすごく魅力的に見えました. 今調べたら6000円くらいだったけど, 1年以上前のことなので詳しく覚えてません. 本当にこれがいるのかとなった時に, 迷う値段だったからいらなかったのかな. 親にも「いらんだろ」って言われたし. けど父親に「欲しいなら自分で作ればいいやん」って. あー確かに. 欲しいなら作れば良いのか, なら作ってみるか. 丁度その頃arduinoの入門の入門レベルのことやってたし, これ活かしたいなって思って初めてみました. ### <font color='red'>初めての開発</font> --- 確か学部2年の6月とかに作り始めたはずだから, 大学入って1年以上経ってた. 初開発遅すぎんか. って今は思うけどその時は楽しくて仕方なかったな〜. けど自分以上に父親の方が楽しんでたのは覚えてる. 自分に知識無さすぎて, わからん〜ってなったら父親が一人でめちゃくちゃ計画進めててびっくり. いや, 俺よりやる気満々やん. 置いてかないで. ### <font color='red'>神アイテムとの出会い</font> --- 自動開閉ゴミ箱と言っても, その時考えてた案として * センサに手をかざして蓋開ける⇨一定時間経過後自動で閉じる * センサに手をかざして蓋開ける⇨センサに手をかざして蓋閉める ゴミ箱の蓋を開ける駆動力として, ミニ四駆のモータでやろうとしてた. どうやって蓋閉める時の逆回転させるんやろうか. もー無理じゃんできませんって, なりかけてた時にサーボモータに出会った. 何この神アイテム. 使いやすそうな上に角度指定できるやん. 君に決めた. ![](https://i.imgur.com/CHEjAcH.png) ### <font color='red'>第2の神アイテムとの出会い</font> --- ゴミ箱と言っても種類はたくさんあるわけで, 蓋が丸だとか四角だとか, 上に開くのか横に開くのか. こんなこと考えながら今回の相棒のゴミ箱を探してたけど, 気づいた. ### **サーボモータの力で絶対こんなでかい蓋動かん** 危ね〜ゴミ箱部屋にただ増えるだけやった. ただでさえに謎に2個あるのに3個になるとこやった. まぁそんなことどうでもよくて. ならどうするかってなった時にたまたまよった100均で見つけた. ![](https://i.imgur.com/VtfL0x9.jpg) いやこれもうこれこそ探し求めてた動きをするし(顔の部分が上下に開く), 蓋軽いし, 小さいし, 可愛いし. 相棒は君に決めた. けどここで問題点が1つ. 1つだけど大きすぎる問題点. これを作り始めた経緯として, 部屋に自動開閉ゴミ箱を置きたいと. ### 部屋用のゴミ箱にしては小さすぎんか とはちゃんと考えましたよ. みんながそう思うはず. けど一旦作ってみてから, 実用的なサイズにすればいいかってなったのでとりあえず開発開始. ### <font color='red'>いざ制作開始</font> --- ここで問題です. 初心者が開発を始めるに当たってすることはなんですか. はい, その通りです. そのまんま検索することです. てなわけで, とりあえず検索 > ### ゴミ箱 サーボモータ |検索| https://qiita.com/seigot/items/df7875be07ca62104f25 ほらねあった. しかも俺の相棒と色違いやし. 一旦コピペして動かしてみて, 自分なりにコード変えたりしたから一応解説しておこうかな. ```Arduino: > 初期設定的な #include <Servo.h> #define ECHOPIN 18 // 信号を受け取るピンの設定 (A4pin) #define TRIGPIN 19// 信号を送るピンの設定(A5pin) Servo myservo;// サーボモータに名前をつけてあげる ``` この辺はどうでも良いけど, 当時の自分はこれすらよく理解してなかったから, 当時を思い出して詳しく書いておきます. ```Arduino > setup()はプログラムが読まれて一回だけ実行 void setup() { myservo.attach(7); Serial.begin(9600); pinMode(ECHOPIN, INPUT); pinMode(TRIGPIN, OUTPUT); } ``` そういうことです. ```Arduino > 繰り返し実行したいものはここに書く > void loop() { digitalWrite(TRIGPIN, LOW);// Set the trigger pin to low for 2uS delayMicroseconds(10); digitalWrite(TRIGPIN, HIGH); // Send a 10uS high to trigger ranging delayMicroseconds(50); digitalWrite(TRIGPIN, LOW);// Send pin low again int distance = pulseIn(ECHOPIN, HIGH);// Read in times pulse distance= distance/58;// Calculate distance from time of pulse Serial.print("Distance:"); Serial.print(distance); Serial.println(" cm"); delay(60); // Wait 60mS before next ranging if (distance <= 5){ delay(500); move_cover(); } } ``` digitalWrite('ピン番号',HIGH or LOW);でピンに指定した出力ができます. Serial.print辺は, シリアルポートへの出力のため特に気にしない. if文の条件として, カエルのお腹にある距離センサから, 5㎝圏内に障害物が来たら関数move_coverを呼び出します. ```Arduino void move_cover(){ for (int angle = 0;angle <= 100;angle += 10){ myservo.write(angle); delay(12); } delay(500); myservo.write(0); } ``` 関数の中身です. 関数が呼ばれたら10度ずつ開いていって, 100度までいったら一気に閉めるよってなってます. これらによって完成したのがこちらになります. ## 動画が載せられない:innocent: はい, なのでここまで読んでもらってほんと申し訳ないんですけど見せられません. もし興味を持ってもらえたら何かしらの形で見せるので, 言ってください.