楽しく遊ぼ。

楽しいものをつくりたい!

Arduinoで作る電子ルーレット

昔に作った電子ルーレットで、YouTubeにアップしていたところ

プログラムを公開希望を頂いたので掲載します。

素人作りのプログラムなので、ご参考ていどに・・

 

www.youtube.com

 

ピン接続は次の通りです。

 

 1

 2 - 圧電スピーカ

 3 - 赤色LED

 4 - 緑色LED

 5 - 赤色LED

 6 - 緑色LED

 7 - 赤色LED

 8 - 緑色LED

 9 - 赤色LED

10 - 緑色LED

11 - 赤色LED

12 - 緑色LED

13 

14 - 赤ボタン

15 - 緑ボタン

16 - モードセレクト用トグルスイッチ

 

 

 

/////////////////////////
/// ルーレット & ジャッジマシン
///  10LED 2ボタン モード切り替え 1sw
/// 
/////////////////////////

int i;
int rdm;
int tt;
int nn;
int mm;
int gbtn;
int rbtn;
#define spk 2 ///スピーカ2番ピン

////////////////////////
void redon() { /// 赤LED ON
digitalWrite(3,HIGH);
digitalWrite(5,HIGH);
digitalWrite(7,HIGH);
digitalWrite(9,HIGH);
digitalWrite(11,HIGH);
}
void greenon() { /// 緑LED ON
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(12,HIGH);
}
void ledoff() { /// LED 全OFF
for(tt=3;tt<=12;tt++) {
digitalWrite(tt,LOW);
}
}

