工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino Megaで作る美しい5x5x5 LEDキューブ

必要な部品と材料

部品数量備考
Arduino Mega 25601
青色LED125
NTE85 NPNトランジスタ5
22ゲージ錫メッキ銅線1層の接続とカソードをメイン基板へ引き下げる用
180Ω 抵抗 (1/4W)25
9cm x 15cm ユニバーサル基板1
330Ω 抵抗 (1/4W)5
9V電源アダプタ (Mega用・任意)1USB給電でも動作可能だが、コンセント接続用に準備

必要な工具と機器

使用するアプリとオンラインサービス

プロジェクト概要

はじめに

多くの人がLEDキューブを愛していますが、8x8x8のような大型キューブは製作もプログラミングも大変な労力が必要です。一方、3x3x3や4x4x4の小型キューブは、LED数が少なく、シフトレジスタやハイサイドドライバなどの外部ハードウェアも不要で製作が容易ですが、大型キューブのような迫力には欠けます。

このプロジェクトの目的は、大型キューブのような臨場感を楽しめるのに、大型キューブ製作に伴う苦労を避けられる、簡単に作れるキューブを作ることです。ここで紹介するのは、Arduino Megaだけで直接駆動できる5x5x5キューブです。シフトレジスタは一切使わず、補助部品として5個のトランジスタ(1層分の25個のLEDのカソードを一括でグラウンドに落とす用)のみを使用します。なぜシフトレジスタを避けるのか? それは手配線が非常に面倒だからです(実際に試しました)。シフトレジスタを使うなら、専用基板の設計・製作が現実的です。

私は以前から大型キューブ用のコードを多く書いてきた経験があり、それらのアニメーションをこの5x5x5キューブ向けに移植しました。

実はこれは3部作の第1弾です。第2弾はこちら(5x5x5 RGBキューブ、設計は似ていますが製作難易度は高め)、第3弾はこちら(8x8x8単色キューブ、やはり外部ハードウェア最小限)です。

注: 5x5x5キューブをMegaで駆動するアイデアを最初に提案したのは私ではありません。MEGA DAS氏が2017年に類似プロジェクトを公開しています。ハードウェア構成はほぼ同一です。私があのプロジェクトを知ったのはこの記事を書き始めてからで、ピン配置と抵抗値が異なる程度の差しかありません。私がこの記事を公開する理由は、キューブ・ソフトウェアの豊富な経験があるからです。私のソフトウェアがきっかけで、キューブ製作に挑戦する人が増えることを期待しています!

上の動画は、Z軸を振幅、水平方向を時間とした正弦波関数を表示しています。大型キューブでは定番のエフェクトですが、5x5x5でも十分楽しめます。

他にも2本の動画を用意しました。どちらも同じ14種類のアニメーション集です。どちらが見やすいか判断できなかったため両方掲載しています。実物は動画よりずっと綺麗に見えますよ!

ハードウェア設計

Megaには大量のデジタルI/Oピンがあります。そのうち5本で各層のカソードをトランジスタ経由でLowにし、残り25本で各層内の25個のLEDアノードをHighに駆動します。この方式なら、MegaのI/Oピン数で6x6x6キューブまで対応可能です。ただし、シンプルさを保つ上で電流制限も考慮する必要があります。Megaのピンあたり最大40mA、総計200mAまでです。青色LEDの順方向電圧は約3V、カソード側トランジスタのVce(sat)約0.7V。5V電源に180Ω抵抗を直列に入れると、LED1個あたり約7.2mA流れます。1層25個全点灯で180mA。常に1層だけ点灯させるマルチプレクス駆動なので、Megaの電流制限内に収まります(トランジスタのベース電流約5mAを加えても総計約185mA)。以上の理由で180Ω抵抗を採用しました。

Arduino Megaで作る美しい5x5x5 LEDキューブ
Megaのデジタルピンとキューブの接続関係

ピン22〜26がカソード側トランジスタのベース駆動用、ピン27〜51が180Ω抵抗を介して各層の25個のアノードへ接続されます。

このピン配置が少し分かりにくい理由は、ソフトウェアでdigitalWriteではなく直接ポート操作(Direct Port Access)を行っているためです。これにより25個のアノードを高速に設定でき、LED点灯時間を最大化しています。ピン配置はポート単位で管理しやすいよう工夫されています。詳細はソフトウェア解説で触れます。

キューブの組み立て

キューブの作り方には様々な流派がありますが、どの方法でも根気と丁寧さが必要です。ここでは私の手順を紹介しますが、他の解説も参考にしてください。

まずLEDのリード線を成形し、5個を縦に並べて柱(カラム)を作ります。それを5本並べてパネル(1層分)を作り、さらにパネルを5枚重ねてキューブを完成させます。初心者が陥りやすいのが、リード角度の微小な誤差が積み重なり、完成時に歪みが目立つことです。リード成形が最も重要な工程です。時間をかけて正確に行えば、完璧ではないにせよ、見栄えの良いキューブが作れます。

Arduino Megaで作る美しい5x5x5 LEDキューブ
アノード(長い足)を横に曲げ、カソードと直角に配置

