やや多趣味の人のブログ

人生のアーカイブって言ったらカッコいいね!

VFD(蛍光表示管/LD8035)を制御して時計を作った!(JLCPCBで基板発注)

読まなくてもいい部分

 さっきブログ書いたのにまた書く、よ。1つの記事にまとめようと思ったけど、思ったより長かったのだ。

 最近暑いね。5月なのにもう冷房だよ。早いよ。研究室に行くことで光熱費削減(変換)をしたいですね。

 研究室の唯一の欠点は音楽をスピーカーで流しながら作業できないこと!当たり前だよね!!

 ここまで読んで、後悔しただろう?本当に読まなくてもいいのだよ。


前回までのVFD時計とかとか

 前回の記事は↓↓↓

wells.hatenablog.jp

KiCad 使って基板を作成しましたので、今回は発注してみようというお話です。


JLCPCBで発注する

 さて、基板発注する咲季はいろいろありますが、今回はJLCPCBに発注します。

jlcpcb.com

少し前に、中国さんが日本に対して、ロボット系の輸出をしない!みたいなことになってて焦りましたが、2026/05/18現在は特に問題なく届きます。

 JLCPCBは中国の企業でして、以下のような特徴があります。

  • 圧倒的に安い:100×100 [mm2] 以内なら、5枚で3.2$程度で発送までできてしまう。
  • オンラインで完結する:ガーバーデータ(基板のデータ)をアップロードし、オプションを適当に選択し、決済するだけ。簡単。
  • 輸送会社を選択可能:お金だせば早く届くし、めっちゃコスト抑えることもできる。
  • KiCad との対応:プラグインを導入することでスムーズに発注まで可能。

などなど、個人で使うならほぼ一択ではないでしょうかというレベル。すばらしい!!


KiCad にJLCPCBで発注用のプラグインを導入

 実際に発注する手順ですが、プラグインを導入し、ガーバーデータなど発注に必要なデータを生成します。

 では、ここに示す、、、、と思ったんですけど、以下の記事が良さげだったので、それに任せます(まさかの全投げ)。だって、同じこと書く必要はないでしょう!!??

 なお、以下の記事ではVer9.0ですが10.0でも問題なく動作します。

qiita.com


