多普勒雷达AnalogRead()

时间:2018-08-15 10:28:46

标签: arduino signal-processing

我一直在做一个有关读取多普勒速度和创建速度数据的项目。我没有电气工程/信号处理方面的扎实背景,但是到目前为止,我已经进行了很多研究。如果我的解释有误,请忍受。

我目前正在使用HB100CDM324分组讨论模型。该项目的目的是从模块中获取电压读数,并通过MATLAB中的FFT创建频谱图。我从BlackCatScience获得了一个样本数据,手快速移向传感器。其图如下所示:

Hand Speed Using Doppler Radar

我已经组装了我的arduino套件,如下图:

Arduino-HB100_kit

  

连接为:

     

VCC-> 5V GND-> GND FOUT->引脚8 VOUT->引脚A5

到目前为止,我发现HB100支持脉冲/连续波用法,并使用下面的代码使用HB100测量频率。

#include <MsTimer2.h>
#include <FreqMeasure.h>
//--------------GlOBAL VARIALBES---------------------
double raw_data  = FreqMeasure.read();
double sum = 0;
int count = 0; 
double raw_data_array[10];
unsigned long timeStamp = 0;

//---------------------------------------------------

void setup() {
  Serial.begin(115200);
  FreqMeasure.begin();
  Serial.print("Time (ms)");
  Serial.print("\t");
  Serial.println("Hz");
}

void loop() {
   timer();
   freq_measure();
}

void timer() { 
   timeStamp+=1;
}

void freq_measure() { 
  while (timeStamp < 101) {
    if(FreqMeasure.available()) {
      //average readings 
      sum += FreqMeasure.read(); 
      count ++; 
      if (count > 2) { 
        float frequency = FreqMeasure.countToFrequency(sum/count);
//        Serial.print(timeStamp);
//        Serial.print("\t"); 
        Serial.println(frequency);  
        timeStamp++;
        sum = 0;
        count = 0; 
      }
    }
  }
}

此代码的问题是,我想测量每1毫秒的电压读数。但是,此代码类似于使用pulseIn函数,并且数据输出的速率取决于我是否将手移入/移出传感器而异。当我不移动时,数据输出变慢,而当我移动时,数据输出速率变快。

因此,我决定使用其他代码并使用如下的AnalogRead函数:

//-----------------------------------------------------------------
#define RADAR A5 //pin number for VOUT 
//--------------------GLOBAL VARIABLES-----------------------------
unsigned long  timeStamp;
//-----------------------------------------------------------------

void setup() {
  Serial.begin(115200);
  pinMode(RADAR, INPUT); 
  Serial.println(F("Settings Complete" ));
}

void loop() {
  // 1 millisec == 0.001 second  -->  1000 millisec == 1 second
  // we want about 5 seconds of data, hence the loop runs for 5000 millisec

  while (timeStamp < 5000){
    showReading();
  }
}

void showReading() { 
//    timeStamp = millis();
//    Serial.print(timeStamp);
//    Serial.print("\t");
    //Read input on analog pin 5: 
    int sensorData = analogRead(RADAR);
//    float voltage = sensorData * (5.0 / 1023.0); 
    Serial.println(sensorData); 
}

这一次,串行监视器为我提供了一个介于0到1023之间的值,这很好,但是即使我将手移到传感器的前面,该值也会变化很小。我该怎么做才能更正此问题并获得类似于上图的图表?

感谢您阅读这么长的问题。祝你有美好的一天!

0 个答案:

没有答案