
クルクルプロッタを自作 eddyWrite (エディライト)
本記事にはアフィリエイト広告が含まれます。
クルクル回りながら描画するオリジナルプロッタを製作しました。
名付けて “eddyWrite” (エディライト)!!!
早速動きをみてください。
edyWrite(エディライト) 爆誕#スマイリーイラスト pic.twitter.com/9bYRe78mxg
— HomeMadeGarbage (@H0meMadeGarbage) February 22, 2020
子供たちが大好きでよく見ているYouTubeチャンネルのスマイリーを描いてみました。
それでは製作の過程を報告させてください。
目次
動機
コンビニにて長男くん がどうしても欲しいというので、クレーンゲームのようにラムネをすくい出す食玩を購入しました。
がどうしても欲しいというので、クレーンゲームのようにラムネをすくい出す食玩を購入しました。
なかなかよく出来ていて、しばらく普通のラムネを購入した際もコレに入れて遊びながら食べていました。
ちびっこYouTuberにも紹介されていますね。
 
凄くいい機構なのでいつか何かに使いてーと常々思っており、
この度 長男くん が飽きて見向きもしなくなったので晴れて分解させていただきましたww
が飽きて見向きもしなくなったので晴れて分解させていただきましたww
ちょっと脱線します。
コンビニに寄って子供になんか 一つ欲しいモノ買っていいよって言うシチュエーションがあるのですが、高価な食玩を頑なに欲しがるときが多くて困りものです。
あまり高価な食玩置かないでほしい。。。最近 近所のローソンがトミカ置き始めてうかつに連れてけなくなった。。。
構成
2種のサーボでクレーンを動かして、ステッピングモータで土台を回します。
部品
- マイコン Adafruit Metro Mini 328 – 5V 16MHz
 
 
- デュアルモータードライバDRV8835
 
 
- ステッピングモータ ST-42BYH1004
 
 
- サーボモータ SG90
 
 
- 360°連続回転サーボ FS90R
 
 
- タクトスイッチ
 
 
- 
ドキドキクレーンゲーム 
 クレーン部を切り出して加工して使用
| 
 | 
製作過程
それでは製作の流れをご覧ください。
また なんかしたくなってきた pic.twitter.com/dxGH25kGHs
— HomeMadeGarbage (@H0meMadeGarbage) February 17, 2020
制御部
Arduino UNOで各モータの動作を確認しました。
a lot of rot pic.twitter.com/78lEcootqQ
— HomeMadeGarbage (@H0meMadeGarbage) February 19, 2020
駆動部加工
土台や各種固定治具は3Dプリンタで出力しました。
土台を3Dプリンタで出力しました。 pic.twitter.com/VfY4i7EMTg
— HomeMadeGarbage (@H0meMadeGarbage) February 19, 2020
クレーンを加工してサーボと接合しました。
いまのところは想像通りにできてる pic.twitter.com/B8yKmOb8rS
— HomeMadeGarbage (@H0meMadeGarbage) February 20, 2020
eddyWrite
筐体は主に木材を使用して製作しました。
Arduino IDEコード
タクトスイッチのボタンを3つ使用
・ボタン1:描画スタート
・ボタン2:サーボモータを制御してペンを上げ下げする
・ボタン3:360°連続回転サーボを制御してスライダを戻す
描画時は土台をステッピングモータで回転させてデータ(graphics.h)を読み取って、ペンを上げ下げさせます。
ステッピングモータの駆動方法は以下を参考にしました。
 http://akizukidenshi.com/download/ds/akizuki/AE-DRV8835-Ss.pdf
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | #include <Servo.h> #include "graphics.h" int APHASE = 4; int AENBL = 5; int BPHASE = 6; int BENBL = 7; int waitStep = 4; int servoAngle = 0; int rot = 0; Servo servo; Servo servoR; int Button1 = 10; int Button2 = 11; int Button3 = 12; void setup() {   Serial.begin(115200);   pinMode(Button1, INPUT_PULLUP);   pinMode(Button2, INPUT_PULLUP);   pinMode(Button3, INPUT_PULLUP);   pinMode(APHASE,OUTPUT);   pinMode(AENBL,OUTPUT);   pinMode(BPHASE,OUTPUT);   pinMode(BENBL,OUTPUT);   digitalWrite(AENBL,HIGH);   digitalWrite(BENBL,HIGH);   servo.attach(8); //SG90   servoR.attach(9); //FS90R   servoR.write(90);   servo.write(0); } void loop() {   if(digitalRead(Button1) == 0 && rot == 0){     rot = 1;     for(int i = 0; i <= 15; i++){       //ペン上げ       if(servoAngle == 18){         for(servoAngle = 18; servoAngle >= 0; servoAngle--){           servo.attach(8);           servo.write(servoAngle);           delay(10);         }         servo.detach();       }       servoAngle = 0;       //スライダ移動       if(i != 0){         servoR.write(120);         delay(252);         servoR.write(90);       }       // 1回転       for(int j = 99; j >= 0; j--){         if(pgm_read_byte_near(pic[j]+i) == 1){           //ペン上げ           if(servoAngle == 0){             for(servoAngle = 0; servoAngle <= 18; servoAngle++){               servo.attach(8);               servo.write(servoAngle);               delay(20);             }             servo.detach();           }           servoAngle = 18;         }else{           //ペン下げ           if(servoAngle == 18){             for(servoAngle = 18; servoAngle >= 0; servoAngle--){               servo.attach(8);               servo.write(servoAngle);               delay(10);             }           }           servo.detach();           servoAngle = 0;         }         digitalWrite(APHASE,HIGH);         delay(waitStep);         digitalWrite(BPHASE,HIGH);         delay(waitStep);         digitalWrite(APHASE,LOW);         delay(waitStep);         digitalWrite(BPHASE,LOW);         delay(waitStep);       }     }     servo.attach(8);     servo.write(0);     delay(800);     servoAngle = 0;   }   //ペン上下   if(digitalRead(Button2) == 0){     servo.write(18);   }else{     servo.write(0);   }   //スライダ戻す   if(digitalRead(Button3) == 0){     rot = 0;     servoR.write(77);     servo.write(0);   }else{     servoR.write(90);   } } | 
描画データ(graphics.h)
描画用の配列を生成し、1ならペンを下げ0でペンを上げるようにしました。
eddyWriteはスライド方向の分解能が16、1回転は100分割で描画できます。
 
