[電子工作]電子工作のパーツ

電子工作を行う時によく使うパーツについて、注意点をまとめてみました。

 

 1.ILI9341採用240x320、18bit色、液晶パネル

    ILI9341を採用した液晶パネルは、各社から様々なサイズのものが出ています。

    インタフェースに、パラレルとSPIの2種類がありますが、最近のマイコンに接続する

    場合、絶対にSPIをお勧めします。使用する端子が少なく、高速です。

    SPIであれば、基本的には、ピンアサインだけ変更すれば、ライブラリに互換性があります。

    Arduino IDEのライブラリで多数提供されていますので、お好きなものをお使い下さい。

    私のお勧めは次の通り。(上記の方法で、ライブラリを検索し、ダウンロードして下さい。)

     ・Adafruit ILI9341 : ILI9341の初期化、制御ライブラリ。

     ・Adafruit GFX Library : Adafruitのグラフィックライブラリ。LCD、OLEDなど様々なパネルで

                      使えます。

    注意.プログラムを実行すると妙にフリッカーしていて焼き付きを起こします。明らかにVCOMが

        ずれているのですが、なんと、Adafruit ILI9341の初期化でVCOMをわざとずらしているようです。

        わざとフリッカーさせて視野角を改善しているのだと思います。(この原理は液晶の特性による

        もので、ここには書きません。)しかし焼き付きは問題だし、私はフリッカーが苦手なので、

        修正方法を書いておきます。

        「Adafruit_ILI9341.cpp」の次の行の0x86を0x80に変更します。これで、VCOMが標準に戻ります。

          ILI9341_VMCTR2 , 1, 0x86,  → ILI9341_VMCTR2 , 1, 0x80,

    注意.この液晶パネルを横長で見ると、左右の目で見え方が異なり、目が疲れます。これは、長手方向

        の視野角が悪いのが原因です。短辺方向は視野角が良いので、極力、縦長で使いましょう。

    注意.+3.3Vのレギュレータが搭載されているパネルでは、VCCに+5Vを接続する必要があります。

        VCCに+3.3Vを接続すると、動作が不安定になったり、SPIを高速にすると表示できない場合があります。

  

 2.STMPE610タッチパネル

    抵抗被膜式タッチパネルなので、爪やつまようじのようなものでも操作できます。

    でも、静電方式より力が必要で、精度も悪い感じです。また、1点しか検出できないと思われます。

    私のお勧めは次の通り。(上記の方法で、ライブラリを検索し、ダウンロードして下さい。)

     ・Adafruit STMPE610 : Adafruitのライブラリ。使用上の注意は、次の通り。

       検出される座標がずれている場合は、次の値を変更ください。

        #define TS_MINX 150

        #define TS_MINY 130

        #define TS_MAXX 3800

        #define TS_MAXY 4000

       タッチされた座標を1点だけ読み出したい場合は、touchedコマンドを使って、次のようにする

       必要があります。

        void loop(){

         if (ts.touched()){ // タッチされたのを検出

         if (ts.bufferEmpty()) { // タッチされていても座標が入っていない場合は抜ける

         delay(50);

         return;

         }

         }else{

         ts.getPoint(); // タッチされていなくても、座標データが残っている場合があるので、読み捨てる

         delay(50);

         return;

         }

         p = ts.getPoint(); // タッチされた座標の読み出し

         p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.height());

         p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.width());

         }

 

 3.ADS7843、XPT2046、HR2046等タッチパネル

    STMPE610タッチパネルと同じく抵抗被膜式タッチパネルなので、爪やつまようじのようなものでも

    操作できます。

    ADS7843、XPE2046、HR2046共に単なるSPIインタフェースのA/Dコンバータです。でも、下記の

    ライブラリを使用することで、STMPE610タッチパネルと同様に使えました。(上記の方法で、

    ライブラリを検索し、ダウンロードして下さい。)

     ・PaulStoffregen XPT2046_Touchscreen : Adafruitのライブラリと互換性のあるライブラリ

 

 4.SDカードの読み出し

    Adafruit製2.8型TFTタッチシールドには、Micro SDカードスロットが付いているので、そのライブラリを

    使うのが簡単でしょう。

    ESP32でSDカードを使用する時は、こちらを参照ください。

     ・Adafruit ImageReader Library : MicroSDカードのBMPファイルを読み出し、液晶パネルに

                           表示するサンプル。(但し、ファイル名は、英数字8文字まで)

    注意.自作する場合、SDカードの電源及びI/Oの電圧は+3.3Vですので、NucleやESP32なら直接接続可能

       ですが、Arduino UNOの場合はレベル変換が必要です。

    注意.SDカードと他のデバイスでSPI端子を共有すると、途中でモードや速度を切り替える必要

       があり、予期せぬエラーが発生したりして苦労しました。SDモードはもちろんですが、SPIモード

       でも、SDカードには専用の端子を割り振ることを推奨致します。

    注意.SPIモードで使用する場合、MISOはプルアップする必要があります。(CSもプルアップする方がベター)

 

 5.SSD1306搭載OLED

    SSD1306を搭載した白色又は青色の有機EL(OLED)パネルで、I2C又はSPI接続で、色と

    解像度の異なる製品が各社から発売されています。

    私のお勧めは次の通り。(上記の方法で、ライブラリを検索し、ダウンロードして下さい。)

     ・Adafruit SSD1306 : SSD1306の初期化、制御ライブラリ。

     ・Adafruit GFX Library : Adafruitのグラフィックライブラリ。

      I2Cの場合、パネルによってアドレスが異なるので、0x3C又は0x3Dを書き換えて下さい。

        display.begin(SSD1306_SWITCHCAPVCC, 0x3C); : 私が買ったパネルはこちら

        display.begin(SSD1306_SWITCHCAPVCC, 0x3D); : Adafruit社製のシールドはこちら

  

 

  6.ILI9163採用128x160、16bit色、液晶パネル

     1.77型、128x160のカラーLCDパネルが安価に売られていたのですが、AdafruitのGFXと互換性が

     あって表示できるライブラリがありませんでしたので、自作してみました。

     ・ILI9163 : Adafruit GFX Libraryで使えるILI9163ライブラリです。ここからダウンロードして展開し、

             上記の方法で手でライブラリに追加ください。

     ・Adafruit GFX Library : Adafruitのグラフィックライブラリ。

    注意.この液晶パネルも横長で見ると、左右の目で見え方が異なり、目が疲れます。これは、長手方向

        の視野角が悪いのが原因です。短辺方向は視野角が良いので、極力、縦長で使いましょう。

    注意.秋月電子通商でATM0177B3Aと呼ばれるLCDパネルが売られていますが、電源及びI/Oが

        +3.3Vですので、Nucleoとは直接接続可能ですが、Arduino UNOに接続する場合はレベル変換

        が必要です。また、フルカラーで動画表示するためには40,960ByteのRAMが必要ですので、

        80KB以上のメモリを搭載したNucleoESP32を推奨します。(下記の写真は、Nucleo STM32L476RGと

        TrueSTUDIOで作成したゲームの場面。Arduino UNOではこのソフトは動作しません。)

  

 

  7.ST7735R採用128x160、16bit色、液晶パネル

     基板にKMR-1.8と書かれた1.77型、128x160のカラーLCDパネルが安価に売られていました。

     私が作成したILI9163のライブラリで表示は可能ですが、VCOMが不安定なようで映像によっては

     ノイズが表示されるし、SPIのレートは12MHzが上限でしたので、お勧めしません。

     aitendoで買った更に安価なパネル(M018C7735SPI)は、ノイズは無いし、SPIのレートも40MHz

     でも問題ありませんでした。但し、私が作成したILI9163のライブラリでは、R/Bが逆になりますので、

     setRotationの設定を書き換える必要があります。

     ・ILI9136 : Adafruit GFX Libraryで使えるILI9136ライブラリです。ここからダウンロードして展開し、

             上記の方法で手でライブラリに追加ください。

     ・Adafruit GFX Library : Adafruitのグラフィックライブラリ。

    注意.この液晶パネルも横長で見ると、左右の目で見え方が異なり、目が疲れます。これは、長手方向

        の視野角が悪いのが原因です。短辺方向は視野角が良いので、極力、縦長で使いましょう。

    注意.高速なマイコンを使う場合、SPIの速度をディフォルト(40MHz程度)で使用すると、正常に表示

        できない製品があります。その場合、初期化する時、

          ILI9163 tft = ILI9163(TFT_CS, TFT_DC, TFT_RST);

          tft.begin(4000000);

        のように、begin(SPIレート)で、SPIのレートを、4MHz〜16MHzに落として下さい。

    注意.製品によっては、R/Bのフィルタや、上下、左右が逆になる場合があります。

        その場合は、ILI9163::setRotation関数のmの値を変更して下さい。具体的には、次のように

        MADCTL_RGB又はMADCTL_BGRで色を合わせ、MADCTL_MXとMADCTL_MYとMADCTL_MV

        の組み合わせで向きを合わせます。

          m = (MADCTL_RGB);

          m = (MADCTL_BGR);

          m = (MADCTL_MX | MADCTL_BGR);

          m = (MADCTL_MX | MADCTL_MY | MADCTL_BGR);

          m = (MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR);

          などを試してみて、正しく表示できる組み合わせを見つけて下さい。

  

 

Arduinoの紹介はこちら。 

 

「STM32の性能を発揮するには?」はこちら

 

ESP32の詳細はこちら。