このロボット知ってますか?
ニコニコ動画とかYouTubeで一時期話題になったロボットで、まさにスイッチをONしたらロボットがOFFしてくる玩具みたいなものです。
先日Arduinoの入門キット買って、Arduinoについてちょっと勉強してみました。Arduinoを使えば簡単に作れるんじゃないかなぁと思って作ってみたので、作り方公開します。
スイッチをONするとOFFするロボット(Useless Box)
これが過去にニコニコ動画で話題になったやつ
「全自動ひきこもり機」とも呼ばれているみたい
こちらが海外版
海外では「Useless Box」と呼ばれています。
今回、こんな感じのものを作ります。
電子部品材料
必要な電子部品のアマゾンとAliExpressの商品リンクも併せて載せてあります。
私はAliExpressから購入しました。AliExpressの商品リンクは実際に私が購入した所で全て同じストアですのでまとめてカートに入れて注文すれば送料が割引になります。
AliExpressは中国からの発送になります。輸入が不安な場合は国内ショップが早くて安心です。
◆Arduino Nano
数量:1
※ピンが半田付けされていないタイプ
公式のArduinoは高いので互換品を使いました。
◆サーボモーター
数量:2
型式:SG90(樹脂ギア)又は MG90(メタルギア)
値段が変わらないのでMG90がおすすめ
◆トグルスイッチ
数量:1
型式:MTS-102
他の型式でももちろん問題ありません。私が実際に使ったものがこちら
◆リード線
数量:少々
◆収縮チューブ
あると便利
——————以下はオプション(必須ではありません)——————-
◆LED
必要に応じて、LEDを光らせたい数
◆抵抗
220Ω、LED点灯用
箱を作る材料
私はカナダの100円ショップで売ってるような画像の木箱を使ってみました。
同じものは手に入らないと思いますので、似たような箱を買って使うか木材やアクリル板等材料から箱を作ったり、アイデア次第。
現在、3Dプリンターで箱を作れるようにデザインして、印刷しては修正してを繰り返しながら3Dモデルを作っています。完成しましたら皆さんがプリントできるようにこの3Dモデルのデータを公開するつもりです。お待ちください。
追加記事を書きました↓
Arduino Nanoの動作確認
いきなり半田付けして回路を作り出しても良いのですが、Arduino Nanoの基盤が正常に動かなかったら苦労が水の泡になります。
半田付けする前に、USBを接続して電源が入るか確認。
新品のボードは動作確認用にLチカのプログラムが入っていますので、USBをつなげると電源が入って基盤上のLのLEDが点滅します。
電気回路を作る
今回、私が作ったものの接続図がこちら。
Lid(蓋)とHand(手)のサーボモーター、全面に取り付けるトグルスイッチとトグルスイッチをONしたら点灯するLEDの構成です。
電源はUSBからの給電にしました。電池式にしようと思ったのですが、アルカリ電池では電流が足りず動きませんでした。リチウムイオン電池なら動きますので電池式にしたい場合はお気を付けください。
Arduinoへプログラミング
Arduino IDEをパソコンへインストール
AruduinoのプログラミングにはまずArduino IDEというソフトをインストールします。
Aruduino IDEのインストール方法、使い方については省略。
互換品のAruduinoを使用する場合はCH340ドライバをインストール
上記リンクで紹介している安い互換品のArduinoを使用する場合はシリアル通信チップとしてCH340という物が使われています。パソコンとAruduinoをUSBで通信させるために以下のドライバをインストールしてください。
CH340 Driver for Windows ダウンロード
CH340 Driver for Mac ダウンロード
プログラムコード
私が作成した試作プログラムコードが以下になります。
コピー&ペーストで使用して頂いて構いません。
//2020.08.31 useless box ver1.1
#include <MsTimer2.h>
#include <VarSpeedServo.h>
VarSpeedServo hand; // サーボの変数設定
VarSpeedServo lid;
int led1 = 2; //LED1を2番ピンに指定
int sw1 = 12; //スイッチを12番ピンに指定
int opendelay; //蓋開けディレイ時間(*100ms)
int a = 5;
int closedelay; //蓋閉めディレイ時間(*100ms)
int b = 15;
int lidhome = 180; //蓋サーボモーター原位置角度
int handhome = 180; //手サーボモーター原位置角度
int lidon = 100; //蓋サーボモーターON時角度
int handon = 0; //手サーボモーターON時角度
void setup() {
// put your setup code here, to run once:
/*サーボモーター設定*/
Serial.begin(9600);
hand.attach(6); //手のサーボモーター5番ピン
lid.attach(5); //蓋のサーボモーター6番ピン
/*スイッチ・LED設定*/
pinMode(led1, OUTPUT);
pinMode(sw1, INPUT_PULLUP);
/*サーボモーター原点出し*/
lid.write(lidhome, 60, false);
hand.write(handhome, 30, true);
/*タイマーカウント設定*/
MsTimer2::set(100, Lidtimer);
MsTimer2::start();
//100msごとにLidtimeを呼び出し、タイマスタート
}
void Lidtimer() { //100ms毎にここが呼び出される
opendelay++; //蓋開けディレイ時間+1
closedelay++; //蓋閉めディレイ時間+1
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(sw1) == HIGH){
digitalWrite(led1, HIGH);
if(opendelay > a){
lid.write(lidon, 100);
hand.write(handon, 100);
closedelay = 0;
}
}
if(digitalRead(sw1) == LOW){
digitalWrite(led1, LOW);
hand.write(handhome, 50);
if(closedelay > b){
lid.write(lidhome, 60);
opendelay = 0;
}
}
}
今後、数パターンの動きを作る予定です。完成したら本ブログで公開します。
木箱でUseless Boxの試作
箱の製作
買ってきた木箱をそのまま使おうとすると、深さが足りなかったので一度カッターナイフで切り込んで分解。
こんな感じでコツコツ集めているアイスの棒で蓋を作ります。
アイスの棒はノコギリとかではなくて、万能ばさみで切ると綺麗に簡単に切断可能。
木工ボンドで張り合わせて、蓋の完成。
箱の正面に貼ってあるのは箱のヒンジが付いていたところが穴になってしまったのでお化粧です。
Arduino Nano、サーボモーターの取り付け方法を考える
サーボモーターと基盤の取り付けは非常に悩んだのですが、取り付けブラケット3Dプリンターで印刷。
3DモデルはThingiverseにあったのをダウンロードして使わせていただきました。
ブラケットと箱は小さいビスを使って取り付けします。
半田付け&部品組付
Aruduino Nano基盤・各配線を半田付け、収縮チューブで絶縁処理します。
9Vバッテリーも用意したのですが、箱が小さかったので今回はUSB電源のみにしました。
基盤・スイッチ、サーボモーターを組付けたところ。こんな感じ。
プログラムインストール・動作確認
パソコンとUseless BoxをUSBで繋いで、Arduino IDEからプログラムをインストール。
蓋と手の位置が丁度良い角度になるように調整したり、タイミングを合わせたり練習がてらプログラムを作ってみました。
サーボモーターの動作角度の調整は以下の4行内の数字を0~180で設定を行います。
int lidhome = 180; //蓋サーボモーター原位置角度
int handhome = 180; //手サーボモーター原位置角度
int lidon = 100; //蓋サーボモーターON時角度
int handon = 0; //手サーボモーターON時角度
上記で紹介した動画みたいに箱の中にぬいぐるみも入れる予定だったのですが、箱が小さくて入らず断念。
2号機として、3Dプリンターで電子部品以外を作って、ぬいぐるみも入れられるように作成中です!
プログラムも動作を数パターン増やして最終型とするつもりです。完成したらブログに追記するのでお待ちください。
追加記事を書きました↓
コメント
すみません。コードがエラーが起きてしまうのですが原因は分かりますかね?
一応指定されたファイルはダウンロードし、ライブラリもきちんとコードも入力されています。。
エラーコードです。
Arduino:1.8.14 Hourly Build 2020/09/23 10:35 (Mac OS X), ボード:”Arduino Uno”
/Users/owner/Documents/Arduino/libraries/VarSpeedServo/VarSpeedServo.cpp:56:10: fatal error: WProgram.h: No such file or directory
#include
^~~~~~~~~~~~
compilation terminated.
exit status 1
ボードArduino Unoに対するコンパイル時にエラーが発生しました。
「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。
コメントありがとうございます。
エラーの件、まだ解決できていないでしょうか?
私も分からなかったので調べてみました。
参考↓
https://uepon.hatenadiary.com/entry/2016/01/17/154422
古いArduinoIDEに新しいライブラリを入れて使用されているからではないでしょうか?
楽しく作る事が出来ました。全てパクリましたが手のサーボがトルク不足なのかスイッチをおしきれず一回り上のサーボ使用、 当然サーボマウントも変更して快適に動きます。3Dプリンターの印刷に結構時間がかかりますね。
製作に2週間ほどかかりました。また何か面白そうな作品が有りましたらと思っております。
楽しんで頂けて何よりです。
私も動画にした3Dプリンターで作った箱は2つ目だったのですが、1つ目が上手く行ったのに2つ目はスイッチが押し切れず、手のサーボモーターの角度をいっぱいにまで動かして速度を上げてスイッチが押せるようになりました。
アップロードしたのはその変更後のものだったのですが、サーボモーターにも個体差があるのかもしれません。
既に試されたかもしれませんが
スイッチが押し切れない場合は、手のレバーの動作角度は180度いっぱいに動かしているので変えられません。ですので取付位置を1ノッチ変えてみる。押し過ぎる場合は0を1~10くらいに変えても良いかも知れません。
int handon = 0; //手サーボモーターON時角度
プログラム内の
hand.write(handon, 200);
handonがスイッチを押す動き、200の数字部分がスピードですので1~256まで指定できます。
有り難うございます。大変参考になります。
C:\Users\konno\Documents\Arduino\libraries\VarSpeedServo\VarSpeedServo.cpp:56:10: fatal error: WProgram.h: No such file or directory
#include
^~~~~~~~~~~~
compilation terminated.
exit status 1
ボードArduino Unoに対するコンパイル時にエラーが発生しました。
このようなエラーが出てしまうのですが、どうしたらよいのでしょうか。