第14回(最終プロジェクト発表)

■第7班最終プロジェクト発表

最終プロジェクト発表動画 YouTube

  

■製品の概要

・最終的に作ったもの:「音がなるキースタンド」

・仕組み:キースタンドに鍵を指すと写真立ての裏にあるスピーカーからファミマの音声が流れる。

・ねらい:一人ぐらいの寂しさを解消する。(一人暮らしを明るくする)

・プレゼンの資料:最終プロジェクトPP

<完成図>

●キースタンド

・Arudinoのソースコード(ファミマの音声)

  1. int val=0;
  2. int from_pc='0';
  3. #define BEATTIME 310
  4. #define PIN 11
  5.  
  6. #define LA 880
  7. #define FA 740
  8. #define MI 659
  9. #define RE 587
  10. #define DLA 440
  11. void setup() {
  12.   pinMode(11,OUTPUT);
  13.   Serial.begin(9600);
  14. }
  15. void loop(){
  16.   
  17.   if(Serial.available() > 0){
  18.     from_pc = Serial.read();
  19.   }
  20.   //1が送られてきたら音声が鳴る、0だったら鳴らない
  21.   if (from_pc=='1'){
  22.     pinMode(11,HIGH);
  23.       //ファ#レラレミララミファ#ミラレ
  24.     tone(PIN,FA,BEATTIME) ; // ファ#
  25.     delay(BEATTIME) ;
  26.     tone(PIN,RE,BEATTIME) ; // レ
  27.     delay(BEATTIME) ;
  28.     tone(PIN,DLA,BEATTIME) ; // dラ
  29.     delay(BEATTIME) ;
  30.     tone(PIN,RE,BEATTIME) ; // レ
  31.     delay(BEATTIME) ;
  32.     tone(PIN,MI,BEATTIME) ; // ミ
  33.     delay(BEATTIME) ;
  34.     tone(PIN,LA,BEATTIME) ; // ラ
  35.     delay(BEATTIME*2) ;
  36.     tone(PIN,DLA,BEATTIME) ; // dラ
  37.     delay(BEATTIME) ;
  38.     tone(PIN,MI,BEATTIME) ; // ミ
  39.     delay(BEATTIME) ;
  40.     tone(PIN,FA,BEATTIME) ; // ファ#
  41.     delay(BEATTIME) ;
  42.     tone(PIN,MI,BEATTIME) ; // ミ
  43.     delay(BEATTIME) ;
  44.     tone(PIN,DLA,BEATTIME) ; // dラ
  45.     delay(BEATTIME) ;
  46.     tone(PIN,RE,BEATTIME) ; // レ
  47.     delay(BEATTIME) ;
  48.     
  49.     // exit the loop
  50. exit(0); //0 is required to prevent error.
  51. }
  52.   else if (from_pc=='0'){
  53.     pinMode(11,LOW);
  54.   }
  55.   
  56. delay(5000);
  57. }

・Pythonのソースコード(ファミマの音声)

  1. import doyolab
  2. import time
  3. #シリアルポートを入力-------------------------
  4. serial_port='COM4'
  5. #-------------------------------------------
  6. #Arduinoとのシリアル通信設定-------------------
  7. my_arduino = doyolab.set_serial(serial_port,9600)
  8. #-------------------------------------------
  9. #user_key、sub_idの設定---------------------
  10. #自分のユーザーkeyを書く
  11. user_key=
  12. #subIDはどのデバイスからのデータか、どのプロジェクトのデータかなどを認識するために使います
  13. sub_id='pc'
  14. #-------------------------------------------
  15. # --------------------------------------------------------------
  16. while True:
  17.     # IoTサーバーからデータの取得----------------------------------------------------
  18.     # user_key
  19.     # sub_id
  20.     # データ数:最新のデータからいくつのデータを取得するか?下記の例では1(最新のデータのみ)
  21.     data_list = doyolab.getData_From_doyolabIoTserver(user_key, sub_id, 1)
  22.     # リスト形式で取得される
  23.     print(data_list)
  24.     #0番目のデータの塊の中の2番目のデータを読みたい(0から始まるので、本当は3番目)
  25.     int_data =int(data_list[0][2])
  26.     print(int_data)
  27.     # --------------------------------------------------------------
  28.     # int_dataが400より大きかったら、'1'を送信(音声を鳴らせる)、それ以外の時は'0'を送る(音声を鳴らせない)
  29.     if int_data>400:
  30.         to_arduino = '1'
  31.     else:
  32.         to_arduino = '0'
  33.     #Arduinoにデータを送る
  34.     my_arduino.write(to_arduino.encode())
  35.     time.sleep(5)#指定した秒数を待つ(msでなく秒なので、注意)  サーバーに負荷がかかるので5より小さい値は設定しないでください。(実装する際は可能な限り大きな数字にしてください)