発注のオプションとか発送にかかる時間とか

 今回は、結果として2回発注しました。どちらも以下のようなオプションにしました。

  • 基本的にはデフォルト
  • 基板枚数は5枚~です。5枚で2.00$です。ほえぇ(驚愕
  • 基板の色とかも変えられるらしいけど、まぁ最初は緑でしょう!黒とかかっこいいけどね。
  • 配達会社がOCS NEPにしました。一番安いからですね。
  • 費用としては、商品代:2.00$ + 送料1.20$ = 3.20$です。安い。安すぎる。。

どれくらいで届くの?

 発注したら、アカウントページの発注履歴から今どの段階かを見ることができます。

  • 基板の作製自体はどちらも3日で完了しています。
  • ただ、工場から中国を出るまでが割と時間がかかります。そして、かなりばらつきがあるかもしれません。
  • 1回目は日本につくまでに13日かかってます。ちょうどメーデーが重なった(一応ぎり回避してるはずなんですけどね)のが原因かもしれません。
  • 2回目は日本に着くまでに4日かかってます。これは早すぎる気もしますけどね、、、
  • 日本についてからは、いずれも2~3日で到着します。

つまり、OCS NEPだと早くて、10日程度、遅いと3週間かからないくらいなので、結構差がありますね。急ぎの人は、もう少しお金を払って早めに届くやつを選ぶ方が良いと思います。


届いた感じとあれこれ

 さて、おなじみの青色の箱とともに届きます!!

そして、はんだ付けするわけですが、まぁ大抵一回目はどこか動かないわけです(実際ミスしてた)。そのため、ピンヘッダを使って回路部品を取り外しできるようにするといいかもしれません。

 VFDも丸ピンヘッダ使ってましたけど、今思えば、挿すだけ挿して動作確認とかでもよかったのかもしれない。そこまでがっちり固定する必要はないかも。

一回目のはんだ付け。試作ですね。

 二回目は修正+動作確認までして問題なかったので、VFDは直接はんだ付けしました。丸ピンヘッダつかっても良かったんですけど、挿すのが大変+見栄えの観点から無くしました。VFD以外は取り外しできるようにピンヘッダつかってますけどね。

二回目。いいかんじ。


おわりに

 さて、無事に基板発注し、形としてはVFD時計完成ですかね!あとは、ケースなどを3DPで作ればよいのですが、まぁなんとでもできるので、時間に余裕ができてから出もいいのかなぁと思ったり。

 なお、余談ですが、時計作った分手持ちのVFDが減ったので買い足そうと思って日本橋に行ったのですが、、、

売り切れでした(´;ω;`)

まぁ、ネットで注文できるんですけどね。

eleshop.jp

なんなら、6桁の時計セットも売ってるんですけどねw

eleshop.jp

まぁ、私は「基本的に自分で作りたい」という曖昧なのに私の行動原理の根幹がありますので、6桁セットは”それ”が受け付けなかったんですよね。

あと、シュタゲのは8桁ですので、それリスペクト。あと基板作成~発注してみたかったという理由もあります。

おわり。

VFD(蛍光表示管/LD8035)を制御して時計を作った!(KiCadで基板作成)

読まなくてもよい前書き

 お久しぶりです!うぇるすです!!

 ブログのコメントはメールで通知来るので割と反応しやすいですね。

 こちらの近況としては、研究室を無事第一志望で配属されたはいいものの院試が割と厳しいらしく、院試勉強vs研究vsダークライとなっており、非常にまずいです。

 院試落ちたら、世捨て人となり、引きこもりニートになろうと思います。

 あと、人生二回目のクレーンゲームに挑戦し、3kほど費やすというとんでもない自体となってしまいました~(SUSURU風)。ただ、フィギュアのクオリティ高すぎ!!咲季さんが、俺の部屋に!!やばい!!です。こちらは健康です。


前回のつづき

 前回というのはこちらの記事です↓↓↓

wells.hatenablog.jp

要約しますと、

  • VFD(LD8035)を制御した
  • 制御する上で、必要な電子部品を購入した


今回は

 今回はいよいよ、時計を作ります。結果的にはこのような時計を作ることができました~~~!!!(個人的にはかなり満足)

作製したVFD時計のそれっぽい写真

前回までに必要な電子部品は購入したので、KiCad で基板を設計しました。そのあたりを軽く記事にしましたの~

なお、記事が長くなりそうだったので、発注などは次の記事にします。


世間のブログや情報から考えるこの記事の立ち位置。

 さて、今回はKiCadで基板を作成しました(記事のタイトル通り)。ただ、KiCadやJLCPCB(次回)については、ググればいくらでも情報が出てきます。私もそれらを見ながらやりました。

 つまり、そういった詳しい説明はそちらにまかせるとして、本記事では初心者が躓いたポイント、感想?などをつらつらと書き記すことにします。詳細な説明を期待していた人、ごめんなさい。そういった情報は以下の記事から得てください。。。!!

※別に、記事にするのが面倒だったわけではないからね!!??(大嘘

あと、当方、初心者でありますから、間違った情報があるかもしれません。コメントで教えてくださると喜びます。まぁすくなくとも動く基板は作成できました。


KiCadで基板作成

 大まかに、以下のような手順で基板を作成しました。

  1. KiCadインストール(初めて使うので、、)
  2. シンボルエディタでシンボル作成
  3. 回路図エディタで回路図を作成
  4. フットプリントエディタでフットプリントを作成
  5. PCBエディタで実際の配線を行う

では、それぞれをもう少し詳細に説明します。

1. KiCadインストール

 こちら↓

www.kicad.org

からダウンロードできます。特に躓くところはなかったです。

なお、ロボコンなどチームで使う場合は、バージョンの違いで互換性がどうとか、なんか使い勝手が違う(Ver8とか少し勝手が違うとかなんとか)ので注意が必要です。今回は個人で使うので最新バージョン(KiCad 10.0)を選択しました。


2. シンボルエディタでシンボル作成

 シンボルとは、回路図で使う各部品パーツの記号?みたいなものです。よく使うパーツ(抵抗、コンデンサ、ピンヘッダ等)は既存のライブラリにあります。また、パーツによっては企業や任意の人がシンボルを作成しています。

 が、個人で作るのもそこまで大変ではないので、なければつくります。例えば、主役であるVFDはこんな感じで作りました。

個人で作成したVFDのシンボル

いくらか、ポイントを書いておきます。

ピンの配置は実際のものと異なっても良い

 これ、普通に考えてませんでした。回路図って、人が見やすいことがベースなので、例えば上のVFDのシンボルも、実際のように円形状にする必要はなくて正方形でよい。なんなら、もっと集積回路みたいに2列に配置するようにしてもよいです。また、大きさも適当で良いです。

 では、何を気を付けるかというと、

①ピン番号とその役割の対応(1番ピンはVin、2番ピンはGND、、、)
②外形とピンがちゃんと繋がっているかです。

 ①について、これはデータシートなどと同じにしておけばよいでしょう。これは、後々フットプリントと対応させるためです。

 ②について、大げさに表すと、以下のようにピンが繋がっていない状態を無くすということです。繋がってないと、回路図エディタの操作が上手くできない、エレクトリカルルールチェッカー(ERC)でエラーが出る原因になります。適宜、設定から最小グリッド間隔を調整するとよいです。

2,3,4番ピンが離れている


3. 回路図エディタで回路図を作成

 シンボルが作成できたら、それぞれのシンボルを線でつないで回路図を作成します。当たり前ですが、Arduinoでブレッドボードとジャンパワイヤで繋いでいたものを図にするだけなので、迷うことは無いかと思います。

実際の基板の配置に揃える必要はない

 シンボル同様、等価な回路であれば何でもよいので、見やすさ重視で配置すればよいと思います。

グローバルラベルを活用する

 すべての配線をちゃんと接続しようとすると、ごちゃごちゃになってしまいます。そのため、適宜、グローバルラベルを使用するとすっきりします。グローバルラベルについては、右側のサイドバーから選択、もしくは「Ctrl+L」で配置できます。

グローバルラベル。画像ではGNDがそれ。

 なお、画像のは説明のためにGNDのグローバルラベルを配置しただけです。というのも、この記事書くまでグローバルラベルを知らなかったのです。結果的に、ものすごい回路図になってしまったので、、、

回路図。グローバルラベルを使わないとものすごいことになるお。

エレクトリカルルールチェッカー(ERC)のエラーをすべて無くさなくても良い(偏見)

 これは意見が分かれると思います。私の意見としては、個人で遊ぶだけなら、動作に問題のないエラーは無視して大丈夫だと思います。具体的に、電源入力ピンなのに電源から入力されていない(PWR_FRAGを配置してないとか)とかは正直無視しても問題ないです。

 配線が正しく接続されていない(グリッド間隔を調整してもう一度線を引くことで大抵解決)場合や、そもそも配線が間違っていることさえ解消すれば動くので、、、

データシートなどの情報を追加しておく

 任意ですが、各シンボルにおいて、プロパティからいろいろ情報を入れておくことができます。ここにデータシートのURLや値(抵抗なら〇〇Ω、コンデンサなら〇〇V、〇〇uなど)を入れておくとよいです。なお、コンデンサの「u」について、正確にはマイクロなので「µ」ですが、標準的に「u」を使います。


4. フットプリントエディタでフットプリントを作成

 フットプリントはシンボル同様、各部品ごとに作成します。これもそこそこ簡単に作成できるので、なければつくります。例えば、次のようなものを作成しました。

VFD用フットプリント

こちらは寸法やピンの配置を実際のものとそろえる。

 フットプリントは実際の基板にそのまま反映されるので、ピンの間隔や位置は実際のもとのそろえる必要があります。そのため、データシートをみつつ、寸法図とにらめっこしながら作成します。

はんだする場合のランドの大きさを考える

 はんだ付けする場合、ランドが部品より少し大きくなければいけません。ただ、具体的な数値はないので、例えば既存のフットプリントを参考にする、データシートの参考例を見る(丁寧なデータシートには推奨寸法が載っている)、もしくはChatGPTやGeminiに聞くと良いと思います(割とよさげな値を提案してくれる)。

配置する向きがわかるような印をシルクで示しておく

 はんだ付けする際に、部品の向きがわかるように印をつけておくとよいです。上画像のVFDの場合は1番ピンを円で囲むようにしています。

ピン番号と役割は一致させておく

 シンボルの時と同様、フットプリントも一致させておきましょう。PCBエディタに移行する前に、フットプリント割り当てを行うのですが、そのときに同じピン番号が自動的に紐づけされるので。

コートヤード(Courtyard)層の活用

 層というか、シルクみたいなかんじで設定できます。これは実際の部品の大きさを指定するようなもので、仮に、この領域内に他の部品のコートヤードが重なっている(つまり実際には部品が干渉している状態)と、デザインルールチェッカー(DRC)でエラーをはいてくれます。


5. PCBエディタで実際の配線を行う

 最後に配線を行います。作成した回路図にしたがって、どのピンをどこに接続するのかは表示されるので、それに従えばよいです。

 今回はこんなものができました。

今回作成した基板のPCBエディタ画面

基板のレイヤー数は?

 基板って作ろうと思えばレイヤー数を増やすことができます。より複雑な基板になると6層とかあるのですが、個人で作る程度であればデフォルトの2層で十分だと思います(コスト的にも安いし)。今回は2層の前提で話します。

基板サイズを決めておく

 基板サイズが先か、部品の位置関係が先かは場合によるとは思いますが、私は基板サイズを先に決めました。というのも、JLCPCBで発注する際、基板サイズを100×100 [mm2]以内だと非常に安く発注できます(最安だと3.2$=500円以下!!安い!!)。逆にこれを超えると値段が跳ね上がるので、費用に余裕がない人、コストを少しでも抑えたいなら、100×100に抑えたいですね。

基板の角を丸くする

 尖ってたら痛い(物理的に)ので、丸くします。昔は大変だったらしいですが、少なくともVer10.0では外形線を右クリック→形状の変更からフィレットもしくは面取りで簡単に変更できます。

基板の取り付け用の穴を配置する

 任意ですが、四隅に取り付け穴を付けることが多いです(今回の基板は無いですけど)。この穴は、既存ライブラリに「Mounting hole」という名称でフットプリントやシンボルがありますので、取り付けるネジに合わせて追加すると良いと思います。

配線幅と電流について

 「1A=1mm」という指標がありますので、それに従えれば十分かな。ただ、過剰だったりはするので適宜調べるなり、Geminiとかに聞けばいいと思います。毎回数値を変更するのは大変なので、配線幅のプリセットを作成することを推奨します。

配線は表と裏で縦と横を決める

 このルールを徹底するだけで、そこそこ楽に配線できます。つまり、例えば今回ですと、表側(赤色)の配線は縦方向のみ、裏側(青色)の配線は横方向のみというルールで徹底しています。

 例えば、多くのVFDと集積回路との接続では

  1. 表側(赤色)で任意の場所まで縦方向に線を引く
  2. 横方向に切り替える地点でビアを打つ(ビアによって表と裏が繋がる)
  3. ビアを打つことで裏側(青色)になるので横方向に線を引く

これを繰り返しています。詳しくはこちらの記事なども参考にしてみてください。

www.kicad.xyz

GNDをベタ塗り、ビアの追加をしよう

 基板の空きスペースを銅箔(GND)で埋めることで、ノイズ低減、GND電位の安定、大電流の経路確保が期待できます。そのためベタ塗りをしたり、表も裏もGNDの場所にビアを打ちます。詳細は以下の記事などを参考にしてみてください。

www.kicad.xyz

デザインルールチェッカー(DRC)の活用

 回路図のERCと似たようなものです。こちらは少なくともエラーは解消したいですね。警告はどちらでもよいと思います。内容に依るのですが。

3Dビューアーで見てみよう

 上タブの表示から3Dビューアーを選択すると、基板を3Dで眺められます。確認と気分を上げるための機能です。楽しい!!

 なお、3D形状のファイルを紐づけていると、3Dビューアーで反映されます。干渉していないかの確認にも使えるかもしれません(フットプリントでコートヤードを指定していればDRCで分かりますけどね、、、)。

3Dビューアー

シルクで基板の情報を記しておく

 これも任意ですが、シルクで基板情報を以下の画像のように入れておくとよいと思います。基板によっては、ピンごとの役割を表にして示す、回路図など詳細のQRコードを入れておく、イラストやアイコンを入れるなど、いろいろできます。たまに基板で名刺作ってる人いますよね~

シルクで情報を入れる


失敗談とか

 さて、基板作成自体は以上のようにすればできます!がんばれ!!

ここに私の失敗を箇条書きで書いておきます。

  • グリッド間隔があってなくて線が接続できない:どうやら、繋がってるように見えて、繋がってないんですよね。ERCでエラーがでるのでシンボル含めて、そのあたりを見直すとよいです。
  • シンボルを実際の部品同様のサイズで作ってた:フットプリントでは寸法が大切なんですけど、シンボルはそうではないです。途中で気づいてよかった。時間かかりますよ。本当に。
  • GNDが繋がってなかった:GNDをベタ塗りしていたので大丈夫だろうと思ってたんですが、どうやらVFDの内側のベタが浮島のようになっていたらしく、そこと接続されていたGNDは、他のGNDと接続されていないにもかかわらず、DRC的にはクリアしてしまった。発注しなおしましたね。(´;ω;`)
  • シルクで基板情報入れてなかった。:自分の名前を基板に入れたいですよね!?


おわりに

 かなり長い記事(長い割に、これだけで基板作れるわけではないのはごめんなさい、、)になってしまいましたね。他の記事にはないような、初心者にありそう?なポイントのみをかいつまんで説明しました。

 これはどうしたの?こうする方が良いですよ!とかあればコメントお願いします!ブログの冒頭から察せられると思いますが、書いてる本人にはプライドもありませんし、迷惑かな?などと配慮する必要もありませんので!

 なお、次回はJLCPCBで発注した記事を書くのでそちらもぜひぜひ。

おわり。

とある阪大工学部応理機械の一般人の研究室配属までのお話

こんばんは(深夜2時に起床)

一か月くらい前でしょうか、大学生の実態として以下のような記事を書きました。

wells.hatenablog.jp

特に新入生にとって、ためになるかもしれないし、ならないかもしれない微妙な記事でしたが、今回は特に私の所属にフォーカスしたお話をさらさらっとしようかな、と思います。


あらかじめ言っておくこと

 さて、個人ブログですので大学側や研究室HPにあるようなことはあまり触れません。むしろ、そっちにはあまりないような内部の事情や雰囲気を、学生視点で書こうと思います。

 そのため、あくまで私個人の独断と偏見です。大学当局・学科とは全く関係ありません。たかが学生の個人的な感想ですので。。


隠す気ない所属について説明(読まなくても良い)

 関連の記事やらTwitterを見るとすぐわかるのでもう行ってしまいますが、私は大阪大学工学部応用理工学科機械工学科目の人です。

 阪大には工学部と基礎工学部があり、それぞれ機械系、情報系、、、などがあり大変ややこしく、入学して3年になる私にも違いがよくわからないです。一応、基礎工学部は工学部と理学部の融合?みたいな立ち位置だった気がします。

 工学部の中にも5つの学科があり、その中でも応用理工学科が一番人数が多い学科です。応用理工学科が2年生の配属で、機械工学科目とマテリアル生産科学科目に分かれ、さらに3年生で、マテリアル生産科学科目がマテリアル科学コースと生産科学コースに分かれます(機械は全員、機械工学コースとなる)。

 私も所属しています、機械工学科目について、これは世間一般で想像されるであろう機械系の工学部に一番近いところだと思います。機械工学を基盤とし、幅広い分野に応用されうる知識と技術を修得します。少し前のキーワードでいうと自動車、航空機、ロケットとか、最近では4つの力学に追加されるような形で「制御工学」をメインとした研究(ロコモーション、自動運転、群制御、とかとか、、、)をしています。

 まぁ詳細はホームページを見るなどしてください!

 あと、応理機械は工学部の中でもトップクラスに忙しいらしいです。マテとはかなりの差があるそうで、大学教員も否定しませんでした(笑)

 実際、忙しいです。私は一番忙しい時期にサークルも忙しさのピークが重なって大変でした。

 ただ、最近になってカリキュラムが変更されたのか、なんかブラックさが無くなってました(コア科目と実験・演習が消えた?)。私の1個下の代までが真の応理機械です。後輩はまだ、本当の応理機械を知らない、、、、


1年生

 豊中キャンパスで、学問の扉、英語、第二外国語(ドイツ語とりました)、基盤教養、専門基礎科目などの単位を取りに行きます。

 まぁ、応理機械の専門はまだないです。しかし、ここで落とすと、2年生以降、再履バスでいちいち豊中まで通う必要があるので、できれば単位は取っておくべきでしょう。

 私は基盤教養を2科目でいいところを4科目とったので、すこし忙しかった(高校か?ってくらいコマ数は多かった)ですが、サークル(ロボコン)がまだ本格的に動く前でしたので耐えてました。

 選択の専門基礎について、個人的に化学が苦手でしたので、化学は2つあるうち1つしかとらず、あとは全部とりました。化学基礎論Bで化学がより苦手になったので取る方間違えましたね(理解力の乏しい私の負け)。


 選択で図学演義Aを取りました。これは講義ではなく演習であり、実際に製図し、その出来によって成績評価となります。製図自体は好きだったので、特に苦も無く終わったのですが、担当の先生によっては厳しいらしいですね、、、

 そして何より特徴的なのは、製図道具を個人で購入しなければならないです。この道具は機械に進む人はどうせ購入しなければならないのですが、まだこの時点では配属は決定されていません。まだ決め切れていない人は先輩から借りるとかですかね、、、?なお、この際、製図用紙を入れる用の筒も購入しますが、その見た目から「応理バズーカ」と言われております。バズーカ背負ってる人がいたら応理機械の可能性が高いです。


 2年生に配属されるときに、機械かマテリアル生産に進むかの分属が行われます。およそ1:1くらいに調整され、例年、だいたい1:1くらいの希望なので、普通にしていれば希望が通ります。一応、1年生までの成績に基づいて分属が決定されるらしいので、専門じゃないから、と気を抜かず頑張るべきでしょう。また、成績が著しく悪い人は希望を考慮されないらしいです。

基盤教養でおもちゃのアイデアを出せという課題のやつ。お菓子もらえた。

なんか、写真とかないか見返してたけど、ゲームのスクショばっかりで、悲しくなった。

2年生

 キャンパスが豊中→吹田に移動(左遷)です!!おめでとう!!

 ここからが、応理機械の本領発揮で、この1年間で4力(材料力学、機械力学、熱力学、流れ学)をすべて履修しなければなりません

それぞれ講義(週2回)+実験・演習がセットになってます。実験が結構重くて、隔週実験レポートの提出が課されます。感覚としては、平日に実験して、終わり次第レポート書いて、提出したら次の実験がはじまって、、、、

なんか、ずっとレポート書いてない?と錯覚してしまいます(錯覚でも何でもなく、事実らしい)


 3年生で履修する制御工学と合わせて「コア科目」と呼ばれますが、2つ以上落とした時点でほぼ留年確定です(一応、4力は再履修で間に合う場合もある)ので、ちゃんと頑張りましょう。

 印象的だったのは、機械創成工学実習という実習がありました。Ⅰ~Ⅲまであり、2年生ではⅠを履修します。例年、4人で1つのロボットを予算内で製作します。ジャンピングマシーンかピッチングマシーンを製作することになります。こういうことしてるのは珍しいと思うので、応理機械の強み?ではないでしょうか(京大の同期曰く)

ジャンピングマシーン。3DPで暴れた結果、次年度ではフィラメント使用量制限が厳しくなったとかいうオチつき。後輩ごめんね☆

なお、↑のロボットについて、サークルに出入りする謎の人に、「1m飛ばしたのは及第点ではあるが、2m程度は飛ばさないとダメだよ~」と言われた。また、グラスファイバーの活用は褒められた。そして、柱4つはダメだよと言われた(これはわかってんねん。いろいろあったんや)。

あと、最後終わったらロボットを解体して捨てるところがほとんどなのですが、モータとか欲しかったので許可を得て、ゴミあさりしてました。それをニッコニコで班員に報告したら、「〇〇くん、楽しそうだね。」って言われました。しかも女子に。はっとしましたね。なんか、すごい、、、刺さった。全然泣いてないですよ(´;ω;`)


3年生

 3年生前期が一番きつかった。というのも、中間試験の時期とロボコンの大きな大会(NHK学生ロボコン)が被るからですね。

 応理機械では、コア科目の一つである制御工学、機械工学実験、機械創成工学実習ⅡとⅢ、各専門科目が勢ぞろいとなり、こちらもピークです。すんごい!!


 特に、機械創成工学実習Ⅱが特徴的でして、製図(手書き)です。阪大は伝統的にこれを行っており、昔はもっと大変だったらしいです。んなことしらねぇよってくらい、全然今でも大変です。

 やることとしては、スクリュージャッキと歯車減速機の設計+製図となります。設計について、各個人で設計パラメータが与えられ、それを満たし、なおかつ破壊しないような寸法・材料を決めていく必要があります。

 これの何が難しいかというと、明確な解が求められないということです。つまり自由度があるので、適当に材料きめて、安全率とか強度とか計算して、ダメそうなら材料なり寸法を変更し、再び計算して、ダメそうなら、、、、を繰り返す必要があります。どこから決めればいいの?と困惑する人が多数観測されました。設計って大変ですよね。

 また、今までの講義で習っていない部分も多く、学びながら設計・製図する必要があるので、めちゃくちゃ時間がかかります。深夜まで大学に残って製図する人が40人くらいいました。

 私は製図のやる気が起こらなくて、CAD書いてました。先生にばれないように。でも、集中してたら先生に思いっきりばれました。お咎めかと思いきや、「お、ええやんw」って言われた。阪大の先生は良い人が多いです。多分。

スクリュージャッキ。そもそもスクリュージャッキ知らない人もいるかもですな!

歯車減速機。与えられたパラメータが減速比9なのであまりにも不格好なことに。俺は悪くない。


 一方、3年後期は少し落ち着く、、、はずだったのですが、専門科目を全て履修してしまった私は普通に忙しかったです。

 あと、創成工学実習Ⅲが行われ、他と比べて人気です。ミニロボコンみたいなことをするので、これで制御系研究室志望者が増えることになります。

 私は、創成工学実習Ⅰで大暴れしてしまったのを自重し、他の班員に仕事を割り振るようにしました。みんな「楽しそう」で良かったです。

本当は機体を載せたかったけど、一応他の人も関わったやつなので、代わりにコントローラ載せとく。基板つくる時間はなかった。


学業以外でやったこと

  • サークルでロボコンしてた。ロボコンはじめてから、一気に成績下がって面白かった。結果的にはNHK学生ロボコン出場できてよかったけど。
  • ロボコンは運営側でも参加した。関西春ロボコンとか。
  • 個人で色々ロボット作ってた。四足歩行ロボットとかね!!
  • バイトをした。1つは研究室バイト、もう1つはスタートアップ企業の回路系バイト
  • 自主研究奨励事業(阪大でやってるやつ)でオムニホイールの研究をした。
  • 学マス始めた。咲季さん推しです。
  • 原神のフィッシュルのお高いフィギュアを購入し、生活費が消えた。もう原神ログインできてないんだけど、好きなことに変わりはないんです。見るたびに思い出ぽろぽろやで。
  • まどマギの映画がn回延期した。
  • 趣味のお絵かきを少しずつ。流石にうまくなってきた?気がするけどまだまだですね。全然描いてないからね。仕方ないね。


研究室配属について

優先配属について

 応理機械には優先配属という制度?があり、簡単に言うと院試免除で大学院に進めます(推薦入試の枠をもらえるといったかんじ)。で、この優先配属の枠が上位3割の成績、人数にして40人弱と、割と多いです!!ただし、行きたい研究室に行けるかどうかは別問題です(人気な研究室だと必要な成績も高いです。)

 んで、こちらは希望が優先されますが、基本的には専門科目の成績で決まります。私は、結果的にGPAが3.5でしたが、第一希望の研究室はGPA3.6以上の化け物しかいなかったので、無理でした。どうやら、他の研究室なら優先配属でいけたらしいですが、どうしても第一希望で行きたかったので、優先配属を蹴って一般配属で、無事第一希望の研究室に配属されました。

 反省としては、もう少し真面目にお勉強しておくべきだったな、ということです。というのも、入試の結果は、学科でもかなり下の順位だったんですよね(絶望+他人に見せられなすぎると思ってスクショすらしていない)。そのため、そもそも優先配属とか考えておらず、単位さえ取れたらいいやと思って過ごしてましたね。。まぁ今更考えてもどうしようもないんですけど!!


一般配属について

 大多数は一般配属です。珍しく、話し合いの場が設けられます。大学側からの介入はなく、学生が仕切り、話し合いを行い、決定します。

 そして、この話し合いが例年、泥沼です。というのも、1つ明確なハズレ研究室があるらしく、そこを避けたいがために、かなり時間がかかります。成績がそこそこいい人は、成績で決めようとするし、成績が低い人は、成績以外の方法で決めようとします。まぁ、結局は成績で決まるので、どれくらい妥協するか、枠が空いている研究室を見逃さないように、交渉方法やら、あえて成績を見せないだとか、、、、人間の悪い?部分がよく見えます!

 まぁ、これについては賛否両論あるとは思いますが、何とも言えませんね。そのあたりも含めて、学生にゆだねようという判断を大学側はしていると思います。


 なお、成績発表から研究室公開+配属決定までに1か月開いているので、たいてい有志の型が成績調査を行い、回答者にその結果をフィードバックしたりしているらしいです。


おわりに

 さて、私の大学入学~研究室配属までのことを書きました。誰の参考になるんだ?そもそもカリキュラム変わってる?らしいし。

 まぁ、応理機械の雰囲気はこんなかんじです。ただの一般人の感想でした。

 一応、質問とかあれば答えますが、内容が内容なので、ブログのコメントよりかは、TwitterのDMとかの方がいいかもです。。

私のTwitter垢→うぇるす


VFD(蛍光表示管/LD8035)を制御して時計を作りたかった。

読まなくてもいい前提

 どうも。最近まで金沢旅行に行ってました。せっかくですし、その記事を書こうと思ったのですが、その前に別の電子機器で遊びたくなり、そのためには現状使っているジャンパワイヤやブレッドボードを解体する必要がありまして。解体するには現状をどっかに保存しておきたいので、結果として、記事にすることにしました。

 ということで、途中段階(具体的に、基板作成・発注したかったがまだできていない)ですが、記事にします。


はじめに

 今回は、VFD(蛍光表示管)を見つけたので、それを制御してみようというお話です。

 VFDというのは、日本の企業が発明した、電気機器(特に電卓)などで用いられる表示装置です。液晶ディスプレイと比較して、コントラストが明確であり、使用可能な温度幅が大きいそうです(Wikipediaより)。

 私は、日本橋でぶらぶらしてたら見つけたので買ってみただけです。

見た目がニキシー管みたいで、かっこいいですよねぇ~~~

 というわけで、時計を目指して、今回は1つのVFDを0~9までの数字を順に表示させます


用意するもの

 実はただ光らせるだけなら、電源12Vと抵抗560Ωとかで良いです。制御も7セグ同様、LEDがたくさんある感覚で良いので、大して難しいことはしません。

 ただ、一番の問題は配線がむちゃくちゃなことになるということです。例えば今回使用するVFD(LD8035)は7セグ+マイナス+dpの合計9つ光らせる部分があります。それに加えて、アノード、カソード、ヒータがありますので、VFD1つに対して、12本の足が出ています。

 仮に、8桁(ニキシー管、というかダイバージェンスメーター基準)制御しようとすると単純に、8×12=96となります(実際、アノードとかカソードはまとめられますけどね)。現実的ではないですね。

 そこで、トランジスタアレイやらICやらを使うのです。例えば、デジットではTD62783とかを使ってますね。

https://www.kyohritsu.com/eclib/DIGIT/KIT/ld8035kit.pdf

 ただ、私は、コンパクトにしたかったので、MAX6921を使うことにしました。少し高価ですが!!

https://www.analog.com/media/en/technical-documentation/data-sheets/max6921-max6931.pdf

 というか、時計として遊ぶだけなら、デジットのやつを買えばいいんですけどね。KiCADのお勉強したかったのと、MAX6921が某中華通販サイトで安く売ってたので、、、、


以下に使用したものを表にまとめました。なお、購入先がほぼアリエクですが、同じものならどこでもいいです。(MAX6921は普通に買うと高いのでアリエクで購入しましたが、おそらくジャンクなので使えるものが届くのかは運です)

製品名 用途 購入先
VFD(LD8035) 主役 デジットに売ってた
XIAO esp32c6 指令。Arduinoでも何でもよい。 リンク
MAX6921AWI トランジスタアレイ、シフトレジスタ、ラッチ リンク
12Vジャックアダプタメス 電源 リンク
ACアダプタ12V2A 電源 リンク
Mini360 降圧12→1.0V程度 リンク
MT3608 昇圧12→24V程度 リンク

あとは、適宜ブレッドボード、ジャンパワイヤ、IC(今回はMAX6921)の足間隔を変換する基板(例えばこういうやつ)、降圧昇圧確認のためのデジタルマルチメータを用意してください。


配線

 KiCADで書いた方がいいんだろうけど、一旦表で。ごめんね。

 なお、GNDはすべて共通にしましょう。逆に、24Vや1.0Vは混ぜないように注意しましょう。間違えると破損します。

Esp32c6 MAX6921
5V Vcc
GND GND
D10 DIN
D8 CLK
D1 LOAD
VFD MAX6921
c OUT0
d OUT1
e OUT2
f OUT3
g OUT4
a OUT5
b OUT6
- OUT7
dp OUT8
グリッド OUT9
VFD 電源
ヒータ 1.0V(降圧)
カソード GND
MAX6951 電源
VBB 24V(昇圧)
BLANK GND
GND GND

なお、今回は一つのVFDに対して制御します。仮に、2つ以上のVFDに同じ数字を表示させる場合はVFDを並列に配線するだけで良いです。

ちなみに、VFD2つを並列に接続するとこんなかんじ。まあ配線多くて大変。

配線ぐちゃぐちゃ


プログラム

  • 今回はMAX6921のOUT9に接続されたVFDを0~9を繰り返し表示させます。
const int clk  = D8;
const int load = D1;
const int din  = D10;


// 0:c, 1:d, 2:e, 3:f, 4:g, 5:a, 6:b, 7:-, 8:dp
#define SEG_C  (1UL << 0)
#define SEG_D  (1UL << 1)
#define SEG_E  (1UL << 2)
#define SEG_F  (1UL << 3)
#define SEG_G  (1UL << 4)
#define SEG_A  (1UL << 5)
#define SEG_B  (1UL << 6)
#define SEG_DP (1UL << 8)

// 表示するグリッド (OUT9)
#define GRID_1 (1UL << 9)

// 0〜9の数字を作るためのセグメント組み合わせ
const uint32_t font[] = {
  (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F),         // 0
  (SEG_B | SEG_C),                                         // 1
  (SEG_A | SEG_B | SEG_G | SEG_E | SEG_D),                 // 2
  (SEG_A | SEG_B | SEG_G | SEG_C | SEG_D),                 // 3
  (SEG_F | SEG_G | SEG_B | SEG_C),                         // 4
  (SEG_A | SEG_F | SEG_G | SEG_C | SEG_D),                 // 5
  (SEG_A | SEG_F | SEG_E | SEG_D | SEG_C | SEG_G),         // 6
  (SEG_A | SEG_B | SEG_C),                                 // 7
  (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G), // 8
  (SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G)          // 9
};

int number = 0; // 現在表示中の数字

void sendVfdData(uint32_t bitPattern) {
  digitalWrite(load, LOW);

  // MAX6921の全20ビットを送り出す
  for (int i = 19; i >= 0; i--) {
    digitalWrite(din, (bitPattern >> i) & 1);
    
    digitalWrite(clk, HIGH); // ステップ信号
    delayMicroseconds(50); 
    digitalWrite(clk, LOW);
    delayMicroseconds(50);
  }

  digitalWrite(load, HIGH); // ラッチ
  delayMicroseconds(50);
  digitalWrite(load, LOW);
}

void setup() {
  pinMode(din, OUTPUT);
  pinMode(load, OUTPUT);
  pinMode(clk, OUTPUT);

  digitalWrite(clk, LOW);
  digitalWrite(load, LOW);
  digitalWrite(din, LOW);

  Serial.begin(115200);
  Serial.println("VFD 0-9 Count Test Start!");
}

void loop() {
  // 表示データ = 数字の形 + 1桁目のグリッド
  uint32_t displayData = font[number] | GRID_1;

  sendVfdData(displayData);

  Serial.print("Number: ");
  Serial.println(number);

  number++;
  if (number > 9) number = 0;

  delay(1000); // 1秒ごとに更新
}

簡単な説明

  • font[] では各数字を定義しています。
  • sendVfData で数字を任意のVFD(グリッド)に送信しています。MAX6921は20ビットの区切りのため、それぞれdigitalWrite() で0/1を送り、その後ステップ信号を送ります(MAX6921は立ち上がりを区切りとして認識するらしい)。最後にラッチに信号を送って表示を更新します。
  • loop() で0~9を繰り返し表示するようにしています。


実行結果

 こんなかんじで、数字が表示されます。動画と肉眼とで多少、明るさなどんの印象が異なりますが、雰囲気はいいかんじです!おしゃれ!!


今後のお話

 今回はVFD1つだけですが、8桁の時計を目標にします。この場合、配線などを考えると、人間では認識できない程度に高速に表示させるVFDを切り替えつつ、数字を更新していく(具体的には、OUT0~8をセグメントの表示として全桁共通、OUT9~16を各グリッドに接続する)所謂ダイナミック制御を行います。

 ただ、現状、配線が大変なことになるので、一旦基板発注して、届き次第再開かな。。。


おわりに

 ニキシー管時計みたいなのを作りたいと思っていたのですが、いかんせん入手困難です。VFD(蛍光表示管)なら、比較的入手しやすく、かつ回路も簡単にできるので期待できそうですね!!

 ここまでできたら、ほぼ完成したようなものなので、さっさと基板つくります。。。


【新大学生必見?】大学生ってこんなかんじ~ってのを書くだけ。

はじめに

 身バレしそうですが(やろうと思えば全然特定できる)私、大阪の某大学に通う大学生です!次B4になりますね(早すぎて震える)。

 まぁ肝心の研究室配属はこの4月なのですが、それ以外のイベント?はほぼ終わったんです。大学生を3年間やってきたわけですからね。研究室配属については、おいおいブログに書こうとは思いますが。どうなることやら。自分よりGPA高い人を如何にして攻略するかが肝ですな。あぁこわいこわい。


 この話は置いておいてですね、今回は大学生になると、こんなことするよ、こんな生活だよ、という感想というか体験記というか、そういう類のことを記そうと思います。

 時期的に、そろそろ合格発表とかあるのでね。そういう人の参考になれば幸いです。


私のスペック

 まず、お前誰やねん、どういう状況やねんということをさらっと書きます。この前提のもと話は進みます。

  • 今、B3。次B4になります。
  • 大阪で一人暮らし。
  • 仕送り+ 奨学金 + バイトで生計を立ててます。
  • 理系です。ブログの記事からも推測できるでしょうが工学部です。
  • 今はバイトしてますが、B3になるまでしてなかった。
  • 友人そこそこ。多分少ない方(B1はぼっち。今でもサークル以外はぼっち。)ですが、満足してます。
  • 彼女無し。彼氏無し。悔しいですが。(´;ω;`)
  • 趣味は電子工作、ゲーム、アニメとか。完全にヲタク君です。ヲタクにやさしいギャルは存在しません。

電子工作の例。四足歩行ロボット。ブログに詳細あるので、ぜひ!


合格発表~入学まで

 主にこんなかんじ。結構やることあって忙しいですよ。

  • 結果報告
  • 入学に関する手続きやら書類やら
  • お部屋探し
  • 銀行口座
  • 新生活に向けて購入
  • 奨学金とかクロバスとか


結果報告

 予備校の先生とか友人とか祖母とかに報告した!皆さん割と気にしているので。ちゃんと報告しましょう。感謝も忘れずに。あと学校にも連絡しました。進学実績とか大事ですし。あと、その大学に知り合いがいるなら連絡しておいた方がいいと思います。困ったときに助けになりますし、学科が同じなら過去問をいただけるかもしれません!!(後述しますが、過去問はかなり大事です)


入学手続き

 さて、入学手続きに関する書類が大量にあるのでさっさと済まします。割と多いし、期日まであんまりないので早め早めに。保険とかもあるので。あと、このあたりでミールプラン(生協のやつ。所謂ミール奴隷)にも加入する書類?を書いたかな。

 場合によっては役所とか行かないとですし、役所開いてる時間も限られてるので、いずれにせよお早めに。


お部屋探し

 良い物件を選びたいなら、前期の合格発表よりも前からしておくべきなんでしょうが、私は合格発表翌日に生協マイルームに行って(つまり大阪のキャンパスまで行った)決めましたね。

 ただ、よくある話なのですが、途中でキャンパスが変わることがあります。例えば、B2からキャンパスが変わる場合、B2以降のキャンパスから近い場所のお部屋を選び、B1は少し遠いけど頑張るという人もいます。私の場合、早起きする自信がなかったし、引っ越しの荷物もそんな多くないだろ、ということで引っ越しを前提に、部屋を選びましたね。

 選んだ部屋は、キャンパスの隣かつモノレール駅の隣(モノレール高いけどね。なぜかB1の間に別キャンパス開講の必修講義があったので公共交通機関必須だった。弊学科の悪いところすぎる。)というなかなか素晴らしい立地ですが、家賃は4万を切りました。これは不思議でもなんでもなくて、その分、部屋のサービスがゴミです。主に下水周りが。

 私は比較的どこでも住める性格だったので、こういう選択をしましたが、よく考えて選ぶ方がいいと思います。B2に上がるときに、ちゃんとお部屋決めた(自認)ので、そのときのお話を書きます。


 B2では2月くらいに探して、即決定、3月あたりに入居しましたね。あんまり遅いと新入生と被るので早めに動きます。以下の観点から探しました。

  • 家賃:当たり前。
  • 何階?:女の子だと特に気にするかも?
  • 方角:西日はまぶしい。
  • キャンパスとの距離:遠いと一限起きるの大変だよ
  • 周りにお店ある?:自炊とかするならスーパーとか欲しい。薬局とか欲しい。自転車あるかにもよる。
  • ガス・電気:契約忘れずに
  • 水道代:固定費か変動費か?好みですが。
  • 敷金・礼金:無い方がいいけどね。
  • 風呂とトイレが別か同じか:割とここ見る人多いと思う。私は気にしないですが。
  • 収納どんくらい:収納大きいと嬉しいらしい!
  • 設備:エアコンとかインターネットとか
  • 周辺環境:隣の店がファストフード店だと虫の影響とかね。


新生活に向けてあれこれ買う

 一人暮らしなら、家電とか結構買うものあります。とりあえず思いつくものあげると以下のようになりますね。

  • 冷蔵庫:自炊するなら大きい方がいいけどね。
  • 洗濯機:部屋によっては共用のものがあったり、外にしか取り付けられなかったり、サイズ制限あったり
  • 炊飯器:米は食べるでしょ?
  • 料理器具:フライパンとか鍋とかボウルとかざるとか
  • 食器:箸、スプーン、フォーク、コップ、皿
  • 電気ケトル:あると便利。なくても大丈夫らしい。私はインスタントコーヒーめっちゃ飲むので。
  • トースター:パンはトースターで焼くとおいしくなる
  • 電子レンジ:ファミマのまぜそばとか食べたいでしょ?
  • 机、椅子、スタンド:流石に床で作業は腰が痛い
  • 棚とか?:収納する。
  • ベッドとか布団とか:あったかくして寝てね。
  • 掃除用品:掃除はしろよ!?
  • 生活消耗品:トイレットペーパーとか洗剤とか歯ブラシとか洗顔とかボディソープとか
  • 衣類:服は着てね。タオルとかもあるよ。あと洗濯用ハンガーとかね。
  • 食料:最初なので、パスタとかレトルトとかあると安心。
  • 勉強するのに必要な電子機器:パソコンとかiPadとか?後述します。

多分、忘れてるものもあるでしょうが、結構あります。基本的には先に買っておいて、万が一忘れたら現地で買う方がいいと思います。親を頼って忘れないように買いましょう。

ちなみに、私は無印とかでそろえましたね。あとは親が家具にうるさいので従いました(感謝)。


 また、勉強に関する道具ですが、教科書とかは一旦置いておきます。PCについて、おそらく生協からチラシもあったと思います。所謂レッツノートが生協PCとして有名です。保険とかの都合でめちゃくちゃ高くなってますが、まぁ特段こだわりがなければそれでもいいと思います。私はゲームとか動画編集とかするので、もっといいPCを買いました(正確には高校からのを持って行った)。

チラシ関連で、電子辞書とかも売ってますが、講義で指定されているとかでない限りは買わなくても困らないです。少なくとも生協のを買う必要はないです。理系に必要な単語も調べられる!とかありますが、電子辞書でそういう言葉を調べる人なんていません。

あと、iPadとかそれに類するものは割と購入推奨です。というのも、最近は講義資料がPDFで配布されたりするので、PDFにそのまま書き込んだり、すぐに課題を提出できるiPadは重宝します。私は、学生割とか新生活キャンペーンを駆使して購入しました。なお、タッチペンは純正である必要はないとは思います。ただ、わざわざ純正以外を購入して失敗したくないので、純正を買いました。高いけどね。カバーとか画面フィルムは純正ではないものを買いました。流石に高すぎ。

iPadではゲームもできる。グラフィック強いですね。


そのほか

 仕送りのための銀行口座をこの時期に作りました。ハンコとか手続きに時間かかる場合もあるのでお早めに。クレカはそんな急がなくていいと思います。

 奨学金については、本来はここで考えるべきでしょうが、私は気づかず、B2あたりで気づきます。最近は子供(兄弟が3人以上とかだったかな)が多いとかでもらえる給付型奨学金とかもあるので、調べてみるといいかもしれません。

 また、この後で履修登録をするわけですが、その講義について、どんな先生の講義か、成績評価はどう行うか、比較的簡単に単位が取れるのかどうか(楽単かどうか)などの情報が有志の大学生によって作成された「クロバス」という冊子がキャンパスで売られてたりします。たまたま売ってたので、買いました。確かに、役立ちます。


入学してから

 ご入学おめでとうございます!待ちに待ったキャンパスライフですね!!流石の私も春が来た!と思いました。思い込んでました(笑)いや、楽しいんですけどね。?

  • ガイダンス的なやつ
  • 履修登録
  • 教科書とか購入
  • サークルについて


ガイダンスについて

 先生や友人(になる予定の人たち)と初めて顔を合わせることになると思います。まぁそこまで重要なことは言われない気もしますが、LINEグループとかには参加しましょう。ありがたい情報が来るかも? あとこのあたりで、話せる人を作れたらすごいです!私は大失敗しました。


履修登録

 大学は自分の時間割は自分で作ります。卒業の手引きとかにあると思いますが、卒業要件を満たせるように履修するべき講義を確認し、登録していきます。最初の方は必修が多いので、他の人とおおよそ同じになりますね。他の人と確認や相談しつつ登録できると間違いがなくていいと思います。これミスすると、最悪留年とかあるので。よく確認して登録してね!!

 また、共通科目に関してはある程度講義を選べるので、友人と合わせたり、先輩、クロバスやシラバスを参考にして決定します。抽選とかもある場合がありますね(クロバスで楽単とあるものは人気がある場合が多いです。万が一抽選に外れると、外れ講義に履修する羽目になる可能性もある。よく考えましょう!)。

 専門科目に関しては、クロバスとかには載ってないので先輩からの評価を聞くのがいいと思います。講義によって、成績評価(試験100%なのか、レポートもあるのか、出席は取るのか、とか)や講義の進め方など変わってくるので、そのあたりを考えつつ、登録しましょう。


教科書とか

 履修する科目によっては教科書必須なものがあります。期間限定で生協とかが販売しているので購入しましょう。ただ、専門書のため高価な割に、あんま使わない場合が多々あります。先輩や知人からもらう、メルカリとかで安く手に入れることを視野に入れてもいいと思います。

 また、それ以外の器具が必要になったりはします。理系だと関数電卓とかですね。私の学科は製図道具やら作業服が必要だったりします。要確認。


サークルについて

 サークルとは、趣味や興味が似たような人が集まり、独自の文化を創り出すよくわからない集団および団体をいいます(適当)。部活とかクラブ活動に近いですね。サークルによってそれぞれで、ゆる~いところもある一方、かなり本格的に活動しているところもあります。そのあたりは自分に合ったものを選べばいいですし、一旦様子見してみて、良さそうだったら継続する、入部するなりすればいいです。

 私の意見としては、人脈を広げる、同じ趣味の人と交流するという意味で、1つくらいはサークルに参加することを推奨します。

 ではどうやって探すの?ということですが、新入生歓迎のサークルオリエンテーションみたいなやつに参加するのがいいと思います。弊大学では、多くのサークルがそれに参加し、新入生を勧誘します。チラシとかめっちゃもらえます。私は興味ないサークルは全部断ってたので印象悪い新入生だったと思います。

 ほかにも、学祭とかありますが、少し遅い時期になるので、新入生の多いこの時期に探すことを推奨します。あとはTwitter(新X)とかかな、、、

サークルで作った、ばね直動射出機構


基本的な生活

 さて、大学生活についてつらつらと書いていきます。


勉強について

 最初は高校の延長感がありますが、次第に専門的になっていきます。楽しいですが難しくなります。教科書や先生、友人を頼って勉強しましょう。ここでの内容が将来的に役立つとは聞く。よく言われるのが、「将来的に、あ、こういうこと学部生のときに学んだなぁ、と思い返し、教科書みて、あぁそういえばこういうことだった。」程度に学んでおきたいらしい。

 ただ、高校と違うのが、「単位」という概念が付きまとうことです。単位を落とすと、来年もう一回取りに行かなければならない(再履修)ことになりますし、最悪の場合、卒業要件を満たせず留年ということになります。多くの大学生は単位を取るために勉強しています。まぁ、この単位、大学によって取りやすい取りにくいが多少はあるらしいですね。弊大学では「大阪湾に沈んでいる」などと揶揄されますが、、、しっかり勉強すればとれるとは思います。多分。。。

 そして、大学では去年の講義も同じ先生が担当の場合がほとんどです。つまり「過去問」がかなり有効なわけです。過去問を頼りに対策を練り、勉強し、単位をとるのです。過去問をくれる友人や先輩は大切にしましょう。また、未来の後輩のために、そういった資料は保存・保管しておきましょう。


成績について

 卒業自体には単位が必要ですが、研究室配属や推薦入試では評定が重要になってきます。ここで、大学ではGPA制度を導入している場合が多いです。各講義の成績に基づいて評定が定まり、その評定の重みを与えて(GP)それの平均によって評価するものです。詳細は省略しますが、これが良いと、のちのち良いことがあったりします。また別の機会にブログに書こうとは思いますがね。ただ、大学によって結構異なるので、よく把握する必要があります。  要するに、単位とるだけじゃなくて、ある程度いい成績をとることにも意味があるということです。


忙しいの?どうなの?

 学校の忙しさですが、これは大学や学科によって大きく異なります。私の場合、つまり工学部の某機械系学科ですが、おそらく忙しい部類になると思います。特に実験やレポート、演習などが重いですね。また必修が多かったり、他の学科との都合で1限が多かったりと工学部の中でも忙しい学科でした。でも、自分のやりたかったことしかないですからね。楽しいですね。世界が広がり、知識が深まるかんじが楽しいですわ。

 逆に、某経済学部やら文系学部、工学部だけど割と楽な学科に対してはヘイトが溜まるわけですね(笑)。まぁ大げさに言ってますが、本当にそれぞれです。

 ただ、高校と比べると確実に自由に使える時間は多いわけです。その時間をレポートなどの課題の質を高めるために使うのか、バイトか、サークルか、趣味かというだけの話です。これほど自由な時間を与えられるのは大学生の特権だと思うので、有意義に使うべきです。私はサークル(ロボコン)にかなり重点を置いた生活をしていましたね。そのため、成績が悪くなり、今研究室配属で若干苦しんでいます。。。。(正確には推薦入試の枠の獲得に苦しんでいる)


バイトについて

 前述しましたが、B3までバイトしてませんでした。これは少数派で、多くの人はバイトをします。飲食店や塾関係(塾は割と大変らしい)、家庭教師、技術系バイトなどなど、、、、。人生経験になると思うのでいいと思います。  私は、B3になってから研究室バイト(今はやめた)とスタートアップ企業で技術系バイト(今)をしています。ちょっと特殊なケースなので、一般的なバイトについてはあんまり詳しくなくてごめんなさい。。


食生活について

 昼はミールプランに加入(生協のサービス。加入プランに応じた金額分が毎日支給され、それを使って食堂のメニューを頼む。余った金額が翌日繰り越しとかは無いので、毎日消費しないと損する。そのため、ミールプランに加入した人はミール奴隷としての生活を強いられる)していたため、生協の食堂で済ませてました。

 朝と夜は自炊。母の偉大さがよくわかりますね。

 節約しようとすれば、パスタや質素な選択をすることで可能ですが、私は我慢できないので食べたいもの買ってしまうタイプです。お菓子もめっちゃ食べるし。でもポテチは多く感じますね。実家だと家族で分けていたので。食べきれない。。

とはいえ、大学生といえばラーメン。深夜の一蘭は満足感がすごい。


恋愛について

 さぁ、大学生です!彼氏・彼女ができてくるわけです!君にも春が訪れるかな?????

 私には来ない、正確に言うと、工学部など男子ばかりの環境では、なにか行動を起こさないとできません。まぁ当たり前ですが、そもそも女子の人数が少ないですからね(逆に、女子は選び放題だからみんな彼氏とかおるんかな。知らんけど(笑)(自虐))。

 私は今のところ縁が無いので、周りの友人のことを言いますが、マッチングアプリが多いですね。あとはサークルとか、SNSでたまたまとか?ちょっと知らない世界なので、このあたりで終わりにします。あと、何気に私の心に刺さる。痛い。(´;ω;`)

俺には、推しがいるから!!大丈夫だもん!!!うわぁーーん!!(世紀末


一日の生活例

 例として、平均的な私の一日をどうぞ。手書きでごめんね。

理系大学生の一日の例

まぁこれはかなり理想化されたようなもので、実際はサークルの時間が伸びたり、課題の時間が無くなったり、趣味の時間が増えたり、睡眠時間がなくなったりします。参考程度にどうぞ。


おわりに

 さて、かなり長く書きましたが、理系大学生ってこんなかんじです。誰かの参考になれば幸いです。何かあればコメントしてください。大したことは言えませんがね!!

 それでは良きキャンパスライフを!!(そういえば、自分の大学生活をキャンパスライフって表現することは今までなかったな、、、)


 

XIAO ESP32 C3 やC6 で CAN通信をする(TWAI driver v2)

はじめに

 3か月くらい前ですかね、XIAO Esp32 C6(以下C6)でCAN通信をやろうとして、できなかったよっていうのを記事にしたんですよ。

wells.hatenablog.jp

 そしたらですね、コメントが来てまして、それがこちら。


 「ESP32 C6のCANはSJA1000互換ではなくなってしまったのでライブラリによってはCANが使えなくなってしまいました。TWAI driver v2をそのまま呼び出すことで使用できました。」


 え?わざわざコメントしてくれるとか感謝すぎる。。。

 そして、本当に動かせた(しかもかなりあっさりできた、、、)のでそれを記事にしましたよというお話です。


まず結論というかまとめ

  • C6とかXIAO ESP32 C3(以下C3)ではSP32-C6はTWAI(CAN)コントローラーの仕様が「V2」にアップデートされ、従来のSJA1000互換(V1)を前提とした古いライブラリやコードがそのままでは動かない
  • そのため、TWAI driver v2を使わなければならない
  • 公式のドキュメントはこちら
  • ↑のドキュメントに全部書いてあった(笑)

 私の情報収集能力不足でした。まじで、公式のドキュメントに全部、ライブラリから応用まで書いてありました。

 そして、コメントに合った通り、バージョンの違いが原因でした。ほんとに感謝。


また、従来のCANとどう異なるかを軽く書いておきます。

  • GPIOマトリックス:これにより、CANのH/Lをおおよそどのピンにでも割り当て可能
  • ビットレートを入力するだけで、最適なタイミングを自動で計算する

というかんじらしいです。要するに、簡単に、自由度高く遊べるということですね。


一応、具体的なコード

 公式のドキュメント見てね!それでは!

 で終わってもいいのですが、まぁ、せっかくなので、具体的なコードだけでも載せておきます。


目的

 今回は、C3とC6を一台ずつ使って、相互に受信と送信を行います。

 ですが、送信するだけ、受信するだけでも同じコードでできます。汎用性を持たせただけですので。。

 なお、CAN通信については、下の記事も参考にしてみてください!!

wells.hatenablog.jp


用意するもの

  • C3とC6(別にC3を二つとかでも同じことができます。配線が少々変わる程度)
  • CANトランシーバ×2:内蔵されていないので。それぞれに必要なので合計2つ。
  • 120Ωの抵抗×2:終端抵抗です。
  • ブレッドボードとかジャンパワイヤとか


配線

 手書きでごめんね、、、なお、いずれもTXを5番、RXを4番にしていますが、前述した通り、コードのピン設定を変更すればどれでもいいです。

回路図


コード

 C3のものと、C6のものと2つ載せますが、基本的なコードは同じで、ピン設定と、シリアルモニタの表示方法、およびCANのIDが異なるだけです。

まず、C3の方から(コード内ではA機に対応)

#include "esp_twai.h"
#include "esp_twai_onchip.h"

#define CAN_TX_PIN GPIO_NUM_7  // XIAO C3 D5
#define CAN_RX_PIN GPIO_NUM_6  // XIAO C3 D4

#define MY_TX_ID 0x101   // A機の送信ID
#define TARGET_TX_ID 0x102 // B機から来るはずのID


static twai_node_handle_t can_node = NULL;

// コールバック関数
static bool IRAM_ATTR twai_rx_callback(twai_node_handle_t handle, 
                                       const twai_rx_done_event_data_t *edata, 
                                       void *user_ctx) {
    static uint8_t rx_buf[8];
    twai_frame_t frame = { .buffer = rx_buf, .buffer_len = sizeof(rx_buf) };

    if (twai_node_receive_from_isr(handle, &frame) == ESP_OK) {
        Serial.printf(">>> [FROM B] ID: 0x%03X | Data: ", frame.header.id);
        for (int i = 0; i < frame.header.dlc; i++) Serial.printf("%02X ", rx_buf[i]);
        Serial.println();
    }
    return false;
}

// CAN初期化
void initCAN() {
    twai_onchip_node_config_t node_cfg = {
        .io_cfg = {
            .tx = CAN_TX_PIN,
            .rx = CAN_RX_PIN,
            .quanta_clk_out = GPIO_NUM_NC,
            .bus_off_indicator = GPIO_NUM_NC,
        },
        .bit_timing = {
            .bitrate = 500000, // 500kbps
        },
        .tx_queue_depth = 10,
    };

    // ノードの作成
    if (twai_new_node_onchip(&node_cfg, &can_node) != ESP_OK) {
        Serial.println("Failed to create TWAI node");
        return;
    }

    // イベントコールバックの登録
    twai_event_callbacks_t cbs = {
        .on_rx_done = twai_rx_callback,
    };
    twai_node_register_event_callbacks(can_node, &cbs, NULL);

    // ノードの有効化
    if (twai_node_enable(can_node) == ESP_OK) {
        Serial.println("TWAI Node Enabled");
    }
}

void setup() {
    Serial.begin(115200);
    delay(2000);
    initCAN();
}

void loop() {
    static uint8_t tx_data[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00};
    static uint32_t counter = 0;

    // 1秒おきに送信
    tx_data[7] = (uint8_t)(counter & 0xFF);

    twai_frame_t tx_frame = {
        .header = { .id = MY_TX_ID, .ide = 0, .rtr = 0 },
        .buffer = tx_data, .buffer_len = 8,
    };

    esp_err_t res = twai_node_transmit(can_node, &tx_frame, 100);

    if (res == ESP_OK) {
        Serial.printf("<<< [A-Send] Counter: %d\n", counter);
    } else {
        Serial.printf("[Send Fail] %s\n", esp_err_to_name(res));
    }

    counter++;
    delay(1000);
}

続いて、C6用のコード

#include "esp_twai.h"
#include "esp_twai_onchip.h"

#define CAN_TX_PIN GPIO_NUM_23  // XIAO C6 D5
#define CAN_RX_PIN GPIO_NUM_22  // XIAO C6 D4

#define MY_TX_ID 0x102   // B機の送信ID
#define TARGET_TX_ID 0x101 // A機から来るはずのID


static twai_node_handle_t can_node = NULL;

// コールバック関数
static bool IRAM_ATTR twai_rx_callback(twai_node_handle_t handle, 
                                       const twai_rx_done_event_data_t *edata, 
                                       void *user_ctx) {
    static uint8_t rx_buf[8];
    twai_frame_t frame = { .buffer = rx_buf, .buffer_len = sizeof(rx_buf) };

    if (twai_node_receive_from_isr(handle, &frame) == ESP_OK) {
        Serial.printf(">>> [FROM A] ID: 0x%03X | Data: ", frame.header.id);
        for (int i = 0; i < frame.header.dlc; i++) Serial.printf("%02X ", rx_buf[i]);
        Serial.println();
    }
    return false;
}

// CAN初期化
void initCAN() {
    twai_onchip_node_config_t node_cfg = {
        .io_cfg = {
            .tx = CAN_TX_PIN,
            .rx = CAN_RX_PIN,
            .quanta_clk_out = GPIO_NUM_NC,
            .bus_off_indicator = GPIO_NUM_NC,
        },
        .bit_timing = {
            .bitrate = 500000, // 500kbps
        },
        .tx_queue_depth = 10,
    };

    // ノードの作成
    if (twai_new_node_onchip(&node_cfg, &can_node) != ESP_OK) {
        Serial.println("Failed to create TWAI node");
        return;
    }

    // イベントコールバックの登録
    twai_event_callbacks_t cbs = {
        .on_rx_done = twai_rx_callback,
    };
    twai_node_register_event_callbacks(can_node, &cbs, NULL);

    // ノードの有効化
    if (twai_node_enable(can_node) == ESP_OK) {
        Serial.println("TWAI Node Enabled");
    }
}

void setup() {
    Serial.begin(115200);
    delay(2000);
    initCAN();
}

void loop() {
    static uint8_t tx_data[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00};
    static uint32_t counter = 0;

    // 1秒おきに送信
    tx_data[7] = (uint8_t)(counter & 0xFF);

    twai_frame_t tx_frame = {
        .header = { .id = MY_TX_ID, .ide = 0, .rtr = 0 },
        .buffer = tx_data, .buffer_len = 8,
    };

    esp_err_t res = twai_node_transmit(can_node, &tx_frame, 100);

    if (res == ESP_OK) {
        Serial.printf("<<< [B-Send] Counter: %d\n", counter);
    } else {
        Serial.printf("[Send Fail] %s\n", esp_err_to_name(res));
    }

    counter++;
    delay(1000);
}

備忘録も兼ねて説明する。。

  • ライブラリは公式の通りにincludeしてます。
  • CANの受信はコールバック関数にて行います。
  • IRAM_ATTR: この関数を高速な内部RAMに配置する指示。割り込み処理は一瞬で終わらせたいので、低速なFlashメモリから読み出すのを避けるために。
  • twai_node_receive_from_isr: 割り込み(ISR)の中から安全にデータを受け取るための専用関数です。
  • initCAN()で初期設定をします。
  • ビットレートは全デバイスで合わせてください。今回は500kです。
  • loop()にて、まず送信フレームを作成します。標準ID(11bit)なので、ide = 0とします。また、データフレームを示すため、rtr = 0とします。(1ならデータ要求用になるらしい)
  • twai_node_transmit: 第3引数の100はタイムアウト(ms)です。バスが混んでいて送信できない場合にどれくらい待つかを指定します。

詳細は公式の方みたりしてくださいな。。。。


あと、若干余談ですが、

#define CAN0_TX_PIN GPIO_NUM_23
#define CAN0_RX_PIN GPIO_NUM_22

#define CAN1_TX_PIN GPIO_NUM_1
#define CAN1_RX_PIN GPIO_NUM_2

といった具合に、CAN0とCAN1をそれぞれ定義して、さらにCANコントローラとトランシーバを外部に追加することで、CANを二系統扱える(ビットレートを500kのものと1Mのもの、みたいな?)ということです。使うのかはしらない。

仮に、接続したい機体を増やすだけなら(例えばC機を追加したい)、単純にIDを変えるだけなので。というかこれがCANのいいところなのでね。。。


できた!!

こんなかんじで、送受信できました。


おわりに

 無事、CANの送受信ができました。もうBLEであるやバッテリー駆動時には5V使えないことを除けば、無印と同等もしくはサイズとか考えるとそれ以上の役割ができますね。通信系がほとんど使えるのでかなりいいものだと思いますわ。

 あと、コメントして下さった方、本当にありがとうございました。こういうかんじでサポート受けると、ブログにしてよかったなぁって思いますわ。。


XIAO ESP32C6でサーボモータを4つくらい制御する。

読まなくていい前置き。

 お久しぶりです。めっちゃ期間空きましたね、、、、

 この時期、大学生は期末試験に追われるんです。私も理系の大学生の一人ですので、追われていたんです。しかも、期末試験対策を使用とするときに限ってYouTubeやらTwitterやらで忙しくなるんですよね、、、

 まぁ、この話は置いておいてね。本題入りますね。

 あ、大学生も結構長く(というか半分以上終わった)なって、きりも良いので、そのうち某理系大学のことについて書こうと思います。おそらくどこの大学、学科、まで特定されるとは思いますが、まぁいいや。


はじめに

 今まで、XIAOESP32C6の記事を書いてきたんですが、気づいたら追加購入していました。ので、これでサーボモータを制御したお話です。まぁ、C6というかESP32全般で使えるコードですね。


さて、サーボモータのライブラリ、、、???

 Arduinoでは基本的に、

#include <Servo.h>

という有名なサーボモータを使うためのライブラリがあるんですけど、ESP32ではそのライブラリが使えません。

ですが、代わりに、PWMを出せるLEDC関数というのがあるので、それを使います。

その中でも今回は以下の二種類のみです。

ledcAttach(pin, freq, resolution);
ledcWrite(pin, duty);

ledcAttachについて、第一引数ではピン番号、第二引数では周波数(Hz)、第三引数では分解能(bit)となっています。 ledWriteについて、第一引数ではピン番号、第二引数はDuty比となっています。

そこまで複雑ではないですね!!


配線について

 表で示します。とりあえず、4つのサーボモータを動かします。

Esp32 SG90
D0、D1、D2、D3 Signal
GND GND

ただし、サーボの電源は外部から取りました。今回は9V型ボックス電池から取りました(SG90の定格が3.3~6Vなので、DCDCで降圧しています)。


コードについて

 そのままコピペ~~~  動きとしては、4つのサーボモータが0→90→180度に回転するのを繰り返すものです。

const int SERVOMAX = 65536*2.4/20;
const int SERVOMIN = 65536*0.5/20;
int center = (SERVOMAX-SERVOMIN)/2;

void servoMove(int pin, int angle){
  ledcAttach(pin, 50, 16); 
  angle = map(angle, 0, 180, SERVOMIN+5, SERVOMAX-5);
  ledcWrite(pin, angle);
}

void reset(){
  servoMove(D0, 90);
  servoMove(D1, 90);
  servoMove(D2, 90);
  servoMove(D3, 90);
}

void setup(){
  reset();
  delay(3000);
}

void loop(){
  servoMove(D0, 0);
  servoMove(D1, 0);
  servoMove(D2, 0);
  servoMove(D3, 0);
  delay(1000);
  servoMove(D0, 90);
  servoMove(D1, 90);
  servoMove(D2, 90);
  servoMove(D3, 90);
  delay(1000);
  servoMove(D0, 180);
  servoMove(D1, 180);
  servoMove(D2, 180);
  servoMove(D3, 180);
  delay(1000);
}

少し解説。

const int SERVOMAX = 65536*2.4/20;
const int SERVOMIN = 65536*0.5/20;

これは、2の16乗(ledcAttachの第三引数の分解能に等しい)に対し、サーボモータの可動域の最小、最大値に変換するためです。詳細は下のデータシートにあります。今回、SG90を使うため、この値となりますが、他のサーボモータの場合は適宜変更してください。

SG90データシート


実際の動き

 前述した通り、DCDCで降圧してる都合で色々載ってますが、こんなかんじで制御できました!!

youtu.be


おわりに

 かなり雑な記事ですが、要するに、ESP32でもサーボモータを簡単に制御できるよ、C6でも問題ないよ、というお話でした。

 こんな小さいのにすごいねぇ。。。