• 締切済み

Arduinoで複数のLEDマトリクスに映像出力

私はこのページを参考に( http://kousaku-kousaku.blogspot.jp/2008/08/arduinoprocessingledweb.html )ArduinoMegaの互換機ChipKitMax32を使用して、12×32のLEDマトリクスを制御し映像を表示させています。 が、映像を表示させるには速度的に問題があり、参考先のプログラムではdelayMicrosecondsで各ドットの明るさを制御していますがそれも怪しく、映像自体のフレームレートを下げるなどしても改善せず、マイコン1台で映像表示するのは厳しいか…と思い、 8×8のLEDマトリクスにつき1台のArduino unoを使用し、それを何個も連結させ大きなLEDマトリクスにしようと考えました。 複数のArduinoを接続する方法として、I2CやSPI通信等がありますが、SPIでは後々Arduino unoのピン数が足りなくなるかもという不安もあり、複雑そうですがI2CでArduino同士を通信させようと思いました。 回路のイメージは添付画像の通り、 プログラムの内容は、 1 Processingから映像の各ドットの明るさの数値を受け取る 2 Arduinoマスタからスレーブ1へ最初の8つの数値を送る 3 スレーブ1がマスタから受け取った8つの数値をLEDマトリクス1の一行目の各ドットの明るさに割り振り点灯 4 Arduinoマスタからスレーブ2へ次の8つの数値を送る 5 スレーブ2がマスタから受け取った8つの数値をLEDマトリクス2の一行目の各ドットの明るさに割り振り点灯(LEDマトリクス1・2の一行目が点灯完了) これをあと7回くりかえし、LEDマトリクスの全画面の点灯完了 最終的には8×8のLEDマトリクスを10台程使用して、16×40のLEDマトリクスに映像を表示させたいです。 Arduinoで複数のLEDマトリクスを扱う場合、「映像表示の速度に耐えられるようにするために、Arduino自体の数を増やす、その通信をI2Cで行い、上記のようなプログラムで制御する」という方法で正しいか、可能かどうかの判断をお願いしたいです。 また、これより良い方法や、その他アドバイス等ありましたらお願い致します。

みんなの回答

  • 1take
  • ベストアンサー率50% (2/4)
回答No.1

こんにちは。  SPI接続のLEDドライバ(max7219やTLC5940NTとか)でも複数を数珠つなぎに出来るようですけど私は試してません。  私の場合は、16×16のLEDマトリックスをGR-SAKURAを使って動かそうと試してます。GR-SAKURAは55本のデジタルポートを使えます。まだ点灯しか試していないので、処理速度に関しては判らないです。  参考ですが、何日か前にYoutubeに投稿した16×16のLEDマトリックスをGR-SAKURAで点灯させているものです。  参考になれば幸いです。

参考URL:
http://www.youtube.com/watch?feature=player_embedded&v=DoDf2E6LCB8
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Arduino×LEDマトリクス×BA823

    秋月のLEDマトリクス(赤単色)をローム社のシフトレジスタBA823と接続し、Arduinoで制御しようと試みていますが、配線方法が分からず困っています・・・。 BA823を使用する理由は、LEDマトリクスのドット単位で明るさを制御したいからです。74HC595などでも試みたのですが、最終的に映像を出力させたいと考えており多くのLEDマトリクスを使用した際、74HC595では表示速度に難があるかと感じました。 現在は、LEDマトリクスのアノード側とカソード側に、それぞれ1台ずつBA823を接続し、データシートに従いVCC、GND、STROBE(LATCH)、SHIFT PULSE(CLOCK)、DATAをArduinoへ繋いでいますが、全く点灯しない状況です。 どなたか少しでも情報を持っている方がいましたら、是非アドバイスお願いします。 また、ドット単位で明るさが制御できるシフトレジスタの情報がある方がおられましたら、是非ご教示下さい。 よろしくお願いします。

  • ドットマトリクスLED制御回路についての質問です。

    ドットマトリクスLED制御回路についての質問です。 この前ドットマトリクスLEDを購入しマイコンで点灯させようと思っているのですが、 詳しい接続方法があまり理解できません。 一応回路図を書いたのですが、これが正しいのか自信がなく質問に至りました。 回路図の説明(間違っているかも・・・) 1.電源から[tr1] のコレクタに6Vを供給、抵抗器で2V 20mA にする。 2.I/Oポートからの出力(5V?)を抵抗器で2V 0.1mA にして[tr1]のベースに流す。 3. 1.2.によってエミッタから2V 20mA が流れる。 4.[tr2][tr3]のベース電流も2.と同様に設定。 5.[tr1]と[tr2]か[tr3]が両方ONの場合それに対応するLEDが点灯。 間違いがあったらご指摘のこと宜しくお願いします。

  • 8×8マトリクスLED回路・制御

    このたび、部活動で8×8のマトリクスLEDをつかって表示させることになりました。 回路は自分でつくってはんだづけしないといけないのですが、 AVRマイコンのATTINY2313-20PUを使おうと思うのですが、配線の仕方がわかりません・・・ アドバイス、下さると助かります。 基本的な制御はAVRで行い、 H8から簡単な信号をだし、、それをAVRでどのLEDを光らすか制御したいと思っています。 どのようにすればよいでしょうか・・・

  • arduinoでミスト機を自作したい

    Arduinoで、本を見ながら複数LEDを光らせた程度の初心者です。 小さいミスト機(面A4サイズx幅7cm)を自作しようと思うのですが、タンクの水(250ml)が無くなる少し前(残量5ml~10ml)に、メールで知らせてくれる機能はどのようにすると良いでしょうか? 必要なパーツ、スケッチ、概要を教えてください。 あとタイマーについての質問ですが、これから自作するiPhoneアプリを使って、Bluetooth-Arduino UNOで、タイマーを制御することはできますか? (Arduino FIOが無線に最適のようですが、Arduino UNOでも基盤にUSB端子を付けて、ノートパソコンにつけるBluetoothのミニ端子つけるとできそうな気もなんとなくするのですが、出来ないものなのでしょうか。。。)

  • 8×8ドットマトリクスLED表示について

    ForCy-USBのプログラミング http://www.recursion.jp/product/forcyusb/manual.pdf ForCy-USBを使って8×8のドットマトリクスLEDを一つ一つ点灯させたいのですがやり方が分かりません。(64個のLEDを任意に点灯)サイトの情報ではほとんどがc言語のプログラムなので質問させていただきました。 0xff 0x24 =sfr// ポートB を出力 0x0f 0x27 =sfr// ポートC 下位4bit を出力 0xfa 0x2a =sfr// ポートD 上位4bit を出力 :init ;scan [8]led 0 0x25 =sfr scan ++ 7 & =scan 1 scan << ~ dup 0x28 =sfr 0xf0 & 0x2b =sfr scan led 0x25 =sfr @c :main ↑(このようなプログラミングです) 例えば、斜め線を作るプログラムを作成していただけませんか。 ○○○○○○○● ○○○○○○●○ ○○○○○●○○ ○○○○●○○○ ○○○●○○○○ ○○●○○○○○ ○●○○○○○○ ●○○○○○○○ ____________________________________________ 0xff 0x24 =sfr // DDRB 0x0f 0x27 =sfr // DDRC 0xfa 0x2a =sfr // DDRD :ポート設定 ;行 [8]内容 0 0x25 =sfr // いったん消灯 行 ++ 7 & =行 // 表示行を巡回移動 1 行 << ~ // 対応する行のビットを0 dup 0x0f & 0x30 | 0x28 =sfr // SW1,2 はプルアップ 0xf0 & 0x2b =sfr 行 内容 0x25 =sfr // その行の内容表示 :走査 8 0 { dup 内容 ~ over =内容 ++ } for .. :反転 ポート設定 0 =行 8 0 { 0xff over << over =内容 ++ } for .. { 走査 反転 } interrupt @c . :LED表示 上記サイトの25Pをみてやっています

  • LEDマトリクスについて質問です。

    LEDマトリクスについて質問です。 今LEDマトリクスを制御しようとしているのですが、プログラムの方法がいまちよく分かりません。 LEDマトリクスはアノードコモン、アノード側の制御はPNPトランジスタ、 カソード側の制御はNPNトランジスタで行っています。 なので、自分は1行目(アノード)1列目(カソード)のLEDを表示させるために1行目 (PNPトランジスタ)に0を、1列目(NPNトランジスタ)に1を出力しているのですが点灯してくれません。 アノード側のPNPトランジスタに接続しているのはポートAで、カソード側NPNトランジスタに接続しているのはポートBです。 以下にソースコードを示すので、間違いの指摘のことよろしくお願いします。 void wait(long wait) /* 時間を指定できる時間稼ぎ関数 */ { while(wait--); } int main(void) /* 実際に表示をする関数 */ { PADDR = 0xff; /* ポートA全ビット入力 */ PAPCR = 0xff; PBDDR = 0xff; /* ポートB全ビット出力 */ int i; for(;;) { for(i = 0;i <= 8;i++) { /* 1列目の表示 */ PADR = 0x01 ; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); for(i = 8;i >= 0;i--) { /* 2列目の表示 */ PADR = 0x01 << 1; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); for(i = 0;i <= 8;i++) { /* 3列目の表示 */ PADR = 0x01 << 2; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); for(i = 8;i >= 0;i--) { /* 4列目の表示 */ PADR = 0x01 << 3; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); for(i = 0;i <= 8;i++) { /* 5列目の表示 */ PADR = 0x01 << 4; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); for(i = 8;i >= 0;i--) { /* 6列目の表示 */ PADR = 0x01 << 5; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); for(i = 0;i <= 8;i++) { /* 7列目の表示 */ PADR = 0x01 << 6; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); for(i = 8;i >= 0;i--) { /* 8列目の表示 */ PADR = 0x01 << 7; PBDR = 0x01 << i; wait(50000); PBDR = 0; } PADR = 0; wait(1000); } }

  • Arduinoを三菱PLCのRS232C制御したい

    PCを使えばArduino UnoからNeoPixelのLEDを多色・多明度に制御できるようです。 このPCをPLC(三菱PLC-FX5U)に置き換えてRS232Cで制御したいのですが、可能でしょうか? Arduino Unoは、USBタイプがありますが、RS232用シールドというものもあり、 これを使えば!と思いますが、接続・通信方法など、ネットでヒットせず、困っています。 ご存知の方、どうかご教示をお願い致します。 arduino https://www.amazon.co.jp/%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9-%E3%80%90%E6%B0%B8%E4%B9%85%E4%BF%9D%E8%A8%BC%E4%BB%98%E3%81%8D%E3%80%91Arduino-Uno/dp/B0044X2E5S/ref=sr_1_8?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=arduino+uno+r3&qid=1576122661&sr=8-8

  • OSOYOO製 arduino unoの使い方

    OSOYOO製 arduino uno スターターキット6を購入しました。 合わせてarduinoを始めようの本も購入しIDEのインストール、ドライバーの設定を完了しました。 次にポートの確認をするよう書かれており arduinoの互換ボードをUSBに接続し青ランプがついた状態でツールメニューからarduinoボードのポートを選択するよう書かれていますがポート欄は表示されずです。どうしたらポートが開けるようになるのかお教えください。 ポートが見つからないと次に進めないのでしょうか。例題のLEDを点滅させるプログラムを入力してもエラーがかかってしまいます。 入力間違いはありません。 使用のPCはw10とw7です。

  • ラズベリーパイ LEDマトリクスパネルが点灯しない

    下記URLを参考に、Raspberry Pi 4 model BとLEDマトリクスパネルを使って電光掲示板を作ろうと試みました。 https://hellobreak.net/raspberry-pi-matrix-led-64-32/ 見出し【デモ0:回転する正方形】が表示されることを目指していますが、コマンドを実行しても全く点灯しませんでした。 原因がわからず困っております。ラズベリーパイやLEDマトリクスパネルを扱ったことがなく初心者のため手探りの状態です。 具体的にどのようなことをすれば解決できるのか、ご教示いただけますと誠に幸いです。 ■現象 購入したLEDパネル:https://www.akiba-led.jp/product/1160 購入したスイッチング電源:https://www.monotaro.com/p/6651/8043/?utm_campaign=order_confirmation&utm_medium=email_html&utm_source=system-email&utm_term=productImg 結線し、見出し【デモ0:回転する正方形】のコマンドを実行したのですが、LEDマトリクスパネルが全く点灯しませんでした。1ドットも点灯しない状況です。LEDパネルは購入したばかりなので壊れていないと考えています。 ■確認したこと ・ジャンパー線はテスターで導通確認済み ・スイッチング電源はテスターで5Vに調整済み ・結線は先ほどのURL、また下記のURLを参考にしました。 結線のミスも考え何度かやり直してみましたが、点灯しませんでした。https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/wiring.md ■気になったこと 初心者なりにいろいろ調べてみたのですが、気になったことが3つあります。これらは点灯しない原因に直接関係しているのでしょうか。 ・紹介されているLEDパネルとは別のLEDパネルを購入しています。背面の写真を見ると、紹介されているものと購入したものの背面が異なります。LEDパネルによって結線する位置が変わるのかどうか。 ・購入したLEDパネルの背面と似たLEDパネルを、amazonにて見つけました。レビューの中に、「インターフェースはHUB75だがネットの情報とは少し異なる」の記述がありましたが関係しているのかどうか。 https://www.amazon.co.jp/gp/product/B071VJFB86/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=kozinsyohyou-22&linkId=b2cceed9dc563e8753df1d6f42e4e201#aw-udpv3-customer-reviews_feature_div ・下記で記述されていることは関係しているのかどうか。 https://github.com/2dom/PxMatrix/issues/119

  • ARDUINOで5つのLEDをそれぞれ点滅させたり、フェードインさせた

    ARDUINOで5つのLEDをそれぞれ点滅させたり、フェードインさせたりしたい!! ARDUINO初心者です。5つのLEDをそれぞれ上記の様に制御したいと思っています。点滅は点灯、消灯が一定の点滅ではない効果を持たせたく、5つのLEDのうち、2つはフェードインフェードアウトで蛍のような効果にしたいと思っております。 以下、途中まで3つのLEDで試行錯誤してスケッチを構築したのですが、なかなかこれ以上、前へすすみません。 まず、このスケッチでの第一関門はプログラムの並列処理ができない、ということでした。 int ledPina = 9; int ledPinb = 10; int ledPinc = 11; void setup(){ pinMode(ledPina, OUTPUT); pinMode(ledPinb, OUTPUT); pinMode(ledPinc, OUTPUT); //LedPin a b cを出力に設定。 } void loop() { digitalWrite(ledPina, HIGH); // aのLEDをオン delay(500); //待機 digitalWrite(ledPina, LOW); //aをオフ delay(500); digitalWrite(ledPinb, HIGH); // bのLEDをオン delay(800); // 待機 digitalWrite(ledPinb, LOW); //bをオフ delay(300); digitalWrite(ledPinc, HIGH); // cのLEDをオン delay(100); // 待機 digitalWrite(ledPinc, LOW); //cをオフ delay(50); } おわかりの方、いらっしゃいましたら、お教え願えますでしょうか? よろしくお願い致します!!