« 2019年10月 | トップページ | 2020年4月 »

2020年3月

2020年3月31日 (火)

Arduinoで作ろう(41) WeMos D1で温度・湿度のWebサーバ

Wemos_d1_dht11

 WeMos D1というESP8266を搭載したArduino準互換ボードで遊んでます。
とりあえず温度・湿度センサDHT11をつないで,Webブラウザから温度・湿度を見られるWebサーバを作ってみました。
WeMos D1用のスケッチをArduino IDEで書けるようにする手順はWeb上にたくさんあるから省略します。僕は,ココとかココを参考にしました。

20200331

// WeMos D1(ESP8266)+DHT11による温度湿度Webserver

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#define DHTTYPE DHT11
#define DHTPIN 0
const char* ssid = "あなたの無線LANのSSID";
const char* password = "あなたのパスワード";
ESP8266WebServer server(80);
DHT dht(DHTPIN, DHTTYPE, 11);
float temp,humidity;
String webString="";

void setup(void){
 Serial.begin(9600);
 dht.begin();
 WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
  }
 Serial.println("");
 Serial.print("Connected to ");
 Serial.println(ssid);
 Serial.print("IP address: ");
 Serial.println(WiFi.localIP());
 server.on("/", handle_root);
 server.begin();
 Serial.println("HTTP server started");
}

void loop(void){
 server.handleClient();
}

void getdata() {
 humidity = dht.readHumidity();
 temp = dht.readTemperature(false);
}

void handle_root() {
 getdata();
 String message = "\
 <html>\n\
 <meta charset=\"utf-8\">\n\
 <body>\n\
 <h4>WeMos D1 (ESP8266)+DHT11 Webserver</h4>\n\
 現在の気温は " + String((int)temp) + "℃です。<br>\
 現在の湿度は " + String((int)humidity) + "%です。\n\
 </body>\n\
 </html>\n";
 server.send(200, "text/html", message);
}

 上のスケッチを書き込んで,シリアルモニタでローカルIPアドレスを確認します。この場合は,192.168.0.33でした。
20200331_20200331142101

 で,Webブラウザで http://192.168.0.33/を見てみると ↓こうなるわけです。
202003311

このマイコンボード,面白いですね。まだいろいろと遊べそうです。

|

2020年3月29日 (日)

ガイガーカウンタ GC10(5)放射線量データロガー(2)

20200329_

 たくさん持ってるArduinoのシールドを整理してたらRTC DS1307の付いたSDカードシールドを発見しました。そういえば,以前 この中華製パチもんシールドを買った記憶があるわ。んで,このシールド向けにGC10用放射線量データロガーを組み直してみました。

Sdcardshieldrtcgc10_2

// ガイガーカウンタGC10+DS1307,SD Cardシールド+Arduino で放射線量データロガー


#include <SPI.h>
#include <SD.h>
#include "RTClib.h" //https://github.com/adafruit/RTClib
RTC_DS1307 rtc;
const int chipSelect = 10;

void setup() {
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    while (1);
  }
  Serial.println("card initialized.");
  rtc.begin() ;
  //following line sets the RTC to the date & time this sketch was compiled
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
  String cpm = "" ;
  String dataString = "";
  char buff[12] ;
  if (Serial.available()) {
    cpm="";
    cpm = Serial.readStringUntil('\r');
    Serial.flush();
    cpm.trim(); // 改行コードを取り除く
    delay(1000);
  }
  if (int(millis()/1000%600) == 0){ //10分(600秒)ごとに記録
    DateTime now = rtc.now();
    sprintf(buff, "%04u/%02u/%02u", now.year(), now.month(), now.day()) ;
    dataString += String(buff);
    dataString += ",";
    sprintf(buff, "%02u:%02u:%02u", now.hour(), now.minute(), now.second()) ;
    dataString += String(buff);
    dataString += ",";
    dataString += String(cpm);
    dataString += ",";
    dataString += String(cpm.toFloat()/165); //gms=165として,μSv/hに換算
    File dataFile = SD.open("datalog.csv", FILE_WRITE);
      if (dataFile) {
        dataFile.println(dataString);
        dataFile.close();
        Serial.println(dataString);
      }
  }
}

