ブログパーツUL5

自作したArduino用ブートローダー書き込み装置を改造

 ATmega328Pを乾電池2本の3V程度の低電圧で動作させたいが、電圧が下がるので16MHzの発振回路ではなく8MHzの発振回路にする必要があります。そこで、自作したArduino用ブートローダー書き込み装置も8MHzの発振回路に切り替わるに改造することにしました。

関連記事
Arduino用のブートローダー書き込み装置を自作

 改造したArduino用ブートローダー書き込み装置


 水晶発振子をスライドSWで切り換えられるように改造しました。

 改良した書き込み装置で水晶発振子を8MHzに切り替えて、書き込むATmega328PをセットしてArduino IDEでツール→ブートローダーを書き込む、で書き込みます。

 次に、3.3Vで動作させたいスケッチを読み込んで、ツール→ボード→Arduino Pro or Pro mini を選択し、ツール→プロセッサ→ATmega328p(3.3V,8MHz)を選択してから、スケッチ→書込装置を使って書き込む で実行する。

 これで低消費電力にすることができます。但し、ディレータイムなどが2倍になりますからどうしても問題であれば、その時はスケッチの修正が必要します。
0

    Arduino UNO対応のタッチパネル(SmartGPU2)

     Arduino UNO対応したタッチパネルを探していたところ、VIZIC社のSmartGPU2というパネルが見つかりました。まだ、日本では入手できないようですが、LCDパネルの基板とArduino UNOのシールド基板から構成されており、Arduinoのライブラリーもあるようで期待が持てそうである。

     LCDは320×240で解像度はあまり高くはないですが、コントローラとして使用するには十分なように思います。詳細は、SmartGPU 2を参照ください。価格は、$89.00 USDとちょっと高いかもしれません。

    SmartGPU 2
    SmartGPU2

     オシロスコープにも(?)

     これができるのであれば、1つ購入してもいいかも。




    0

      Bluetooth部品(HC-06)とスマホの通信

       Bluetooth部品(HC-06)とスマホの通信できることは確認できたのですが、コマンドを打つのもスマートではないのでアプリを開発しなければならなくなりそうです。しかし、アプリ開発は全くやったことが無くハードルが高すぎます。一応、図書館から入門版の本を借りてきましたが、開発環境もまったくないのでどうしようかと思います。

       そこで、Arduino bluetooth controllerというのがあり、ゲーム風のインターフェイスがありテストでは使用できるかもしれません。

       テスト中
      テスト中
      いづれ自分で開発できればいいのですが、難しそう。

       こんなGUIができれば最高なのですが・・・
      GUI
      0

        Bluetooth部品(HC-06)で接続する方法

         Arduino UNOでBluetooth部品(HC-06)およびスマとペアリングしてうまく接続する方法には、キーポイントがあります。忘れてもいいように自分の記録としてまとめてみました。
         なお、やっている間にわかったことですが、HC-06は子機(スレーブ)には使用できますが、親機(マスター)には使用できません。親機に使用する場合には、子機/親機兼用(マスター/スレーブ)のHC-05を使用することになる。

        HC-06(表面と裏面)
        HC-06

        接続キーポイント
        ・Arduino UNOで接続する端子は、D0(RX)とD1(TX)は回避する
         →この端子はArduino UNOにスケッチを書き込む端子と共有している
          スケッチ書込み時に外せばよい。面倒なのでD2、D3を指定する
        ・HC-06の供給電源(Vcc)は3.6V〜5Vで問題ない
         →従って、3.3Vでは電圧不足となり、5Vに接続する
        ・HC-06のRXD,TXDは3.3V系の入出力となる
         →3.3V/5Vのレベルシフト回路が必要ですが、簡易的な対象で十分
          出力(TXD)はそのまま接続で、入力系(RXD)は抵抗分割する
          Arduinoの出力電圧を1,8KΩ+3.3KΩで3.3Vレベルにして入力する

        接続の確認方法
        1.まず、最初にArduino UNOでBluetooth部品(HC-06)の接続確認する。
         ・Bluetooth部品(HC-06)はペアリングさせない状態(LED点滅)で確認する。
         ・下記のテストスケッチを書込んで確認する。

        //----------------- Test Program 1 ----------------------------
        // HC-06 の TXDは、Arduino の Pin2(D2)に接続する
        // HC-06 の RXDは、Arduino の Pin3(D3)に抵抗分割で接続する
        // HC-05 の TX は、Arduino の Pin10(D10)に接続する
        // HC-05 の RX は、Arduino の Pin(D11)に抵抗分割で接続する
        //-------------------------------------------------------------
        #include
        SoftwareSerial BTserial(2, 3); // HC-06 : RX | TX
        //SoftwareSerial BTserial(10, 11); // HC-05 : RX | TX

        void setup()
        {
        // PCとArduinoのシリアル速度は、9600bps
        Serial.begin(9600);
        Serial.println("AT コマンド入力 :");
        // HC-06 のデフォルトでのシリアル速度は、9600bps
        BTserial.begin(9600);
        }
        void loop()
        {
        // HC-06からATコマンドを読み、Arduino IDEのシリアルモニタに通信する
        if (BTserial.available())
        {
        Serial.write(BTserial.read());
        }

        // Arduino IDEのシリアルモニタから送信データを読み、HC-06に通信する
        if (Serial.available())
        {
        BTserial.write(Serial.read());
        }
        }
        //--------------------------- End -----------------------------------

        ・起動すると、シリアルモニタに「AT コマンド入力 :」が表示される
        ・「AT」を送信すると、「OK」と表示されれば接続はOKです
        ・Bluetooth部品(HC-06)に対するATコマンドによる設定や確認はこの状態で行なう
        ・HC-06のATコマンドは子機専用なので、HC-05よりもかなり少ない
         
        原文ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
        HC-06 AT commands are limited, all I could find are given here.
        AT : check the connection
        AT+NAME: Change name. No space between name and command.
        AT+BAUD: change baud rate, x is baud rate code, no space between command and code.
        AT+PIN: change pin, xxxx is the pin, again, no space.
        AT+VERSION

        change baud rate, type AT+BAUDX, where X=1 to 9.
        1 set to 1200bps
        2 set to 2400bps
        3 set to 4800bps
        4 set to 9600bps (Default)
        5 set to 19200bps
        6 set to 38400bps
        7 set to 57600bps
        8 set to 115200bps
        ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

        2.Bluetooth部品(HC-06)とスマホとの接続確認
        ・まずスマホのBluetooth Terminalをインストールする
         →私は、Serial Bluetooth terminalというアプリが使い勝手がよかった。
        ・ペアリングすべきBluetooth機器を検索する。ここでは「HC-06」と表示される
        ・同じ機器がある場合は、1.の状態で「AT+NAME」コマンドを使って変更する
         (ex. AT+NAMEHC-06_1
        ・ペアリング機器を指定して、デフォルトのPINである「1234」を入力する
        ・PINを変更したい場合は、1.の状態で「AT+PIN」コマンドを使って変更する
         (ex. AT+PIN4321
        ・シリアル通信を変更する場合、1.の状態で「AT+BAND」コマンドを使って変更する
         (ex. AT+BAND6
        ・ペアリングが完了すると、Bluetooth部品(HC-06)のLEDが点滅から点灯に変わる
        ・この状態で、下記のテストスケッチをArduinoに書込む。

        //----------------- Test Program 2 ----------------------------
        // HC-06を繋いだArduinoとスマホリアルモニタを使った通信用スケッチ
        // ボーレートは 9600
        // NL+CR をコマンドに追加しない
        //-------------------------------------------------------------
        #include
        SoftwareSerial BTserial(2, 3); // RX | TX

        void setup()
        {
        BTserial(9600);
        }
        char a;
        void loop()
        {
        if (BTserial.available()) {
        a = (BTserial.read());
        if (a == '1') {
        BTserial.println("HELLO <Bluetooth> WORLD!");
        }
        if (a == '2') {
        BTserial.println("2 is comming.");
        }
        }
        }
        //--------------------------------- Eed -------------------------------

         スマホのBluetooth Terminalアプリを起動して、ペアリング接続したの後に「1」を送信すると、「HELLO<Bluetooth>WORLD」と返信され、「2」と送信すると「2 is comming.」と返信されます。これでBluetoothの接続確認が出来たことになります。
        0

          Arduinoで温度、湿度、気圧の製作

           Arduinoで温度、湿度、気圧の測定ができたので、正式に製作することにしました。問題はケースですが、あまりコストを掛けたくいないので、透明なアクリル板の余り板がありこれを利用することにしました。アクリル板を曲げるのが初めてなのであまりうまく出来ず温度コントロールを失敗してしまいました。折り曲げ部分を隠すことで利用できそうであり良しとしました。

           簡易ケース(?)の出来上がり
          ケース前
          ケース後
           これに、Arduinoのブートローダーを書き込んで専用基板を製作して取り付ける予定でした。しかし、LCDへの接続配線が多く見栄えが悪いので、LCDの裏に専用基板を取り付けるように変更しました。電源はバッテリーを辞めて、USB端子の電源から取るようにUSB端子を取り付けました。PCのUSB端子から電源供給できる方が使い勝手がいいと考えます(データ通信はできません)。

           配線が終わってセンサーの端子表示が見えなくて配線を間違えていることに気づかず電源投入してしまい壊れてしまい、安いとはいえセンサーを再購入という痛い出費となりました。

           別のセンサー(BME280で湿度のないもの)を取り付けて動作テスト

           センサーとして湿度の計測値がないためエラー表示していますが、一応これで正常動作していることが確認できたので完成です。センサーを入手できしだい交換して完了です。ちょっと格好いいでしょ。

           センサーを正規版にして完成!
          正規版
          0

            Arduinoで温度、湿度、気圧を測定器を試作

             スケールスピードメーターで試作したものをバラバラにして再利用してみました。購入したのは温度、湿度、気圧の安価なBME280センサーだけです。Arduino unoでBME280センサーを使用して測定できるように製作しているサイトを探して一部改良して動作させてみました。

             BMP280センサー
            BMP280センサー

             温度、湿度、気圧を測定器を試作
            試作した測定器

             動作している動画
             
             快適なのでブルーのLEDが点灯して、25℃を越えているので、夏モードになってLCDには不快指数が表示されています。

             詳細は、DeathMarch.netというサイトを参照ください。
            Arduinoでスマートな温湿度+気圧計を作ろう!をクリックしてください。ここでもI2Cのアドレスをスキャンして合っているかの確認をしました。
            0

              ArduinoでI2Cを利用しようと安価なI2CのLCDを購入

               Arduino UNOでI2CのLCDを利用しよう650円という超安価な並行輸入品を購入しました。納期は中国からの直送で10日ほど掛かりますが、総量は無料なのでまたポチッとしてしまいました。なぜ、これを選んだかと言うと電源が5Vで使用できるので使い勝手がいいのです。
               普通のI2CのLCDは3.3Vなので、レベルシフト回路が必要となり面倒なのですが、その点、このLCDは5Vで接続できるので大変便なのです。何も考えずにピンに挿せば表示できるのですから。

               平行輸入品なのでこれだけ(説明書はありません)
              I2CのLCD

               無事、届いたので、基礎からのIoT入門サイトの1602A I2C アダプターの利用を参考に接続して動かしてみました。Arduino UNO接続との接続は、4線のみと少ないのがいいのです。

               Arduino UNO側 I2CのLCD側
               5V  −−−− Vcc
               GND −−−− GND
               A4  −−−− SDA
               A5  −−−− SCL

               接続図
              I2CのLCD接続


               問題発生で、下記のように表示されて何も出てきません。(電源だけ繋いだ状態と同じ)
              I2CのLCD

               そこで、調べていたらI2Cのアドレスをスキャンしてくれるスケッチがosoyooというサイトで見つかりました。それが、16×2 I2C LCD プロジェクトというサイトで神様のように思えました。I2Cのアドレスを探すことが出来き、シリアル通信を9600bpsにしてシリアルモニターに表示されるので、まず、それでアドレスを調べます。

               無事にI2Cのアドレスが分かり表示できるようになった
              I2CのLCD

               なんと、0x27でなく0x3Fでした。並行輸入品なので何の説明書もありませんから仕方ないですが、アドレスが分からないときにこのアドレスをスキャンするスケッチは有効です。
              0

                Arduino UNOの書込装置が完成

                 Arduino UNOのCPUソケットは安物なので耐久性がなく、スケッチ(プログラムのこと)を何度も書き込んでだりするのでその度にCPUを抜き差ししていたら壊れる恐れがあります。折角、自作したブートローダー書込み基板があるのですから、新規に書込装置を製作しなくても安くArduino UNOが入手できれば、専用の書込装置が出来ます。ヤフオクで純正品のArduino UNOを落札できて入手できました。

                 入手したArduino UNOに自作したブートローダー書込み基板を差し込みます。書込みソフトのArduinoISPのメニュの「ファイル」の「スケッチ例」から「11.ArduinoISP」の「ArduinoISP]を読み込みます。それをArduino UNOに書き込みます。これで出来上がりで手間要らずでしょ。

                 完成したArduino専用書込装置(先日の写真と変わらず?)
                Arduino専用書込装置
                 下のArduino UNOがArduinoISPを書き込んだ状態で書込装置の専用になっただけです。

                 この書込装置でスケッチ(プログラムのこと)を書込む場合には、書込みソフトのArduinoISPのメニュの「スケッチ」の「書込装置を使って書き込む」をクリックして書き込みます。

                画面
                0

                  Arduino用のブートローダー書き込み装置を自作

                   Arduinoのブートローダーを自作にしました。下記のサイトを参考にしたので詳細はそちらを参照ください。回路図もそちらで提供しています。

                  Arduino Uno用ブートローダライタシールドキットサポートページ


                   完成したらまずArduino UNOだけを接続して、Arduino IDEのファイルからスケッチ例の中から「11.ArduinoISP」を選択してArduinoISPを読み込みます。それをArduino UNOに書き込みます。ArduinoISPのスケッチが正常に書き込めると、HeartbeatのLEDが明るくなったり暗くなったりを繰り返します。

                   完成したブートローダー書き込み装置
                  ブートローダー書き込み装置
                   しなぷすのハード製作記のサイトに参照にした回路図(PDF))があります。

                   書き込みが完了した後に、製作したブートローダー書き込み装置を差し込んで、生のATmega328PをZIFソケットにセットして手順どおりに、ブートローダーを書き込みます。その後に書き込むスケッチを開いて、スケッチの「書込み装置を使って書込む」でスケッチを書込む。書き込み中はProgramのLEDが点灯して、エラーがあるとErrorのLEDが点灯します。

                   これでいつでもCPU単独で起動させることができます。但し、今回は16MHzの発振子なので5V対応で、3.3V対応にするには8MHzの発振子にする必要があります。動作確認できたので、ICSPのコネクタを設けて結線して完了しました。

                  0

                    LCD Keypad Shieidが超安価で、ついポッチと

                     Arduino UNO本体はTポイントが貯まったので、それでもう1台を購入しました。また、AmazonでLCD Keypad Shieidが400円を切る超安価(送料込み。税込み)で売られていたので、ついポッチと押してしました。1週間後に中国から直送されてきました。

                    やはり問題点が


                     中国製のためピンヘダが傾いて半田付けされておりソケットにうまく入りづらいじょうったいでした。出荷検査で不合格になった製品かもしれません。ソケットにピンを刺して半田こてを当てて傾きを修正しました。

                     LCD Keypad Shieidのテストプログラムを動作せてみると、キーのLEFT、SELECTの表示がDOWN。LEFTになるということテストプログラムを調べてみました。

                     キーを検出する端子のレベル調整が必要でした。
                    // For V1.1 us this threshold
                    if (adc_key_in < 50) return btnRIGHT;
                    if (adc_key_in < 250) return btnUP;
                    if (adc_key_in < 450) return btnDOWN;
                    if (adc_key_in < 650) return btnLEFT;
                    if (adc_key_in < 850) return btnSELECT;

                    の設定で問題で、上記をコメント文にして下記のコメント文を外して有効にします。
                    // For V1.0 comment the other threshold and use the one below:
                    /*
                    if (adc_key_in < 50) return btnRIGHT;
                    if (adc_key_in < 195) return btnUP;
                    if (adc_key_in < 380) return btnDOWN;
                    if (adc_key_in < 555) return btnLEFT;
                    if (adc_key_in < 790) return btnSELECT;
                    */
                    (US規格になっておらず不合格品になったのでしょう。推測です。)

                     問題が解決したLCD Keypad Shieidをテスト
                    LCD Keypad Shieid
                     写真では表示が見にくいですが、正常に表示しています。
                    0


                      カレンダ

                            1
                      2345678
                      9101112131415
                      16171819202122
                      23242526272829
                      3031     
                      << August 2020 >>