Processing3에서 Arduino 시리얼에서 값을 읽고 싶습니다.

센서의 값을 그래픽으로 시각화하고 싶다

할 일



Arduino 시스템 (특히 Teensy3.2)에서 읽은 시리얼 값을 Processing3에 전달하여 화면에 그려지는 도형을 변경합니다. 그뿐입니다.
이번에는 거리 센서 2Y0A21을 사용합니다 (아날로그 출력이라면 센서는 무엇이든 좋습니다.)
가능한 한 최소한의 요소로 하여, 성공하기 쉽게 하고 있습니다.

준비물·실시 환경


  • Arduino 시스템의 것 (이번 목표는 Teensy3.2)
  • Processing3
  • 아날로그 센서 (거리 센서, 조도 센서 등)
  • 수중 환경은 Mac

  • 연결



    -센서의 전원선을 필요전압에 따라 Arduino계의 5v(or3V), GND에 접속.
    - 센서의 아날로그 출력선을 Arduino 계열의 A0 핀에 연결.

    프로그램



    Arduino 계측의 스케치



    Arduino 시스템
    
    int sensorPin = 0; //analog入力に使うセンサ用のピン番号。0ならA0ピン
    int val; //センサの値
    void setup(){
      Serial.begin(9600); //シリアルを9600bpsで開始
    }
    
    void loop(){
      //センサのアナログ値(0~1024を読み取って0-255の1バイトに変換)
      val = map(analogRead(sensorPin),0,1023,0,255);
      Serial.write(val);//1バイト(0-255)にしたセンサ値をシリアル送信
      delay(10); //0.01秒止める
    }
    

    Arduino에 씁니다. Arduino의 SDK는 여기에서 닫힐 수 있습니다.

    일단 Processing3에서 시리얼 포트 확인



    Processing3을 열고 아래 스크립트를 실행합니다.

    Processing3
    import processing.serial.*;
    Serial myPort;
    printArray(Serial.list());
    

    그러면 Processing3의 스크립트 화면 하단에 시리얼 통신 콘솔 화면이 나타나 다음과 같은 결과가 표시됩니다. (콘솔 화면이 나오지 않으면 화면 오른쪽 하단의 삼각형을 누르면 나옵니다.)

    결과 예>
    [0]/dev/cu. Honyara/Honyara
    [1]/dev/tty. Honyara/Honyara
    [2]/dev/호냐라라/호냐라라

    여기서 Arduino 계에서 사용하고 있는 시리얼 포트와 같은 것의 번호를 조사해 둡니다.
    Arduino에서 사용중인 포트는 ArduinoSDK의 메뉴에서 "도구"→ "시리얼 포트"

    Proessing3 측면 스케치



    Processing3
    import processing.serial.*; // シリアルライブラリをインポート
    
    Serial myPort;  //シリアルポートのインスタンス
    int available_serialport = 2; // シリアル検索プログラムで調べたシリアルポートの番号に変更
    String arduinoPort = Serial.list()[available_serialport]; //
    int x; //シリアルから読み取った値を入れる
    
    void setup(){
      size(300, 300); // キャンバスサイズ
     myPort = new Serial(this, arduinoPort, 9600); // シリアルポートの設定
     }
    
    void draw(){
      background(251,252,239); //背景色をやわらかい色に
      noFill(); //図形をぬりつぶさない
      stroke(153,0,0) ;//線を赤っぽく
      strokeWeight(3);//線をちょっと太く
      ellipse(width/2,height/2,x,x); //キャンバスの中心に円を描画。サイズはシリアルの値(0-255)
    }
    
    void serialEvent(Serial p){
      x = p.read();  //xにシリアルの値を入れる
      println(x); //processingのシリアルモニタに数値を表示
    }
    

    실행



    Processing을 실행합니다.
    센서가 연결되어 있으면 센서에서 나오는 아날로그 전압에 따라 화면의 원이 깨지거나 작아지거나 합니다.

    (↑실행예)

    트러블 슛



    작동하지 않는 경우 문제가 먼저 프로그램 쪽인지 센서 쪽인지를 확인합니다.
    A0을 Arduino의 GND에 접속하여 아날로그 입력의 전압을 0으로 해 보거나, 마찬가지로 3.3v(경우에 따라 5v)에 접속하여 전압을 최대로 한 경우에 Processing3측의 도형에 반영되는지 조사 합니다. (GDN에 연결한 경우에는 원은 점에, 3.3or5V에 접속한 경우에는 원의 크기가 최대가 됩니다.)
    이 표시가 잘되면 문제는 센서 측입니다.

    Teensyduino라면 시리얼 포트의 사정에서 잘못될지도 모른다고 우려했지만, 이 간단한 프로그램의 경우에는 무사히 움직였습니다. I2C의 데이터 등 조금 긴 데이터도 시도해 보겠습니다.

    다음 번 기사



    htps : // 이 m / 니나가와 _ 이즈미 /
    6축 센서(MPU6050/GY-521)의 값을 Arduino계에서 읽습니다.

    좋은 웹페이지 즐겨찾기