3

UNO r3 で最初の Arduino プログラムを作成しています。私はささいなサンプルプログラムなどでArduino Unoで遊んだことがあります。2つのアナログ入力を使用して、0〜5vdcスケーリングの2つのレーザーセンサーを使用して距離を感知しています。これらの 2 つの入力は 0 ~ 5vdc で、全体で共通の接地を確保しました。2 つのセンサーには left と right という名前が付けられ、それぞれ A0 と A1 に入力されます。A2 の入力として 10K オームの POT ワイパー電圧を使用する差動 POT もあります。プログラムの理論は、左右のレーザー間の入力電圧の差の絶対値を取得し、その結果が POT ワイパーからのピン A2 の電圧以上かどうかを判断することです。計算結果に基づいて、トランジスタ駆動回路を介してピン D13 に挿入されたリレーをオンまたはオフします。

問題: ピン A0、A1、または A2 のスケール (0 ~ 1023) で電圧を正確に変更できません。この問題を診断するためにシリアル モニタを使用しました。問題が何であるかわからない、どんな助けでも素晴らしいでしょう。また、POTワイパーでさえ、上記のアナログピンのいずれかで0の値を達成できません!!!

これが私のコードです:

    const int lf_dist = A0;          //names A0
    const int rt_dist = A1;          //names A1
    const int differential = A2;     //names A2
    const int relay = 13;            // select the pin for the relay coil
    unsigned int left = 0;              // variable to store the value coming from the left    sensor
    unsigned int right = 0;             // variable to store the value coming from the right sensor
    unsigned int diff = 0;              // variable to store the value coming from the   differential POT for maximum distance differential
    unsigned int offset = 0;            // variable that stores the value between the two laser sensors

void setup() {
  Serial.begin(9600); 
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(relay, OUTPUT);              // declare the relay pin as an OUTPUT: 
  analogReference(DEFAULT); 
}

void loop() 
{

  unsigned int left = 0;              // variable to store the value coming from the left sensor
  unsigned int right = 0;             // variable to store the value coming from the right sensor
  unsigned int diff = 0;              // variable to store the value coming from the differential POT for maximum distance differential
  unsigned int offset = 0;            // variable that stores the value between the two laser sensors



  left = analogRead(A0);          // read the value from the left laser  
  delay(5);
  right = analogRead(A1);         // read the value from the right sensor
  delay(5);
  diff  = analogRead(A2);    // read the value from the differential POT
  delay(5);

  offset = abs(left - right);

  if(offset >= diff)                   // does math to check if left and right distances are greater than the value clocked in by the differential POT
  {
    digitalWrite(relay, LOW);          // turns off the relay, opens the stop circuit, and turns on the yellow light
  }
  else
  {
    digitalWrite(relay, HIGH);        // turns on the relay if all is good, and that keeps the machine running      
  }
    Serial.print("\n left = " );                       
    Serial.print(left);
    Serial.print("\n right = " );                       
    Serial.print(right);
    Serial.print("\n differential = " );                       
    Serial.print(diff); 
    delay(1000);
 }
4

4 に答える 4

0

ポテンショメータからのサンプリング中にarduinoが吸い込む最小電流は、ワイパーでの実際のオープン入力電圧を乱してはなりません。

于 2015-08-18T11:46:23.467 に答える