エンジニア

なんくるないさ

「このブログはアフィリエイト広告を利用しています」

機械学習のためのデータ収集について2

前回はセンサの情報をarduinoで読み込みパソコンにシリアル通信するということをしました。
jump1268.hatenablog.com


今回は、この情報をどうcsvファイルに書き出すかということを書きます。

まずセンサの出力がどのようなものかというとこんな感じでポテンショメータをひねればそれに応じで電圧値が出ます

f:id:jump1268:20180923161332p:plain

これをパソコンで処理します。

pythonで↓のように書きます(jupyter notebook使用)

import pandas as pd
import numpy as np
import serial
import datetime

dt_now = datetime.datetime.now()

def main():
    ser = serial.Serial("COM10")  # COMポート(Arduino接続)

    df = pd.DataFrame(columns=["label","A","B"])

    num = 0
    while num < 20:#20回分のセンサの値をまとめてから csvファイルをつくる

        data = ser.readline().rstrip()  # \nまで読み込む(\nは削除
        data = data.decode() #対話型だとこれが必要らしい
        (xdeg, ydeg, zdeg) =data.split(",")

        new_data = pd.Series([xdeg, ydeg, zdeg], index=df.columns)

        df = df.append(new_data, ignore_index=True)

        num = num + 1

 
    time = dt_now.minute
    # CSVファイルの作成
    df.to_csv(str(time)+"分"+'output.csv')
    print(df)
    

if __name__ == '__main__':
    main()

  
出力値は下のようになります。

_____________________

label A B
0 2 510 543
1 2 510 540
2 2 510 541
3 2 510 541
4 2 510 542
5 2 511 542
6 2 511 543
7 1 512 544
8 1 511 544
9 1 511 542
10 1 510 542
11 1 511 543
12 1 510 541
13 2 509 540
14 2 510 541
15 2 510 542
16 2 510 541
17 1 510 541
18 1 509 540
19 1 509 542

前回とarduinoのプログラムを少し変えて

下のようにしています。(前回のは一つのセンサの値を読み込みシリアル通信でパソコンに送信するだけ)

__________________________

/*
ボタンを押しているときだけシリアル通信

*/

int buttonw = 7; // 変数buttonに7を代入する。白ボタン
int buttong = 8;// 緑ボタン
int led = 2; // 変数ledに2を代入する./白ボタンをおすと青いLEDになる
int led2 = 3; // 変数led2に3を代入する。緑ボタンを押すと緑色

void setup() {
pinMode(buttonw, INPUT);// buttonw(白ボタン)ピンを入力されたかわかるようにする
pinMode(buttong, INPUT);// buttong(緑ボタン)ピンを入力されたかわかるようにする。
pinMode(led, OUTPUT); // ledピン(2ピン)を出力にする。出力できるようになる。
 pinMode(led2, OUTPUT); // ledピン(3ピン)を出力にする。出力できるようになる
Serial.begin(9600);
while (!Serial);
}

void loop() {
if (digitalRead(buttonw) == HIGH) { //白ボタン、buttonwピンがHIGHならば
digitalWrite(led, HIGH); // ledピン(2)にHIGHを出力する。青色
int val = analogRead(A0);
int val1 = analogRead(A1);
//int val2 = analogRead(A2);
// int val3 = analogRead(A3);
Serial.print(1);//ラベル1を出力したのちに、A0,A1,A2の電圧を出力する。
Serial.print (",");
Serial.print(val);
Serial.print (",");
Serial.print (val1);
// Serial.print (",");
// Serial.print (val2);
// Serial.print (",");
// Serial.print (val3);
Serial.println ("");
delay(50);
} else { // そうでなければ
digitalWrite(led, LOW); // ledピンにLOWを出力する } }
}

if (digitalRead(buttong) == HIGH) { //緑buttonピンがHIGHならば
digitalWrite(led2, HIGH); // led2ピン(12)にHIGHを出力する。緑色
int val = analogRead(A0);
int val1 = analogRead(A1);
int val2 = analogRead(A2);
int val3 = analogRead(A3);
Serial.print(2);//ラベル2を出力したのちに、A0,A1,A2の電圧を出力する。
Serial.print (",");
Serial.print(val);
Serial.print (",");
Serial.print (val1);
// Serial.print (",");
//Serial.print (val2);
// Serial.print (",");
// Serial.print (val3);
Serial.println ("");
delay(50);
} else { // そうでなければ
digitalWrite(led2, LOW); // ledピンにLOWを出力する } }
}

次回はこのarduinoのプログラムとpythonの説明をします。
jump1268.hatenablog.com


↓無料体験すればアマゾンギフトが2000円もらえます。
(このサイトのプレゼント1000円+私のポケットギフト)←(笑)ギフト券使わないといけないので
登録したらコメントでもなんでも言ってください。
機械学習について勉強したい方は下のサイトで無料体験レッスンうけるのが良いかもですね。