| | コメント (0)

2020年3月26日 (木)

Arduinoで作ろう(40) CW Decoder

Cw_decoder

 新型コロナウイルス感染拡大と関係なく3月の僕は失業状態なので,お金を使わないように自宅警備に専念していますw

 ネットでArduinoの作例を検索していたら CW Decoder ってのを見つけたのでマネして作ってみました。
「CW」というのは,モールス信号のことで,これをArduinoでデコードしようってことですね。実は,僕はアマチュア無線技士の免許を持っていて,モールス信号を打つことができるのですよ,えっへん。

 元々のスケッチを少し書き換えて,LCDをI2Cのものにして,ブザーも取りつけました。たいした改造でもないので,ここにスケッチをアップロードするのはやめておきます。作者であるJH7UBCさんのサイトをご覧ください。

動画はコレ↓ ちゃんとした電鍵も持ってるんだけど,どこへしまったかなあ。

 

| | コメント (0)

2020年3月24日 (火)

ドライアイス不要の霧箱 (2)

 20200324_1

 ドライアイスはもちろん,水も使わない霧箱を作りました。
参考にしたのはコレ,というか,ほとんどそのままですが(^^;)

 まず,前回と同じように2枚のペルチェ素子を放熱用シリコングリスでくっつけて,四角い穴をあけたチャンバの底にUVレジンで固定します。
UVレジン硬化用の紫外線を当ててる様子はこんな感じ。10分くらいでカチコチに固まります。
20200324_2

で,できあがったのがこれです ↓
20200324_3  このペルチェ素子の表面は高耐久ラッカースプレー(つや消し黒)で塗装しておきます。
 さて,今回このペルチェ素子の放熱に使うのはパソコン用CPUファン(銅製ヒートパイプ4本装備)です。
20200314_4

 付属の金具を使って,さっき作ったチャンバ底面をねじ止めして完成。もちろん,CPUファンのCPUステージ上には放熱用シリコングリス を塗付しておきます。
 電源を入れて,ペルチェ素子表面の温度を測ると,-30.5℃まで下がりました。これはすごい。↓動画をご覧ください。

 

| | コメント (0)

2020年3月23日 (月)

ドライアイス不要の霧箱(1)

20200323_1

 そういえば先日,「ドライアイスが要らない霧箱」を作りましたので,ご紹介します。

 ネットで情報をかき集めて作ったものなので,オリジナリティはほとんどありませんが備忘録として書き残しておくことにします。
さて,ドライアイス無しでどうやってチャンバを冷やすかというと,ペルチェ素子を2枚重ねしたものをCPU冷却用の水冷ブロックの上に乗せ,冷水をこの水冷ブロックに流してペルチェ素子の排熱を行うという仕掛けです。
20200323_2

 まず,水冷ブロックの上にペルチェ素子2枚を順に放熱用両面テープで貼ります。これを底にペルチェ素子サイズの四角い穴をあけたダイソーの「コレクションボックス」に,UVレジンを使って固定します。UVレジン用の 紫外線ランプが必要ですが,UVレジンを使うとガッチリ強力に固定できます。ボックス内に顔を出したペルチェ素子の表面は 高耐久ラッカースプレー( ツヤ消し黒)で塗装します。

20200323_3

 次にペルチェ素子用の電源を用意します。ペルチェ素子は大電流を必要とするので,デスクトップパソコン用のATX電源がおすすめです。廃棄するようなパソコンがあったら,中から取り出しましょう。僕はハードオフで中古を500円で手に入れました(^^)
端子台を取り付けて,5Vを1つ,12Vを2つ取り出せるようにしました。

20200323_4  チャンバ内に顔を出しているペルチェ素子に5V,その下の水冷ブロック側のペルチェ素子に12Vをかけ,ポンプを使って水冷ブロックに冷水を流すと,チャンバ内のペルチェ素子の表面は-25℃から-30℃くらいまで冷えます。これくらい冷やせれば霧箱として十分使えます。
 エタノール5mL程度でチャンバ内上部に貼りつけたスポンジを濡らして線源を入れ,電源を入れるて5分くらい待つと,放射線の軌跡を観察することができます。線源は以前紹介したランタンのマントルの繊維ですが,ラジウムセラミックスボールでも大丈夫です。

