コロナウイルスが流行していた頃にCO2濃度計を作りました
この方の情報を参考にしてブレッドボード上に作成しましたが、液晶の色がくすんできた
ため、改修を計画しています
買い替える部品を決めました
1月30日追記:CO2センサーをデジキーから入手しました
ESP32開発ボードを38Pinから30Pinに変更
換えた理由は、技術的には問題がないものの、安価に入手できたためです
1月30日追記:アリエクで特価品(送料無料)がありました。私は380円で買いました
過去の開発記録がないので、Notionにまとめながら作業を進めてみます
配線は下記のようになります
ソースコードは下記のようになります
#include <SPI.h>#include "Ucglib.h"
//define OLED SSD1331 pin/*//ESP32 30pin#define cs 17 // CS Slave Select(Chip select)#define dc 16 // DC Data/Command#define rst 4 // RES Reset#define mosi 23 // SDA Master In Slave Out#define sclk 18 // SCL Serial Clock//#define 3v3//#define gnd*/
//ESP32 38pin#define cs 15 // CS Slave Select(Chip select)#define dc 16 // DC Data/Command#define rst 4 // RES Reset#define mosi 13 // SDA Master In Slave Out#define sclk 14 // SCL Serial Clock//#define 3v3//#define gndUcglib_SSD1331_18x96x64_UNIVISION_SWSPI disply(sclk, mosi, dc, cs, rst);
// oled font procedures//#define UCG_FONT_MODE_TRANSPARENT ucg_draw_transparent_glyph//#define UCG_FONT_MODE_SOLID ucg_draw_solid_glyph//#define UCG_FONT_MODE_NONE (ucg_font_mode_fnptr)0)
void setup() {disply.begin(UCG_FONT_MODE_NONE); //star Ucglib(SSD1331 OLED)Serial.begin(9600); // start serial communication at 9600bpsdisply.clearScreen();disply.setColor(190, 190, 190);}
int reading = 0, co2Int = 0;float temp = 0, tempInt = 0;
void loop() {disply.setFont(ucg_font_helvB12_tr);//ucg.setFont(ucg_font_ncenR12_tr);
// step 1: wake sensor
delay(5); //max 15ms
// step 3: instruct sensor to return a particular echo reading
// step 4: request reading from sensor
// step 5: receive reading CO2 from sensorreading = reading << 8; // shift high byte to be high 8 bitsif (co2Int != reading) {co2Int = reading;disply.setColor(20, 20, 30);disply.drawBox(0, 4, 94, 19);disply.setColor(190, 190, 190);disply.setPrintPos(0, 20); // print OLEDdisply.print(" CO2:");disply.setPrintPos(50, 20);disply.print(reading);}//for debugSerial.print(reading); // print SerialSerial.println(" CO2");}
// step 6: read temperaturereading = reading << 8; // shift high byte to be high 8 bitstemp = reading;if (temp != tempInt) {tempInt = temp;disply.setColor(20, 20, 40);disply.drawBox(0, 30, 94, 19);disply.setColor(190, 190, 190);disply.setPrintPos(0, 45); // print OLEDdisply.print("temp:");disply.setPrintPos(50, 45);disply.print((temp / 100), 1);}//for debugSerial.print((temp / 100), 1); // print SerialSerial.println(" C");}
delay(5000); // wait a bit since people have to read the output :)}
動作確認用実機は下記のようになります
1月31日追記:OLEDの信号を確認してみました
信号を確認するために、ロジックアナライザを購入しました
-
-
-
安価なもの(1,400円)にしました
クリップ(1,899円)も購入しました
クリップ付き(1,680円)は安価ですが、色の種類や形状が好みではありません。ただ、滅多に使わないのなら、これでも良いかなと思います
-
-
ソフトはWindows版のPulseViewを使用しました。インストール後、USB機器が認識されませんでしたが、下記マニュアルに従ってZadigを導入したところ、正常に認識されました
使っている様子を画面コピーしまいた
部品交換のためソケット化
OLED画面やCO2センサーは消耗品であるため、交換が可能なようにソケット接続にしたいと考えています。また、予備品を購入してストックしておきたいです
ケースは簡単に分解できる構造にしたいと考えています。(1月31日追記)ハンダでの接続をデュポンワイヤーに変更しようと思っています。ただし、スプライスポイントをどうするかまだ決めきれていません
-
-
-
メスメスを選びました
長さ調整のためコネクタセットが必要では?
-
-
ソースコード 新旧対応 2月15日追記
前回(38Pin版)を作ったときは付け焼き刃だったため、ソースコードを失念してしまいました。今回作成している30Pin版には、忘れないように追加しておきます
回路としては、ESP32のPin変更のみです。回路図とソースは以下のとおりです
<30 Pin>
<38Pin>
<ソース>
//define OLED SSD1331 pin/*//ESP32 30pin#define cs 17 // CS Slave Select(Chip select)#define dc 16 // DC Data/Command#define rst 4 // RES Reset#define mosi 23 // SDA Master In Slave Out#define sclk 18 // SCL Serial Clock//#define 3v3//#define gnd*/
//ESP32 38pin#define cs 15 // CS Slave Select(Chip select)#define dc 16 // DC Data/Command#define rst 4 // RES Reset#define mosi 13 // SDA Master In Slave Out#define sclk 14 // SCL Serial Clock//#define 3v3//#define gnd
Ucglib_SSD1331_18x96x64_UNIVISION_SWSPI disply(sclk, mosi, dc, cs, rst);
次回予告
-
- 回路作成中です、詳細は次回報告しま
- 回路作成中です、詳細は次回報告しま
以上。これからもよろしくお願いします