2012/07/12(Thu) この日を編集
[mini] 空燃比計取り付け準備
昨日、空燃比計が届いたので、今日は取り付け準備を。
最初から思いっきり勘違いをしてて、これはインマニに取り付けるものだとばっかり思っていた。となると、穴開けてネジ山切らないとならない。それには、ドリルの歯とタップが必要と思って買いに出かけた。ネジは17mm位。だが、ホームセンター2件を梯子しても見つからず。あ、16mmのドリルは購入。4000円もした。次に、輸入工具店いったらM18のタップがあったので、迷いつつも買ってみて合わせたらビンゴだった。
帰ってついったーしてたら、cabさんから電話があって、取り付けはエキマニということにやっと気づく。それなら、O2センサーの他にも集合部に取り付け穴があった。
センサーを取り付けて、配線の引き回しを考えていたのだが、コネクタがでかくて辛い。+電源と平行して持っていこうかと考える。後は配線か。
改めてマニュアルと見ていると、こいつはラムダセンサーとして使えるらしい。ならば、O2センサーの場所に付ければいいじゃないか。場所的には最初のところの方がいいっぽいのだが、配線を考えるとこっちの方がよい。一度試してみて様子を見よう。

そんな訳で、買ってきた工具はすべて必要なくなったので、返品してきた。
2025/07/12(Sat) この日を編集
[hard] シリアルOLED液晶ディスプレイモジュール I2C SSD1306用0.91インチOLEDをArduino Nano Everyで使う
そもそもはAliExpressで見つけて買おうかと思ってたのだが、2個買うとAmazonで買っても送料の関係で値段が変わらないのでAmazonで買ったのだった。
届いたら思ったよりも小さくて、ゲッとなったけど取り敢えず使ってみようかと。よく考えたら、0.91インチなので当然なのだが。
調べたところ、Adafruit GFX LibraryとAdafruit_SSD1306というライブラリをArduino IDEからインストールしてincludeしてやれば使える。
GitHub - adafruit/Adafruit_SSD1306にサンプルがあるのでそれを参考にして試行錯誤して、以下のソースコードで画像の表示をすることができた。フォントも変えたかったのだが、小さいフォントが見つからなかったので諦めた。
ちなみに、以下のサンプルは1秒毎に表示が点滅します。
#include#include #include #include //#include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) // The pins for I2C are defined by the Wire-library. // On an arduino UNO: A4(SDA), A5(SCL) // On an arduino MEGA 2560: 20(SDA), 21(SCL) // On an arduino LEONARDO: 2(SDA), 3(SCL), ... #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { // put your setup code here, to run once: Serial.begin(9600); // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } // Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. // Clear the buffer display.clearDisplay(); } void loop() { display.clearDisplay(); // LCDのクリア display.display(); // LCDの描画をしてクリアを適用 delay(1000); disp_temp_and_level(88.88, 88); // 温度とアクセル開度を引数に入れる delay(1000); } // 温度とアクセル開度をLCDに表示するサンプル void disp_temp_and_level(float temp, int lv) { display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(SSD1306_WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.println(F("Water Temp")); float f_dot = 0; // 温度の小数部分 int i_temp = 0; // 温度の整数部分 int i_dot = 0; // 小数部分を整数にしたもの i_temp = (int)temp; display.setCursor(0,10); // 温度を表示する座標 display.setTextSize(3); // 3倍の大きさのフォント char buf[10], buf2[10]; sprintf(buf, "%03d", i_temp); // 温度の整数部分を3桁で表示 display.write(buf); // 温度の整数部分を表示 display.setCursor(48,16); // 温度の小数点以降の表示座標 display.setTextSize(2); // Draw 2X-scale text f_dot = temp - i_temp; i_dot = (int)(f_dot * 10); // 温度の小数部分を1桁で得る sprintf(buf2, ".%d", i_dot); display.write(buf2); // 温度の小数部分を表示 display.setTextSize(1); // Normal 1:1 pixel scale display.setCursor(67,10); // ℃を表示する座標 display.cp437(true); // ゜を表示するための指定 display.write(167); // ゜を表示する display.print("C"); // 上下で℃と表示 display.setTextSize(1); // Normal 1:1 pixel scale display.setCursor(77,0); // 座標を移動 display.println(F("Accel Lv")); display.setTextSize(3); // 3倍のフォントサイズ display.setCursor(90,10); // アクセル開度の表示座標 display.println(lv); // アクセル開度を表示 display.display(); // LCDに描画する }