Main

443 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
443
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Main

  1. 1. 小型アグリセンサによる農地モニタリングシステムの開発 平成 23 年 2 月 菅埜, 諒介 鶴岡工業高等専門学校 電気電子工学科
  2. 2. 目次第 1 章 序論 3 1.1 背景と目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 研究概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4第 2 章 ICT 農業 5 2.1 ICT 農業のメリット . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 農業支援システム . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 モニタリングシステム . . . . . . . . . . . . . . . . . . . . . . . . 7第 3 章 アグリサーバ 8 3.1 アグリサーバの仕様 . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2 ハイブリッド発電システム . . . . . . . . . . . . . . . . . . . . . . 9 3.3 アグリ Web サイト . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4 アグリサーバの問題点 . . . . . . . . . . . . . . . . . . . . . . . . 11第 4 章 アグリセンサ 12 4.1 アグリセンサモニタリングシステム . . . . . . . . . . . . . . . . . 12 4.2 ハードウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.3 ソフトウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16第 5 章 測定 17 5.1 測定結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.2 アグリセンサの問題点と今後の課題 . . . . . . . . . . . . . . . . . 18 1
  3. 3. 第 6 章 結論 19参考文献 20付録 21 2
  4. 4. 第 1 章 序論1.1 背景と目的 近年,農業を取り巻く環境は著しく変化している.農業人口の減少,高齢化や産地偽装問題など農業が抱える課題は多々ある.それらの課題を解決する方法として ICT(InformationandCommunicationTechnology)を活用する研究が進められている.農地の気象,土壌データを解析することにより作物の生育状態を把握し,作業指示を行う 農業支援システム ” “ の開発などである.これにより,農業を産業として効率的に行う 営農 ” “ という考えが生まれてきた.その考えに基づき,ICT 農業や農業グリッドと名付けられ研究が進められている. 図 1.1: ICT 農業 3
  5. 5. 1.2 研究概要 本研究で製作したアグリセンサとは,気象データ(気温, 雨量など)を測定し,サーバに送信する機器である.従来の機器では,種々のセンサや無線 LAN などを搭載するため高価,大型になった.また,屋外の農地に設置するため電源のリソースが制限される上に,消費電力が大きいため大がかりな発電システムも要した.今後,普及するためには安価,小型,省電力が必要条件となる. 本研究では安価,小型,省電力なモニタリングシステムの構築を行った. 4
  6. 6. 第 2 章 ICT 農業2.1 ICT 農業のメリット 農業の ICT 化を行うことは農業従事者,消費者の双方にとってメリットがある. 消費者は,今自分が手に取っている食品は, どこで,誰が,どのように生産, “加工されたのか という情報は知ることができない.そういった情報を消費者に “提供することで安全性をアピールできる.これは,食品にもトレーサビリティという概念が生まれつつあることを示唆している.さらにブランドとして他の品種との差別化が図れる.それによる付加価値が市場や地域を活性化することにつながることが期待されている. 農家の熟練や技術は伝承するのが非常に困難である.高齢化が進みさらに農業人口が減少すれば,優れた技術が失われることになる.気象データと対応した作業データがあれば,その因果関係により最適な作業指示が行えるとされている.それにより困難とされていた技術の伝承が行える. 5
  7. 7. 2.2 農業支援システム 農業支援システムは,農地に設置されたセンサから気象データを入力とし,データベース化,表示を行うことで,作物の生育状態を分析,把握し今後の予測に基づき作業指示を与えるものである.例を挙げると,稲の収穫時期は葉の色づきによって判断している.それらを定量的なデータに基づいて行うことができれば,作業指示の自動化,しいては農業技術の伝承など様々なことが可能になるとされてる. 特に農業支援システムのデータ取得,蓄積,閲覧を担う部分をモニタリングシステムと呼んでいる. 図 2.1: 農業支援システム 6
  8. 8. 2.3 モニタリングシステム モニタリングシステムは一般的に農地に設置されたセンサが無線 LAN を介して農家のネットワーク環境によりサーバにデータを蓄え,外部から閲覧するものである. モニタリングシステムには気象データなどを測定する機器が必要である.農場に設置されたサーバ機能を有するセンサネットワークはフィールドサーバ,フィールドセンサなどと名付けられ,実用化に向けて盛んに研究が進められているが,設置面積や消費電力に課題がある. 図 2.2: モニタリングシステム 7
  9. 9. 第 3 章 アグリサーバ3.1 アグリサーバの仕様 本研究室ではアグリサーバと名付けたセンサを実際に設置した.アグリサーバは櫛引町の澤川さんの水田とさくらんぼ畑,伊藤さんのなし園とぶどう畑に計 4台設置されている.アグリサーバはハイブリッド発電システムより電力を供給される.15 分おきに各種気象,土壌データを無線 LAN を通じて送信する.消費電力の問題から夜間の動作は停止している.仕様風向,風速計,カメラ,気温,湿度計,照度計,雨量計,土壌水分計無線 LAN 図 3.1: アグリサーバ外観 8
  10. 10. 3.2 ハイブリッド発電システム 実際に設置される農地では,アグリサーバを駆動する電源がない.よって太陽光や風力といった,自然エネルギーによる発電システムが必要である.ハイブリッドコントローラにより高効率でバッテリに充電を行うことができる.風力発電機,太陽電池モジュールの電力は日照時間やハイブリッドコントローラの効率など多くのパラメータにより算出した値である.バッテリ容量は 3 日間充電できなくとも動作する容量としている.仕様風力発電機(50W)太陽電池モジュール(125W,50W)鉛蓄電池(200Ah)ハイブリッドコントローラ 図 3.2: ハイブリッド発電システム 9
  11. 11. 3.3 アグリ Web サイト アグリサーバから送られたデータは 産直あぐり ” “ を通じて本校のサーバへ送られる.当初は ”産直あぐり ”のネットワーク環境を通して送信していたが,ネットワークの負荷などの問題から,現在は FOMA の通信端末を使用している.FOMA端末も帯域に制限があり問題となっている.送られた気象データは Ruby スクリプトによりデータベース化され.PHP スクリプトで表示を行っている.プログラムに関しては三重大学の亀岡教授からいただいたものを使用している.ホームページは現在,関係者のみに公開している. 図 3.3: アグリ Web サイト 10
  12. 12. 3.4 アグリサーバの問題点 今回,実際に設置してみた結果,さまざまな問題点が浮上した.問題点・大型であること・システムが高価であること(約十∼百万円)・消費電力が大きいこと(20W) 大型であれば農作業の邪魔になる.設置コストは農家が負担しなければならず,複数台でシステムを構築するため 1 台あたりのコストを下げる必要がある.消費電力に比例した発電システムが必要となるので消費電力を抑えることが小型化,低コスト化の重要な点だと考える.以上の問題により 小型・安価・低消費電力 “なアグリセンサ ”の開発が必要となった.また,寒冷地での動作が初めてであり,その影響についても検討していかなければならない.農業支援システムの実現および消費者に情報公開するシステムを目標にしているが,現在はデータを表示するにとどまっている.今後,公開に向けた改良が必要である.また,安定動作し継続的にデータ収集できる信頼性が最も重要である. 11
  13. 13. 第 4 章 アグリセンサ4.1 アグリセンサモニタリングシステム ネットワーク構成を図 2 に示す.アグリセンサは各気象パラメータをセンサで測定する.測定したデータを XBee を用いて親機に無線送信する.親機はネットワークに接続する基板(Ethernet シールド)を介して,研究室内のサーバにデータを送信する.サーバは送られたデータを PHP スクリプトによりテキストファイルに保存する.この処理を 15 分ごとに行う.サーバのデータは Web ブラウザからアクセスすることで閲覧できる.テキストデータとしてだけでなくグラフ表示も可能である.グラフ表示は Google のサービスを用いることにより利便性を高めている. 図 4.1: アグリセンサモニタリングシステム 12
  14. 14. 4.2 ハードウェア 製作したアグリセンサの外観写真を図に示す.マイコンボードには Arduino を用いた.無線モジュールには XBee(DigiInternational 製)を用いた.プログラム上で個別の ID を振ることで ID 別にデータを取得できる.太陽光発電システムを内蔵することで小型化を行った.太陽電池モジュールで発電した電力を,ソーラー充電コントローラによって鉛蓄電池に充電を行う.Arduino,XBee RF モジュール風向,風速,雨量,気温,湿度太陽電池モジュール 12V170mA,鉛蓄電池 12V5Ah,ソーラー充電コントローラ 図 4.2: アグリセンサ外観 13
  15. 15. Arduino とは,単純な入出力を備えた基板と Processing/Wiring 言語を実装した開発環境から構成されるシステム全体を指す.AtmelAVR マイクロコントローラが実装されているマイコンボードはオープンソースハードウェアにつき,設計情報の EAGLE ファイルは Arduino の web サイトにて無料で公開されている.また統合開発環境のソースコードと基板上のライブラリも公開されている.  Arduino の特徴として以下の点が挙げられる。・安価で入手性がよい・シールドと呼ばれる基板でハードウェアの追加が容易である・多くのライブラリが公開されている以上より,誰でも開発できるプラットフォームであるといえる. 図 4.3: Arduino 14
  16. 16. XBee とは,DigiInternational 製の以下のような特徴を持つ無線通信モジュールである.・ISM バンド (2.4GHz 帯)・IEEE802.15.4 に準拠・Zigbee 対応のものが存在・通信距離は 30[m] 1.5[km]・免許が不要・省電力・安価 ・小型 上記からも分かるように非常に高性能な通信モジュールである.特筆すべきは省電力という点である.乾電池で 2 年以上も動作するため,組み込むシステムの省電力化に大きく貢献する.モジュールには複数の種類があり,アンテナの形状や通信距離が異なる.日本の電波法により出力が制限されるが,屋外の通信距離は最大で 1.5[km] となっている.注意すべきは屋内で使用する場合は通信距離が落ちること.また,無線 LAN と同じ帯域で通信を行うため,干渉しないように設定を行う必要があること. 図 4.4: XBeeRF モジュール 15
  17. 17. 4.3 ソフトウェア サーバは Fedoracore13 によって構築したサーバであり,PHP は Apache の環境を用いた.  PHP スクリプトは Arduino から GET 送信されたセンサの値を受け取り,テキストデータに書き込む. 日時の取得には date 関数を用いた.date 関数とは,実行したときの時刻を取得する関数である.今回は実行して取得した日時データを温度データと共に書き込むことで,日時の判別を行う仕様とした.しかし,date 関数から取得した時間と Arduino が測定した時間が異なるという問題点があるので,現在は NTP サーバから取得する方法を検討している.GPS モジュールよりハードウェア的に取得することも可能ではあるが,ハードウェアはリソースが制限され,コストがかかる上に保守性も悪いので今回は行わない. このプログラムを cron によって自動的に実行を行った.cron とは,決まった時間や一定の時間ごとに処理を行うサービスである.今回は一定の時間ごとに PHPスクリプトを実行するという目的で利用する.PHP スクリプトは while によってループすることで常に実行することが可能である.しかし,その方法は推奨されない.なぜならサーバへの負荷が大きいためである.常に実行する必要がないものは,決まった時間に実行することでサーバへの負荷を軽減することにつながる.PHP のデフォルトの設定で 30 秒以上経過するとタイムアウトエラーになるのも負荷軽減のためである. 16
  18. 18. 第 5 章 測定5.1 測定結果 実際に屋外の気温と湿度の測定を行った.図に測定結果を示す.テキストデータを PHP スクリプトで処理し,データを閲覧したい日付を入力することで Googleのサービスを用いてグラフの表示を行うことができる.また Web ブラウザ機能を持つ端末であれば,端末に依存せずに閲覧できる. 図 5.1: 測定結果 17
  19. 19. 5.2 アグリセンサの問題点と今後の課題 作製したアグリセンサには問題点や課題がある.以下に示す.・センサの種類が少ない・測定データの精度が悪い・XBee の通信の安定性・電源のリソース・システムが閉鎖的である 今後はセンサの増設を考えている.農業において最も重要な情報はカメラによる画像である.JPEG カメラの実装を視野に入れている.また,正確な時刻の取得に GPS モジュールもしくは RTC モジュールの実装が必要だ. センサはアナログ出力のものを用いており,精度は Arduino の A/D コンバータとリファレンス電圧に依存するため精度が落ちる.今後は I2C バスや SPI バスを用いた高精度の計測の検討している.また,測定条件も不十分であり,正確な気温を測定するためにも外気を取り込むファンを取り付けるなど工夫が必要である 無線通信に用いた XBee は小型,安価,低消費電力であるが,安定性という点においては信頼性が低い.今後は無線 LAN もしくは携帯端末を使用することが望ましい. 小型化するために太陽電池モジュールの出力電力とバッテリ容量がトレードオフになってしまう.省電力なハードウェアを実装したが,安定した動作をするためにも電源の問題は依然として残る. このシステムは外部には公開できておらず,閉鎖的である.公開するためにもPachebe や twitter など外部のサービスとの提携が必須である. 18
  20. 20. 第 6 章 結論 モニタリングシステムに必要な基本的な機能を実装できた.目的としていた安価,小型,低消費電力なシステムが構築できた.以下の図に示すように多きな削減率を実現することができた. このようなモニタリングシステムは多くの研究機関で構築され,企業もセンサを開発しているが,最も重要なことは取得したデータの活用法である.アグリサーバもアグリセンサもデータの利活用はできていない.今後 ICT 農業を実現するためにはデータの活用は不可欠である.モニタリングシステムは目的ではなく,ICT 農業を実現する手段に過ぎない.しかしながら,安定して動作し,連続的に気象,土壌データを取得できるモニタリングシステムが開発されていないのも事実である.そういったことも含め,これからも多くの試行錯誤が必要な分野である. 図 6.1: 従来型との比較 19
  21. 21. 参考文献[1] 農業グリッドが目指すもの 二宮正士[2] Arduino.cc   http://arduino.cc/[3] ディジ インターナショナル  http://www.digi-intl.co.jp/ 20
  22. 22. 付録  本研究で作成したプログラムとサーバの設定を下記に示す。アグリセンサプログラム/**serverphp_node_5*templreture*humiditry*BYTE*ID*/////変数宣言//ここから/////////////////////////////////////////////////////int AT_inPin = 0; // 温度センサ入力ピン番号int AT_val; // 温度センサ入力値 (0?1023)int AH_inPin = 1; // 湿度センサ入力ピン番号int AH_val; // 湿度センサ入力値 (0?1023)int outputTerm = 10; // 計測結果出力ターム(10 秒ごとに平均摂氏値を出力する)float v = 5; // 基準電圧値 ( V )int tempC = 0; // 摂氏値 ( ℃ )int hih = 0; // 湿度 (%)float tempCPlus = 0; // 10 秒ごとの合計摂氏値 ( ℃ )int hinplus = 0; // 10 秒ごとの合計湿度 ( % )int ID = 1; // センサ ID(任意の値)/////////////////////////////////////////////////////変数宣言//ここまで//初期化関数//ここから/////////////////////////////////////////////////void setup(){ Serial.begin(9600);}////////////////////////////////////////////////初期化関数//ここまで////メイン関数//ここから/////////////////////////////////void loop(){ //温度センサ//ここから///////////////////////////////////////////// // 1 秒に一回、10 秒間分温度計測 for (int i = 0; i < outputTerm; i++ ) { // アナログピンから計測値を取得 (0~1023) AT_val = analogRead( AT_inPin ); 21
  23. 23. // 摂氏に換算 tempC = ((v * AT_val) / 1024) * 100; // 現 for 文ループ内で使わなくなった変数は解放 AT_val = 0; // 平均値を取得するために 1 秒ごとの値を 10 秒分合計しておく tempCPlus += tempC; // 現 for 文ループ内で使わなくなった変数は解放 tempC = 0; // 1 秒間ストップ delay(1000); } // 10 秒間の平均摂氏値 tempC = tempCPlus / outputTerm; // 現 loop() ループ内で使わなくなった変数は解放 tempCPlus = 0; /////////////////////////////////////////////////////温度センサ//ここまで //湿度センサ//ここから//////////////////////////////////////////////// for (int i = 0; i < outputTerm; i++ ) { // アナログピンから計測値を取得 (0~1023) AH_val = analogRead( AH_inPin ); // 湿度に換算 hih = map(AH_val,6,777,0,100); // 平均値を取得するために 1 秒ごとの値を 10 秒分合計しておく hinplus += hih; // 現 for 文ループ内で使わなくなった変数は解放 hih = 0; // 1 秒間ストップ delay(1000); } // 10 秒間の平均摂氏値 hih = hinplus / outputTerm; // 現 loop() ループ内で使わなくなった変数は解放 hinplus = 0; ///////////////////////////////////////////////////湿度センサ//ここまで //送信部分 Serial.print(ID); Serial.print(tempC,BYTE); Serial.print(hih,BYTE); //Serial.print(tempC); //Serial.print(hih); Serial.print("0"); //ディレイ部分 delay(880000UL);}/////////////////////////////////////メイン関数//ここまで 22
  24. 24. アグリセンサ親機プログラム/**agrisensor_host*/#include <Client.h>#include <Ethernet.h>#include <Server.h>#include <SPI.h>////////////////////////////////////////////////////////////////////////int temp = 0; // 摂氏値 ( ℃ )int hih = 0 ; // 湿度( % )int ID ;int a[4];int i;///////////////////////////////////////////////////////////////////////////* サーバのポート番号を定義 */#define PORT 80//////////////////////////////////////////////////////////////////////////byte mac[] = { //Ethernet シールドの mac アドレス 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };byte ip[] = { //IP あど 160, 18, 8, 158 };byte server[] = { 160,18,8,156 }; // 接続先の IP アドレス// 指定した IP アドレスとポートに接続するクライアントを生成Client client = Client(server, PORT);//////////////////////////////////////////////////////////////////////void setup(){ //weit delay(1000); Serial.begin(9600); // Ethernet ライブラリとネットワーク設定を初期化 Ethernet.begin(mac, ip); //Ethernet に引き渡す}////////////////////////////////////////////////////////////////////////void loop(){ //バッファが4のとき読み込む if(Serial.available()>=4){ for(i=0;i<4;i++){ a[i]=Serial.read(); Serial.print("a["); Serial.print(i); Serial.print("]="); Serial.println(a[i]); } //チェ ックビット a[3] が 0 のとき処理 if(a[3] == 48){ ID = a[0]-48 ; temp = a[1]-60 ; hih = a[2] ; Serial.print("ID="); Serial.println(ID); Serial.print("temp="); Serial.println(temp); Serial.print("hih="); Serial.println(hih); 23
  25. 25. // 指定した web サーバへの接続開始 // 成功 if (client.connect()) { Serial.println("connected"); // 指定の web サーバの PHP スクリプトに GET 送信 // ’temp’ という名前で計測した温度値を送信 client.write("GET /readdata.php?ID="); client.print(ID, DEC); client.write("&temp="); client.print(temp, DEC); client.write("&hih="); client.print(hih, DEC); client.write(" HTTP/1.1n"); client.write("HOST:160.18.8.156nn"); // 接続を終了 client.stop(); // 失敗 } else { Serial.println("connection failed"); client.stop(); } }else{ //チェ ックビットが違ったら初期化 Serial.flush(); for(i=0;i<4;i++){ a[i]=0; } } }}/////////////////////////////////////////////////////////////////////// 24
  26. 26. Xbee の設定  XBee の設定を行う.パソコンに専用ケーブルにより接続し,ハイパーターミナルや TeraTerm などの通信ソフトを使って設定を行う.また,digiinternationalより XBee の設定を行う ” X-CTU ”というソフトウェアが無償で提供されている.X-CTU を用いることで簡易に設定できるので,今回はそれを用いて設定を行う.X-CTU を用いて以下のように設定する .親機 CoordinatorPAN ID 3332(親と子で同じ値)DH 0DL FFFF子機 Router/END Devide ATPAN ID 3332 (親と子で同じ値)DH 親機の SH の値(固有値)DL 親機の SL の値(固有値) 今回用いた XBee のバージョンは Zigbee 対応のものであるため,Zigbee の規格に準拠した設定を行う. Zigbee では, 親機 Coordinator と子機 Router/ENDDevideATの関係を設定する必要がある.PANID は親と子で同一の値とする.PANID が違うXBee 同士では通信は行われない.親機は Coordinator に設定する.DH を 0,DLを FFFF とする。これにより broadcast の設定となり,同じ PANID の XBee すべてに信号を送る設定となる.子機は Router/ENDDevideAT に設定する.DH は親機の SH の値,DL は親機の SL の値とする.SH と SL は MAC アドレスのようにそれぞれのモジュールで固有の値である.END Device は親機にのみ通信を行う設定とする.また,Router は自分宛て以外の信号を受信した場合に信号の中継を行う設定である. 25
  27. 27. サーバ(Apache)設定 デフォルトの設定ではエラーが表示されない。よって設定を変更する。端末を起動し以下のコマンドを打ち込む.[root@lucen /]vi /etc/php.ini このコマンドにより vi エディタが起動し、php.ini の内容をテキストエディタを使わずに編集することができる。この php.ini は apache の設定ファイルである.error_reporting = E_ALLdisplay_errors = On このように表記を変更し、上書き保存する。vi エディタの操作方法についてはリファレンスを参考にした.[root@lucen /]/usr/sbin/apachectl restart  Apache を再起動する。これによって php ファイルを実行したときにエラーが表示されるようになる. 26
  28. 28. データ処理 PHP スクリプト<?php//readdata.phpdate_default_timezone_set(’Asia/Tokyo’);print(date(’Y/m/d H:i:s ’).’<br>’);$Y = date("Y");$m = date("m");$d = date("d");$H = date("H");$i = date("i");//GET 送信がないならエラー//if(empty($_GET))//echo "No GET variables";//Arduino から GET 送信された温度の値を受け取る//else$strID = 0;$strTempVal = 0;$strhihVal = 0;$strID = $_GET[’ID’];$strTempVal = $_GET[’temp’];$strhihVal = $_GET[’hih’];echo "$strID";echo "$strID";echo "$strID";//日付と温度データを配列に入れる$str = $Y.",".$m.",".$d.",".$H.$i.",".$strID.",".$strTempVal.",".$strhihVal."n// データを保存するテキストファイルの相対パス$strDataFilePath = "data/data$strID.txt";// データを保存するテキストファイルを追記モードでオープン$fp = fopen($strDataFilePath, "a");// 送信された値をテキストファイルに書き込みfwrite($fp, $str);// ファイルポインタをクローズfclose($fp);?> 27
  29. 29. サーバ(cron)設定実行中であるか確認# /etc/rc.d/init.d/crond status2-5 まで ON であればよい# chkonfig ?list crond実行ファイルの権限ls ? al | grep testリスト表示crontab -ecron の書式以下に示す.今回は 15 分おきに PHP スクリプトを実行する.以下に示す.分 時 日 月 曜日 コマンド(例 9:30 に実行30   9  * * * /アドレス/ファイル15 分おきに write_temp.php 実行*/15 * * * * /var/html/www/readdata.php  cron は readdata.php を実行するだけで,php スクリプト自体の処理に関与するわけではないので注意. 実行されない場合は,以下のコマンドでログを表示することで確認できる.# vi /var/log/cron 28
  30. 30. サーバデータ表示 PHP スクリプト<html><head><title>output.php</title><meta http-equive="Content-Type" content="text/html; charset=JIS" /></head><?php//データの受け取り//ポストで受け取り代入$year = $_POST[’year’];$month = $_POST[’month’];$day = $_POST[’day’];$ID = $_POST[’ID’];//表示print ("$ID $year / $month / $day");//テキストを配列に代入//ファイルのパス$file = "data/data$ID.txt";//ファイルを開く$fd = fopen ($file, "r");//開けたらwhile(!feof($fd)){$line= fgets($fd, 4096);while (preg_match_all("/"/", $line, $matches) % 2 and !feof($fd)){//1 行取得$line= fgets($fd, 4096);}//, で分割$row =explode(",",$line);//data に代入$data[] = $row;}//表示echo "<pre>";//print_r($data);echo "</pre>";//ファイルを閉じるfclose ($fd);//受け取った値を配列から探す//配列の大きさの取得$datasize = count($data);//表示//print($datasize);$j=0;for($i=0;$i<$datasize;$i++){if($data[$i][0]==$year){if($data[$i][1]==$month){if($data[$i][2]==$day){$time[] = $data[$i][3];$temp[] = $data[$i][5];$hih[] = $data[$i][6];$j=$j+1;}}}} 29
  31. 31. for($j=$j;$j<95;$j++){$time[$j] = 0;$temp[$j] = 0;$hih[$j] = 0;}//print_r($time);$datas = array( "chxr" =>"0,-10,100|1,0,2400", "chxt" =>"y,x", "chs" =>"440x220", "cht" =>"lxy", "chco" =>"FF0000,0000FF", "chds" =>"0,2400,-10,100,0,2400,-10,100", "chd" =>"t:$time[0],$time[1],$time[2],$time[3]…,temp[0],$temp[1],$temp[2],$…|time[0],$time[1],$time[2],$time[3]…$hih[0],$hih[1],$hih[2],$hih[3],", "chdl" =>"tempreture|humidity", "chdlp" =>"t", "chg" =>"25,9", "chls" =>"0,5,16|0,5,16", "chma" =>"5,5,10,25", "chm" =>"s,FF0000,0,-1,5|s,0000FF,1,-1,5", "chtt" =>"weather");//print_r($datas);//グラフの URI を作成$graph = createUri($datas);//グラフの URI を組み立てる関数function createUri($datas){//Google Chart API のアドレス $uri = ’http://chart.apis.google.com/chart?’; // クエリの初期化 $query = ""; //クエリを作成 foreach($datas as $key => $val){ if( strcmp($query, "") != 0 ){ $query .= "&amp;"; } $query .= "$key=$val"; } $uri .= $query; return $uri;}?><body><img src="<?= $graph ?>" alt="" /></body></html> 30
  32. 32. トラブルシューティング 実行できない原因として以下のことが考えられる.・アクセス権限がない・ファイルを操作できない以上のことを解決するために変更を加える.端末から以下のコマンドを打ち込む.chown apache /var/….data.txt  chown はファイルやディレクトリの所有者を設定するコマンドである。たとえば root で作成されたファイルなどは root 権限を持つユーザーにしか操作できない.よって,/var/www/html/data ディレクトリの所有者,または data.txt の所有者を apache に変更する.chmod R 777 /var/…..data.txt  chmod はファイルやディレクトリのアクセスを設定するコマンドである.たとえば 777 に設定すると実行可能,読み込み可能,書き込み可能という設定になる.ただし,あまりにセキュリティを緩く設定すると動作しなくなることもあるので注意が必要である.コマンドについてはリファレンスを参考にしてほしい. 31

×