私は一度に25個分のリード成形をしてから1枚のパネルを組み立てる方式を取っています。治具にはBlu-Tackを使用し、LEDを押し込んで固定しながらはんだ付けします。凹みの位置を再利用すれば、全パネルで同じピッチ(全方向0.6インチ)が出せます。標準的な0.1インチピッチのユニバーサル基板に後から差し込める寸法です。

Arduino Megaで作る美しい5x5x5 LEDキューブ
Arduino Megaで作る美しい5x5x5 LEDキューブ

LED同士のはんだ付けについて: キューブ完成後に内部の冷接点や不良LEDが見つかるのは製作者の悪夢です。柱を作る段階で、一つ一つのはんだ付けを確実に行ってください。

Arduino Megaで作る美しい5x5x5 LEDキューブ
Arduino Megaで作る美しい5x5x5 LEDキューブ

パネルが完成したら必ずテストします。テスト用スケッチを用意しています。5本のアノード線を330Ω抵抗経由でピン40〜44へ、5本のカソード線をピン22〜26へ接続して実行します。正常なら上記動画のように全LEDが点灯します(この段階ではトランジスタを使わず、カソードを直接Lowにして点灯させています。本実装ではトランジスタを介するためHighでカソードをLowに落とします)。

5枚のパネルがテスト済みなら、メイン基板への実装準備に入ります。まず基板上に全抵抗とトランジスタを配線します。

Arduino Megaで作る美しい5x5x5 LEDキューブ
アノード列のすぐ隣に180Ω抵抗、キューブとMegaの間にカソード用トランジスタとベース抵抗を配置

アノード列間は0.6インチ(基板上5穴分)空けています。この時点でArduino Megaを基板に固定します(スペーサーまたは薄いプラ板+接着剤で約6mm浮かせています)。

パネルをメイン基板にはんだ付けします。アノード列が正しい穴に入っているか、全列確認してから作業してください。1穴でもズレると完成時に分かります。全パネルのカソード引き出し方向も統一してください。

Arduino Megaで作る美しい5x5x5 LEDキューブ

次に、各層のカソード同士を横方向で接続します。伸ばした錫メッキ銅線で、同一層の5本のカソード線を結びます。

Arduino Megaで作る美しい5x5x5 LEDキューブ

さらに、各層のカソード束をメイン基板のトランジスタコレクタへ引き下げます。これも錫メッキ銅線を使用します。

抵抗からMegaへの全配線が済めば、いよいよ完成キューブのテストです。付属のテストスケッチを書き込むと、全125個のLEDが順番に点灯します。パネル単体テスト済みなので、不具合があれば最近接続したカソード周り(特定層が点かない、一部欠ける等)が疑われます。多くは冷接点です。

ソフトウェア

キューブ内の各LED状態は、グローバルな5x5x5のバイト配列 cube[][][] で管理します。1なら点灯、0なら消灯。すべてのアニメーションはこの配列への1/0書き込みで生成されます。

キューブ・ソフトウェアの心臓部は、定期割り込みによるリフレッシュ処理です。setup() で割り込みを開始し、本体はプログラム末尾に配置。10ms周期(100Hz)で呼び出され、リフレッシュ自体は約6msで完了。残り4msでメインループの処理が実行できます。

リフレッシュ時、各層を1.2msずつ点灯させます。100Hz駆動なので、点灯中のLEDは1秒間に120ms(デューティ比12%)点灯します。この速度で人間の目には連続点灯に見え、12%でも意外と明るく見えます。

リフレッシュ時間を削減し点灯時間を稼ぐため、digitalWriteを避け、直接ポート操作でピン設定を行っています。割り込みルーチン内に25行の直接ポート書き込みが並びますが、これはdigitalWriteループより桁違いに高速です。

loop() は単にアニメーション・ルーチンを順番に呼び出し、最後まで行ったら最初に戻ります。各アニメーションは独立したサブルーチンで、中には共通ユーティリティ(clearCube() 全消灯、copyDown() 1層下へシフトして最上層クリア等)を呼ぶものもあります。コード内に各アニメーションの解説コメントがあります。

ダウンロード可能なスケッチは3種類:メイン(動画の15アニメーション収録)、パネルテスト用、キューブ完成テスト用。後者2つは製作中の検証専用です。

製造プロセス

  1. アイロン台の製造:設計、素材、生産プロセス
  2. ルービックキューブ:発明から現代のパズルへ
  3. プリント基板:設計、製造、未来トレンド
  4. サーフボードの構造とデザイン:ポリネシアのルーツから現代の革新まで
  5. 発光ダイオード(LED):誕生から100年寿命へ
  6. RasPiRobot Board V2:Raspberry Pi を強力なロボットコントローラーに拡張
  7. DIY Arduinoワードクロック – 文字で時刻を表示する洗練されたリアルタイムクロック
  8. Arduinoで「棺桶ダンス」メロディーを再現するプロジェクト
  9. 壊れたスイッチボードをスマートタッチスイッチに改造:温度監視機能付き
  10. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  11. Arduino UNOで作るシンプル電卓 - シリアルモニターで四則演算