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);
}