スマイリーはExcelで極座標変換と手動での修正をしながらデータ生成しました。
eddyWriteの出力が以下です。
以前自作したハンディバーサライタPovRanianの描画用Pythonプログラムをそのまま応用しての描画データ生成も試してみました。
左の画像をpythonコードで読み取って縮小・極座標変換して描画配列データを生成し右の絵が出力されましたww
おわりに
ちょっと分解能は低いですが、不用品を利用した割には想定通りのものができて大変喜んでいます 😛 。
スマイリー自動描画マシンとして運用しようかなwww
いつか精度の良いスライダでリベンジしてみたいです。
ありがとう
プロッタを制作しました。
eddyWrite (ディライト)と名付けました。ありがとう pic.twitter.com/QCKKbQHlRn
— HomeMadeGarbage (@H0meMadeGarbage) February 22, 2020
追記
スマイリーチャンネル (2020/3/8)
スマイリーチャンネルで紹介いただきました!
実は子供たちもスマイリーイラストにチャレンジしておりました。
しかし残寝ながら採用されず。。
スマイリーさんモデルになれておめでとう#スマイリーイラスト pic.twitter.com/PCzrWEWKDr
— HomeMadeGarbage (@H0meMadeGarbage) January 9, 2020
5歳の長男君から「スマイリーに送って」とのことで
長男君 「あとで食ってやる」 pic.twitter.com/oOSxe8DP2D
— IOT金魚 ε( ε•o•)э。゜キヨちゃん&メイキン🐠お祭り金魚 飼育日記 (@dojokin) February 4, 2020
父の偉大さ誉れの高さを示すことができたので大変うれしいです。
 お父ちゃん 
             2020.2.23
            お父ちゃん 
             2020.2.23 
          


![[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。] [商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]](https://hbb.afl.rakuten.co.jp/hgb/1a889d8b.fdc97d31.1a889d8c.30809f72/?me_id=1344360&item_id=10000084&m=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fheart-shop1%2Fcabinet%2F06984001%2Fdokidokicranegame_a.jpg%3F_ex%3D80x80&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fheart-shop1%2Fcabinet%2F06984001%2Fdokidokicranegame_a.jpg%3F_ex%3D240x240&s=240x240&t=picttext)







 
		 
		 
		 
		 
		 
		 
		