| | コメント (0)

2020年3月19日 (木)

ガイガーカウンタ GC10(4)空間放射線量の自動ツイート

Ethernet-shield_gc10

 Ethernetシールドを載せたArduinoにガイガーカウンタGC10をつないで,1時間おきに空間放射線量を自動ツイートするようにしてみました。

  20200319

Tweet

 スケッチの中にMACアドレスを書く箇所があるのですが,例によって中華製の安いEthernetシールドを買ったので,これにはMACアドレスがついてませんでした(^^;)
仕方がないので,もう使わなくなったノートPC用LANカードについてたMACアドレスを流用しました。
 あと必要なのはArduinoからTwitterを利用するためのトークンですが,これはこのサイトに発行してもらいました。Twitterライブラリも同じサイトからダウンロードして,Arduino IDEにインストールしておきます。

で,スケッチはこんな感じ。

/*
* GC10+Ethernetシールドで空間放射線量を自動Tweet
*/

#include <SPI.h>
#include <Ethernet.h>
#include <Twitter.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //あなたのEthenetシールドのMACアドレスに書き換えること
byte ip[] = { 192, 168, 0, 177 }; //あなたのArduinoのローカルIPアドレス
Twitter twitter("発行してもらったあなたのトークン");

void setup(){
 delay(1000);
 Ethernet.begin(mac, ip);
 Serial.begin(9600);
}

void loop(){
 String cpm = "" ;
 String dataString = "";
 if (Serial.available()) {
  cpm = Serial.readStringUntil('\r');
  Serial.flush();
  cpm.trim();
  delay(1000);
 }
if (int(millis()/1000%3600) == 0){               //60分(3600秒)ごとにTweet
  dataString += "【自動Tweet】%0DガイガーカウンタGC10+Arduino によるリアルタイム放射線量測定%0D%0D";
  dataString += "現在の空間放射線量(岐阜市) : ";
  dataString += String(cpm);
  dataString += "CPM , ";
  dataString += String(cpm.toFloat()/165);   //gms=165として,μSvに換算
  dataString += "μSv";
  char* msg = dataString.c_str();
  Serial.println("connecting ...");
  if (twitter.post(msg)) {
    int status = twitter.wait(&Serial);
    if (status == 200) {
    Serial.println("OK.");
  } else {
    Serial.print("failed : code ");
    Serial.println(status);
  }
  } else {
    Serial.println("connection failed.");
  }
 }
}

| | コメント (0)

2020年3月18日 (水)

ガイガーカウンタ GC10(3)放射線量データロガー

Sdcardshield_rtc_gc10

 ガイガーカウンター GC10をSDカードシールドを載せたArduinoにつないで,放射線量を10分おきに24時間記録(2020/03/17 17:30~2020/03/18 17:50)してみました@岐阜市。
RTCモジュールDS3231も乗っけて,時刻・CPM値・μSv値の3つをSDカードに書き込むことにします。

Gc10_datalogger

スケッチはこちら

/*
* GC10+SDカードシールド付Arduino+RTCモジュール で放射線量データロガー
*/

#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire>
Rtc(Wire);
const int chipSelect = 4;

void setup() {
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
    if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    while (1);
    }
  Serial.println("card initialized.");
  Wire.begin();
  Rtc.Begin() ;
  // DS3231の日時を「それなりの値」に設定する場合に、以下の2行をコメントアウト
  // RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__) ;
  // Rtc.SetDateTime(compiled) ;
 }

void loop() {
  String cpm = "" ;
  String dataString = "";
  char buff[12] ;
    if (Serial.available()) {
    cpm="";
    cpm = Serial.readStringUntil('\r');
    Serial.flush();
    cpm.trim(); 
    delay(1000);
  }
    if (int(millis()/1000%600) == 0){ //10分ごとに記録
    RtcDateTime dt = Rtc.GetDateTime() ;
    sprintf(buff, " %02u:%02u:%02u", dt.Hour(), dt.Minute(), dt.Second()) ;
    dataString += String(buff);
    dataString += ",";
    dataString += String(cpm);
    dataString += ",";
    dataString += String(cpm.toFloat()/165); //gms=165として,μSvに換算
    File dataFile = SD.open("datalog.csv", FILE_WRITE);
      if (dataFile) {
      dataFile.println(dataString);
      dataFile.close();
      Serial.println(dataString);
      }
    }
}

 SDカードに記録された datalog.csv をExcelで開いてグラフを作るとこんな感じ↓ です。GC10 Monitor風にしてみました(^^)

Gc10_graph

| | コメント (0)

2020年3月17日 (火)

ガイガーカウンタ GC10(2)放射線量モニター「GC10 Monitor」

20200317_gc10

 ガイガーカウンタGC10 には外部通信端子がついていて,USB-シリアルコンバータを介してパソコンに接続することができます。
専用ケーブルも販売されていますが,中華製の安いコンバータ を持っていたので,これを使ってみました。

メスーメスのジャンパ線を使って下写真のようにつなぎます。
Gc10ft232

GC10の電源はパソコンのUSB端子から供給されますから,GC10の9V乾電池は外しておきましょう。

 パソコンのUSB端子につなぐとGC10が起動しますから,TeraTerm等の通信ソフトを使って9600bpsでシリアル接続すると,1秒ごとにCPMの値がパソコンに送られてくるのを見ることができます。
Gc10teraterm

 PCのキーボードから「stop」とコマンドを送ってやってCPMの送出を止め,下記コマンドで各種パラメータの設定をすることができます。

stop   CPM送信を停止する
go      CPM送信を開始する
show  設定値を参照する
set     設定値を変更する 書式 set param=値
save   設定値をEEPROMに保存する

設定可能なパラメータの種類
 ttc トータル検出数
 gms ガンマ線感度係数
 atc アラームがONになるCPM値
 hvg 電圧調整値

【例】
set gms=200
  ガンマ線感度係数を 200 [cpm/uSv/H] に変更
set atc=300
  300CPMをオーバーしたときにアラームを鳴らす
set ttc=0
      検出数カウンタを 0 にセットする
set snd=off
  スピーカーをOFFにする

デフォルトの設定値は次のようになっていました。
gms: 165
atc: 1500
hvg: 55

 さて,GC10専用のリアルタイム放射線量モニターソフトGC10 Monitor ってのを作ってくださった方がいらっしゃるので,これを使ってみましょう。
 僕の環境(Windows10)だと,VB6のランタイムが必要でした。GC10をパソコンのUSB端子につなぎ,GC10 Monitorを起動すると,GC10が接続されているportを探してくれてCPMとμSv/hのグラフが描かれていきます。CPM値が上がったりするとちょっとドキドキしますが,なかなか面白いですなあ。

20200316

| | コメント (0)

2020年3月16日 (月)

ガイガーカウンタ GC10 (1)

20200316_gc10

 福島第一原発の大事故9周年を記念して(?),Amazonで買った ガイガーカウンターキット GC10 を作ってみました。

 GM管は旧ソ連軍製のSBM-20ってやつで,昔 秋月電子で扱っていた浜ホトのGM管D3372よりかなりデカくて感度に期待が持てます。
ケースは秋月電子のSK-7があつらえたようにピッタリです。

 上の写真のように僕の家(岐阜市)だと22カウント/分くらいで,0.133μSv/hを表示しています。放射線モニタリング情報を見てみると,岐阜市は0.55μSv/h程度ですから,少々高め。

 CPMからμSv/hへの換算は,マイコンでCPM÷165と計算してるようですが,この値(gms)を変えてやったほうがいいかもしれません。でも設計者は福島で校正したみたいなのでとりあえず敬意を表してこのままでいきましょうかね。(パソコンとシリアル接続して,TeraTermなどでgmsの値は変更できます)

 大昔に買ったEPIのランタンマントルA-6301(これに含まれるトリウム232から放射線がバリバリ出ますが,現行品はダメみたい)を近づけてみるとすごいことになりました(笑)
下の動画をご覧ください。

 

| | コメント (0)

« 2019年10月 | トップページ | 2020年4月 »