一連のRaspberryPiチュートリアルを作成しました。このチュートリアルでは、Raspberry Piと、LED、LCD、ボタン、DCモーター、サーボモーター、ステッピングモーター、ADC、シフトレジスタなどのすべての基本コンポーネントとのインターフェースについて説明しました。 いくつかの優れたIoTプロジェクトとともに、初心者向けのいくつかの簡単なRaspberryPiプロジェクトを公開し ました。今日は、これらのチュートリアルの続きとして、RaspberryPiによる8x8LEDマトリックスモジュールの制御を行います。マトリックスモジュールに文字を表示するPythonプログラムを作成します。
また、8x8LEDマトリックスとArduinoおよびLEDマトリックスとAVRMicrocontorllerのインターフェースも確認してください。
必要なコンポーネント:
ここでは 、Raspbian JessieOSでRaspberryPi2モデルBを使用しています。すべての基本的なハードウェアとソフトウェアの要件については前に説明しましたが、必要なものを除いて、RaspberryPiの概要とRaspberryPIのLEDの点滅で調べることができます。
- ラズベリーパイボード
- 電源(5v)
- 1000uFコンデンサ(電源に接続)
- 1KΩ抵抗(8個)
8x8 LEDマトリックスモジュール:
8 * 8 LEDマトリックスモジュールには、マトリックスの形で配置された64個のLED(発光ダイオード)が含まれているため、名前はLEDマトリックスです。これらのコンパクトなモジュールは、さまざまなサイズと多くの色でご利用いただけます。都合に合わせて選ぶことができます。モジュールのPIN構成は図のようになります。モジュールのピン配列が正しくないため、エラーを回避するために、PINには図に示されているとおりに正確に番号を付ける必要があることに注意してください。
LEDマトリックスモジュールには8+ 8 = 16の共通端子があります。その上に、64個のLEDをマトリックス形式で接続するための8つの共通の正端子と8つの共通の負端子が8行8列の形式であります。モジュールを回路図の形で描くとすると、次のような図になります。
したがって、8行の場合、8つの共通の正の端子(9、14、8、12、17、2、5)があります。最初の行を考えてみましょう。D1からD8までのLEDには共通の正の端子があり、ピンはLEDマトリックスモジュールのPIN9に引き出されています。ROW内の1つまたはすべてのLEDをオンにする場合は、LEDMODULEの対応するピンに+ 3.3vの電力を供給する必要があります。
一般的な正の端子と同様に、列として8つの一般的な負の端子があります(13、3、4、10、6、11、15、16)。任意の列の任意のLEDを接地するために、接地されるそれぞれの共通のマイナス端子。
回路の説明:
RaspberryPiとLEDマトリックスモジュールの間で行われる接続を以下の表に示します。
LEDマトリックスモジュールピン番号 |
関数 |
Raspberry PiGPIOピン番号 |
13 |
POSITIVE0 |
GPIO12 |
3 |
ポジティブ1 |
GPIO22 |
4 |
ポジティブ2 |
GPIO27 |
10 |
ポジティブ3 |
GPIO25 |
6 |
POSITIVE4 |
GPIO17 |
11 |
ポジティブ5 |
GPIO24 |
15 |
ポジティブ6 |
GPIO23 |
16 |
ポジティブ7 |
GPIO18 |
9 |
ネガティブ0 |
GPIO21 |
14 |
ネガティブ1 |
GPIO20 |
8 |
ネガティブ2 |
GPIO26 |
12 |
ネガティブ3 |
GPIO16 |
1 |
ネガティブ4 |
GPIO19 |
7 |
ネガティブ5 |
GPIO13 |
2 |
ネガティブ6 |
GPIO6 |
5 |
ネガティブ7 |
GPIO5 |
これは、8x8LEDマトリックスをRaspberryPiとインターフェースするための最終的な回路図です。
作業説明:
ここでは、多重化手法を使用して、8x8LEDマトリックスモジュールに文字を表示します。それでは、この多重化について詳しく説明しましょう。マトリックスのLEDD10をオンにする場合は、モジュールのPIN14に電力を供給し、モジュールのPIN3を接地する必要があるとします。このLEDを使用すると、下の図に示すようにD10がオンになります。これも最初にチェックして、MATRIXがすべてが正常であることを確認する必要があります。
ここで、D1をオンにする場合は、マトリックスのPIN9に電力を供給し、PIN13を接地する必要があるとします。そのLEDでD1が点灯します。この場合の現在の方向を下図に示します。
ここで注意が必要なのは、D1とD10の両方を同時にオンにすることです。したがって、PIN9、PIN14の両方に電力を供給し、PIN13、PIN3の両方を接地する必要があります。これにより、LED D1とD10がオンになりますが、それに伴い、LEDD2とD9もオンになります。共通の端末を共有しているからです。したがって、対角線に沿ってLEDをオンにしたい場合は、途中ですべてのLEDをオンにする必要があります。これを下の図に示します。
この問題を回避するために、多重化と呼ばれる手法を使用し ます。また、8x8 LEDマトリックスをAVRとインターフェースする際のこの多重化手法についても説明しましたが、ここで再度説明します。この同じ多重化技術は、ArduinoおよびAVRマイクロコントローラーを使用した8x8LEDマトリックス上のテキストのスクロールでも使用されます。
人間の目は30Hzを超える周波数をキャプチャすることはできません。これは、LEDが30Hz以上の速度で連続してオンとオフを切り替える場合です。目はLEDが継続的に点灯しているように見えます。ただし、そうではなく、LEDは実際には常にオンとオフを切り替えます。この手法は多重化と呼ばれ ます。
たとえば、D2とD9をオンにせずに、LEDD1とLEDD10のみをオンにしたいとします。秘訣は、最初にPIN9と13を使用してLEDD1のみに電力を供給し、1mSEC待ってから、電源をオフにすることです。次に、PIN14と3を使用してLEDD10に電力を供給し、1mSEC待ってから、電源をオフにします。サイクルは高周波で継続的に進行し、D1とD10は急速にオンとオフになり、両方のLEDが継続的にオンになっているように見えます。つまり、一度に1つの行(LED)にのみ電力を供給し、他の行の他のLEDをオンにする可能性を排除します。この手法を使用して、すべての文字を表示します。
以下に示すように、マトリックスに「A」を表示する場合のように、1つの例でさらに理解できます。
言われたように、私たちは瞬時に1つの行をオンにします、
t = 0m SECで、この時点でPIN09がHIGHに設定され(この時点で他のROWピンがLOW)、PIN3、PIN4、PIN10、PIN6、PIN11、PIN15が接地されます(この時点で他のCOLUMNピンがHIGH)
t = 1m SECで、PIN14はHIGHに設定され(この時点で他のROWピンはLOW)、この時点でPIN13、PIN3、PIN4、PIN10、PIN6、PIN11、PIN15、PIN16は接地されます(他のCOLUMNピンはこの時点でHIGHです) )
t = 2m SECで、PIN08がHIGHに設定され(この時点で他のROWピンがLOW)、この時点でPIN13、PIN3、PIN15、PIN16が接地されます(この時点で他のCOLUMNピンがHIGH)
t = 3m SECで、PIN12がHIGHに設定され(この時点で他のROWピンがLOW)、この時点でPIN13、PIN3、PIN15、PIN16が接地されます(この時点で他のCOLUMNピンがHIGH)
t = 4m SECで、PIN01がHIGHに設定され(この時点で他のROWピンがLOW)、この時点でPIN13、PIN3、PIN4、PIN10、PIN6、PIN11、PIN15、PIN16が接地されます(他のCOLUMNピンはこの時点でHIGHです) )
t = 5m SECで、PIN07がHIGHに設定され(この時点で他のROWピンがLOW)、この時点でPIN13、PIN3、PIN4、PIN10、PIN6、PIN11、PIN15、PIN16が接地されます(他のCOLUMNピンはこの時点でHIGHです) )
t = 6m SECで、PIN02がHIGHに設定され(この時点で他のROWピンがLOW)、この時点でPIN13、PIN3、PIN15、PIN16が接地されます(この時点で他のCOLUMNピンがHIGH)
t = 7m SECで、PIN05がHIGHに設定され(この時点で他のROWピンがLOW)、この時点でPIN13、PIN3、PIN15、PIN16が接地されます(この時点で他のCOLUMNピンがHIGH)
この速度では、図に示すように、ディスプレイに「A」の文字が連続して表示されます。
RaspberryPiを使用してLEDマトリックスに文字を表示するためのPythonプログラムを以下に示します。プログラムはコメントでよく説明されています。各文字のポート値はプログラムで指定されます。指定されたプログラムの「forループ」の 「pinp」 値を変更するだけで、必要な文字を表示できます。以下のデモビデオも確認してください。