Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CO2濃度を可視化した話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
暁月蒼空
March 21, 2025
Technology
19
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CO2濃度を可視化した話
VRChatで開催されているエンジニア集会で登壇したLTの資料です
暁月蒼空
March 21, 2025
More Decks by 暁月蒼空
See All by 暁月蒼空
サーバーと一年同棲して in エンジニア集会
akatukisora
1
26
Other Decks in Technology
See All in Technology
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
110
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
190
新しい SLO が良い感じにハマっている話
z63d
4
2.1k
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
250
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
700
ガバメントクラウドでのランサムウェア対策
techniczna
1
740
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
1
260
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
AI時代の強いチームの作り方
yuukiyo
23
15k
サイバー捜査員研修(前半)
nomizone
1
1.5k
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
320
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
2
470
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
460
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
The untapped power of vector embeddings
frankvandijk
2
1.8k
Designing for Timeless Needs
cassininazir
1
430
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
The agentic SEO stack - context over prompts
schlessera
0
860
Rails Girls Zürich Keynote
gr2m
96
14k
Transcript
空気 なんだか重くない? CO2センサーで 空気読みチャレンジ!
About Me • 技術大好き少年 • 家に鯖を飼う民 • 新たな学び捜索中 暁月 蒼空
(@SoraAkatuki) @_Sora_Akatuki @akatuki-sora @AkatukiSora @akatuki_sora
空気 なんだか重くない?
室内で作業していると 眠い、集中が続かない
室内から外に出ると 空気が美味しいと感じた
今回のおはなし 作業がはかどらないのはおかしい😡😡😡 あっそうだCO2のせいにしよう
CO2を表す単位 ppm => 100万分の1 1ppm == 0.0001% 1% == 10,000ppm
CO2を表す単位 ppm => 100万分の1 1ppm == 0.0001% 1% == 10,000ppm
CO2を表す単位 ppm => 100万分の1 1ppm == 0.0001% 1% == 10,000ppm
CO2の基準 • 外気: 約420 ppm (基準) • 正しく換気された室内 500~700 ppm
( 理想 ) • 衛生管理基準 1,000 ppm ( 推奨 ) • 呼気中 40,000ppm
CO2の基準 • 外気: 約420 ppm (基準) • 正しく換気された室内 500~700 ppm
( 理想 ) • 衛生管理基準 1,000 ppm ( 推奨 ) • 呼気中 40,000ppm
CO2の基準 • 外気: 約420 ppm (基準) • 正しく換気された室内 500~700 ppm
( 理想 ) • 衛生管理基準 1,000 ppm ( 推奨 ) • 呼気中 40,000ppm
CO2の基準 • 外気: 約420 ppm (基準) • 正しく換気された室内 500~700 ppm
( 理想 ) • 衛生管理基準 1,000 ppm ( 推奨 ) • 呼気中 40,000ppm
CO2の基準 • 外気: 約420 ppm (基準) • 正しく換気された室内 500~700 ppm
( 理想 ) • 衛生管理基準 1,000 ppm ( 推奨 ) • 呼気中 40,000ppm
CO2の影響 • 1,000~ ppm 意思決定能力の低下、認識機能への影響 • 2,000~ ppm 不快感、頭痛、めまい •
~5,000 ppm 許容限界、永続的な健康被害リスク大 • 50,000~ ppm 混乱、呼吸困難 • 100,000~ ppm 意識消失
CO2の影響 • 1,000~ ppm 意思決定能力の低下、認識機能への影響 • 2,000~ ppm 不快感、頭痛、めまい •
~5,000 ppm 許容限界、永続的な健康被害リスク大 • 50,000~ ppm 混乱、呼吸困難 • 100,000~ ppm 意識消失
低濃度でも影響がある
でも体感することは少ない
そうだ 計測しよう
今回用意する材料 • MH-Z19C(CO2センサー) - - - - (1個) • RaspberryPi
3B+ - - - - - - (1台) • 接続用ジャンパ線 - - - - - (4本) • ドメイン(CloudFlare管理) - - - - (1つ) • サーバー(ラズパイで代替可) - - - (1台) • 気合&根気 - - - - - - - (お好みで)
今回用意する材料 • MH-Z19C(CO2センサー) - - - - (1個) • RaspberryPi
3B+ - - - - - - (1台) • 接続用ジャンパ線 - - - - - (4本) • ドメイン(CloudFlare管理) - - - - (1つ) • サーバー(ラズパイで代替可) - - - (1台) • 気合&根気 - - - - - - - (お好みで)
今回用意する材料 • MH-Z19C(CO2センサー) - - - - (1個) • RaspberryPi
3B+ - - - - - - (1台) • 接続用ジャンパ線 - - - - - (4本) • ドメイン(CloudFlare管理) - - - - (1つ) • サーバー(ラズパイで代替可) - - - (1台) • 気合&根気 - - - - - - - (お好みで)
今回用意する材料 • MH-Z19C(CO2センサー) - - - - (1個) • RaspberryPi
3B+ - - - - - - (1台) • 接続用ジャンパ線 - - - - - (4本) • ドメイン(CloudFlare管理) - - - - (1つ) • サーバー(ラズパイで代替可) - - - (1台) • 気合&根気 - - - - - - - (お好みで)
今回用意する材料 • MH-Z19C(CO2センサー) - - - - (1個) • RaspberryPi
3B+ - - - - - - (1台) • 接続用ジャンパ線 - - - - - (4本) • ドメイン(CloudFlare管理) - - - - (1つ) • サーバー(ラズパイで代替可) - - - (1台) • 気合&根気 - - - - - - - (お好みで)
今回用意する材料 • MH-Z19C(CO2センサー) - - - - (1個) • RaspberryPi
3B+ - - - - - - (1台) • 接続用ジャンパ線 - - - - - (4本) • ドメイン(CloudFlare管理) - - - - (1つ) • サーバー(ラズパイで代替可 ) - - - (1台) • 気合&根気 - - - - - - - (お好みで)
今回用意する材料 • MH-Z19C(CO2センサー) - - - - (1個) • RaspberryPi
3B+ - - - - - - (1台) • 接続用ジャンパ線 - - - - - (4本) • ドメイン(CloudFlare管理) - - - - (1つ) • サーバー(ラズパイで代替可) - - - (1台) • 気合&根気 - - - - - - - (お好みで)
イメージ
CO2センサーを接続
CO2センサーを接続
CO2センサーを接続
CO2センサーを接続 TXD RXD
Raspberry piの設定 # raspi-config Interface Options > Serial Portを選択 Would
you like a login shell to be accessible over serial? > No Would you like the serial port hardware to be enabled? > Yes これでシリアルポートを使用できる
Raspberry piの設定 /boot/firmware/config.txt ~~~ [all] enable_uart=1 UARTを有効化
Raspberry piの設定 /boot/firmware/config.txt ~~~ [all] enable_uart=1 dtoverlay=pi3-disable-bt UARTを有効化 Bluetoothを無効化
なんかいい感じにプログラミング 1 // InfluxDBクライアントの初期化 token = "RXhhbXBsZVRva2VuUmlHS0pkZFh0UUdma3F4bg==" org = "ExampleOrg"
url = "https://influxdb.example.com" bucket="example" write_client = influxdb_client.InfluxDBClient(url=url, token=token, org=org) write_api = write_client.write_api(write_options=SYNCHRONOUS)
なんかいい感じにプログラミング 2 // CO2データを読み出しで投稿する関数 def PushData(): Data = mh_z19.read() record
= ( Point("MyRoomData") .tag("functionality", "Sensor") .field("co2_level", Data["co2"]) ) write_api.write(bucket=bucket, org=org, record=record)
なんかいい感じにプログラミング 3 // ループあたりの時間が一定になるように細工したループ ExpectExecTime = 5 #s while True:
beginTime = time.time() PushData() endTime = time.time() execTime = endTime - beginTime diffTime = ExpectExecTime - execTime time.sleep(diffTime)
実測 (自室)
実測 (自室)
実測 (自室) 平均 10.26ppm/m 理論値 12ppm/m
学校で勝手に測定
学校で勝手に測定した感想 • データなくしました(ごめんなさい)
学校で勝手に測定した感想 • データなくしました(ごめんなさい) • 教室内に25人程度のCO2源が存在するので上がり幅は大きい
学校で勝手に測定した感想 • データなくしました(ごめんなさい) • 教室内に25人程度のCO2源が存在するので上がり幅は大きい • 閉め切ると1時間立たないうちに2,000ppm程度に
学校で勝手に測定した感想 • データなくしました(ごめんなさい) • 教室内に25人程度のCO2源が存在するので上がり幅は大きい • 閉め切ると1時間立たないうちに2,000ppm程度に • 数秒のドアの開閉がグラフにはっきり残る
学校で勝手に測定した感想 • データなくしました(ごめんなさい) • 教室内に25人程度のCO2源が存在するので上がり幅は大きい • 閉め切ると1時間立たないうちに2,000ppm程度に • 数秒のドアの開閉がグラフにはっきり残る •
換気を始めるときれいに濃度が落ちていく
先々週取れたデータ
先々週取れたデータ 窓を一つだけ 開ける
先々週取れたデータ 窓を一つだけ 開ける 対角の窓を 開ける
まとめ • CO2濃度は案外爆速で上がる • はかどらなくなったときは換気 • 身近な何かを実測すると面白いかも
— 参考文献 — • 室内環境中における二酸化炭素の吸入曝露によるヒトへの影響 - J-STAGE ◦ https://www.jstage.jst.go.jp/article/siej/21/2/21_113/_article/-char/ja/ •
ラズパイでCO2濃度を測定してPlotly Dashで可視化 - Qiita ◦ https://qiita.com/take314/items/a5ab8ef6e8773699cb25 その他 行政機関の情報・公式ドキュメントなどなど ....... — 使用機材・ソフト & スペシャルサンクス — • CO2センサー — MH-Z19C (https://akizukidenshi.com/catalog/g/g116142/) • 測定値読み出し、データ投稿 — Raspberry pi 3B+ • 視覚化、公開 — Grafana • データ保存 — InfluxDB • Grafana & InfluxDBのホスト — ProxmoxVE on Kubernetes • CloudFlare (CloudFlare Tunnel) • 学校 & 計測を勧めてくれた友人 空気、なんだか重くない? by 暁月蒼空 ご清聴ありがとうございました
自室のCO2濃度 (3時間遅延)