教授に消される卒論を作ってみたお話。

はじめに

「それは...卒論として出すにはナンセンスだと思うけど」
「えっ....」
3年生から積み上げていた僕の研究は中間発表3週間前に砂となって空に還った───────


この記事はTokyo City University Advent Calendar 2021、22日目の記事です。

昨日の記事は、ケーさんのWindows10でWindows Updateに失敗したときの対処メモです。

ケーさんのこういう役立つ系記事、いいですよね。私も同じ職場でその技術の鱗片に触れていたはずなのですが、退職時に記憶をすべて消されてしまったので今や夢の島です。 正直、卒論が忙しすぎて今回のワタシの記事は何の役にも立たないうんこ記事ですが宜しければ最後までお付き合いください...

因みに私が今まで書いてきた記事です

もくじだよ~

もくじだよ~

私は誰?

とりあえず私が誰なのか、皆様も知らないと思うので軽く紹介を

  • 情報システム学科の4年生
  • ある研究室で頑張ってる
  • うちの教授はとてもルーズ
  • 情報システム学科には珍しいまともな人

こんなところです

その論文、消えるよ。

どんなことしてたの

あんまりちゃんと書くと身バレしてしまうので軽くですが、元々何について研究していたかというと、ある感覚における利用物による差異みたいなことを研究していました。それで事例研究も通して問題なく4年生になり、卒論もその流れで書いていました。因みに4年からは私の題材に興味を持ってくれたたっくんと共同実験の形を取っていました。

最初の狂い

やってることの都合上、どうしても実地で色々しないといけないし初めは他の大学の施設を借りてデータも取る予定でした、それ込みで題材を作っていましたが

「コロナの流行」

これに完全にやられました。他大との実験の予定は白紙、何なら暫く大学にもまともに行けず何も進まないまま年末へと歩みを進めていました。 ここで問題となったのは他大との連携が白紙になったことによる「比較対象の消失」でした。初めのうちはどうにかなるっしょw!の顔つきしてたし教授も興味なさそうにしていたしで大丈夫だと思っていました。

審判の日

うちの研究室には「中間発表会」という卒論発表会を模した発表会が存在しています。そこで教授が見込みなしと判断すれば、卒業単位が消え失せる一大イベントがあります。うちの教授はいつだってサプライズ好きなので1ヶ月ほど前に急に「あ!そういえばやるから」と軽く言ってくれました。 比較対象の一つを失った私は研究室にあるもので比較を行い、それに関するデータを着実に集めていました。

そしてその頃に同時にやっていたのが大学のSAでした。SAというのは「Students Assistant」と呼ばれる授業支援員のことです。他の大学だとTAと呼ばれるものですね。私は自分の学科の授業支援を担当していました。 SAをやっているとある時間が出来ます。それも「その授業を担当する教授との雑談タイム」です。私の担当していた授業の教授は情報システム学科内でも細かい所に厳しい人でしかも「うちの教授と専門分野がかなり近しい人」でした。

中間発表会三週間前
───────
教授「そういえば、ましまくんって〇〇研究室だよね?どういう研究してるの?私も研究分野近いから気になっちゃって」

ぼく「あっっっっっはい実はこういうことやってまして、実験方法はこんなんでこういう所を比較できればと~~~~~」

教授「....」

教授「それさ」

教授「それは...卒論として出すにはナンセンスだと思うけど

教授「それに穴も多いしさ...これほんとうに担当教授許可したの?」

~~~そこからエンドレス指摘フェーズ~~~

教授「て、いう感じで私は卒論としてはお粗末な題材だと思うけどね」

教授「別にやってもいいけど私が審査員だったら今の疑問点全部指摘するから。それでもまだやる?この題材」

ぼくだったのも「ワ...ワ...」

~~~研究室に戻るぼく~~~

ぼく「うわ~ん!!!教授えもん~~~~!!!〇〇教授に泣かされたよ~~!!」

教授「あっそうなんwしらんけどその人がそういうならそうなんでしょww」

ぼく崩壊体「」
───────
積み重ねるのは大変でも崩れるのは一瞬でした。

その日から暫く立ち直れなくなっていました。呪詛を吐きながら徘徊する廃人になって暫くを過ごしていると「必要以上の“負”の撒き散らしをやめてほしい」といつも温厚なたっくんにキレられそこで目を覚ましました。

結局どうしたのか

とりあえず教授に言われた指摘事項をすべて埋められるだけの改善案をひねり出すのと同時に以前研究室の先輩から聞いた「余ってる実験道具あるんよね~」という言葉を思い出し使えるかどうかについて聞いていました。 一週間悩み続けて私は「今までの実験をすべて捨てて研究室にずっと置かれてる機材で新たに論文を練る」という選択を取りました。たっくんはこれまでの題材を用いたいい感じの実験を思いついていたので助かっていましたが私には何も思いつきませんでした....
研究室の先輩にも全力でバックアップしていただきなんとか今にこぎつけています。

これから論文を書く後輩が気をつけるべきこと

というわけでとんでもない事故に出会った私が卒論をこれから仕上げていく3年生に気をつけてもらいたいことをいくつか書いて締めていきます。

結局自分の担当教授の心次第なので他の教授に何言われても動じないこと

正直これが一番重要です()
よくよく考えてみればうちの教授はあーまあそれでええんちゃう?みたいなスタイルだったのでそれで良かったんだと思います。というか他がどう言おうとも「でも担当教授がいいって言ったんで」で一蹴できるので。まあただうちの教授はかなりルーズな方なのでもしかしたらやっぱ良くねえわ!となったかもしれません。わからないけど

余裕を持って取り組む

当然ですがやはりこれも重要です。今回はコロナ云々があったのでかなり実験が遅れてしまいましたが、多分来年にはそこそこ落ち着いているとは思うので皆さんは余裕を持って書きましょう

何度も実験をして改良する

やはり一度の実験だけでは潜んでいる問題点には気づけません。なので事前実験を念入りにやりましょう。

おわりに

考えてみればもう私も4年生で来年には卒業です...あっけないものでした...
これまで支えてくれたケーやたっくん、田んぼには感謝しきれません...
皆様も有意義な大学生活を
では。
23日目はらぴーとくんの「緊急特別企画 今年もやります古いOS企画+α」です!
いいですよね、レトロOS... 私も最近M1Mac上でQEMUを立ててWindows2000を動かして遊んでいましたがまだまだM1のQEMUではグラフィックの読み替えをしてくれないのでCPUブン回しになってアチアチになって使い物になりませんでした。
この後もAdvent Calendarをお楽しみください....それでは失礼します、ここまでお付き合い頂きありがとうございました。

f:id:yu2o47fu5:20211222230120p:plain
ありがとう、すべての都市大生。

友人とともにCNCペンプロッタを作ってみたお話。

はじめに

こちらのページはTokyo City University Advent Calendar 2020 24日目の記事です。 前日の記事はうめさんの「xxxxxxx」です!

ごあいさつ

  • はじめまして、ましまと申します。
    情報システム学科で細々とカス大学生をやらせて頂いています....
    いつもの事ながら皆様のつよつよすぎる記事を見ながら、震えて泣きながらブログを作っています。
    今回も色々拙い部分があるとは思いますが最後まで読んでいただければ幸いでございます...
  • 初めまして、田んぼと申します。
    去年同様、ましま君と一緒にやっていきます。てか、複数人で記事書いてるの我々だけなのか...。いい加減自分一人で書くべきなのでしょうかなかなかアイディアが思い浮かばず今年もましま君に頼ることになりました。一生懸命書くのでぜひ読んで楽しんでいただければと思います。

今回はCNCプロッタを作る

  • 去年のTCUACでは自作のキーボードを作らせていただき、今年も何か面白いものを作って皆様を楽しませることができれば...と思っていたのですが、コロナとか研究室や就活とか教習所とか コロナとかコロナとか.... で本当にもう本当に忙しくて何も出来ないまま12月に突入してしまいました。というわけで今回は手頃で遊べて楽しめる物としてCNCペンプロッタを製作することとなりました(?)。

  • 本当は親友の田んぼくんに色々学びながらハードを製作していこうと思ったのですが、このコロナ禍の中では使わせてもらっている工房も大学も閉まってるせいでハードは田んぼくん主導、ソフトだけ私という形で開発することとなりました。予めご了承ください....

