Arduino-正弦波数値のサンプリングと応用


埋め込みシステムの多くの応用では,正弦波関数をサンプリングし,[0,1]正弦波規則に従って変化する範囲の配列を得る必要がある.簡単な例は呼吸灯や警報音などです.本稿では,Arduino UNOをプラットフォームとして正弦波関数サンプリングの方法と使用例をまとめた.
基本手順は次のとおりです.
  • forループを用いるサンプリング間隔変数x(例えば0~179°)
  • を定義する.
  • 角度間隔(1°)を円弧間隔に変換し、正弦波関数を
  • サンプリングする.
  • サンプリング値を適切に変換し、我々の応用に必要な値範囲の
  • にスケールする.
  • 上記変換後の値を用いる外付け
  • を駆動する.
  • 正弦波サンプリングが正常に行われることを保証するために適切に遅延する
  • .
    1.サイン関数サンプリング
    Arduinoはsin(x)関数により正弦波関数の円弧x点での値を取得する.角度でサンプリングする必要がある場合は、まずパラメータxを円弧に変換します.サンプリングコードは次のとおりです.
    float sinVal;  
    for(int x=0; x<180; x++){
        //       
        sinVal = (sin(x*(3.1412/180)));
        }

    2.呼吸灯の例
    LED正極を100Ωの限流抵抗によりデジタルピン11に接続し、LED負極をArduino I/O板のGNDに接続して簡易回路を構築する.
    int ledPin = 11; //  LED  11
    float sinVal;    //     
    int ledVal;      //  LED   
    
    void setup() {
      pinMode(ledPin,OUTPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      for(int x=0; x<180; x++){
        //  sin              
        sinVal = (sin(x*(3.1412/180)));
        ledVal = int(sinVal*255);//<span style="font-family: Arial, Helvetica, sans-serif;">                </span>
    
        analogWrite(ledPin,ledVal);
        delay(25);
        }
    }

    3.アラーム例
    1つの圧電スピーカの正負極でArduinoのデジタルピン8とGNDをそれぞれ接続し、簡単な発声回路を構築する.コードは次のとおりです.
    float sinVal; //     
    int toneVal;  //      
    
    void setup() {
      pinMode(8,OUTPUT);
    }
    
    void loop() {
      for(int x=0; x<180; x++){
        //       
        sinVal = (sin(x*(3.1412/180)));
        // sin         
        toneVal = 2000 + (int(sinVal*1000)); //                  
        tone(8,toneVal); //  8,    toneVal(Hz)
        delay(2); //  2ms,              
        }
    }