jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

2023年01月

愛知タワー風速値表示追加その5

ArduinoNanoでTFT液晶表示のスケルトンまでできたので、実際に7ビットのポート入力のデコード部をスケッチしました。スケッチはオリジナルのwebスケッチに下記のデコードの部分を付け足しています。
オリジナルからの変更追加箇所です。

・TFT液晶display の表記とRSTポートの変更D8→D15(D2〜D8)を連続で並べる為の変更)
#define TFT_SCLK  13
#define TFT_MLSI  11
#define TFT_CS  10
#define TFT_DC  9
 //#define TFT_RST 8
#define TFT_RST 14

int16_t windvalue;

char ce[6];

・シリアルボーレートの変更(9600 →115200)
ポート定義部追加
#define WIND0 2 //D2 binary 1   (0,1)
#define WIND1 3 //D3 binary 2   (0,1)
#define WIND2 4 //D4 binary 4   (0,1)
#define WIND3 5 //D5 binary 8   (0,1)
#define WIND4 6 //D6 binary 16  (0,1)
#define WIND5 7 //D7 binary 32  (0,1)
#define WIND6 8 //D8 binary 64  (0,1)


void setup(void) {
   Serial.begin(115200);
   pinMode(pinLed,OUTPUT);

   //Port D2-D8 input setting (0-127)
   pinMode(WIND0, INPUT);  //D2 Port normally LOW
   pinMode(WIND1, INPUT);  //D3 Port normally LOW
   pinMode(WIND2, INPUT);  //D4 Port normally LOW
   pinMode(WIND3, INPUT);  //D5 Port normally LOW
   pinMode(WIND4, INPUT);  //D6 Port normally LOW
   pinMode(WIND5, INPUT);  //D7 Port normally LOW
   pinMode(WIND6, INPUT);  //D8 Port normally LOW

省略

void loop() {
    // put your main code here, to run repeatedly:
   if(((((((digitalRead(WIND0)==LOW)
        and(digitalRead(WIND1)==LOW)
        and(digitalRead(WIND2)==LOW)
        and(digitalRead(WIND3)==LOW)
        and(digitalRead(WIND4)==LOW)
        and(digitalRead(WIND5)==LOW)
        and(digitalRead(WIND6)==LOW)))))))
    {
      windvalue = 0;   
    }
    else
    {
    if(((((((digitalRead(WIND0)==HIGH)
          and(digitalRead(WIND1)==LOW)
          and(digitalRead(WIND2)==LOW)
          and(digitalRead(WIND3)==LOW)
          and(digitalRead(WIND4)==LOW)
          and(digitalRead(WIND5)==LOW)
          and(digitalRead(WIND6)==LOW)))))))
      {
        windvalue = 1; 
      }
    }
    if(((((((digitalRead(WIND0)==LOW)
         and(digitalRead(WIND1)==HIGH)
         and(digitalRead(WIND2)==LOW)
         and(digitalRead(WIND3)==LOW)
         and(digitalRead(WIND4)==LOW)
         and(digitalRead(WIND5)==LOW)
         and(digitalRead(WIND6)==LOW)))))))
    {
      windvalue = 2;      
    }
省略(延々とwindvalue=127まで同じスケッチでLOW,HIGH設定)

 
  tft.setTextColor(ST7735_YELLOW);
  tft.setCursor (30, 95);

   //tft.print(windvalue);
   //tft.print ("038");
  sprintf(ce,"%3d",windvalue);
  tft.print(ce);
  delay(150);


  tft.setTextSize(4);
  tft.setCursor(30,95);
  tft.setTextColor(ST7735_BLACK);
  tft.print(ce);

   //tft.print("   ");
  delay(10);
}

■デコード部詳細
バイナリー出力を受ける入力ポート(D0〜D8)のデコード部は0〜127までのカウンタ出力の瞬間値7ビット入力値を判断し表示用カウント変数のwindvalueにカウンタ値のデコード値を入れるスケッチです。

■TFT液晶Display表示部詳細
フォント色を黄色、サイズ4に設定しchar変数ce をsprintf書式で3桁の数値の右詰めでtft.setCursorでの設定位置にデコードカウント値を表示します。表示後は時間をおいて、フォント色、黒色、サイズ4で同じ位置に再度ceを上書きして表示を消しています。これをしないと文字が残りどんどん重なり黄色の■になります。

実際のカウントデコード値表示動画
カウント値が上がっていくLED発光ダイオードとTFT液晶Displayのカウント表示です。


入力信号D2ポート波形
単に入力ポートに信号が来てるかの確認の為、撮ったものです。


カウンタでの信号パルス(OSCからの信号)でスケルトンで作製しTFT液晶に仮表示してた”038"固定数値をバイナリーデコード値に変えて表示することができました。

表示までは上手くこぎつけましたが、若干気になっている事があります。
現状の入力値に対しての表示部との時間関係で周波数が上がった時(風速が早くなった時)に0から順番に表示されず、数値が飛んでしまう現象があります。時間のデレー設定が固定なので、全部の風速スピードで表示出来るタイミングでない事によるものです。

次の画像の表示に変更して対策を行なっています。どのように対応を検討してるかは次回に!
表示変更スケッチ

つづく?

愛知タワー風速値表示追加その4

風速値表示ユニットからの信号線をCMOS IC 4024 バイナリーリップルカウンタでカウント値をバイナリーに変換した出力7ビットをデコードし表示する1.8inch TFT液晶を使いたかった為、CPUとしてESP32DevKitCを予定して回路図を作製しました。ただ表示だけなら小型のArduinoNANOでもいいのではと思い、並行して1.8inch TFT液晶ディスプレーを繫いでの表示が上手く出来るか確認してみることにしました。ネット情報を探ると結構Arduino系でのTFT液晶ディスプレーの表示は可能の様です。ArduinoNANOを使った1.8inch TFT液晶ディスプレーのサンプルがありました。

動作確認した所、色の設定が上手くありません。スケッチを最初コピペした所、液晶表時上の文字化けがありましたが、スケッチを一端消キーボードから打ち直しでOKとなりました。また、位置ずれもあり、直接ライブラリの書き換えで対応出来る情報より変更対応して位置ずれも治りました。

■位置ずれ修正
ライブラリはAdafruit_ST7735_and_ST7789_Library で、その中のAdafruit_ST7735.cpp ファイルの下記2箇所です。

void Adafruit_ST7735::initR(uint8_t options) {
  commonInit(Rcmd1);
  if (options == INITR_GREENTAB) {
    displayInit(Rcmd2green);
    _colstart = 0;//2->0
    _rowstart = 0;//1->0

  } else if ((options == INITR_144GREENTAB) || (options == INITR_HALLOWING)) {

■色修正
他、RGBカラーでなくBGRカラーの為、数カ所色の入れ替わりとオレンジ色が出ない事象もありました。入れ替わりは単に適当なカラー設定値で何回か直接色を設定し目的の色になった事を確認した上で、直接Adafruit_ST77xx.h ファイルを書き換え手直しし、設定カラー通りに色表示できるようにしました。

// Some ready-made 16-bit ('565') color settings:
#define ST77XX_BLACK 0x0000 //OK
#define ST77XX_WHITE 0xFFFF //OK
#define ST77XX_RED 0x001F //ORIGIN BLUE:0xF800
#define ST77XX_GREEN 0x07E0 //LIME
#define ST77XX_BLUE 0xF800 //ORIGIN RED:0x001F
#define ST77XX_CYAN 0xFFE0 //ORIGIN YELLOW:0x07FF

#define ST77XX_MAGENTA 0xF81F //OK
#define ST77XX_YELLOW 0x07FF //ORIGIN CYAN:0xFFE0
#define ST77XX_ORANGE 0x0BFF //SET MAKE 0x0BFF ORANGE ORIGIN 0xFC00

オレンジ色は手探りで色確認です。他の順当な方法もあるようでしたが、設定通りに色が出ればそれでOKとしました。力ずくです。このスケッチだけで、他では通用しません。Hi!
書き換えたライブラリファイルは元の状態に後で戻す必要もあります。他のスケッチで使う場合不具合となります。

設定通りの色がちゃんと表示出来る様になったので、早速、設定した数値に風速がなった状態を想定して数値38を表示させてみました。

ArduinoNANO-TFT-1

ArduinoNANO-TFT-2

ArduinoNANO-TFT-3

風速バイナリーデータ7ビット分のポートを割り当てて、デコードスケッチをコーディングですが、まずはArduinoNanoの端子情報を準備しました。1.8inch TFT液晶Displayで使ったポート以外から使用できる7ポート分を選びます。

ArduinoNano−PORT


つづく?


愛知タワー風速値表示追加その3

愛知タワー付属の風速計へつながっているインプット情報のカウント入力、リセット入力、電源、COMMONの各端子からCMOS IC 4024の7Stage Binary Ripple Counterへのカウント入力と4024の論理にあわせる為、リセット信号は1石のスィッチングトランジスタの反転回路を通して繋ぎます。回路図とパターン作製ができたので、このバイナリー出力の7ビットをESP32DevKitCに繫ぐインターフェース部を別基板で作製するための回路図を作製しました。スケッチは回路図での端子を決めてから検討してゆく事になります。単に入力の7ビットバイナリーデータのデコードです。単純に必要なものは入力の7ビットを繋ぐポート、電源、1.8inch TFT液晶ディスプレーを繋ぐポートがあれば事足ります。今は使いませんが、余分なシリアルポート端子も回路には入れてあります。

1.8 inch TFT液晶ディスプレーは、今まで使った実績がある物なので、過去の他の実績のある回路と同じ端子接続で使うことができます。スケッチ上のTFT設定は過去使ったものがそのまま使える利点があります。(検討が不要)実は回路図のTFT液晶部分や電源、シリアル端子部は前の他の回路をそのままそっくり流用です。使わないところを消して、必要な箇所を部品を置いて繫いでゆくやり方です。
AnemometerValueDisplay

カウンターからの7ビットの出力を受ける入力ポートも、過去同じ様な用途で使った実績がありますから、安心してスケッチできます。Hi!
回路図も作製できたので、ついでにパターンも作製してしまいました。回路が単純な引き回しなので、100X80mm基板は、スカスカです。

AnemometerValueDisplayPCB

今回は2枚基板の接続の合理的な端子の接続は全く考慮していません。基板を2階建てにした設計も必要かもしれません。今は検討段階での試作です。

さてスケッチを開始しましょうか?

つづく?

愛知タワー風速値表示追加その2

風速値表示回路のパターン作製でのジャンパー処理が必要でしたので、回路図を修正し若干のパターン修正を行ないました。当初LEDはピンヘッドジャックに差す予定でパターンを作製していましたが、ジャックを省き、確認時使うパターンということで入れてあります。確認時のみ使うだけで良く、風速値表示はESP32DevKitCに繋ぐTFTカラー液晶で数値として表示されるため特に問題がなければ部品としては取り付けしない予定です。

修正回路図:どうしても繋がらない箇所をジャンパーワイヤーを使いパターン
を修正しました。
修正パターン

※ちょっとしたeagle操作!
当初CMOSの電源とグランドの接続パターンがピン配線できなかったのですが、ちゃんと機能がありました。今までは、専用のICは使わないでソケットで配線していました。ないわけがないのはわかっていましたが、探すのが面倒でソケットで足りていました。Hi!知ってしまえば、やはり専用のICを使うと便利です。(ピンを調べなくても、回路図に出てきます。)
invoke
invokeでICをクリックして電源を選択すると回路図に表示されランドとしてパターン配線出来る様になりました。

実際に修正した最終ボトムパターンです。100X80mmの基板サイズに十分入ります。
修正パターンボトム

切削待ち基板が既に1枚あるので、コレを合わせて2枚になりました。
EAGLE CADは最初のparts選びが一番最初に悩むところかと思います。習うより慣れろという言葉が本当に当てはまると思います。部品のパーツも秋月の部品もありますからとても助かります。ESP32もあります。回路図でよく使うGND ,+12Vとかレギュレータ、コンデンサ、抵抗、インダクタンス、ピンヘッド、(ピンジャック代用)取り付け穴、LED、各ICソケット、ジャンパー、トランジスタ、ダイオード、基本的なパーツを押さえて於けば、一通り回路図がかけると思います。片面基板が対象ですので、EAGLE CAD では回路図ができてしまえば、後は部品を選んで基板上に置いて、ボトムパターンにてランド間を繫いでゆく手順です。特に最初によく使うパターン太さとドリル穴を選んで、一覧にパターン幅がなければ、手入力で数値を入れます。私はよく2mm幅を使いますが、この2mmは手入力になります。パターンをICの中を通したりする時はパターン幅を1.5mm幅とか、1mm幅とかに変えてます。ドリル穴径はディスクリートパーツリードが入る0.9Φにしています。ICソケットも0.9Φでokです。これらを設定してからパタ−ン化してゆきます。片面基板は、なれるとサッサと回路図を横にして、繫いでゆき、行き詰まったところで、ジャンパーを使います。全配線分が終了したら、微調整を行なう段取りです。(パターンの太さや、ランド補強、基板取り付け穴追加等)調整が終わったら、ベターアース化でパターン設計は終了です。後は切削マシーン用にガーバーデータ(パターン用とドリル用、切り抜き用)を作製です。コレぐらいの回路だと1日かからないで簡単に出来る様になります。当面はDIPタイプのICとディスクリートL,C,Rでいいのではないかと思っています。すすんでいる人はICもSOPとかチップL,C,Rで、基板業者にたのんでいますね。綺麗に出来上がるようですね。作ることが好きでやっていますので、簡単なのが私には向いていると思っています。今の所はブレッドボードでの実験で使った部品をまるまるそのまま使うやり方で行なっています。超アナログですが、一番楽しい所、醍醐味は回路を考えボードで確認している時です。Hi!

つづく?

愛知タワー風速値表示追加その1

タワーには風速カウンター表示部がユニットでついていますが、他のところへカウンターを新たに追加したくて、久々にゲート回路を組んでみる事にしました。タワーのUPボタン、DOWNボタン、停止ボタンの高さ表示ユニット近くにおいてある風速値のカウンターです。同じ仕様の物を購入するのが一番手っ取り早いですが、調べて見ると、パルスカウントをするだけなので、ゲートICを選べばできそうな内容です。元のカウンター部分には一切手を入れないでのパルス信号と電源だけパラレルに繋ぐやり方です。本来ならば元々のカウンターの接続線を延長して行う方法が別の場所へ設置する方法もありますが、高さ表示ユニット部はそのままにしておきたいのです。こういう理由からいま付いているカウンターと同じ動作をするカウント表示回路を作製します。

まず最初に調べたのは、信号線2本です。電源は単に電圧+12VとGNDなので特に問題ありません。風速回転のパルス信号線の動作です。
信号線は回転している風速部から回転に合わせて矩形パルスが来ています。正論理信号です。
もう一つの信号線はタイマー信号線です。Nomally+で10secで”L”信号がパルス状に来ています。
上記の信号線より、10秒間のタイマー”H"状態の時に正パルス信号をカウントする仕様です。ここで考えなければいけない事は、カウントを幾つまでカウント出来る様にするかを決めなければなりません。コレはタワーの下に付いているコントロールボックスに、アラームを鳴らしタワーをダウンさせる回転数を設置するユニットがあります。私の設定は経験上かなりの風が吹いているよりも前の風速値38にしてあります。早めにタワーを下げるためです。この38という設定値を十分に範囲内カウントするには6ビットのカウンターで事足りますが、ゲートICのカウンターから見るとCMOS 4024で対応できそうです。
カウントは0から127までです。実績的にカウント表示で今まで100を超えたことはありませんのでコレにしました。他にも1セグメント表示回路も付いている4026もありましたが、セグメント表示でなくTFT液晶ディスプレーにしたいので使いません。(また、2桁だと2個もゲートが必要です。Hi!)
インターフェースとなる回路図です。
anemometer-circuit

表示ユニット端子に繋がっている線を5本繋ぎます。(電源とGND,タイマー信号線、パルス信号線、COMMON)
テストで使用したOSCは矩形波ですが±信号でしたので、パルス入力にはダイオードをいれてあります。
実際の接続時は信号を繫いでみて、はずすか確認します。タイマー信号の”L”パルスはプッシュSWでGNDに落とす様にしてシミュレーションしています。4024のリセットは”H"パルスでかかるので信号と同じ動作で”L”となる様にタクトSWでGNDに落とした時にSWトランジスタで反転させてリセット信号としています。

カウンターがOSCの低周波矩形波信号周波数で表示カウントアップしていくだけの動画です。
バイナリー出力です。(各LED出力7ポートの重みは、それぞれ1,2,4,8,16,32,64です。)




回路図にもあるように信号出力はバイナリーの7ポート出力です。信号が出ているのが分かるように発光ダイオードを付けています。パルス発生間隔が風速によって違う場合と同じようにOSCで矩形波の周波数を1Hzから7Hzぐらいの間で上げ下げすると実際の風速と同じ様にゆらぎカウントしてくれています。
またタイマーはタクトSWでGNDレベルに適当におおよそ10sec過ぎた当たりで疑似パルスとしてチョンと押すと全出力が消えリセットがかかった後にまた1からカウント始めます。
目で出力信号が見える様にパルスカウンター出力には、発光LEDを繋ぐため4050のバッファーを入れています。今回は単にゲートICのパルスカウントを準備し、インターフェースを付けただけです。

この後の予定としては、ソフトウェア設計が大半となります。
7ビットのバイナリーの信号出力分の入力ポートを用意して、スケッチで全ポートを読み取りし、カウント値を液晶に表示する様にするスケッチです。ArduinoNanoかESP32DevKitCのどちらかをつかいたいと思います。現在は信号線のワイヤーが5本繋がり表示する仕様で進めていますが、完成後はUDPを使ったサーバー化をおこない、風速値を別のESP32DevKitCに表示できる展開にしてクライアントのWiFi信号が届く範囲でUDP通信での風速値をリアルタイム表示させる拡張も考えたいと思います。となるとやはりESP32DevKitCを使わないとできないですね!

つづく?

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
アーカイブ
  • ライブドアブログ