ほんといつもごめんね田んぼくん....

というわけでもくじだよ~

設計編

  • 今回の役割分担としてハードは田んぼが記事を書いていきます。設計に関しては我流なのでもしかしたら通常のやり方じゃないかもしれないのですがそこのところは大目に見てほしいです。

    CNCプロッターとはなんじゃろな?

  • CNCプロッターとは「プロッターとは、大判サイズの線画・絵柄の描画から、印刷やカットまでを行う機械と幅広い意味で使われることが多いです。プロッターは建築やプロダクト製品の図面や一部ポスター、などの作成に用いることができます。建設現場の事務所や学校の教育現場、公共施設などで多くの業種で使われています。」(大判プリンター比較.jpより)です!簡単に言えばプリンターの一種ってことです!
  • 今回は線画を描かせようと思います。

    先人の知恵を借りよう!

  • いきなりゼロから作るのは難しいので先人達の知恵を借りるためにgoogle先生で調べていきます。(「プロッター自作」って調べるとたくさん出てきます)

    ゼロから作っている人だとDVDドライブの中身を利用している方が多いみたいですね。あとは予算的な都合でこちらは難しいですが市販品のCNCにボールペンを持たせてやってるみたいですね。

  • とりあえずDVDドライブの中身を利用して作っていきたいと思います。中身がどうなっているか調べるために秋葉原に行ってDVDのジャンク品を1台買ってきます。プロッター作成には複数台必要なので市場に出回ってそうなモデルを選びましょう。

  • 今回ご用意したのはLG製のDVDドライブジャンク品300円
  • とりあえずサクッと分解していきます...これネジ外しても開けられないのだが?
    これを脳筋してもいいのですが、中身が壊れたら元も子もないので開け方を調べて開けます。(前の穴に針金を差し込むと開く)

  • 開くとネジとかで固定されているので外していくと自作兄貴達の部品と同じようなものが出てきます。
    予想以上に樹脂が多用されていますね。軸の片方が樹脂とは...こういうところでコストカットされているんですね。
  • しかし軸が樹脂だと抵抗がかかると動かなくなる可能性がありそうなのでこのまま使うのは厳しそうです。
    新しいドライブを買ってきてもいいのですが勿体ないのと似た記事量産してもしょうがない、そして何よりかっこいいデザインのプロッターが欲しいの3Dプリンタを用いてプロッターを自作していきたいと思います。(先人の知恵とは?)

    設計・印刷編

  • いろいろ考えてもしょうがないので図面に書いていきます。
    今回利用するソフトはAUTODESK Fusion360です。ちなみに今回はFusion360の使い方は書きません。っていうのもたくさんの方が使い方の記事を書いてますし、分かりやすい本も出しているので今回は書かないことにしました。 CADソフトの中でも使いやすく手頃です。学生は無料なのでぜひ利用してみてください。興味がある人は「Autodesk 学生」で検索検索ぅ!

  • さて、3Dプリンタで何か物を作る際一番気にしなければならないのは誤差の部分です。どんな3Dプリンタでも発生してしまうので最初に確認しておきましょう。私はサンプルデータを作ってテストしてから設計しています。 これはネジ穴のサイズ確認の時の画像。穴のサイズを0.1ずつを大きくしている。

  • 調べた数値は忘れずに入力しておきましょう。Fusionには機能としてパラメータというものがあります。
    ここには関数のように名前を登録し、その中身の数字を登録できます。これを登録しておく理由として、例えば最初はM3のネジを登録してたけど後でやっぱりM4のネジにしたいというときに数字だけ変更することでこの関数を利用しているものは一括で変更できます。

Y軸周りをつくる

  • まずはY軸周りを設計していきます。軸は先ほど言った通り樹脂だと抵抗で動かなくなる可能性があるので金属のモノを使っていきます。今回用意したのは「タミヤ 楽しい工作シリーズ No.105 3mmシャフトセット」です。 こちらの商品、私が小学生時代買ったのモノが残ってたのでそのまま利用しました。10年モノですが錆びてない、さすがタミヤ製だぜ!

  • セットには何種類か入っていますが今回は円柱100mmの奴を2本利用します。寸法は基本的には記載通りですが商品によっては誤差があるので自分でも測って見ておきましょう。(3Dプリンタでの0.1mmはかなり大きな数字) 秋葉で1000円で売ってたノギス、結構使いやすい。

    メイン部分をつくる
  • Y軸で必要なのは「軸」と「軸を支える台」と「軸の上で動く部分」、「ステッピングモーターを載せる台」です。
    まずは簡単な「軸」と「軸を支える台」と「軸の上で動く部分」をFusionで設計、そして印刷!
  • 3Dプリンターの制御ソフトは「Simplify3D」を使っています。君もSimplify教に入信しよう!
  • 全部設計してから印刷したほうがいいじゃん!って思うかもしれないですがデータ上だと意外と設計ミスしてても気づかないことがあるので試作をしておきます。(試作だけどそのまま利用されることもある)
    材料コストもほとんどかからないですし、あとは純粋に小さいパーツでも作るのに時間かかるのでどんどん印刷します。小さいパーツでも30分はかかります。
    問題発生
  • 軸が穴を通りません。原因としてはプリント時に樹脂が熱されて膨らむため誤差が発生するからです。
    この部分は穴を大きくしすぎると軸をしっかり保持してくれなくなるので動作がうまくいかなくなります。
  • そこでハンドドリルを使って穴を拡張していきます。これならmm単位であるので軸と同じ太さの3mmのドリルで削っていきます。 ダイソーの品ぞろえの良さは半端じゃないっす。

  • これで軸が通るようになりました。さらに滑りをよくするためにシリコングリスを吹きかけてくと滑らかに動くようになります。ちなみに周りにマットとか引かないでやると3日間は机がよく滑るようになります。

  • 使うモーターはAmazonで安くてprimeが対応していたやつを利用しました。こんなモーターでもレールがついていると結構値段します。私が購入したときはセールで2000円でした。

  • こんな感じで設計していって最終的にはY軸部分はこんな風になりました。

X軸周りをつくる

  • 次はX軸周りをつくっていきます。といっても基本的な構造はY軸と同じなので穴の大きさはそのままデータを利用できます。(説明めんどくさい文章量が増えるので似た部分は省きます)
  • X軸に関してはモーターをDVDドライブの中のモーターを利用しました。(この決断がのちにプログラム編で問題になってくることをこの時は知る由も無かった)
    ネジ2本で止まっているので外せます。
    送りねじの爪をつくる
  • お次はこのステッピングモーターで土台を動かせるように送りねじ用の爪のデータをつくっていくよ!
    1. まずは棒を押し出しで作成します。
    2. 次にFusionの作成の中のコイルをクリックします。画面が出てくるので数値を入力します。
      この時の数値はノギスを使って間隔と溝の大きさを調べました。溝の大きさは直径に入り間隔は高さに入力します。回転は巻き数なので長い爪をつくるのであれば巻き数を増やし、その文高さを大きくしましょう。操作は切り取りで溝が生成されます。
    3. 押し出しで新しいボディを先ほど生成した溝にかぶせるように作成します。(このとき結合しないよう注意をしましょう)
    4. 棒と箱を選択しFusionの修正の中の結合を選択し切り取りをします。すると箱から先ほど棒の部分が切り取られ溝が彫られます。
    5. 箱を押し出し等で半分の大きさにします。
    6. とりあえずY軸の爪が完成!
      ノズルの紹介
  • ここで問題発生!送りねじ用の爪をつくらなければならないのですが私が利用している0.4mmのノズルだと細かいものが印刷できません。
  • そこで「テクダイヤ株式会社」さんがノズルチャレンジで試供してくれた「0.1mmノズル」を利用して爪の部分を作成します。テクダイヤ株式会社さんは精密機械加工製品を作っている会社です。最近3Dプリンタ業界に参入したとかいうことでノズルをつくっているそうです。噂ではレアな0.1mmノズルで精度がすごいらしい...。
    ここで会社紹介してゴマをすっておけばまた試供してくれるかもしれない!!
  • まぁ、何ミリノズルって言われてもいまいちピンと来ない思うので(自分もピンとこない)実際に同じもの作った時を比較した画像です。
    私初めて使ってみたんですけど感動しました...。 左が0.4mm 右が0.1mm ぶっちゃけテクダイヤさんの試供品がなければここで詰んでいたので本当にテクダイヤ社長の小山さんには頭が上がりません。本当にありがとうございました。
