プロジェクトノート


班メンバー

5月27日 企画案

今回、私たちの班では、紫外線が肌や健康に与える影響をリアルタイムで把握し、 安全対策を講じるため、UV指数を簡単に確認できるスマホアプリを作ろうと考えています。

現状考えている案は、UVセンサーのデータをWi-Fi経由で送信し、アプリでそのデータをリアルタイムに表示することができます。 これにより、UV指数を簡単に確認することが可能となります

用意するもの

ChatGPTにきいたところ、以下のものが必要なようだ。
  • ESP32: Wi-Fi対応のマイクロコントローラー
  • UVセンサー: GUVA-S12SDなどのUVセンサーモジュール
  • ジャンパーワイヤ: 回路を接続するためのワイヤ
  • ブレッドボード: 回路を組むためのボード
  • 6月3日 フィールドワーク調査

    今日は、UVセンサーが届かなかったため、フィールドワークをする際のアンケートを考えた。

    紫外線対策に対するアンケート

    6月10日 センサー接続

    今回はUVセンサーが届いたので、早速接続しようと思う。


    【GUVA-S12SD アナログ紫外線センサー1918】

    【ESP32開発ボード Wi-Fi + BLEモジュール ESP-WROOM-32】

    1.UVセンサーの接続

  • UVセンサーのVCC(+)をESP32の3.3Vピンに接続
  • UVセンサーのGND(-)をESP32のGNDピンに接続
  • UVセンサーのアナログ出力(OUT)をESP32のアナログ入力ピン(GPIO34)に接続

  • 2.Arduino IDEの接続

    ここはファブラボの方がしてくれたのでいまいちよくわかってないが、デバイスマネージャーから ESP32のボードマネージャを追加するためCP210x Universal Windows Driverを追加する必要があるらしい。ここら辺はよくわからない
    今日はここらへんで終了した。Arduinoがエラーを起こしてしまっていたので、次回はこのエラーを改善していきたい

    6月17日 センサー接続②

    今回は前回の続きです。前回はジャンパーワイヤーをはんだ付けしていたが、これはあまりよくないらしいのでブレッドボードを使うようにした。 また、しっかりセンサーが反応してくれているのか確認するためLチカしてみた。


    うまくいっているので今度はセンサーとモジュールを接続していこうと思う。


    こんな感じに接続したが、Arduinoはエラーを起こしてしまった。原因はリセットボタンを押してしまっていたためだった。押さないでやってみると、エラーが起きずにモニターに反映した。

    エラーは起きなかったものの、モニターに出される数値が4950で一番高い数値か0で一番低い数値しか出ない。たまに、200とかなる。次回はここを改善していきたい。

    6月24日 モニター

    今回も前回の続きです。 センサーの数値から危険度が分かるようにしてみました。
    
            int sensorPin = A0; // UVセンサーが接続されているアナログピン
            float calibrationFactor = 307.0; // キャリブレーション係数(センサーの特性に基づく)
            
            void setup() {
              Serial.begin(115200); // シリアル通信の初期化
            }
            
            void loop() {
              int sensorValue = analogRead(sensorPin); // センサー値の読み取り
              float voltage = sensorValue * (3.3 / 4095.0); // センサー値を電圧に変換(ESP32のADCリファレンス電圧が3.3Vの場合)
              float uvIntensity = voltage * calibrationFactor; // 電圧をUV強度に変換
              float uvIndex = uvIntensity * 0.1; // UV強度をUVインデックスに変換
            
              Serial.print("Voltage: ");
              Serial.print(voltage);
              Serial.print(" V, UV Intensity: ");
              Serial.print(uvIntensity);
              Serial.print(" mW/cm^2, UV Index: ");
              Serial.println(uvIndex);
            
              delay(1000); // 1秒待機
            }
                
        
    正直、センサーで読み取ってモニターに出される数値が、0ばかりで0以外の数字が出ても毎回バラバラのため、基準がわからない。 どこからが安全で、どこからが危ないのかわからない。センサーの性能の問題の可能性もあるし、コードが問題なのかもしれない。 次回はそこを明らかにしていきたい。

    7月1日 モニター

    今回も前回の続きです。 正しい数値が反映されません。センサー自体の問題かも・・・

    7月8日 モニター

    正しい数値が出ないのでもう、諦めました。なのでdfLinkで見れるようにしました。ネットワーク共有で外でも計れるようにした。
    
                #include 
                    #include 
                    
                    const char* ssid     = "zikkenndayo"; // 繋げたいネットワーク
                    const char* password = "zikkenndayo";  // 繋げたいネットワークのパスワード
                    String pkey = "XRxZkHGZ5LrD7BjxakKL";         // 端末ID
                    
                    const int uvSensorPin = 34; // UVセンサーのアナログ出力を接続したピン(ESP32のアナログピンを使用)
                    // dfLinkインスタンス化 --> conn1とよぶ
                    dfLink conn1(pkey);
                    
                    void setup() {
                        Serial.begin(74880); // esp32は74880
                        WiFi.begin(ssid, password);
                        Serial.println("WiFi connecting");
                        while ((!(WiFi.status() == WL_CONNECTED))){
                            delay(300);
                            Serial.print(".");
                        }
                        Serial.begin(74880); // シリアル通信を115200ボーで開始
                        delay(10);
                        Serial.println("");
                        Serial.println("WiFi connected");
                        // Serial.println("IP address: ");
                    }
                    
                    void loop() {
                        int sensorValue = analogRead(uvSensorPin);
                        Serial.println(sensorValue);
    
                            int idata = sensorValue;
                            float fdata = 0.0;
                            String tdata = "";
                            String ret = conn1.send_data(String(idata), String(fdata), tdata);
                    
                            Serial.println(ret);
                         }
                        delay(1000);
                    
                    
            

    一番最初は0の数値も出るようにしてたが、あまりに0の数値が出るので0が出ないように
    if (sensorValue != 0) { // センサー値が0でない場合にのみデータを送信}このコードを追加した

    センサーとモジュールをいれる箱を制作した

    7月15日 動画制作