void beep() { // ピ
tone(spk,700,25);
}
void beepp() { // ピー音
tone(spk,700,500);
}
void beepb() { // ブー音
tone(spk,120,600);
}
void beepl() { // ピポ音
delay(300);
tone(spk,960,200);
delay(250);
tone(spk,770,600);
}
void beepm() { // ピポピポ音
delay(300);
tone(spk,960,200);
delay(200);
tone(spk,770,250);
}
//////////////////////////
void disp(int num) { /// ルーレット表示
switch(num){
case 1: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beepl();
break;
case 2: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beep();
delay(350);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
beepl();
break;
case 3: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beep();
delay(350);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
beep();
delay(380);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
beepl();
break;
case 4: /////
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(80+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(3,HIGH);
beep();
delay(350);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
beep();
delay(380);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
beep();
delay(410);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
beepl();
break;
case 5: /////
for(nn=3;nn<=6;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(140+10*nn);
digitalWrite(nn,LOW);
}
digitalWrite(7,HIGH);
beepl();
break;
case 6: /////
for(nn=3;nn<=7;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(130+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(8,HIGH);
beepl();
break;
case 7: /////
for(nn=3;nn<=8;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(120+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(9,HIGH);
beepl();
break;
case 8: /////
for(nn=3;nn<=9;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(110+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(10,HIGH);
beepl();
break;
case 9: /////
for(nn=3;nn<=10;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(100+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(11,HIGH);
beepl();
break;
case 10: /////
for(nn=3;nn<=11;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(90+20*nn);
digitalWrite(nn,LOW);
}
digitalWrite(12,HIGH);
beepl();
break;
}
}
////////////////////////
void setup() {
randomSeed(analogRead(4));
// Serial.begin(9600);
for(i=3; i<=12; i=i+1) {
pinMode(i, OUTPUT);
}
pinMode(14,INPUT_PULLUP); // 赤ボタン
pinMode(15,INPUT_PULLUP); // 緑ボタン
pinMode(16,INPUT_PULLUP); // モードセレクト
}
//////////////////////////
void loop() {

if (digitalRead(16)==LOW) { //ルーレットモード選択
int c=0; int ff=0;
rdm = random(1,11);
if (digitalRead(15)==LOW) {
ledoff();
for(mm=0;mm<=50;mm++) {

for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(35);
digitalWrite(nn,LOW);
if (digitalRead(14)==LOW)
ff=1;}
if (ff==1) break;
}
// Serial.println(rdm);
for(nn=3;nn<=12;nn++) {
digitalWrite(nn,HIGH);
beep();
delay(30+5*nn);
digitalWrite(nn,LOW);
}
disp(rdm);
}
}
else {
/////// ジャッジマシンモード
ledoff();
if (digitalRead(14)==LOW) { // NG
redon();
beepb();delay(700);beepb();
delay(3000);
}

if (digitalRead(15)==LOW) { // OK
greenon();
beepm();delay(200);beepm();
delay(3000);
}
}
}

/////////// end

 

 

 

 

電動水鉄砲の製作

お世話になっている事業所さんから、夏祭りイベント用に水鉄砲射的をしたいと、お話しがありハンディのある子供たちも楽しめる水鉄砲を作ってみました。

昨年のドリンクバーに続く第2弾です。

 

基本仕様は次のようなもので。

  1. 自動車用ウォッシャ液ポンプを使用。
  2. 水タンクは 10L 以上を確保。
  3. 発射ボタンで、約30秒間、水を連続噴出。
  4. 水噴出中は、ノズルを上下左右にジョイスティック操作で動く。
  5. イベントの使用を想定し電源は、AC100Vとする。

 

ノズルを上下左右に駆動する方法は、何種類かを考えたのですが、パワーがあまり必要ない点、ノズルの原位置検出や可動域リミッタが必要な点を考慮し、模型用サーボモータにしました。

ジョイスティックは2軸アナログ出力のものを使用しますが、操作力を軽く、アクションが大きくなるようスティック部を長くします。

 

f:id:rakuyu:20190917103747j:plain

ノズルには、ボールペン軸(PILOT FRIXION BALL)を使用し、ノズルホルダ、モータブラケット類は3Dプリンタで製作します。

サーボモータは、左右用はSG92R   上下用はSG-5010を使用しました。

 

f:id:rakuyu:20190919004342j:plain

水タンクは石油用ポリタンを使用し、横置きにして注油口から直接ウォッシャ液ポンプのサクションに接続します。

 

f:id:rakuyu:20190919005329j:plain

漏水対策のために衣装ケースの中でダイソーメタルラックを使って台を構成し、天板にノズルユニットを設置、下部にポリタンを置いてウェイトも兼ねます。

 

 

f:id:rakuyu:20190919010014j:plain

電気関係は、ちょうど戴きものの、頃あいな制御ボックスがあったので、電源、DC-DCコンバータ、リレーモジュール、arduino基板を入れ込みました。

 

 

f:id:rakuyu:20190919010525j:plain

100均ケースに入れたジョイスティックコントローラと、制御ボックス外観。

 

f:id:rakuyu:20190919011213j:plain

作動テストと、各部の調整作業。

ウォッシャ液ポンプの発熱に不安があったので、連続運転できないように約30秒の噴出後は、ソフトで20秒の休止時間を設けました。

 

f:id:rakuyu:20190919010859j:plain

 ノズルユニットに、安全カバーを取付けて完成。

気休めにウォッシャ液ポンプ直近に、冷却用ファンを取付ました。

 

f:id:rakuyu:20190919012704j:plain

事業所さんが作ってくださった立派な水受け付きの射的台と、当たると倒れるように考案されたキャラクターのついたマト。

マトまでの距離は約2m、幅1.2m 高さ1.2mの可動域で十分倒せるだけのパワーはありました。

 

 

f:id:rakuyu:20190919013424j:plain

本番前の据え付け中。

ホール内のイベントなので、飛散防止シートの設置と防水対策は慎重にしました。

 

f:id:rakuyu:20190917033919j:plain

 事業所さんの立派な飾りつけにびっくり。盛り上げてくださいました。

 

本番はなんとか、トラブルもなく無事に任務完了しました。

子供たち、喜んでくれたかな~?

 

 

 

 

 

 

 

ワニくんドラマ~ の修理

おもちゃの修理依頼がありました。

スイッチを入れてみると、モータ音はしているが全く動きません。

f:id:rakuyu:20180924210656j:plain

このおもちゃ、数週間前に動きがおかしいとの事で分解したところ、歯車が割れており3dプリンタで製作して取り替えたばかりです。

 

とりあえず、バラしてみると・・

f:id:rakuyu:20180924221516j:plain

  • 1番のモータピニオンと2番のピニオンが大歯車とかみあっていない。
  • 3番のピニオンは前回 3dプリンタで製作したPLA製のもの

 

 

f:id:rakuyu:20180924221739j:plain

1番 2番共、外してみると割れていてシャフトと歯車がスリップしてずれてきています。 アロンアルファで補修してもおそらく時間の問題だと思うので交換することにしました。

 

1番は歯数10T で、代替品の在庫があったのですが、2番は歯数12Tで手持ち品なかったので、3dプリンタで作ることにしました。

前回 歯数10Tを製作しましたが(歯形は適当で)案外バリ取りだけでかみあってくれました。

 

3dデータを作成し、3dプリント。

バリ取り後、組み立てて完成。

f:id:rakuyu:20180924231422j:plain

           

テストでは各部分正常どおりの動きをしてくれました。

が・・

このおもちゃは、1モータで、走る。障害物で方向転換。ドラムをたたく。頭と尻尾を振ると、多くの可動部分があり、この歯車の大きさと材質では強度不足の感じがあります。 今回修復するも、また再発の可能性が大きそう・・

 

ちなみに、このような外箱の製品でしたが、検索しても全く情報は出てきませんでした。

 

f:id:rakuyu:20180925003658j:plain

3Dプリンタでボールねじをつくる

3Dプリンタでベアリングを作られている例があり、ボールねじを作ってみたくなりました。

玉は、100均製のBB弾(直径6mm)を使用します。

ねじの直径、リードは玉寸法に見合う大きさで、ねじ外形20mm、リード(ピッチ)は10mmとしました。

ねじ軸はプリンタ印刷時、安定するように軸端部には大きめのフランジをつけました。(直径35mm)

f:id:rakuyu:20181015225548p:plain

 

ナット部は、リターンチューブとナットを一体化した形状です。

f:id:rakuyu:20181015230004p:plain

以上を、PLA材で印刷しました。

 

他に必要な部品は、透明プラ板(15X30mm 写真左)

BB弾 28個

f:id:rakuyu:20181015230817j:plain

 

ナット両端のねじ切り上げ部は、パテで埋めて玉のストッパを形成します。

f:id:rakuyu:20181016005002j:plain

 

ねじ軸を回しながら、玉を入れていきます。

f:id:rakuyu:20181016010040j:plain

 

玉を入れ終わったら、透明プラ板でフタをしてセロテープでとめます。

f:id:rakuyu:20181016010320j:plain

 

面が粗いのと、スキマを大きめにしたので玉の動きが悪いですが、力を加えて回すと玉の循環の様子が見れます。

 

ボールねじを知っておられる人は興味をもってもらえますが、知らない人は冷ややかな反応でした。

実用にはなりませんが、オブジェか教材ぐらいにはなるかな・・

 

3Dデータはここに掲載しています。

ボールねじ | 3Dデータでつながる、広がる、モノづくり。 – 3Dモデラボ

 

 

ドリンクバーの製作

特別支援学校の先生から、ドリンクディスペンサーを重宝されているとのお話を伺い、イベント用にドリンクバーを作ってみました。

 

f:id:rakuyu:20181002141022j:plain

基本仕様として、

  1. ペットボトルは1.5Lのものを使用する。
  2. 飲料は3種類とする。
  3. イベントの使用を想定し電源は、AC100Vとする。
  4. 注入ボタンを押している間飲料が出て、満杯検知はしない。
  5. 車椅子の子供たちも楽しめるようにリモコン付とする。

以上を想定しました。

 

構造は飲料通過部の洗浄や交換を考え、エアーポンプでペットボトル内に圧空を送り、飲料を押し出す方式としました。

飲料の3種類はそれぞれ独立したポンプを使用し、選んだ飲料のポンプを作動します。

ポンプは色々試した結果、パワフルなこの水槽用ポンプにしました。

f:id:rakuyu:20181002020946j:plain

フレームはダイソーのメタルラックを使用し、ペットボトルは保冷材を入れた発砲スチロール内に格納します。基本は図のような構成になります。

f:id:rakuyu:20181002022358p:plain

YouTubeで何例かの動画もアップされていたので、安易に考えていたのですが実験してみると以外にも難関が・・・

1.5Lのペットボトル内の飲料が少なくなってくると、エアーの圧縮ボリュームが大きくなり、ポンプの運転を止めてもしばらく飲料が出続けることがわかりました。

圧空回路に圧抜き弁を入れるしかないので、頃合なソレノイドバルブを探したのですが、やはり高価になってしまいます。思案のあげく圧抜き弁を作ることにしました。

10mlのカテーテルチップシリンジ(注入用注射器)の先端を切断し、鋼球とバネを組み込みフタをしてチェックバルブを構成します。

圧抜き時は、鋼球をプッシュロッドで押し上げるようにしました。

f:id:rakuyu:20181002024430j:plain

バルブスタンドは3Dプリンタで製作、開閉の駆動は arduino+サーボ で行います。

圧空は写真上部のチューブにつながっていて、ポンプ運転時は鋼球が押し付けられ閉止しています。注入ボタンから手を離すと、ポンプ停止と同時にプッシュロッドで鋼球を押し上げて圧力を抜きます。

 

f:id:rakuyu:20181002025302j:plain

 

フレーム仮組み、レイアウト検討

f:id:rakuyu:20181002030800j:plain

 

エアーポンプ3台の配置と配線。制御盤は上部に設置します。

f:id:rakuyu:20181002143941j:plain

 

 メタルラックの柱にカバー取付け用の部品を作り、100均の板材でカバーを作ります。

アクリル板を使用したい所ですが、コスト削減・・ でも反りがあって苦労しました。

f:id:rakuyu:20181002104243j:plain

 

 カバー板には、壁紙を貼り付けて仕上げます。

注水下部の棚にはドレンパンを取り付け背面までチューブ配管しておきます。

注水用チューブの配管をしてカバーを取付けて完成です。

f:id:rakuyu:20181002135923j:plain

後部の黒いカバーは、ダイソー PP板をマグネットで取付けています。

ペットボトル交換時に外すことになるのでワンタッチ脱着です。

 f:id:rakuyu:20181002141913j:plain

 

f:id:rakuyu:20181005025820p:plain

 

2回のイベント出動をこなして、子供たちは喜んでくれていました。

 

 

ひきこもりねこの製作

YouTubeを見ていると、全自動ひきこもり機とかに出合って面白そうなので作ってみました。

どのようなものかというと、箱にスナップスイッチがついていて、スイッチを入れると箱の中から手がでてきて、そのスイッチを切って手が引っ込むというもの。

自分でスイッチを切るという発想が面白いですね。

 

f:id:rakuyu:20180927135336j:plain

 

材料は、100均の木箱(セリア)、プラバン(100均クリップボードの下敷き部)、サーボモータ(SG90  2個) arduino、ブレッドボード、配線材 他 もろもろ

 

まずケースには木箱を使いますが、本来のフタの部分であるパーツの上板を開閉するようにします。カッターで接着部分を外して四角い枠と板材に分割します。

ヒンジ部は、とりあえずはガムテープで。(完成後、蝶番をつけました)

 

フタが開き、スイッチを切る動作中はこのような状態です。

ピンク色がサーボモータで、2個使用しフタ開閉、スイッチ切りアームを

それぞれ別駆動しています。

モータを取付けている板は 100均の厚み6mm程度の木材板です。

フタを押し上げている青色のプレート及び、赤色のスイッチ切りアームはプラ板を切って製作しました。

f:id:rakuyu:20180927003814p:plain

格納状態はこのようになります。

f:id:rakuyu:20180927004559p:plain

 木箱の本体部と、本来のフタ部の枠とは内部部品組立後、ビス止めします。


メカ部ができれば、あとは配線とソフト作りになります。

長年、メカ一筋だったので電気のハード、ソフトは苦手です。

見よう見まねの我流仕上げとなっています。

 

アームの調整、動作確認

f:id:rakuyu:20180927005627j:plain

 

フタ開閉の調整、動作確認

f:id:rakuyu:20180927005642j:plain

 

フタ、アーム合わせての動作確認

f:id:rakuyu:20180927005738j:plain

スイッチを切る動きは8パターンあり、順番に動作していきます。

フタの裏側にねこの顔をぶらさげて、アーム部に手を貼りつけ、内部にLEDを追加しました。

 

このような動きになっています。

www.youtube.com

 

 木箱の変わりに、昔のブラウン管テレビ風のようなものから貞子がスイッチを切りに出てくると、面白いかなと思ったのですが “こわい” と反対意見が多く断念しました。