爪をつけてみる
  • 本体に爪を取り付けてみます。ぴったりですね。X軸を動かすと軸が回転して動きについてきます。

Z軸周りをつくる

  • Z軸には上下させる部分とペンを持たせる部分を作成します。
    分かりにくいので画像をドーンだYO!!
  • 軸がなんで六角なのかって?予算の都合だよ!!
    そんなわけでタミヤのシャフトセットに入っていた六角を使っていきます。この場合、円ではないのでドリルで削らず作り直していきます。印刷を繰り返して内接円が3.3mmの六角にシリコングリスを塗るのが丁度よさそうです。これでも少し緩いですが時間の都合とかもあるのでこれで行きます。みんなは普通のシャフトを使おう!
    ペンの持ち手の部分をつくる
  • ペンを持つ部分はボールペンの直径を測って少し大きめに作る。ネジで閉めれるようにすることで多少違う太さのペンであれば挟めます。また、ネジ穴をたくさんつけることで上下の移動が可能になります。
  • 千石電商さんからソレノイド「CA06250170A」を購入しました。オンラインショップに寸法が公開されてるので、情報をもとにネジ穴をあけましょう。
    千石電商さんはソレノイドの他にステッピングモーター、歯車等をたくさん取り扱ってるので実物見てみたい人は秋葉原店に行こう!

合体する

  • さて主要パーツが揃ったので合体させていきます。ここが一番楽しい作業!
    ベースを作成する
  • 今までXYZ軸とその周りを作ってきましたがどれも細くて支えるのには心もとないのでベースを作成していきます。 2本の柱も材料削減のためにわざと肉抜きしてます。
    XY軸をベースに乗っける
  • なんか工業用のCNCみたいな見た目になりました。このごつさ具合...めちゃくちゃかっこええやん...(語彙力)
    動かなくてもインテリアになりそう、てか私はするぞ!!!(テンション高いのがしばらく続きます)
Z軸周りも載せる
  • こいつは、本当に絵を描く機械なのか...?レーザー出そうな雰囲気あるぞ!(出ません)
    こいつ、完成してるように見えて、ペンどころかステッピングモーターすら載ってないんだぜ?
実際に組み立てよう!
  • 一応サンプルを印刷しながら設計していたのでパーツは全てそろっています。バラバラのパーツを丁寧にネジで止めていきます。
    出来た!!!! 出来上がったときの、この感動...、たまんないぜ! 本当にここまで長かった...。

忘れてた小物をつくっていく

  • CNCには原点を検知するスイッチ必要で付ける場所を作っていませんでしたので作っていきます。(すっかり忘れてた)
    スイッチは秋月電子さんで購入した「マイクロスイッチ AV620264」を使っていきます。取り付けた画像がこちら
  • もう一つ、紙を載せるテーブルを作り忘れてました。とりあえずXみたいなものをつくります。 これの上にアクリルを接着剤をつけて完成

  • これで設計編は終了!...と思いきやまだありますよ(絶望)

    電子工作編

    ドライバーとシールドを用意する

  • ステッピングモーターは通常のモーターのように電池を繋げても動かすことはできません。そこで動かすためにステッピングモーター用ドライバとそれを載せるシールドを用意する。
    こういったドライバは3Dプリンタ用のやつが情報がたくさん載っていて使いやすいです。ドライバを買ったらそれに対応しているシールドを買いましょう。この商品はArduinoの上に直接載せるタイプなので簡単。こんな商品もAmazonなら翌日配送、本当にいい時代になったなぁ...。
  • ましま君に渡す前に一度動作を確認しました。過去にArduino君は私のパソコンの電源をショートさせた実績から外部電源を落とした状態で慎重に書き込みを行いました。(まじでTB3のパソコンで良かった) 動画はあげられないので動いてるときの画像を載せておく。(ケーブル類の加工をしてたので机の上がぐちゃぐちゃです)

ソレノイドのドライバーをつくる

  • タイトルの通りです、はい。当たり前なんですがソレノイドってステッピング用のモータードライバじゃ動かないんですよね。設計時に何も考えなかった私は「名前かっこいいからソレノイド使いたい!!」でそれをベースに設計しました。もう今更設計変更できないのでソレノイド用のドライバを設計します...。
  • といっても実はソレノイドを制御する基板をつくるのはそれ程難しくないです。まず回路図を書いていきます。(汚いのはご愛敬) これだけです。スイッチオンオフだけならこれで十分です。
  • 問題はArduinoはシールドに乗ってるのでデジタルピンを持ってこれないんですよね。そこでモータードライバと同じサイズで作ってシールドに載せます。
  • 目標は決まったのでドライバの裏側を見るとピンの配置が書かれているので読み解いていきます。
  • とりあえずVDD、GND、STEP、1A、1Bの5種類あれば行けそうです。VMOTを使わない理由は電圧が高すぎてソレノイドを壊してしまうので今回は使わない方向にしました。。とりあえずに視覚的に見やすく書いて時間的な都合でここでましま君に投げます。(マジで申し訳ない)

プログラム編

  • ここからやっと私の出番です。
    いや一応手元に基板も買ってDVDドライブも買ってバラして実験はしてたんですけどね、本体を組み立てる能力がありませんでした。(苦しい言い訳)

  • 22日になんとか作って頂いた本体を受け取ることが出来たのでそこから開発開始です(残り2日)
    正直マジの突貫工事で製作をしているので色々間違ってるかもしれませんが温かい目で見守ってあげてください....(小声)

  • 今回は動作にGRBLというArduino上で動作するオープンソースなCNC制御のためのファームウェアを使用して製作していきます。

とりあえず環境を構築する

Arduino

  • まずここからArduino側に導入するパッケージをダウンロードしてきます。

  • Arduinoにダウンロードしてきたライブラリをインポートします。

  • インストールがうまく行っているとこんな感じにパッケージが追加されています

  • 追加がうまくいったらスケッチ例にある「GRBLtoArduino」を開いてArduinoに焼きます。
    これだけでArduino側の準備が完了です。

PC側

  • PC側からはGUIでCNCを操作することが出来ます!
    今回は「grbl Control v0.8.4」を使っていきます。最新版は1.1とかなのですが、今回使っているCNCのボードが若干古い物なので新しいVerでやろうとすると若干ピンの位置が変わってきてしまうようです。その辺りはネットで調べてみるとわかるかもしれません。

  • ここに0.8.4

  • ダウンロードしたら「管理者として実行」でプログラムを起動させます。

  • これだけでもう完成です(大嘘)。ありがとうございました。

今回作ったCNCペンプロッタに合わせてチューニングをしていく

  • 一応このままでもある程度はもう動くは動くのですが、やはりこれ用にチューニングしてあげないと挙動がおかしくなってしまうので地道に調整をしていきます。

https://twitter.com/mewl_msh/status/1340645418674180096

  • CNCシールドにステッピングモーターを接続するだけでもうGUI側から手動で、ボタンを押すことで動かすことができちゃいます

  • 因みになのですが、今回のCNCペンプロッタの製作にはにゅーなるこ先輩から頂いた、「五島慶太Arduino」を使用しました....
    記事はこちらから オリジナルデザインのArduinoを作ろう!五島慶太編
    ピンの位置がちゃんと本家と同じなのでシールドがそのまま付けられちゃいました...流石です、先輩。
    その上接続はMiniBじゃなくてMicroBで出来ますからね、めっちゃ便利です。これからも愛用していきます......

