・最終的に作ったもの:「音がなるキースタンド」
・仕組み:キースタンドに鍵を指すと写真立ての裏にあるスピーカーからファミマの音声が流れる。
・ねらい:一人ぐらいの寂しさを解消する。(一人暮らしを明るくする)
・プレゼンの資料:
最終プロジェクトPP
<完成図>
●キースタンド
・Arudinoのソースコード(ファミマの音声)
- int val=0;
- int from_pc='0';
- #define BEATTIME 310
- #define PIN 11
-
- #define LA 880
- #define FA 740
- #define MI 659
- #define RE 587
- #define DLA 440
- void setup() {
- pinMode(11,OUTPUT);
- Serial.begin(9600);
- }
- void loop(){
-
- if(Serial.available() > 0){
- from_pc = Serial.read();
- }
- //1が送られてきたら音声が鳴る、0だったら鳴らない
- if (from_pc=='1'){
- pinMode(11,HIGH);
- //ファ#レラレミララミファ#ミラレ
- tone(PIN,FA,BEATTIME) ; // ファ#
- delay(BEATTIME) ;
- tone(PIN,RE,BEATTIME) ; // レ
- delay(BEATTIME) ;
- tone(PIN,DLA,BEATTIME) ; // dラ
- delay(BEATTIME) ;
- tone(PIN,RE,BEATTIME) ; // レ
- delay(BEATTIME) ;
- tone(PIN,MI,BEATTIME) ; // ミ
- delay(BEATTIME) ;
- tone(PIN,LA,BEATTIME) ; // ラ
- delay(BEATTIME*2) ;
- tone(PIN,DLA,BEATTIME) ; // dラ
- delay(BEATTIME) ;
- tone(PIN,MI,BEATTIME) ; // ミ
- delay(BEATTIME) ;
- tone(PIN,FA,BEATTIME) ; // ファ#
- delay(BEATTIME) ;
- tone(PIN,MI,BEATTIME) ; // ミ
- delay(BEATTIME) ;
- tone(PIN,DLA,BEATTIME) ; // dラ
- delay(BEATTIME) ;
- tone(PIN,RE,BEATTIME) ; // レ
- delay(BEATTIME) ;
-
- // exit the loop
- exit(0); //0 is required to prevent error.
- }
- else if (from_pc=='0'){
- pinMode(11,LOW);
- }
-
- delay(5000);
- }
・Pythonのソースコード(ファミマの音声)
- import doyolab
- import time
- #シリアルポートを入力-------------------------
- serial_port='COM4'
- #-------------------------------------------
- #Arduinoとのシリアル通信設定-------------------
- my_arduino = doyolab.set_serial(serial_port,9600)
- #-------------------------------------------
- #user_key、sub_idの設定---------------------
- #自分のユーザーkeyを書く
- user_key=
- #subIDはどのデバイスからのデータか、どのプロジェクトのデータかなどを認識するために使います
- sub_id='pc'
- #-------------------------------------------
- # --------------------------------------------------------------
- while True:
- # IoTサーバーからデータの取得----------------------------------------------------
- # user_key
- # sub_id
- # データ数:最新のデータからいくつのデータを取得するか?下記の例では1(最新のデータのみ)
- data_list = doyolab.getData_From_doyolabIoTserver(user_key, sub_id, 1)
- # リスト形式で取得される
- print(data_list)
- #0番目のデータの塊の中の2番目のデータを読みたい(0から始まるので、本当は3番目)
- int_data =int(data_list[0][2])
- print(int_data)
- # --------------------------------------------------------------
- # int_dataが400より大きかったら、'1'を送信(音声を鳴らせる)、それ以外の時は'0'を送る(音声を鳴らせない)
- if int_data>400:
- to_arduino = '1'
- else:
- to_arduino = '0'
- #Arduinoにデータを送る
- my_arduino.write(to_arduino.encode())
- time.sleep(5)#指定した秒数を待つ(msでなく秒なので、注意) サーバーに負荷がかかるので5より小さい値は設定しないでください。(実装する際は可能な限り大きな数字にしてください)
●写真立て
・Arudinoのソースコード(明るさセンサー)
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- int val=0;
- val=analogRead(1);
- Serial.println(val);
- delay(500);
- }
・Pythonのソースコード(明るさセンサー)
- import doyolab
- #シリアルポートを入力-------------------------
- serial_port='COM5'
- #-------------------------------------------
- #Arduinoとのシリアル通信設定-------------------
- my_arduino = doyolab.set_serial(serial_port,9600)
- #-------------------------------------------
- #user_key、sub_idの設定---------------------
- #自分のユーザーkeyを書く
- user_key=
- #subIDはどのデバイスからのデータか、どのプロジェクトのデータかなどを認識するために使います
- sub_id='pc'
- #-------------------------------------------
- #while Trueは無限ループ#----------------------
- while True:
- # Arduinoからreadlineコマンドでデータを取得し、data_from_arduinoという変数に格納
- data_from_arduino=my_arduino.readline()
- #stripコマンドで、data_from_arduinoの中の余計な文字を削除
- #さらにintで文字で送られてきたデータをint型に変換
- data=int(data_from_arduino.strip())
- print(data)
- # データの設定--------------------------------
- datetime_data = ""
- int_data = data #Arduinoから受け取った値をここでint_dataにいれる
- float_data = ""
- txt_data = ""
- # -------------------------------------------
- # データの送信---------------------------------
- # user_key
- # sub_id
- # 日付データ(空白にしてもサーバーで自動で日付を入れてくれる):datetim_data
- # 整数データ:int_data
- # 実数データ(小数を含むデータ):float_data
- # テキストデータ:txt_data
- ret = doyolab.sendData_To_doyolabIoTserver(user_key, sub_id, datetime_data, int_data, float_data, txt_data)
- print(ret)
- # -------------------------------------------
- #-------------------------------------------
■感想
今回のプロジェクトでは当初制作を予定していた製品が作れなくて悔しかった。
私たちが元々作ろうとしていたものは家族の「おかえり」という声が聞こえてくるというものであったが、音声ファイルを上手くプログラムに組み込むことが出来ず失敗してしまった。
今の自分たちでは解決できなかったことがとても悔しかった。
結果的にはこの失敗から製品の方向性を変えて製品を完成まで持っていけたのは良かったと思う。
プロジェクトを進めていくうえで主となるプランだけでなく、第二、第三のプランを考えておくことで失敗しても臨機応変に対応できることが学べた。
また、今回の最終プロジェクトではチームで一つのことを進めていくという難しさを痛感した。
班員それぞれに意見や考えがあり、それをすり合わせて方向性を決めることに苦労した。
実際、私たちの班は班の中で対立してしまった時期もあったが、話し合いを重ねていくことで方向性をすり合わせ、最終的には班としてまとまり一つの作品を作ることができた。
チームとして一つのプロジェクトを進めていくにはチームメイトの考えや意見をすり合わせて方向性を同じにすることが大切であり、そうするためには話し合うことが大切だと感じた。
この経験は将来、絶対に生きてくるものであり、このような経験をさせてくれた先生や班員には感謝しかない。