google-site-verification: google3bd66dd162ef54c7.html
FC2ブログ

2つの0.96インチOLEDをArduino UNO で同時に表示

今回の記事は、youtube に0.96インチのOLEDをArduino UNO から二つ同時に表示する、という動画を見つけました。面白そうなので、そこに書かれている方法をやってみたけど、あまりうまく行きませんでした。と言う締まりの無い話になっています。



▼2つ同時に表示している様子(上記動画からキャプチャ)
表示結果

128 x 64 画素のOLEDは1024バイトのバッファを使いますが、これを二つ同時に使うと倍の2048バイトが必要になるはずです。一方でArduino UNO のRAMは2kバイト、つまり2048バイトで同じです。プログラムを動かすために、画像バッファ以外に変数用などにもRAMが必要なので、普通にやったらうまく動かないと思います。

ということで、何か特殊なテクニックが使われているのでは?と思ってやってみました。幸いFREE CODE と唄っていてソースは公開されています。それにOLEDも二つ余っています。

▼I2Cアドレスの設定
I2Cアドレスの設定
OLEDの基板上にあるアドレス設定用の抵抗の位置を変えて、アドレスが0x78と0x7Aの物を作ります。なお、左側のOLEDの3.3Vラインにはセラコンが追加されていますが、これは今回の話には関係ありません。

配線してプログラムをyoutubeの記事に書かれているリンク先から落としてきて動かしてみると、ちょっと動作が変です。

▼プログラムが間違っている
プログラムが間違っている
ソースを見ると、Display1 を表示した後で Display2 の表示を行っていますが、Display2 を表示するプログラムの途中でDisplay1 を触っている行があって、明らかに間違っています。動画の中にもプログラムを映している部分があるので、ひょっとしてと思って見たらこっちも間違っていました。上の画像はその部分の動画のキャプチャーです。

プログラムを修正して動かした結果が次の写真です。

▼実行結果
表示結果
横方向はいいのですが、縦方向が 2倍に引き伸ばされています。よく見ると水平に1ライン毎に黒い線が入っています。つまり、横は128画素有りますが、縦は32画素相当の表示になっています。RAMのアロケーションを調べるプログラムを追加してメモリーの使用状態を見てみると、ヒープ領域に約1030バイトが確保されているだけだったので、表示結果と矛盾しない量になっていました。(128 x 32 画素 x 2 画面 = 8192 ビット = 1024 バイト)
つまり、期待していた特殊なテクニックは使われていないようです。

プログラムの初期化をやっている部分は下記です。
#include 

#define OLED_RESET 4
Adafruit_SSD1306 Display1(OLED_RESET);
Adafruit_SSD1306 Display2(OLED_RESET);

int i, j;

void setup() {

//Serial.begin(9600);

Display1.begin(SSD1306_SWITCHCAPVCC, 0x3D);
Display1.clearDisplay();
Display1.display();

Display2.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Display2.clearDisplay();
Display2.display();

}
SSD1306の画素数の設定がされていません。たぶんこういう書き方をすると、デフォルトの設定が選択されて、それが128x32画素になる、ということなんでしょうか。

ともかく繰り返しになりますが、実際にやってみたらたら謎は深まりました。

◆まとめ
この画素数のOLEDを2つ同時に使うと、arduino UNOではRAMが不足するはず。ということは、バッファメモリーの共用などのテクニックが使われているのではないだろうかと思って調べてみました。しかし特にそういうことをやっている感じではありませんでした。というか、それ以前に2つのOLEDを本来の解像度で動かすことが出来ませんでした。

デモの画面を見ると128x64画素で2画面表示しているのは間違い無い気がします。ひょっとしたら、この動画が投稿された頃と現在ではadafluit のライブラリの造りが変わっているのかも知れません。

ついでに書きますが、adafluit のグラフィックのライブラリの使い方の解説ページが見つからないのでいつも不便な思いをしています。公式ページはたぶんここ⇒https://github.com/adafruit/Adafruit-GFX-Library
事例などを見ればおよその使い方は判ります。でも例えば今回のように引数の数が少なかった場合の挙動などは、なかなか判らないです。ひょっとしたら皆さんは、ライブラリのソースをその都度読んでるのでしょうか?そんなことは無いですよね。

水槽用化学反応式CO2発生装置の運転ノウハウなどー続編

このところあれこれ忙しくて、電子工作をやっている余裕が無くなっています。そんなことで書くネタが無いので、水草水槽用のCO2発生装置の話で繋いでおきます。なお、以前にこの装置の運転ノウハウなど、という記事を書いているので、今回のはその続編ということになります。

この CO2 発生装置の運転を始めて半年以上経ちました。CO2ガスの発生部の構造はこの記事のあたりで解説。その間に色々な改良を加えて、内容は逐次記事で紹介してきました。今回は運転ノウハウなど、電子工作以外の話を紹介したいと思います。大きくは、重曹のチャージ方法と、気泡発生用のストーンに関する話の二つです。