モーターに流れる電圧の調整

  • とりあえず機材を受け取ってから手元にある自分のモータードライバとシールドに載せ替えて遊んでたのですが、動かしてるうちに「キィィィィィン....」というまるで飛行機の離陸音のような音がステッピングモーターからしてきたので「どうしたんだろう、調子悪いのかな?」と思って触ってみたらハイ、地獄のような熱さになってました....というわけで指を火傷した上に冷たい物に触れても「熱い!!!!!」と勘違いするレベルには指先に傷を負いました....

  • 原因

    • モータードライバから流れる電圧を一切確認せず接続して遊んでたからでした....
    • 確認したらほぼフルパワーが出てたのでとりあえず最低にまで戻してモータがちゃんと動く所まで調整を行います。

    • このネジを回すことで出力をいじれます、一度最低まで回してから少しずつ回して動作をする所まで回し続けて調整です....

何故かホームポジションに戻らない

  • ちゃんと適切な出力でモータが動くようになったので一番はじめに「ホームポジションに戻る」という動作をさせることにしました

  • grbl Controlではここを押すだけでホームポジションに戻る動作をしてくれます、動きとしては

    1. モータを原点の方にゆっくりと動かす
    2. 原点付近にあるリミットスイッチが押されるまで動く
    3. 触れたら止まる
    4. すべての軸がリミットスイッチに触れたらそこから一定距離離す
  • という感じでホームポジションに戻る動作をしてくれます

  • まあボタン押せば戻ってくれるし「もうこれ一瞬で完成やろw」とか思ってたんですけどそううまくはいかなかったです....

grbl上で動作を有効化させる
  • 試しに一度押してみたもののうんともすんとも言いません。grblにはパラメータが存在しており、そこを変更して機能の有効化を行わないと駄目みたいです...
$0=755.906 (x, step/mm)
$1=755.906 (y, step/mm)
$2=755.906 (z, step/mm)
$3=30 (step pulse, usec)
$4=500.000 (default feed, mm/min)
$5=500.000 (default seek, mm/min)
$6=28 (step port invert mask, int:00011100)
$7=25 (step idle delay, msec)
$8=50.000 (acceleration, mm/sec^2)
$9=0.050 (junction deviation, mm)
$10=0.100 (arc, mm/segment)
$11=25 (n-arc correction, int)
$12=3 (n-decimals, int)
$13=0 (report inches, bool)
$14=1 (auto start, bool)
$15=0 (invert step enable, bool)
$16=0 (hard limits, bool)
$17=0 (homing cycle, bool)
$18=0 (homing dir invert mask, int:00000000)
$19=25.000 (homing feed, mm/min)
$20=250.000 (homing seek, mm/min)
$21=100 (homing debounce, msec)
$22=1.000 (homing pull-off, mm)
  • 公式ドキュメントによると初期値はこんな感じになっているらしいです。今回はハードウェアスイッチを使ってホームポジションへ戻る動作をさせたいので$16 = 1 $17 = 1 へとパラメータを変更してみます。
    そうするととりあえずはボタンを押したらモータが動作するようになりました。
まずモータの接続向きが間違ってる
  • ただ単に自分のミスですが、モーターの+-を入れ違えてたようでホームポジションに戻す動作をさせたら明後日の方向にすべての軸が飛んで行きました。入れ替えて直りました....
リミットスイッチをまず基板に繋げる
  • ハード担当の田んぼくんとあんまりコミュが取れてなかったせいでまずリミットスイッチを繋げることをしてませんでした。

  • とりあえずケーブルを作る

  • 繋げる

  • そうするとこんな感じで押されたらちゃんと「なんかぶつかってね?」と警告してくれるようになります。いいね

Z軸の判定を外す
  • これが相当曲者でした。今回のCNCペンプロッタではX, Y軸はステッピングモーターとして基板から制御しているもののZ軸はソレノイドを使って制御している為、Z軸にホームに戻るという概念がありません。
    この問題によりホームポジションにX, Y軸が戻っても動作が終わらないというバグが発生しました。

  • 動作を開始させてからZ軸の判定部分をジャンパすると

  • こんな感じで止まってくれるようになりました、原因はこれでわかりました。

  • 因みにソレノイドとは...

    • 銅線に電流を流すことにより磁界を発生させ、磁性体の可動鉄芯を吸い寄せる(吸引)電気部品です。 銅線に電流を流したとき、可動鉄芯は銅線内の固定鉄芯方向に吸い寄せられ、通電している間は常に吸い寄せられていますが、電流を断てば吸引力は消滅します。(機種によって残留磁気が発生する場合もあります) この動作を応用して一般的なプル(吸引)ソレノイド、プッシュバーを装着し「吸引=押し」動作にするプッシュ(押し)ソレノイド、永久磁石を組込むことによりそれぞれの動作を保持している自己保持ソレノイドなど幾多のバリエーションがあります。
Z軸の判定部分を永遠ジャンパする
  • この問題がわかった時は「じゃあ永遠ジャンパしとけばええやろ笑!」と思ってたんですけど初っ端から判定が入ってるとホームに戻るという扱いにならないみたいです、だめでした。
プログラム側を修正してZ軸の判定を抹消する
  • ハード側では修正不可能なことがわかったので泣く泣くプログラムの方を修正していきます。
  • しばらく読んでるとlimit.cppというファイルに判定の方法が書いてあったのでZ軸に関する情報を抹消していきます。

  • この辺で処理させてますね。
  • まあ見た感じZ_AXISの存在抹消すりゃそのまま無視して行きそうな感じなので適当に抹消します()

    • 各定数の定義はconfig.hの中に記述があったのでこれを

    • こんな感じに変更してみます

  • そして再コンパイルしてArduinoに焼いてみると....

  • Z軸に小細工せずともちゃんとX, Y軸だけでホームポジションへ戻ってくれるようになりました、やった!

ホームポジションに戻った後に何故か更に原点の向こう側へと行こうとする
  • 無事動作するようになったのは良いものの何故か戻った後にもうひと押しでホームポジションより向こう側へモータが動作してしまいます。これもパラメータより動作を変更させる事が可能のようです。

  • $22 原点復帰後移動距離というパラメータを初期値の1.000 から -2.000 へと変更、そうすると...

  • いい感じに間隔と取ってくれるようになった

X, Y軸のステッピングモーターの動作量を合わせる

  • 今回のハードで一番厄介なのがX, Y軸でモーターの種類が違う点です。
    これが何が不味いかというと、同じ入力値でもX, Y軸で移動量が全然違うものになってしまうんです。
    ただ今回はソフトが優秀でこれもパラメータの調整で解決することができました。
$0=755.906 (x, step/mm)
$1=755.906 (y, step/mm)
$2=755.906 (z, step/mm)
  • ここの数値を変更することで各軸の移動量を変更できます、簡単ですね。
  • 厳密に調整するのもめんどくさかったので目分量で適当に合わせました(は?)

Z軸のソレノイドを動作させる

  • ここまでくればほぼ完成なのですが、Z軸がちゃんと動作してくれなければ一筆書き or 何も印刷されないになってしまうので修正していきます。

  • 今回、Z軸にはステッピングモーターではなく、ソレノイドを使用しているので必要なのはOn/Offの信号です。動作させられるよう、がんばります....

作戦1. ソレノイドのドライバーを作って動作をさせる
  • 田んぼくんが回路図書いてくれたので適当に基板をつくります

  • こんな感じ、ハンダ付けの才能ないからやめたほうがいいよ

  • これのせてさして動かしてみたんですけど残念ながらソレノイドに信号が送られることはありませんでした...
    原因を突き止めようとも思ったんですけど、もっと効率のいい方法を思いついたのでそっちをやってみる

