0

私はProcessingとArduinoを初めて使用します。Arduinoと湿度センサーSHT75をProcessingとインターフェースして、湿度と温度のデータを取得し、GUIに表示したいと思います。センサーのライブラリをインストールした後、Arduino IDEでSHT75センサーを簡単に制御し、シリアルモニターを使用してデータを受信することができます(リンク)。Arduinoコードは次のとおりです。

#include <Sensirion.h>

const uint8_t dataPin =  9;              // SHT serial data
const uint8_t sclkPin =  8;              // SHT serial clock
const uint8_t ledPin  = 13;              // Arduino built-in LED
const uint32_t TRHSTEP   = 5000UL;       // Sensor query period
const uint32_t BLINKSTEP =  250UL;       // LED blink period

Sensirion sht = Sensirion(dataPin, sclkPin);

uint16_t rawData;
float temperature;
float humidity;
float dewpoint;

byte ledState = 0;
byte measActive = false;
byte measType = TEMP;

unsigned long trhMillis = 0;             // Time interval tracking
unsigned long blinkMillis = 0;

void setup() {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
    delay(15);                           // Wait >= 11 ms before first cmd
    // Demonstrate blocking calls
    sht.measTemp(&rawData);              // sht.meas(TEMP, &rawData, BLOCK)
    temperature = sht.calcTemp(rawData);
    sht.measHumi(&rawData);              // sht.meas(HUMI, &rawData, BLOCK)
    humidity = sht.calcHumi(rawData, temperature);
    dewpoint = sht.calcDewpoint(humidity, temperature);
    logData();
}

void loop() {
    unsigned long curMillis = millis();          // Get current time

    // Rapidly blink LED.  Blocking calls take too long to allow this.
    if (curMillis - blinkMillis >= BLINKSTEP) {  // Time to toggle the LED state?
        ledState ^= 1;
        digitalWrite(ledPin, ledState);
        blinkMillis = curMillis;
    }

    // Demonstrate non-blocking calls
    if (curMillis - trhMillis >= TRHSTEP) {      // Time for new measurements?
        measActive = true;
        measType = TEMP;
        sht.meas(TEMP, &rawData, NONBLOCK);      // Start temp measurement
        trhMillis = curMillis;
    }
    if (measActive && sht.measRdy()) {           // Note: no error checking
        if (measType == TEMP) {                  // Process temp or humi?
            measType = HUMI;
            temperature = sht.calcTemp(rawData); // Convert raw sensor data
            sht.meas(HUMI, &rawData, NONBLOCK);  // Start humidity measurement
        }
        else {
            measActive = false;
            humidity = sht.calcHumi(rawData, temperature); // Convert raw sensor data
            dewpoint = sht.calcDewpoint(humidity, temperature);
            logData();
        }
    }
}

void logData() {
    Serial.print("Temperature = ");
    Serial.print(temperature);

    Serial.print(" C, Humidity = ");
    Serial.print(humidity);

    Serial.print(" %, Dewpoint = ");
    Serial.print(dewpoint);
    Serial.println(" C");
}

Arduinoライブラリ(Firmata)での処理を使用すると、他のアナログ(LDRなど)またはI²Cセンサー(Webで利用可能な数千のチュートリアルに従うだけです!)と簡単に通信できますが、Arduino+のインターフェイス方法がわかりません。処理IDEを備えたSHT75。SHT75センサーには、一種のI²Cのような通信プロトコルがあります。これがデータシートです。import processing.serial「serial.Arduino」コマンド(両方とも使用済み)を試しましたimport cc.arduinoが、何もしませんでした。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

0

Arduino のシリアル モニタで値を受信して​​いる場合は、すべて問題なく処理中のシリアル ポートからその値を読み取る必要があることを意味します。

ここに、Processing sketchで何をしなければならないかの例があります:

import processing.serial.*;

Serial myPort;

void setup() {
    // List all the available serial ports:
    println(Serial.list());
    // Open the port you are using at the rate you want:
    myPort = new Serial(this, Serial.list()[0], 9600);
}

void draw() {
    while (myPort.available() > 0) {
        int inByte = myPort.read();
        println(inByte);
    }
}

これはここから取られます。とても簡単です :) すべてを機能させるには、Arduino のシリアル モニタを閉じる必要があることに注意してください。

于 2012-10-03T09:25:00.583 に答える
0

データシートによると:

SHT7x のシリアル インターフェイスは、センサーの読み取りと有効な電力消費のために最適化されています。センサーは I²C プロトコルでアドレス指定できませんが、バスに接続されている他のデバイスに干渉することなく、センサーを I²C バスに接続できます。マイクロコントローラはプロトコルを切り替える必要があります。」

これは、物理層 (電圧、タイミング、およびバスの種類) が I²C 互換であることを意味します。ただし、チップは標準の I²C パケットを使用しません。したがって、Arduino に組み込まれている I²C バスは使用できますが、I²C ライブラリは使用できません。チップの低レベル I²C モジュールを自分で処理する必要があります。

幸いなことに、これはそれほど難しくありません。なぜなら、I²C はそれほど複雑ではなく、組み込み I²C モジュールではなく直接 GPIO コントロールを使用して有効な I²C パケットを実行することさえできるからです。これには時間がかかりますが、マイクロコントローラーや電子機器に関する広範な知識がなくても実行できます。

于 2012-09-28T07:15:02.497 に答える