LoginSignup
1
4

More than 5 years have passed since last update.

距離センサ(Arduino) x openFrameworks

Last updated at Posted at 2018-07-04

テスト制作物

距離センサを用い,近いほど円が小さくなるプロジェクト.

ダウンロード.gif

実行環境

  • maxOS Sierra 10.12.6
  • openFrameworks 0.9.8
  • Arduino 1.8.5

基盤のセットアップ

距離センサはシャープ測距モジュール GP2Y0A21YKを使用します.
画像のように左から5V(赤),GND(黒),A0(黄)に距離センサの配線を繋げます.
50176.jpg

これでもよくわかんないよって方はデータシートをみてください
->http://akizukidenshi.com/download/ds/sharp/gp2y0a21yk_e.pdf

Arduinoのセットアップ

  1. スケッチ例の中のStandardFirmataを使用していきます. スクリーンショット 2018-07-05 0.38.20.png     
  2. 自分はbpsを9600にしました. またこれに応じてシリアルモニタ(shift+cmd+mで出ます)のbpsも9600にしています. スクリーンショット 2018-07-05 0.40.23.png

*注意:ボードに書き込む際などはシリアルポートの選択ミスが内容にしてください

今回,僕はArduinoUnoを使用しているのでこの画像のようになっています.
スクリーンショット 2018-07-05 0.47.20.png

oF側のコード

ofApp.h
#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{
    public:
    void setup();
    void update();
    void draw();
    void setupArduino(const int & version);
    void analogPinChanged(const int & pinNum);

    ofArduino ard;
    float ardValue;
    bool bSetupArduino;
};
ofApp.cpp
#include "ofApp.h"
#define SPEED 9600

//--------------------------------------------------------------
void ofApp::setup(){
    ofBackground(0);
    ofSetFrameRate(60);
    ard.connect("/dev/cu.usbmodem14131", SPEED);
    ofSetCircleResolution(64);
}
//--------------------------------------------------------------
void ofApp::update(){
    if ( ard.isArduinoReady()){
        if (bSetupArduino == false){// only do this once
            bSetupArduino = true;
            ofAddListener(ard.EInitialized, this, &ofApp::setupArduino);//add eventFunc
            ofAddListener(ard.EAnalogPinChanged, this, &ofApp::analogPinChanged);
        }
        ard.update();
    }else{
        cout << "not conect" <<endl;
    }
}

//--------------------------------------------------------------
void ofApp::draw(){
    ofDrawCircle(ofGetWidth()/2, ofGetHeight()/2,
                 ardValue/2.0);
    ofDrawBitmapString(ofToString(ardValue), 20, 30);
}

//--------------------------------------------------------------
void ofApp::setupArduino(const int & version) {
    ofRemoveListener(ard.EInitialized, this, &ofApp::setupArduino);
    ard.sendAnalogPinReporting(0, ARD_ON);
    //when data is changed
    ofAddListener(ard.EAnalogPinChanged, this, &ofApp::analogPinChanged);
}

//--------------------------------------------------------------
void ofApp::analogPinChanged(const int & pinNum) {
    ardValue = ard.getAnalog(pinNum);
}


  • ard.connect("/dev/cu.usbmodem14131", SPEED);
    Arduinoエディタで選択したシリアルポートを記入してください.Macなら/dev/~でwinならCOM~になると思います.
      

  • ofAddListener  
    setupArduinoは一回呼ばれ,analogPinChangedはpinに入力された値が変わるたびに呼ばれるって感じです.

補足:デジタルピン,アナログピン

それぞれの使い分けについて少し書いておきたいと思います.
1.デジタルピン
●説明
指定したピンに対して0Vか5Vに設定(出力)または、指定したピンが0Vなのか5Vなのかを判断するときに使用します.
Arduinoにおいては、0VはLOW 、5VはHIGHとして指定します。
●どんな時に使用するのか
digitalWriteはピンに接続されたLEDを点灯させたり消灯させたり、外部機器に信号を送る場合に使用します。
digitalReadはピンに接続されたスイッチの状態や外部の機器からの信号を読むときに使用します。

2.Analog
●説明
A0,A1,,,などのように表記されています.
ArduinoにおけるAnalogは、ほとんど入力として使用されることが多いのです.
現在のボードが5Vで動作しているときに、0V~5Vのが変化するセンサーを取り付けた場合、0~5Vを0~1023の数字に変換して入力することが可能です。
●どんな時に使用するのか
光を検知するセンサーや音を検知するセンサー、そしてデジタルの温度計など、ほとんどのセンシング部品は、部品そのものからの値を電圧で返してきます。

参考URL

http://daisuki-arduino.com/arduino-pin/
http://akizukidenshi.com/catalog/g/gI-02551/
http://takepepe.com/openframeworks-x-arduino-001-2/

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4