作戦2. スピンドル出力用のピンにソレノイドを挿す
  • 作戦1でわざわざ基板作ってうーーーーーーんと永遠悩んでたのですがデータシート的な何かを見てたらSpnEnというピンを見つけました。このピンからはスピンドルの電源のOn/Offが流れてるっぽいです。うん。これに繋げちゃえばいいじゃん....

  • 繋げたらはい、普通にソレノイド動きました。とても複雑な思いです...

  • というわけでバネをくっつけてOnでペンが下がる、Offでペンが上がるように

  • なる予定だったんですが、ソレノイドの磁力が弱すぎるせいか上がった後にペンが下りていってくれません。色々バネを短くしたり上に重しを載せて調整してたのですが、ソレノイドの上の部分にFRISK Neoの空き缶を乗っけるといい感じに動作するようになりました。

これはひどい....

  • とりあえず今回のCNCペンプロッタのパラメータをおいておきます、めんどくさいので今回の記事で書いてない所もちょくちょくイジってあります。参考程度にどうぞ~~~
$0=60.000 (x, step/mm)
$1=10.000 (y, step/mm)
$2=100.000 (z, step/mm)
$3=10 (step pulse, usec)
$4=250.000 (default feed, mm/min)
$5=500.000 (default seek, mm/min)
$6=192 (step port invert mask, int:11000000)
$7=25 (step idle delay, msec)
$8=10.000 (acceleration, mm/sec^2)
$9=0.050 (junction deviation, mm)
$10=0.100 (arc, mm/segment)
$11=25 (n-arc correction, int)
$12=3 (n-decimals, int)
$13=0 (report inches, bool)
$14=1 (auto start, bool)
$15=0 (invert step enable, bool)
$16=1 (hard limits, bool)
$17=1 (homing cycle, bool)
$18=0 (homing dir invert mask, int:00000000)
$19=25.000 (homing feed, mm/min)
$20=250.000 (homing seek, mm/min)
$21=1000 (homing debounce, msec)
$22=-2.000 (homing pull-off, mm)
ok

いよいよ完成!

  • まあ紆余曲折ありましたが短い開発期間の中でなんとかCNCペンプロッタが完成しました!!!!!!!!

  • こんな感じ かっこいい

色々書かせてみた

終わりに

  • というわけでいい感じにCNCペンプロッタを作ることができました〜〜〜
    正直今回私が制作してた部分が全然なくて私の記事として出すのは凄く忍びないのですが、楽しんでいただけるとありがたいです。

  • どうも田んぼです。ここまで読んでいただいてありがとうございます。
    ぶっちゃけるとまじで大変でした。就活、研究室の合間に設計して印刷してとかなりのハードスケジュール。とりあえず形になり、実際に動いて描けたと報告を受けたときは涙を流しながら喜びました。忙しかったですが楽しかったのでヨシ!!
    皆さんも記事を読んで楽しんでいただけたなら幸いです。また次も工学知識0シリーズを二人でやりたいと考えてるけどましま君はどうかな?ま、やりたくないって言われても無理やりやらせるんで来年もまた会いましょう。乙!!

  • 来年こそはちゃんと二人で物作りします!!!!!!

うおおおおおおおおおおおおおおおおおおお それではメリークリスマス!!!!

私の推しなのでみんなも推してください。

はじめに

  • こちらはTokyo City University Advent Calendar 2020 4日目の記事となります。

  • 皆様どうも初めまして、情報システム学科のましま(@mewl_msh)と申します。
    相変わらず皆様がつよつよな記事を書かれている中で私のような浅学非才の身の人間が記事を書かせてもらえることに深く感謝しております、ありがとう神様主催者様仏様...

  • 昨年のACとは違い、今年は2枠も頂いてしまいました...(なお進捗)
    この記事ではハマってる物、こだわっている物について少しでもその良さを皆様に共有できたらと思っています!
    最後までお付き合い頂ければ幸いです、それではよろしくお願いします!

目次だよ~

1. ThinkPadの良さとは

  • まず一つ目はThinkPadについて、お話します。

  • 普段私がしてることといえばTwitterを見てくださっている方ならご存知の通り、たくさんThinkPad買っては食べてることなのですがどの辺りが他の製品より優れていて、人を惹き付けるのかについて個人的な見解を述べていきたいと思います。

デザインが飾りっ気がなくてシンプル

  • ThinkPadといえば、真っ黒な筐体にアクセントの赤色が特徴、これはIBMの時代から一貫しているThinkシリーズのデザインらしいです。
    実際どのマシンも黒い天板にThinkPadのロゴ、開けてみると真っ赤なポインティングデバイスがお出まし、となっていて「あっ、今ThinkPadを使ってるんだな」という所有欲を凄く掻き立てられるんですよね....

    f:id:yu2o47fu5:20201203024807j:plain
    シンプル イズ ベスト

  • このデザインの一貫性が今、ThinkPadシリーズを集めているんだ。というコレクター精神に凄く響く感情を巻き起こし、沼に堕ちます。みんなも買おう!

    f:id:yu2o47fu5:20201203024615j:plain
    ここすき