◆重曹のチャージ方法
化学反応式では重曹にクエン酸を加えて CO2 (二酸化炭素) を発生させます。そのあたりの話はあちこちの Web に書いてあるので説明は省略します。これを実際に長期間動かしてみると、途中で反応の応答速度がだんだんと落ちてきて、CO2 の発生量が低下する現象が発生します。クエン酸の供給量は一定なので同じペースで CO2 が発生して欲しいのですが、時間が経つと反応が起きにくくなる現象が起こります。

以下重曹ボトルの状態で説明していきます。

▼クエン酸を滴下
20190602StopReaction.png
これは最初にやった状態で、クエン酸を上から滴下しています。この構造だと、クエン酸のボトルに重曹が逆流する恐れが無くなるので安心です。但し、この構造では10日くらいで反応が起き難くなりました。原因は原料や反応生成物の比重差で、材料がうまく混ざらないためだと思われます。機械的に攪拌すれば解決出来ますが、それでは大掛かりになってしまします。

そこで次のように改良しました。

▼J字管を重曹に埋める
20190602StopReaction2.png
重曹のスラリー中にクエン酸の供給パイプを埋め、発生する CO2 の泡で攪拌されるようにしました。

これでかなり良くなったのですが、それでも20日くらい経つと反応速度が低下してきて、クエン酸が注入されているのにもかかわらず、CO2 の泡がほとんど発生しなくなりました。

その状態が右の図です。運転に伴い重曹のスラリー表面には漏斗状の窪みが出来ます。ちなみにその傾斜角は安息角になっているのだと思います。ともかく、その窪みの底が J字管の先端に達すると、気泡による重曹粉末の攪拌現象が起きなくなってしまうようです。

▼J時間の先が露出した様子
20190602IMG_8791-001.jpg
これは実際の容器の様子で、見づらいですが、すり鉢状になった重曹スラリー底にJ字管の先が見えています(黒く見えている部分)。こうなると反応の応答速度が落ちてしまいます。

これでは制御の応答速度が悪くて、朝になって CO2 の発生を開始してもなかなか圧力が上がらない、などの問題が発生します。

ということで、改良したのが次の図です。

▼重曹の量を思いっきり増やす
20190602StopReactSolution.png
重曹の量を思いっきり増やして、長時間運転しても J字管の先が露出しないようにしました。この状態にしたのは、1週間くらい前でまだ効果の確認まで出来ていないのですが、たぶんうまくいくと思います。

反応に必要な重曹とクエン酸の量は、反応式から正確に求めることが出来ます。でも現実には、上記のような現象が発生するので、重曹はかなり多めにチャージしておくことが必要ということです。余分に入れた重曹は、いわゆゆる「死に容量」になってしまいますが、まあ安いから問題無いと思います。重曹ボトルを再チャージする時は上澄み液だけ捨て、そこに適当に重曹を補充するだけで済みます。

要は、重曹をいっぱい入れておいて CO2 の発生量はクエン酸の注入量で決まる状態にしておく。更に重曹はJ字管の先が露出しないようにたっぷり入れておくということです。

▼重曹の入替え(補充)作業
20190602IMG_8795-001.jpg
量は適当で良いといっても、一応 「はかり」 で計量しながら補充しています。ちなみに重曹はダイソーで 500グラム入りが 108円で手に入ります。

▼補充後のボトル
20190602IMG_8796-001.jpg
左が重曹のボトルで、ご覧のように重曹がたっぷり入っています。一方で水は重曹の上、約10mmくらいの深さになる量しか入れていません。ちなみに、その右がクエン酸のボトル。右に少しだけ見えているのは、900cc のペットボトルです。ここにクエン酸溶液をまとめて作っておいて、すぐに使えるようにしています。

化学反応式では圧力が低いのでストーンは重要です。いろいろ試行錯誤した結果、良さそうな物が出来たので紹介します。構造としてはメラニンスポンジ(激落ち君)をシリコンチューブに詰め込んだ物です。但し先端を下図のような形にカットします。

▼自作CO2ストーン
20190602StoneMeranin.png
要は、先端角が約120度になるように四角錘(ピラミッド状)にカットします。この図では先端が平らになっていますが、実際にはててっぺんをカットしなくても、自然に鈍角になります。

ストーン中の気体は少しでも圧力の低い所、つまり水深の浅い場所からから出て行こうとします。この図のような形にしておくと、気泡はストーンの先端から出るようになって、細かい気泡が安定して出るようです。ちなみに、ここをスパッと輪切りにすると、チューブとメラミンスポンジの境界から泡が出ることが多くなり、大きな泡になり易かったです。

ちなみに、スパッと切ったストーンの製作記事はこちら

▼気泡の発生状態
20190602IMG_8804.jpg
いい感じです。1ケ月以上経ってますが、細かい泡が出続けています。

◆まとめ
ということで、水草水槽用の化学反応式 CO2 添加装置の運転ノウハウでした。ちなみに、この CO2 添加装置は一回チャージすると40日くらいは動き続続けるので手がかからなくて具合が良いです。

製作した CO2 発生装置には下の写真のような圧力のグラフ表示機能があります。
圧力変化グラフ
運転しているといろいろな要因で圧力が変動します。ということで、グラフ表示があると状態が把握し易くなります。
カレンダー
05 | 2019/06 | 07
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード