« December 2017 | Main | March 2018 »

February 2018

02/27/2018

RaspberryPi3での日本語入力

トランジスタ技術2018年3月号の特集「AI電脳製作」が面白いので、持っているRaspberry Pi3を使って、その特集記事の内容に沿って、いろいろ試してみる事にした。

トラ技の付属基板に部品を実装して、AIセンサ・フュージョンを完成させ、スピーカボックスを作って、ボックスの上にRaspberryPiとAIセンサフュージョン基板を組み合わせた基板を載せて・・・、RaspberryPi3のGPIO拡張コネクタには、電源、スピーカ、HDMIモニタ、USBキーボード、USBマウス、LANケーブルを接続した。

Img_20180211_093414 Img_20180211_095437格好良く「上記のように出来た」と言いたかったところだが、実はトラ技の付属基板用部品キットをネットで購入する際に、選択すべきものを間違えて、部品が装着された完成品を購入してしまった。出費は増えて、自作の楽しみも損なってしまったが、製作する時間が短縮したこともあり、ソフトウェア開発の部分でいろいろ試して楽しむことにし、失敗して落ち込んだ気持ちを前向きに切り替えた。




Img_20180227_111316 Img_20180227_111443 電源は、安価な中国製5V2A仕様のものを使い、電灯線から電力供給するように工作した。
ペーパークラフトでスピーカーボックスを作る方法は、トラ技68-69頁に記載があるが、僕は少々の木材片が手元にあったので、それを活かしてスピーカボックスを作った。
しかし、手持ちの工具だけで木材を大きくくり貫く加工は難しく、あまり綺麗には出来なかった。また、ケース内にRaspberryPi3のシステムを収納したかったが、寸法の見積もりが甘く、オーディオケーブルなどがケースから飛び出してしまった。
ケース等に付いては、今回の経験を活かして、再度、もう少し見栄えの良いものにしたいと思っている。

トラ技に書かれた順に作業を進め、110頁辺りまで進めてみたが、日本語入力(ローマ字漢字変換)が上手くいかず、日本語文字が入力出来ないので中断。

それで、RaspberryPi3に、Raspbian Stretch をインストールして、先ず日本語入力は出来るようにするための手順を、下記のように確認したので書留めておく。

RaspberryPi3に僕が繋いだ周辺機器は、英語配列のUSBキーボード(ARCHISS RETRO AS-KBPD04/TBK)、USB有線マウス(MO-VET-WDLOBK-01EI001337)

《 手順 》
1)Raspbiaは日本のMirrorからdownloadするのがスピードが早い。下記の日本のサイトの何処かから、最新のRaspbianを選んでDownloadしておく。

MIRROR DEB/DEB-SRC ADDRESS
JAIST http://ftp.jaist.ac.jp/raspbian
(http|rsync)://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian
WIDE Project Tsukuba NOC http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/
rsync://ftp.tsukuba.wide.ad.jp/raspbian/raspbian/
Yamagata University http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/

自分のPCの、何処か適当な場所にダウンロードしたら、7-Zipなどで展開し、Raspbianの imgファイル(ディスクイメージファイル)を準備しておく。

2)次に、
MicroSDカード8GB以上の容量のものを、SDFormatterでフォーマット

3)
Win32DiskImagerを使ってmicroSDカードにimgを書き込む。microSDカードの残り容量部分は何も処理はしない。
Win32diskimage_raspbian





4)RaspberryPi3に3)のmicroSDカードを挿入し、
HDMIモニタ、USBキーボード、USBマウス、LANケーブルを接続し、電源を入れて起動する。

5)起動直後の画面
Img_20180227_150424 Img_20180227_150454・画面左は、起動直後の画面
・画面右は、LX Terminalを起動させたところ







6)Raspi-configの設定
  $ sudo raspi-config
  ①先ず、セキュリティ確保の為、Passwordを変更しておくのがよい
Img_20180227_151535

  







 ②次に、
    
言語の設定
   4 Localization Options を選択 ⇒ <Select>⇒「
I1 Change Locale 」を選択
Img_20180227_151702 Img_20180227_152222








Img_20180227_152338 Img_20180227_152802次に、
ja_JP.ECU-JP ECU-JP
ja_JP.UTF-8 UTF-8
を選んで、次の画面では以降の設定で文字化けを避けるために、
en_GB.UTF-8   を選択しておく。




  ③タイムゾーンの設定
Img_20180227_153640 Img_20180227_153700 Img_20180227_153853

ここで左のように設定して於いた筈なのに、後の確認では設定が変わっていない・・・(OKボタンを押すのを忘れたか?)




  ④キーボードの設定
Img_20180227_153944 Img_20180227_154007 Img_20180227_154103








Img_20180227_154128 Img_20180227_154151 Img_20180227_154209









7)日本語化

  ①日本語フォントのインストール
  $ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

Img_20180227_154506 Img_20180227_154535 Img_20180227_154602








 ②日本語入力の設定
   ここでは、Mozc(Google日本語入力のオープンソース版)をインストールすることにした。
   $ sudo apt-get install fcitx-mozc
Img_20180227_154755 Img_20180227_154810 Img_20180227_155207




ここで、reboot する事。


 リブートした後、
 ③入力切替の設定で
Img_20180227_160007画面の右上のキーボードアイコンを右クリックしてメニューを表示させて、configureを選んでクリック、







Global Configを開いて、漢字変換時の入/退 時のキー設定を登録する。
左側の「Ctrl+Space」は、それでいいので、右側の「Empty」を
「Ctrl+Space」に設定する。

Img_20180227_160524 Img_20180227_160545 Img_20180227_160556








ここで、Input Method も確認してみると・・・
Img_20180227_180314 Img_20180227_180328左の画面で「OKボタン」をクリックすると、








Img_20180227_180357ここで「Yes」をクリックして、








Img_20180227_180415fcitx のボタンをONにして、「OK」をクリックしたあと、
この画面を閉じて、







ここで、もう一度画面右上のキーボードアイコン右クリックメニューから「Configure」をクリックして・・・(先ほど、確認しておけばよかったのかもしれないが)

Locale関連設定を日本にしておかないといけないので、・・・ 設定画面を開くと英国(GB)なっているので修正する。既に設定していた筈なのに、確定させるのを忘れたのかも・・・
Img_20180227_180542 Img_20180227_182646 Img_20180227_182707









Timezone(Asia,Tokyo)、Keyboard(僕が使用しているのはUS仕様のキーボード)、WiFi Country(JP Japan)についても開いてみて、要すれば修正する。
Img_20180227_182732 Img_20180227_182819 Img_20180227_182850









入力・修正が終わったら、「Restart」する。

Reatartによって、メニューも日本語表示になっている筈だ。
画面右上のキーボードアイコンをマウスで右クリックし、メニューから「設定」を選んでクリックし、入力メソッドの設定画面を表示させる。

入力メソッドの設定画面の左下の「+」をクリックすると「入力メソッドの追加」画面が表示され、その中に『Mozc』があるので、これを選択して入力メソッド中に追加してやる。
英語(半角英数入力)のコマンドを打ち込み、途中で日本語入力『Mozc』に切り替える場合には、この通りの順に配置する必要が有る。逆の順で配置すると、日本語入力が先行するので、使いづらくなる。ご注意!

Img_20180227_202742 Img_20180227_202800 Img_20180227_202810 Img_20180227_202821







アクセサリから「Text Editor」を開いて、文字入力画面で「Ctrl+Space」と操作すると、日本語文字入力になる。
Img_20180227_202852 Img_20180227_202936








以上で日本語変換の設定は終了。

《注意点》その後、Node-REDを楽しんでいて、何かを「やっちまった」らしく元の状態に復帰できなくなったので、再度インストールすることにした。ところが、上記に書いたように、英語キーボード設定で何度行っても「2」のシフトで「@」キーが打てない。
原因は、キーボードのミス設定なので、再度キーボードを設定する。
1)sudo raspi-config
設定画面が開いたら、
2)4  Localization Options  を選択

3)次の画面で
  I3  Change Keyboard Layout を選択
4)キーボードは、英語キーボードなので、
  Generic-key PC  を選択 <OK>
5)Keyboard layout は、
  English(US)   を選択(これ以外に余計なことが記載されていないものを選ぶ)
6)次の選択では、Altキーがスペースキーの両側にあるタイプなので、
  Both Alt key  を選択
7)次のメニューでは
  キーにCaps Lock があるので、
  Caps Lock  を選択 
8)Control + Alt + Backspace でXサーバーを閉じられるように <Yes> を選択
9)最初のメニュー画面に戻ったので、<Finish>を選択して終了する。
以上でキーボードの設定は終了。

の筈なのに、rebootすると、キーボードは英国(EU)になっている????? なぜ?

画面の右上のキーボードアイコンをマウスで右
クリックして、メニューの中から
Conigure Current Input Method  を選択し、クリックする。

開いた窓の一番上には Keyboard - English (UK)  が居座っていて、変更しても変わらないことがわかった。
①そのため、
Keyboard - English (UK)  をハイライト選択して、この窓の一番下の「ー(マイナス)」ボタンをクリックして削除し、
②次に「+(プラス)」ボタンをクリックして、
Keyboard - English (US) を探して「OK」ボタンをクリックして窓の中に追加する。
③追加しただけでは、Mozc(日本語選択)の下側に位置するので、上向きの矢印キーを使って Keyboard - English (US) を一番上にする。
④窓の右上の「x」をクリックして、これで設定終了。

02/11/2018

Windows10 ユーザーアカウント制御されるアプリの自動起動方法

毎日定刻にPC(Windows10)を起動させ、その際に、アプリも自動起動させたい。ある設定した時刻になったら、PCをシャットダウンさせるという事をやりたかったのだが、ようやく上手く設定が出来たようなので、忘れないうちにここにメモをしておく。

僕が使っているPCの構成(monitorの仕様、BIOS設定方法など)の問題も有ったように思うので、そのシステムの概要をここに記載しておく。

《追記:2018/02/11》 自動起動させるProgramを変更したので、ここに、その際に行った情報を記載しておく。Program「UC.exe」はアンインストールして、機能が高いと思われる(Security Eyeという名前のソフト)Se.exeに変更してしまった。PCの起動とシャットダウンに関する基本的な部分は残っている所があるので、それを活かしながら変更を行った。後述の部分で、追記したところは
《追》を記載。


PCの概要

 Motherboard: Z97N-WiFi  LGA1150用 Mini-iTX (Gigabyte製)
 CPU: intel Core i5 4590 @3.30GHz BOX(Haswell Refresh)
 Memory: CORSAIR VENGEANCE 16.0GB
 Graphics: 内臓IGFX
 HardDisk: PLEXTOR 
 PC Case: Cooler Master  Elite 130 Cube
 電源: Enermax ELT500AWT  500W仕様
 OS: Windows10 Pro 64bit版

周辺装置

 Monitor: LG FLATRON IPS206T-PN  (DVI接続)
 Keyboard: FILCO Excellio FKB109EXJB
 Mouse: Microsoft  Mobile Optical Mouse (有線)

調べてみると、自動起動はBIOSの「RTCによる電源ON」から行い、シャットダウンは「タスクスケジューラ」から行えば良いらしい。

問題点は、
1)PC起動時にDelキーを押しても、BIOS画面を開くことが出来なかったこと。
2)BIOS画面を開くことが出来るように変更後、PCを起動後に、監視カメラ用アプリが連動して上手く立ち上がらなかったこと。
3)監視カメラ用のアプリは立ち上がったものの、ユーザーアカウント制御のために、アプリがそこで止まってしまうこと。
上記の問題は、下記のように設定して、問題が解消し、監視カメラ用アプリは自動的に起動した。

1)の問題は、僕が使っている自作PCを製作した際に選択したレガッシーBIOSの問題かもしれないし、あるいは、使っているモニターのPCとの接続仕様によるものかもしれない。
しかし、BIOSが表示できないという問題の原因は、どちらなのかを切り分ける事が出来ていない。

1.BIOS画面を表示するために、
 いろいろやっている間に、PCの起動ディスク(C:ドライブ)に余計な書き込みをしてしまい、PCが起動できなくなった。しかし、このような問題は起きてしまうものなので、事前にHDD(D:)の中には起動用のバックアップを作り、DVDにも起動用ディスクを作っておいた。

作業場所の問題があり、周辺機器(モニター、キーボード、マウス)を外して、このPCだけを別の部屋に移動させて設定作業を行った。

 ①PCからSSDを取り外して、別のPCに組み入れ、ここでSSDのパーティションを外し、初期状態にした。
 ②初期状態に戻したSSDを、再び元のPCに組み込み、マザーボード上のCMOSジャンパーピンをショートさせて、データをクリアし、周辺機器を接続して、電源ON。
 ③これで、電源ON直後に「Del」キーを押すことで、BIOS画面に入ることができた。

2.BIOS画面での設定
 BIOS画面を開いて、システム電源を計画的にONにする設定を行う。
 ①Power Management (電力管理) 画面で、Resume by Alarm(アラームで再開する)に入りを有効にして、
  Wake up hour と Wake up minute を設定した。
  僕は、午前4時30分にPCを起動させるようにしたいので、hourの入力は「4」を、minuteの入力は「30」とした。

  毎日同じ時刻に起動なので、Wake up day(開始日) は 「0」のままである。
  また、秒まで拘らないので、Wake up second(秒で起動) も 「0」のままである。

 ②予期せぬ停電などで、AC電源が失われた場合の電源復帰もここで設定しておく。
  僕は、Memory を選択し、AC電源が戻った際に、システムが停電する前の状態と同じ状態となるようにした。
  
 ③キーボードやマウスによる電源ONは不要なので、Disabledを選択した。

 ④「Save & Exit」を選択し、保存して終了! これで、PCの起動設定は出来たはずだ。
  
 ⑤設定の確認のため、ここで行っている他の設定準備が終わり、しばらく時間を置いた後に、
 例えば、10数分後にこのPCが自動起動するように、前述のResume by Alarmの時刻設定を行って、この状態を「Save & Exit」で保存しておくことにする。

 この確認作業が終われば、再びBIOS画面で起動させる時間を設定し直す必要がある。
 忘れないようにしないと・・・。

3.Windows10のパスワードなし起動
 僕は、「Windows 10で起動時のパスワード入力を省略する方法
」のURLを参考にさせていただいた。

4.スタートアップにアプリを登録する
 PCが起動したときに連動して自動起動させたいアプリは、スタートアップに入れれば良いらしい。
 ①アプリをスタートアップに登録するためには、登録するアプリをデスクトップ画面に仮置きする。
 注記)このとき、アプリのプロパティを開き、
  「互換性」のタグをクリックして、一番下にある「管理者としてこのプログラムを実行する」にチェックを入れてはいけない。これを行うと、アプリが起動しなくなる可能性が高い。

 ②Windowsボタンをマウス右クリックし、「ファイル名を指定して実行」メニューを選択する。
 ③開いた窓の中の枠内に 「shell:startup」 と入力し、「OK」をクリックする。

 ④新たに、エクスプローラーのスタートアップフォルダーが表示される。

  これまでに、アプリのスタートアップ登録をしていなければ、このフォルダーの中は空のはずだ。

 ⑤このスタートアップフォルダーに、デスクトップに仮置きしておいたアプリを、ドラックアンドドロップで移動させる。

 ⑥PCを再起動させる。

 この作業が完了すれば、監視カメラ用アプリはPC起動直後に起動するだろうと思っていた。
 アプリは起動したが、起動後『ユーザーアカウント制御(UAC)』という機能が働いて、「このアプリがPCに変更を加えることを許可しますか?」と聞いてくる! ここで「はい」と答える必要がないようにする必要がある。そうしないと、シャットダウンの時刻までアプリは止まったままである。

 それほど単純ではなかった。
まだ他の項目を設定する必要がある。

この課題を解消するためには、

5.まず、タスク スケジューラでタスクを作成する必要がある。
タスクスケジューラの起動は、タスクバーの「検索フォーム」に「task」と打ち込むと、表示される筈。メニューから「タスク スケジューラ」を選んでクリックする。

①画面右側の操作メニューから「タスクの作成・・・」を選び、

②開いた「タスクの作成」の窓の 全般タグ に、名前、説明を記入する。
 僕は、名前に「MotionDetectCamera」と記載し、説明は空欄とした。
 《追》今回はソフトウェアの名前「Security Eye」とし、
 ・ユーザーがログオンしているときのみ実行する・・・ボタンをON
 ・最上位の特権で実行する・・・・・・・・・・・・・にチェックを入れる。
 ・構成の枠内は、・・・・・・・・・・・・・・・・・Windows10を選択する。
 まだOKボタンはクリックしない。 

③操作タグ をクリックし、
 新規をクリックして新しい操作を作る。
 プログラムの開始を選んで、

 プログラム/スクリプト欄 には、
「参照」をクリックして、アプリが格納されている場所(例えば、C:\Program Files(x86)\Security Eye\) からプログラム (Se.exe) を探し場所を確認する。
 そして「C:\Program」とだけ入力する。《追》分割して入力するのだが、それらは内部で結合される。

 また、引数欄には、「Files(x86)\Security Eye\Se.exe」と入力する。
 僕は、開始(オプション)欄に 「/rl highest」と入力した。
 《追》「r」の次の文字は、半角縦線「|」である。

 OKをクリックして戻る。

④トリガータグ をクリックし、
 新規をクリック
 《追》タスクの開始で 「ログオン時」を選択し、
  次に、「特定のユーザーのボタン」を選択し、OKをクリックする。

⑤条件タグ をクリックし、
 入っているチェックをすべて外す。
 《追》「電源」の項目は、全てチェックを入れた。
 設定後、OKをクリックする。

注記)アプリケーションプログラム(ここでは”Se.exe”)は、ID、パスワードの入力無しで起動できるように設定しておくこと。

《追》これでもまだ「最上位の特権で実行する」が選択されているが、未だ『ユーザーアカウント制御(UAC)』で止められてしまう。

6.そのためユーザーアカウント制御の設定を変更する
先ず、モニター画面左下隅タスクバーの「検索フォーム」に「uac」と入力して、

「ユーザーアカウント制御設定の変更」をクリックし、「
ユーザーアカウント制御の設定」窓画面で、4段階の3段階目に設定してOKをクリックする。


7.最後に、PCをシャットダウンする設定を行う。

先程4.で設定したが、タスク スケジューラで、シャットダウン用のタスクを作成する必要がある。
タスク スケジューラの起動は、タスクバーの「検索フォーム」に「task」と打ち込むと、表示される筈。メニューから「タスク スケジューラ」を選んでクリックし起動させる。

①操作のタブをクリックし、今度は「基本タスクの作成」をクリックする。

②名前は、「自動シャットダウン」と付け、次へのボタンをクリックした。

③次の画面タスクトリガーでは、毎日のボタンを選択し、次へをクリックし、
  毎日の 開始時刻を設定する。
    僕は、当日の深夜「23:55:00」に設定し、次へのボタンをクリック。

  《追》タスクスケジューラライブラリーで、左右方向で中央列の上側の画面の中から
     「自動シャットダウン(自分が前回設定したタスク名)」を探し、マウス右クリック、
     メニュー画面からプロパティを選択し、クリックすると、編集画面が表示される。
     編集ボタンをクリックして、
      スケジュールに従うとし、毎日行うタスクの時間を編集する。

④操作の画面では、「プログラムの開始」ボタンを選択し、次へ。

  プログラム/スクリプトには、
   「 shutdown 」
  引数の追加には、
   「 /s /f 」
  と入力し、次へ。

⑤完了画面で、「完了」ボタンをクリックする。

以上で、全ての設定作業が完了したので、PCを再起動、又はシャットダウンした後PCの電源ボタンを押してみる・・・・・アプリは立ち上がったかな?

別のPCで確認した結果 この設定で無事立ち上がった!

アプリプログラムが上手く立ち上がらないので、ここでの設定に問題があるのかと思って色々調べた結果、アプリプログラムには、32bit版と64bit版の2種類があり、PCが64bit OSだったので64bit版のアプリを選んでインストールして確認しようとしていたが、何度やってもアプリの起動がおかしいので、32bit版にインストールし直して確認してみた。
電源ON後、ユーザーアカウント制御(UAC)も表示されずにパスし、アプリ(UC.exe)も起動し、画面表示された。

02/07/2018

Arduino NANO, DHT11 を使い、湿度によりPower制御する(その2)

Img_20180205_214956 Img_20180205_215141 Img_20180205_215301 前回の記事でトライアルが上手くいったので、ブレッドボードから基板に移して実用になるように進めてみた。




Img_20180207_091433 Img_20180207_092152 Img_20180207_092520 収納するケースは、百均ショップセリアでプラスチック製弁当箱を購入し、電源用とセンサー用にそれぞれ寸法を微調整しながら穴を空けて挿し込んだ。
電源は、中国製の5V2A仕様のものをAmazon経由で購入(@344円:SODIAL(R)AC 110-240VがDC 5Vに切り替え 電源コンバータ S-A10-05
)。ただし、Arduino NANOのVIN入力の仕様は7V~12Vだが、電圧調整ボリュームを一杯にしても6.3Vまでしか上げられなかった。しかし稼働できている。

Img_20180207_092458 Img_20180207_155332Photo 弁当箱ケースの蓋を閉じて、2x4用固定部品を利用して、取付けた。
ケース下側の線が、装置のArduinoなどに電力を供給し、右側のDHT11センサー(@152円:Rasbee デジタル 温湿度センサモジュール DHT11 5個入り760円
)により雰囲気湿度を計測し、ケース左上の電源コードのスイッチをON/OFFする。




02/04/2018

PCがネットに繋がらない・・・どうしたんだ!

今朝、メインPCを見るとネットに繋がらなくなっている。

早速、ネットワークのトラブルシューティングをすると・・・
Photo 「DNSサーバーに問題がある可能性があります」と表示される。(左の画像)


ネットにつながっているスマホで情報検索してみると、不具合項目の一つとして「プロバイダDNSサーバーの不具合の可能性がある」とのこと・・・ 
得られた情報から、DNSサーバーのアドレスを変更して見る事にした。



PCより、
スタートボタン上でマウス右クリックでメニューを表示し、

ネットワーク接続 ⇒ イーサネット ⇒ アダプターのオプションを変更する 
と辿り、イーサネットの一覧画面を表示する。

該当するイーサネットの上で、
マウス右クリックメニューからプロパティを選択。

次に、プロコトルバージョン4(TCP/IPv4)を選択して

プロパティボタンをクリックし、
「次のDNSサーバーのアドレスを使う」 にチェックを入れて(私のPCでは既にチェックが入っているが)、サーバーのアドレスを次の値に変更し、OKをクリック。
優先DNSサーバー 8.8.8.8
代替DNSサーバー 8.8.4.4

この後、PCを再起動したら・・・ ネットにつながった!
やれやれ・・・

《その後》
 同様の事態(インターネットにつながらない状態)が発生した。
 既に、上記の設定済なのに・・・ 調べてみると、私が以前PC等に設定していたIPアドレスが、自動設定された機器が立ち上がった後、IPアドレス設定済みの機器の電源が入り、アドレスが衝突した(ダブルブッキング)状態になったらしい。

 私が設定していた固有IPアドレスを、自動設定に変更したらネットに繋がるようになった。

02/03/2018

Arduino NANO, DHT11 を使い、湿度によりPower制御する

前回の回路を利用して、温度・湿度計測センサ「DHT11」で計測した環境湿度が30%よりも低下した場合に、リレーにより電源のSWをONにする装置のモデルを作成した。

前回に対して追加したのは、下記①~③
①パワーリレー
②パワーリレーを制御するための電源線と信号線(これはArduino NANOのD8ピンに接続した)
③パワースイッチの動作を確認するために、
  外部電源とLEDを組込んだ。
尚、私が前回使っていたブレッドボードでは、電源ラインに問題点がある事が判明したので、
OLEDディスプレイ周辺の回路は、別の新しいブレッドボードを使ってジャンパーピンの接続を簡素化した(見栄えを良くした)。

Fritzingを使って回路を描いてみた。
Dht11oled_displayrelay Img_20180203_203316PowerRelayの出力のところには、換気用ファン用の電源回路にすることになるが、ここでは論理が合っているか否かを確認するために、外部電源でLEDを点灯することとした。



拙宅では、衣類を入れるクローゼットに、換気ファンを設けたが、温度・湿度共に低い冬期でも常にファンが回るために、低い湿度の状況ではファンを停止したいと思った。それで、ファンをコントロールするための湿度はどれくらいに設定するのが良いか、調べてみると、「エコハウス・マニュアルノート・ページ
」 の中に下記の記事を見つけた。私は、室温に関わらず、ファンを制御する湿度を30%でやってみる事にした。

http://www.ecolab.or.jp/yumesekkei/note310.htmより引用
カビ発生の条件→
適度な湿度
カビは湿気を好みます。相対湿度77%~99%がカビにとって繁殖しやすい湿度といわれます。室内の湿気を40~60%に保っていても、風が通らず結露しやすい部屋の隅や押し入れ、温度の低い部屋などは湿度が高くなりやすく、カビが生えやすい場所です。


スケッチは下記のようになる。
《Sketch》

// DHT11センサーから湿度と温度を読み取り、PowerRelayを制御する

#include "DHT.h"
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

#define DHTPIN 2     // データピンをD2へ

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// DHT11の pin 1 (正面左側) NANOの +5Vへ
// DHT11の pin 2(正面左から2番目、データピン)NANOの D2 且つ 10kΩ経由で +5Vへ
// Connect pin 4 (正面右側) NANOの GNDへ

int powerSW   = 8;    // power SW

DHT dht(DHTPIN, DHTTYPE, 6);

char str[10];

void drawTest(void) {
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr( 5, 20, "Measurements");  // 画面表示が 2pixほど右にシフトしているため
}

void setup() {
  Serial.begin(9600); 
  Serial.println("DHT11 Measurements");
 
  dht.begin();
  u8g.firstPage();  
  do {
    drawTest();
  } while( u8g.nextPage() );

  pinMode(powerSW, OUTPUT);
  digitalWrite(powerSW, HIGH);  // power Off
  // Wait a few seconds.
  delay(2000);
}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("DHTセンサからのデータ読取りに失敗しました!");
    return;
  }

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

  Serial.print("Humidity: "); 
  Serial.print(h);
  Serial.print(" %\t");
  
  Serial.print("Temperature: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");

  if ( h > 30.0 ) {
     digitalWrite(powerSW, LOW);  // power On
  } else {
     digitalWrite(powerSW,HIGH);  // power Off
  }
  
  // picture loop
  u8g.firstPage();  
  do {
    u8g.setFont(u8g_font_helvB08);

    u8g.drawStr( 5, 15, "Humidity:");
    u8g.drawStr( 80, 15, dtostrf(h, 5, 2, str));
    u8g.drawStr( 112, 15, "%");
    
    u8g.drawStr( 5, 30, "Temperature:");
    u8g.drawStr( 80, 30, dtostrf(t, 5, 2, str));
    u8g.drawStr( 112, 30, "\260C");
    
    u8g.drawStr( 80, 45, dtostrf(f, 5, 2, str));
    u8g.drawStr( 112, 45, "\260F");
    
    u8g.drawStr( 5, 60, "Heat index:");
    u8g.drawStr( 80, 60, dtostrf(hi, 5, 2, str));
    u8g.drawStr( 112, 60, "\260F");
    
  } while( u8g.nextPage() );

// Wait 30 seconds between measurements.
  delay(30000);
}

この結果を用いて、実用基板を起こしてみようと思う。

Arduino NANO-DHT11-OLED_Display を使って温度表示

Img_20180202_202410 Arduino NANODHT11を使って湿度と温度を計測し、それをOLEDディスプレイに表示する方法をメモしておく。
OLEDディスプレイへの表示は、Arduino Unoでは問題無く表示出来ていたのだが、中華製NANOでは表示できなかったので注意点を書いておく。
DHT11を使った湿度と温度の計測に関しては、数多くの記事をネット上に見る事が出来、私もその事例に倣ってブレッドボード上に組み立てた。