とにかくキーボードとポインティングデバイスが使いやすい

  • デザインガーとか収集欲ガーとかいう異常者はともかく実用的な面で見ればこれが一番大きいです。どの機種でも基本的にはキー、ポインティングデバイスの配置が一緒なんです(時折ピッチは違ったりするけど)。
    これが凄く良くて、普段色んなマシンを触る人ならわかってくれると思うんですが「あ、このPCはFnのキーここなのかよ....」「キーピッチ狭すぎでは...?打ち辛ぇ...」「TouchBar廃止しろ」などなど... とにかくマシンによってすべてが違うし打ち間違いが多発するんです...
    ただ前述の通りThinkPadは基本的に全部一緒なので友人から借りたり、新しいThinkを買ってもすぐ使いこなせる、すぐ手に馴染んでくれます。道具として最高なんですこれ。

  • 後はこのシリーズ特有の「トラックポイント」が本当に最高です。
    なんか最近はThinkPad使ってるけどトラックパッドor外付けマウス使ってて、「あれ特にいらなくね...?」みたいな話を聞くのですがその”あれ”、慣れるととんでもなく便利なので使ったことない人は是非試してみてください....
    トラックポイントというのはこんな感じでキーボード上のスティックと3つのクリックボタンで構成されてる奴です。

    f:id:yu2o47fu5:20201203025505j:plain
    こんなやつ
    赤いポッチがマウス、下3ボタンがクリックやらなんやらするやつです(語彙)
    この下の真ん中のボタンの役割なんすか???と思う方が大勢いると思うのですが、これを押しながらマウスを操作するとその方向にスクロールをしてくれます。
    これの一体何が良いのかというとキーボード上に手を置きながらマウスも同時に操作できる点なんです。
    私は一時期Apple信者に鞍替えしてMBPをずっと使ってたのですが、確かにトラックパッドと豊富なジェスチャーは使いやすかったんだけど、手をキーボード-トラックパッド間で移動させなければならない、キーボード打つ時にトラックパッドに手があたって誤反応して変なウィンドウに打ち込まれる、これが多すぎてストレス過多になって売りました。はい。
    因みにM1 MacBookAir買いました。性能には抗えないの!Mac、最高!笑
    キーボード上に手を置きながらマウスを操作できる、この快適さはThinkPadシリーズでしか味わえない素晴らしさなのでみんなも(ry

  • 余談なのですが、ThinkPadは一度キーボードのデザインが変更となっています。

    f:id:yu2o47fu5:20201203030540j:plain
    左: 旧7列 右: 新6列

  • 根っからのユーザの方々は「旧7列しか勝たん!!!!!」という人が多いですが、個人的には現行の6列のアイソレートタイプの方が好きだったりします。
    キーが離れているおかげで同時押しが起こりにくい、爪が伸びていても干渉しにくいなど色々便利なんですよね。

  • ThinkPadのアクセサリにはBTで接続できる外付けキーボードがあります。

    f:id:yu2o47fu5:20201203032254j:plain
    愛機のYoga260君はキーピッチが狭いので外付けと一緒に持ち運んでます
    この記事でThinkPadのキーボードに興味が湧いた方は一枚買ってみて自分のマシンに繋げてみると幸せになれるかもしれません。保証はしません。

意外と手頃に手に入ってメンテナンスがしやすい

  • 最後は入手性と整備性の良さです。

  • 最近の世代だとどうしても薄型化指向が強いのであまりメンテナンス性は良くないのですが、数世代前の機種だと簡単な作業でメモリ、HDDなどを交換することができ、更に企業で多く使われてることもあってそこら中にリース落ちやパーツ取りとなるジャンク品が転がっているのでとても入手性がいいです。アキバとかに行けば結構転がってるはずです、なのでみんなも(ry

2. フロッピーディスクは結構楽しい

今更フロッピーディスクを使う理由は?

  • 多分皆様はこう思ってると思います。正直浪漫だけです。

  • 個人的にフロッピーで楽しいのは好きなエロゲのOPを1.44MB以内に収めて、フロッピーにデータを移して再生することが好きです。
    設定を弄くり回してどうにかこうにか画質を求めながら1.44MBに収めていく....これ地味に楽しいしやり始めたら数時間は飛びます。暇つぶしにオススメです。

フロッピーとドライブの入手先

  • ドライブは秋葉原のジャンク街で1台100円、IBM製のドライブはメルカリで500円で買いました。IBM製、デザインがすき.....

f:id:yu2o47fu5:20201204004759j:plain
すき

  • フロッピーそのものは50枚入り500円でメルカリで買いました、めっちゃ安くない....?

    • フロッピーディスク1枚10円と考えると1MBあたり約7円です!!
      因みに今どきの256GB MicroSDカードの1MBあたりの価格調べたら約0.02円ぐらいでした、これっぽっちも安くなかったです。

    • 中身はPC98用やらOS/2用のツール群だったみたいです、ウキウキでドライブに挿して中身を見たんですけど、出品者の方がご丁寧に1枚1枚気持ちを込めてフォーマットしてくださったようです。めっちゃ中身見たかった

f:id:yu2o47fu5:20201204005031j:plain
でろ~ん

早速エロゲOPをフロッピーディスクに詰めてみよう

  • H.264使ってエロゲOP詰めるか~(ヘラヘラ)してたら、らぴーとくんに「もう時代違いますよおっさん笑」と言われて泣いたのでとりあえずAV1を適当に準備して新時代の夜明けを体感してみることにしてみました。
    詳しい技術面のことやらは私も対して知らないので昨日のAC記事を見てみてください....

  • たまたま手元にあった素材が乙女理論とその周辺というゲームのOPだったのでそれで実験していきたいと思います。釣り乙シリーズはいいぞ 私はりそな様とルナ様とユルシュール様が好きです...

f:id:yu2o47fu5:20201203225834p:plain
左: H.264 右: AV1

H.264 480x270, 100kbps, 12fps
AV1 640x360, 100kbps, 12fps

ちゃんと条件合わせるべきなのですが面倒だったのでH.264は以前に作った物を適当に拾ってきました....

  • とりあえず手っ取り早くAV1でエンコしてサイズを収めてみました。一目瞭然でAV1の方が良いですよね....

f:id:yu2o47fu5:20201203231758p:plain
左: H.264 右: AV1

  • 動いてる所は正直あんまり変わりなさそうですね。というか何か色味がAV1いいですよね、x.264何か設定ミスってた説がある。
なんかCVBRで処理をさせたらある一定値でクラッシュしてエンコードが進まないバグがあった、まあAV1まだ開発中だからね、仕方ないね



f:id:yu2o47fu5:20201204003300p:plain
AV1すごい

  • 見てくださいよ、これ。
    この画質で1.44MBに収まるんですよ....?凄いですよね....
    動きが激しい所は....ナオキです....

f:id:yu2o47fu5:20201204003845p:plain
ちゃんとフロッピーディスクにも入っています

現代技術によって蘇るフロッピーディスクを楽しんでみては如何でしょうか?

3. PCDPは音と外見が最高である

  • 3つ目はPCDP(Portable Compact Disc Player)、いわゆるポータブルCDプレーヤーの良さについて何か書きます

PCDPを集める意味とは?

  • スマホに音楽を入れて持ち出す、ストリーミングサービスで外で幾らでも聞ける、そんな時代にCDとクソでかい筐体を持ち運ぶ意味は正直対してないです、これも浪漫です。
    ただPCDPにも利点があって音質がとても良いんですよね...とにかく音が元気でエネルギッシュなんです(?)。出力がとてもしっかりしていて高価格帯のヘッドホンでも無い限り基本的には鳴らすことができちゃいます。
    後めっちゃ筐体がカッコいい(お前それしか言わないな)

f:id:yu2o47fu5:20201204012318j:plain
いいよね

見てください、この筐体を。めっちゃメカメカしくて格好がよくないですか????集めたくなりますよね!

個人的おすすめ機種

1: IBM CD-400

f:id:yu2o47fu5:20201204013113j:plain
CD400

  • この機種はIBMの外付け20倍速ポータブルCD-ROMドライブ、SCSI接続が出来て、その当時はThinkPadリカバリ用の外付けメディアとして販売されていました。
    筐体はボトムが金属となっていて重厚、高級感がとても良いです。単三6本を食らって稼働時間3h程度とバカ食い感すき。

  • この機種の特徴はとにかくフラットな音の鳴らし方をします
    傾向としては若干寒音系でカチッとした音の鳴りをしますが、とにかくフラット。癖の無い鳴り方をします。解像度も結構高めだと思います。

  • 動作品中古で2000円ぐらいで買えたはず、とてもお得....

2: Panasonic SL S150

f:id:yu2o47fu5:20201204014251j:plain
SL S150

  • この機種は16bitDACを搭載しているとても珍しいハイビット機です。ハイビット機のいい所は本当に音の情報量が多いんですよね、よくある1bit機と聴き比べるとかなりの違いがあってびっくりします...音一つ一つがちゃんと描かれているような気がします(個人比)
    ただしハイビット機はPCDPの中でも初期に開発された物が多く、とにかく振動に弱いのがネックで持ち運ぶとなるとすぐにブツブツ音が途切れてしまうのでどこかにおいて使うしかありませんでした。ただこのS150は中期に製造された物でちゃんと耐震機能が付いてるんです。このおかげで外での利用もへっちゃらな最強機種なのです。

最後におまけ

  • こんだけクソ長いことつらつら並べておいて情シスの癖に技術的な話0とか冗談ですか???と言われそうなので30分ぐらいで作った知らない言語のクソbotを置いておきます

Discordに文字を送ると無差別にノムリッシュ翻訳するクソ迷惑な何か

  • 作り方
    1. Nodeを導入する
    2. Discordjs, Puppeteerを導入する
    3. puppeteerで翻訳する一連の作業を書く
    4. discordjsでメッセを受け取って投げて結果をぶん投げる部分を書く
    5. 完成
  • Nodeは齧って2hぐらいですが、これ作るのたったの30分と40行でした、Node便利すぎ!?

みんな笑顔になれますね、とてもいいですね。

5日目はケー(@ke_odakyu9000)様の ネイティブな「JSはいいぞ」 です! まあ何かケーさんらしくていいと思います。
この後もAdvent Calendarをお楽しみください....それでは失礼します、ここまでお付き合い頂きありがとうございました。

工学知識0の情報学生が40日で1からキーボードを設計して作ってみたお話。

はじめに

こちらのページはTokyo City University Advent Calendar 2019 19日目の記事です。 前日の記事はナカX卜さんの「TAPの全体的なまとめになるレポートを書きます。」です!

もくじだよ~

ごあいさつ

  • 皆様、はじめまして(震)。情報システム学科でひっそり大学生をさせていただいてるましまといいます。
    人生初ブログな上に周りのつよい人たちの記事が怖すぎて震えながら書いています 色々拙い部分もあるとは思いますが最後まで読んで頂ければ幸いでございます....

なぜにキーボード?

  • Adventカレンダーという風習(?)自体は元々知っていて、いつか強い人になって俺も書きてえなぁぐらいに思ってたのですが、今回たまたまおーじぇい君に機会を頂いたので気合を入れて情報学生らしいこと書こうとはしたのですが
    周りの記事が強すぎて書く勇気がなくなったので
    今回は以前から興味のあったキーボードを何もわからない初心者が1から設計出来るのかチャレンジ記事的な物を書いてみようと思い立ったのが地獄事の始まりでした

  • 一応私のスペック...

    • 基板設計経験なし
    • 大学入学後の電子工学の勉強なし
    • 一応はんだごては使える
    • CADの経験ほぼなし
    • Arduinoは一応触ったことがある、プログラムも書いたことがある
  • こんなどこにでもいそうな冴えない陰キャ情報学生にキーボード制作は出来るのでしょうか...?
    それでは御覧ください

基板設計からやる自作キーボードの流れ

  • あんまり詳しく書きすぎると記事が終わらなくなっちゃうので全体の流れを書いていきます。
    詳しく知りたい所はお手数ですが自分で調べて見てくださいな...

まず必要なものを買う

  • とにかく期限的にもすぐ着手しなきゃいけないのでひとまず
    • Pro Micro

      こいつにプログラムを書き込んで制御させる いわゆる頭脳の部分

    • タクトスイッチ

      本物のキースイッチを使って実験してたらお金が足りないので ひとまずタクトスイッチで検証する

    • 抵抗

      10kΩがあればいい

    • その他 ジャンパピン, ブレッドボードなどなど   を購入

どんなキーボードを作るのか目標を建てる

  • ひとまずどういった物を作るのか、形にして目標を設定していきましょう!

  • とりあえずペイントでらくがき完成予想を書きました

    • 制作時間が短いので2キーで
    • なるべく小さく、嵩張らないように
    • ストラップの穴を付けて持ち運べたらいいね

 とまあこんな感じな目標が立ちました

とりあえず簡易的な物を作って学ぶ

  • まず第一にキーボードがどのような仕組みで動いているのかすらさっぱり分からないのでネットで見つけたゆかりさんの記事を参考にキーボードの仕組みの基礎的な部分を学んでいきます....

ものの30分程度で簡易的な2キーボードが...

回路は
1. VCCピン(電源ピン)から電源を引っ張る
2. スイッチにつなぐ
3. スイッチから信号を受け取るピンに線をつなぐ
4. 押していないときに0Vとなるよう抵抗を使って信号を受け取るピンからGNDにつなぐ
これをプルダウンというらしい

  • 文字だけだとわからないと思うから図を書いてみる 下の図はPull Down回路を簡単に書いたもの

スイッチがオンになると電気がArduinoに流れて押されたことを判別できる (もっと詳しく知りたい場合は「Pull Down Arduino」でググると多分出てくる)

  • これを元に書いた回路図が下の写真

手書きだから汚いのはご愛敬

プログラムはごめんなさい適当に作って消しちゃいました....
ただ5分もしないうちに書けてたのでかなり単純にできちゃいます

とこんな感じであっさり2キーキーボードの原型が完成してしまった...
実はクソ簡単なんじゃね??
この思い上がりが後の地獄へと発展していく

回路を考える

  • あまりにもかんたんに2キーキーボードの原型が完成してしまったのでどうせならもうちょっとキー数増やしたいなぁ... と思い、早速2x5キーの回路を考えてみました(は?)

仕組みを学ぶ

  • 色々調べていくうちにArduinoの「Input Pull Up」という機能を見つけた。
  • 簡単に言えばPull Downの逆バージョンでArduino内の抵抗を使うことで必要な抵抗の数を減らすことが出来るとのこと。

  • Pull Downについて

    • まずはただの「Pull Up」の図

    抵抗とスイッチの位置が逆になってること以外違いがない...

    • 次はArduinoの「Input Pull Up」の機能を使うとこうなる

    抵抗の部分が全部Arduino内で完結している(感動
    こちらで用意するのはスイッチの部分だけなので回路はものすごく簡単になる

キーマトリクスってなに?

  • そういえば遊舎工房で他のキーボードを眺めるとArduino一個に対してキーが30個近く繋がっていてこれではArduinoの足の数が足りないのでは?という疑問が生まれた

足とキーの数が合わないんだけど

  • 足が足りなきゃ当然ながらすべてキーの判別はできない
  • 色々なサイトを調べた結果、キー数の多いキーボードではキーマトリクスという物を使ってるらしい
  • とりあえずキーマトリクスについて調べると

これがキーマトリクスらしいが...よくわからない... Google先生に助けを求めて1時間、こんな情報を見つけました

「時間ごとに各列を管理する」

要は、出力1,2を同時に出力するのではなく交互に出力すればいいらしい

もっとかみ砕くだいて説明する

  • タイミング1 この場合、赤枠の中の出力1からのみ電気が流れる、そのため出力1 + 入力1~2の組み合わせのみが反応する

  • タイミング2 この場合、青枠の中の出力2からのみ電気が流れる、そのため出力2 + 入力1~2の組み合わせのみが反応する

    2x2の回路ではあまり効果を実感できないかもしれないが5x5などキー数が多くなった時にわざわざ25ピン用意する必要はなく、5つの出力と5つの入力 つまり10ピンあれば5x5のキーボードを制御できてしまうのである...

基板設計をしていく

  • 先ほど学んだキーマトリクスを使って回路を考えてみる 今回は友人に使い方を教わるために友人の使用ツールであるKiCadを使って開発をしていきます
  • 回路図

  • 基板レイアウト

    自力で配線をしてみるものの、これまた難しいので自動配線プログラムを使う 1分間回して完成したのがこちら

よくわかんないけどつよそう(初心者並感)

自動配線ではどうしても無理な配線が出てきてしまったりするのでそこは手作業で確認しながら編集していきます

設計変更の繰り返し

何か割とスイスイ進んでるし、どうせやるならいいもの作ってみんなを驚かせてやりたいやい!
とまあふざけた思い上がりをしたが為に 回路 基板の設計を何度もやり直すこととなります

廃案となった者たち

目標ってなんだよ

  • 結局幾度にも渡る設計変更の末、はじめの目標は完全に消え失せ
    5x5のキーボードになりました

これが完成したもの

初めて作るクセにやれ独創性だのやれオリジナリティなどとあーでもないこーでもないと設計を変更し続け、果たして本当に使いやすいのかエルゴノミクスを完全に無視したオレゴノミクスキーボードが完成します

基板を業者に発注する

  • 今回はFusionPCBさんで注文しました。PCBを発注するにはまずガーバーデータの出力が必要になります。

業者によって出力の際の設定が違うのでしっかり確認しながらやりましょう

  1. ファイルの中のプロットを選択

  2. ガーバーデータを出力する

  3. ドリルデータも出力する

  4. 全データを一つのファイルに圧縮してFusionPCBさんに送る こちらの業者はファイルを送るとサイトでデータのチェックが出来ます

  5. 確認が終わったら枚数等の必要事項の入力

  6. 住所、クレジットカードを入力したら完了です

あとは出来上がるまで気長に待ちましょう...☕ (一週間から二週間ほどで届きます)

アキバでパーツあつめ

  • 基板の到着までには1週間ぐらいの猶予があったのでその間に秋葉原にある遊舎工房さんや千石電商さん、西川電子部品さんで必要なパーツを集めていきます...

  • 買ったもの

    • Kailh Choc Low Profile キースイッチ(白色)

      初期の目的である「なるべく小さく、嵩張らないように」を継承するために 他のキースイッチよりも背丈が低いロープロなこの娘を選びました

    • キーキャップ

      白を買った なんか数字の所だけは黒にしたかったのでそっちもちょっとかった チョコみたいでかわいい

    • ダイオード

      ひつようだねたくさん

    • ねじ、スペーサー、ナット

      ケースをつけるのに必要なのでサイズにあったものを集める

ソフトを書こう

ここからがやっと我ら情報システム学科生の本領です

#include "Keyboard.h"
//多分HIGHとかLOWはTRUE, FALSEにおきかわるんですかね
#define R_N 5 //行数 今回は5
#define C_N 5 //列数 今回は5

//Pinの情報
const int row_Pin[R_N] = {5, 6, 7, 8, 9};
const int col_Pin[C_N] = {10, 16, 14, 15, 18};
//ピン番号はちゃんと本体を見ながら打とう!

bool nowStatus[5][5]; //現在
bool beforeStatus[5][5] = {0}; //走査前

const unsigned char Keymap[R_N][C_N] = 
{ //これが入力される文字たち
  {0x35, 0x34, 0x33, 0x32, 0x31},
  {0x74, 0x72, 0x65, 0x77, 0x71},
  {0x67, 0x66, 0x64, 0x73, 0x61},
  {0x62, 0x76, 0x63, 0x78, 0x7a},
  {0x0, 0x20, 0xB1, 0x82, 0x80}
};

void setup()
{
  // Pinのセットアップ
  for(int i = 0; i < R_N; ++i) pinMode(row_Pin[i], OUTPUT);
  for(int i = 0; i < C_N; ++i) pinMode(col_Pin[i], INPUT_PULLUP); 

  for(int j = 0; j < R_N; ++j)
  {
    digitalWrite(row_Pin[j], HIGH); //あくてぃぶろーなので一回HIGH統一ですべての走査を切る

    for(int i = 0; i < C_N; ++i)
    {//Activeになった時にLOWへと変化するため初期値はHIGHで固定
      nowStatus[j][i] = HIGH;
      beforeStatus[j][i] = HIGH;
    }
  }

  Serial.begin(9600);
  Keyboard.begin();
}

void loop()
{
  for(int j = 0; j < R_N; ++j)
  {
    digitalWrite(row_Pin[j], LOW); //走査する列のピンをLOWへ変更

    for(int i = 0; i < C_N; ++i)
    {
      nowStatus[j][i] = digitalRead(col_Pin[i]); //ピン状態の取得

      if(nowStatus[j][i] != beforeStatus[j][i]) //以前の状態と違うときに
      {
        if(nowStatus[j][i] == LOW)
        {
          Keyboard.press(Keymap[j][i]); //Press!
        }
        else
        {
          Keyboard.release(Keymap[j][i]); //現在状態がHIGHということは押されてないと言うことなのでここでReleaseしよう
        }
    }
      beforeStatus[j][i] = nowStatus[j][i];
    }
    digitalWrite(row_Pin[j], HIGH); //走査完了、もとに戻そう
  }
}
  • ここについてはあまり時間をかけられずもっと改善したい所が満載なので今後もっと改良していきたい

ケースをつくろう

  • もちろんキーボードを基板むき出しで使うわけには行かないので今回はアクリル板を使ってケースを作っていきます

  • KiCadからレイヤーごとのDXFファイルを出力する

    ファイルからプロットを選んで...

    これで「製造ファイル出力」を選べばKiCadのレイヤーごとのDXFデータが出力されます

  • AutoCADでDXFファイルをそれぞれ読み込んでいく

    こんな感じで読み込めるようになる

  • AutoCAD内で編集する

    ちなみにKiCadじゃなくてEagleで作るとこの作業がすごく楽になります

  • AutoCADからDWGファイルを出力する

  • DWGファイルをレーザー用のデータに加工してプリントする

    加工中の写真

アクリルを切るのにはどのご家庭にもおいてあるレーザー加工機を使用しました
ちなみに必ず失敗するので自分でレーザーを使って作るときはアクリルを多めに買いましょう(経験談

今回はキーボード裏面にアクリル彫刻をすることにしました

5分ほどで印刷完了 好きなergから推しヒロインを印刷した かわいい

さて組み立て!

なんとかアクリルも切り終わり外装も完成したので早速組み立てていきます が、 まあ当然というか干渉してしまってる部分などが見えてきましたしにたい

1.キーキャップ同士が干渉してしまう

  • これを直すには基板の修正からしなければならないがどうしようもないのでもうこればっかりはしょうがないので、干渉する箇所はすべて手作業で削りました

つらい

2.リセットスイッチ用の穴を開け忘れた

  • 一度切ってしまったアクリルに後から穴をどうにか開けるのも位置がずれそうで嫌だったので見なかったことにしました

3.はんだつけする位置を間違いまくる

  • アクリルを切り終わった勢いそのまま深夜にハンダ付けを始めてしまったのであらゆる所でハンダ付けするものを間違え、泣きながら剥がしてはつけ直す作業を続けていました( 当然ですがつけては剥がすなんてことを続けていたら基板にも部品にもダメージが入ってしまうのでハンダ付けする前はちゃんとどこに何をどのような向きでつけるのか確認してから作業しましょう!

はずす時にスルーホールが2つほど取れてしまったProMicroさんほんとごめんな

地獄のバグ潰し

深夜に泣きながらハンダ付けをやり直してなんとかすべてのパーツを乗っけることができたので早速以前作ったプログラムを焼いていこうとするも
まずPro micro認識されねぇ( ^ω^)
ここからまた数時間にかけてキーボードとの格闘がはじまります((

何故か認識されないProMicro互換品

何故かこんな感じになって認識されない

  • 恐らく互換品使ってるからこんな羽目になってるんだとは思いますが、解決としてはProMicroにあるResetモード(RSTとGNDをショートさせると入れる)を動かすとBootloaderが立ち上がってくるのでそこで対象ボードにArduino Leonardoを指定して焼き込んであげるとLeonardoとして認識され使えるようになりました。

というわけで早速ProMicroに作ったソフトを焼いていきます...

一部のキーが全く認識されない

正直これが起こったときはもうオシマイダー!!の顔つきして布団にダイブしてひたすら枕を殴っていましたが何とかなりました

ProMicroのピン番号指定にご注意!

  • ずっと図面眺めてたせいですっかり忘れていたのですが、ProMicroのピン番号は決して連番ではなく各ピンごとに数字が決められている のでしっかり画像を本体を見てピン番号を確認しましょう!

図面と本体で番号が違うのですっかり忘れていた

ハンダ付けちゃんとしよう!

  • ただ何故かソフトを修正しても一列だけ全く反応してくれなかったのでテスターでちゃんと通電しているのかを確認していきます。

  • テスターでチェックしたところ問題の列(A0ピンがINPUT_PULLUPのピンとして指定されていた)には微弱な反応があっただけでほぼ通電していない状態だった
    ソフトの方は修正済みだし、アナログピンと共用だからといって何か問題があるわけでもないので微弱な反応があったという点も考慮にいれて再度しっかりハンダ付けすることにした...

そしたらあっさり何事もなかったように動きました()

ここだけで2時間近く悩んでいたので皆さんはちゃんとハンダ付け、しよう!

とりあえず完成!!

  • やっとここまでたどり着きました(投稿数時間前)最後に用意したネジでキーボードにバックパネルをくっつければ...

うおおおおおお!

今回の感想

  • 正直本当に期間がなさすぎてとりあえず完成を目指していたのでプログラム面や設計においてもかなり改善点を抱えてはいますが初作品にしてはよかったのかなって...
  • 今後の改善点としてはソフトをQMK Firmwareと言われるフレームワークを使って書き直す、I2C用のジャックも実は実装しているので2つつなげての使用をできるようにしたいと思ってます

おわりに

  • 正直途中から本当に19日目までに仕上がるのか不安で不安で仕方がなかったのですがギリギリ完成させることができました(完成したのは3日前)(記事は徹夜)
    ただただ本当に初めてなことまみれ過ぎて死ぬほど大変だったので皆さんはちょっとずつまずは小さいものから作っていきましょう(当たり前)

  • 今回この記事を書くにおいて様々な知識やアドバイス、お手伝いをしていただいた情シス同期の田んぼくんにはマジで頭が上がりません本当にありがとうございました....
    間違いなく今回の企画がうまくいったのは彼の協力のおかげです、今度私のお金でご飯いっぱい食べに行きましょ

  • 今回手伝わせていただいた田んぼと申します。まずはキーボードづくり&記事づくりお疲れ様でした。正直今回の企画時間的にも精神的にもギリギリでしたがとても楽しい時間を過ごさせていただきました。完成するか私もドキドキしてましたが無事完成してほっとしてます。機会があればまたやりましょう。本当にお疲れ様でした。(田んぼ)

(´;ω;`)ありがとう

明日は TCUAC 20日目 あいうさんの記事となります! よろしくお願いします....