●写真立て

・Arudinoのソースコード(明るさセンサー)

  1. void setup() {
  2.   // put your setup code here, to run once:
  3.   Serial.begin(9600);
  4. }
  5. void loop() {
  6.   // put your main code here, to run repeatedly:
  7.   int val=0;
  8.   val=analogRead(1);
  9.   Serial.println(val);
  10.   delay(500);
  11. }

・Pythonのソースコード(明るさセンサー)

  1. import doyolab
  2. #シリアルポートを入力-------------------------
  3. serial_port='COM5'
  4. #-------------------------------------------
  5. #Arduinoとのシリアル通信設定-------------------
  6. my_arduino = doyolab.set_serial(serial_port,9600)
  7. #-------------------------------------------
  8. #user_key、sub_idの設定---------------------
  9. #自分のユーザーkeyを書く
  10. user_key=
  11. #subIDはどのデバイスからのデータか、どのプロジェクトのデータかなどを認識するために使います
  12. sub_id='pc'
  13. #-------------------------------------------
  14. #while Trueは無限ループ#----------------------
  15. while True:
  16.     # Arduinoからreadlineコマンドでデータを取得し、data_from_arduinoという変数に格納
  17.     data_from_arduino=my_arduino.readline()
  18.     #stripコマンドで、data_from_arduinoの中の余計な文字を削除
  19.     #さらにintで文字で送られてきたデータをint型に変換
  20.     data=int(data_from_arduino.strip())
  21.     print(data)
  22.     # データの設定--------------------------------
  23.     datetime_data = ""
  24.     int_data = data #Arduinoから受け取った値をここでint_dataにいれる
  25.     float_data = ""
  26.     txt_data = ""
  27.     # -------------------------------------------
  28.     # データの送信---------------------------------
  29.     # user_key
  30.     # sub_id
  31.     # 日付データ(空白にしてもサーバーで自動で日付を入れてくれる):datetim_data
  32.     # 整数データ:int_data
  33.     # 実数データ(小数を含むデータ):float_data
  34.     # テキストデータ:txt_data
  35.     ret = doyolab.sendData_To_doyolabIoTserver(user_key, sub_id, datetime_data, int_data, float_data, txt_data)
  36.     print(ret)
  37.     # -------------------------------------------
  38. #-------------------------------------------

■感想

今回のプロジェクトでは当初制作を予定していた製品が作れなくて悔しかった。
私たちが元々作ろうとしていたものは家族の「おかえり」という声が聞こえてくるというものであったが、音声ファイルを上手くプログラムに組み込むことが出来ず失敗してしまった。
今の自分たちでは解決できなかったことがとても悔しかった。
結果的にはこの失敗から製品の方向性を変えて製品を完成まで持っていけたのは良かったと思う。
プロジェクトを進めていくうえで主となるプランだけでなく、第二、第三のプランを考えておくことで失敗しても臨機応変に対応できることが学べた。
また、今回の最終プロジェクトではチームで一つのことを進めていくという難しさを痛感した。
班員それぞれに意見や考えがあり、それをすり合わせて方向性を決めることに苦労した。
実際、私たちの班は班の中で対立してしまった時期もあったが、話し合いを重ねていくことで方向性をすり合わせ、最終的には班としてまとまり一つの作品を作ることができた。
チームとして一つのプロジェクトを進めていくにはチームメイトの考えや意見をすり合わせて方向性を同じにすることが大切であり、そうするためには話し合うことが大切だと感じた。
この経験は将来、絶対に生きてくるものであり、このような経験をさせてくれた先生や班員には感謝しかない。
デザイン演習Ⅰ・Ⅱトップページ
XBPトップページ