.
Img_20180202_203019 私が使ったOLEDディスプレイでは、Unoを使って組上げたものでは問題無く表示できるのに、同じように組み立てたNANOを使ったケースでは、全く表示出来なかった。(電源が入っていない感じ。)
電圧の違い(5V/3.3V)なのか、OLEDディスプレイ本体が壊れてしまったのか・・・と思ったり、ブレッドボード上でレイアウトやピン位置等、ジャンパーピンを何度も差し替え、長時間悩んだ。


ディスプレイの電源は、これまでNANOからブレッドボード上を経由して供給していたが、NANOのピン傍からジャンパーケーブルを使って直接OLEDディスプレイに接続してみたら、表示するようになった。ブレッドボード内に問題が有るのかな?これについては、未だ調査していない。ディスプレイの表示には、送り込んだデータが左に2pixほどずれて表示されるが、表示はするようになったので、部品異常では無いかもしれない。

(2018/02/03 20:13 OELDディスプレイに電源が入らない原因が分かった!

Img_20180203_200922 ブレッドボードには長手方向の途中で電源ラインが分断しているものが有って、そのためにOLEDディスプレイに電源が供給されなかったことが判明。僕はそこに目が行き届かなかった・・・。先ほど気づいたので、左に写真を添付しておく。写真の電源線の部分を見て欲しい。部品が乗ったブレッドボードの方では、赤と青の線が途中で切れている。)





OLEDディスプレイは5Vで動作し、SDA(A4ピンへ接続)、SCL(A5ピンへ接続)してI2Cインターフェースを介してNANOと通信する。

尚、私が参考にしたブログのURLは、
https://t93093.wordpress.com/2017/07/31/temperature-humidity-monitor-using-arduino-nano-dht11-0-96-inch-128x64-i2c-oled/


Dht11oled_display 回路は簡単なので、fritzingで描いて・・・、
sketch も下記に添付しておく。
ディスプレイ上で左側起点の最初の文字の表記位置を5pix分だけ右にシフトさせているが、これは画面表示が2pixほど左にずれて表示されるための私の暫定的な対応策である。



《sketch》

// DHT11センサーから湿度と温度を読み取り、128X64 I2C OLEDで表示する

#include "DHT.h"
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

#define DHTPIN 2     // データピンをD2へ

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// DHT11の pin 1 (正面左側) NANOの +5Vへ
// DHT11の pin 2(正面左から2番目、データピン)NANOの D2 且つ 10kΩ経由で +5Vへ
// Connect pin 4 (正面右側) NANOの GNDへ

DHT dht(DHTPIN, DHTTYPE, 6);

char str[10];

void drawTest(void) {
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr( 5, 20, "Measurements");  // 画面表示が 2pixほど右にシフトしているため
}

void setup() {
  Serial.begin(9600); 
  Serial.println("DHT11 test!");
 
  dht.begin();
  u8g.firstPage();  
  do {
    drawTest();
  } while( u8g.nextPage() );
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("DHTセンサからのデータ読取りに失敗しました!");
    return;
  }

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

  Serial.print("Humidity: "); 
  Serial.print(h);
  Serial.print(" %\t");
  
  Serial.print("Temperature: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
  
  // picture loop
  u8g.firstPage();  
  do {
    u8g.setFont(u8g_font_helvB08);

    u8g.drawStr( 5, 15, "Humidity:");
    u8g.drawStr( 80, 15, dtostrf(h, 5, 2, str));
    u8g.drawStr( 112, 15, "%");
    
    u8g.drawStr( 5, 30, "Temperature:");
    u8g.drawStr( 80, 30, dtostrf(t, 5, 2, str));
    u8g.drawStr( 112, 30, "\260C");
    
    u8g.drawStr( 80, 45, dtostrf(f, 5, 2, str));
    u8g.drawStr( 112, 45, "\260F");
    
    u8g.drawStr( 5, 60, "Heat index:");
    u8g.drawStr( 80, 60, dtostrf(hi, 5, 2, str));
    u8g.drawStr( 112, 60, "\260F");
    
  } while( u8g.nextPage() );
}

« December 2017 | Main | March 2018 »

August 2019
Sun Mon Tue Wed Thu Fri Sat
        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 31

Recent Trackbacks

無料ブログはココログ