40123223 發表於 2014-12-18 15:34:05

紅外線感測器 偵測的問題

本帖最後由 40123223 於 2014-12-18 16:00 編輯

使用arduino uno
現在不知道是紅外線感測那顆有問題
還是程式有問題
現在的狀況是有時候會正常執行柵欄升起放下的程序
大部分都是燈號紅綠亂閃,伺服馬達就一下一下動而已

我們這個東西的目的是一個人流控制的柵欄
當紅燈亮起,柵欄放下擋住行人;綠燈亮起,柵欄升起讓行人通行
考慮到沒有人,它還是自己一直在那邊升起放下
所以加了一顆紅外線感測器,當偵測到人進入升起放下的程序
然後沒有偵測到人時,紅燈亮著,柵欄維持在放下的位置

電路圖


程式碼
#include <Servo.h>

Servo myservo;
int pos = 0;
int redpin = 12;
int bluepin =13;
int val;
const int PIRSensor = 2;// 紅外線動作感測器連接的腳位
int sensorValue = 0;//紅外線動作感測器訊號變數

void setup()
{
myservo.attach(9);
pinMode(PIRSensor, INPUT);
pinMode(redpin, OUTPUT);
pinMode(bluepin, OUTPUT);
}

void loop()
{
   sensorValue = digitalRead(PIRSensor);

   if(sensorValue == HIGH) //當偵測到行人時進入程序
{

digitalWrite(12, HIGH);
delay(15);

   for(pos=0;pos<90;pos+=1)

{
      myservo.write(pos);
      delay(15);
   }
delay(5000);


digitalWrite(12, LOW);
delay(15);

digitalWrite(13, HIGH);
delay(15);

      for(pos=90;pos>=0;pos-=1)
       {                              
       myservo.write(pos);
       delay(15);
       }
delay(5000);
digitalWrite(13, LOW);
}
else {digitalWrite(12, HIGH);digitalWrite(13, LOW); digitalWrite(9, LOW);}
}

vegewell 發表於 2014-12-19 02:35:49

回復 1# 40123223


也許arduino 供給 伺服馬達的電力很小所致,

ates1687 發表於 2014-12-19 13:14:49

回復 1# 40123223


    我問一個很"笨"的問題

紅外線感測器請問是類比的還是數位的輸出

就像麥克風感測器類比數位都有,數位就加個"比較器",當高於某個數值=1當低於某個數值=0
類比就直接抓數值,你的紅外線使否有這樣的功能?

40123223 發表於 2014-12-19 18:35:09

回復 2# vegewell


   我把紅外線感測器拿掉,就是if else拿掉,馬達可以正常作動
不過講到這個,如果我們實際要掛上柵欄,
伺服馬達應該就轉不動了,
這個問題不知道怎麼解決,
我們伺服馬達用模型用的那種而已

40123223 發表於 2014-12-19 18:38:23

回復 3# ates1687


我不太知道耶東西都實驗室拿的所以跟腳位有關係嗎!?

ates1687 發表於 2014-12-19 23:10:07

回復 5# 40123223


    = =怎麼會沒有關係,假設你寫的是數位判斷方法是0101,紅外線給你的是類比0~1028,
變成他會亂動!還有你說你從實驗室拿的八成是距離判斷的紅外線,而非人體感測的紅外線,
你要宣告監控式窗看看紅外線丟給你什麼數值!!你才能去做判斷!

40123223 發表於 2014-12-22 15:47:39

本帖最後由 40123223 於 2014-12-22 15:54 編輯

回復 6# ates1687


我剛剛看一下,那顆是PIR,
我找了網路上的範例來測試
然後我監控數值,它都一直跑1
我把訊號端線拔掉,數值還是一直跑1
這樣我是不是可以合理懷疑那顆壞了呀
PIR訊號端我是接數位腳位2,應該沒錯吧!?
其實軟硬體都不是很瞭解...
感謝指點了!!

這是我找到的程式

/*
PIR("Passive Infrared Sensor") Motion Sensor,
紅外線動作感測器, 或稱人體紅外線感測器
*/

const int PIRSensor = 2;   // 紅外線動作感測器連接的腳位
const int ledPin =13;      // LED 腳位

int sensorValue = 0;         // 紅外線動作感測器訊號變數

void setup() {
pinMode(PIRSensor, INPUT);   
pinMode(ledPin, OUTPUT);   
   Serial.begin(9600);   
}

void loop(){
// 讀取 PIR Sensor 的狀態
sensorValue = digitalRead(PIRSensor);
   Serial.println(sensorValue);
// 判斷 PIR Sensor 的狀態
if (sensorValue == HIGH) {   
    digitalWrite(ledPin, HIGH);// 有人開燈
}
else {
    digitalWrite(ledPin, LOW);   // 沒人關燈
}
}

ates1687 發表於 2014-12-22 21:23:49

回復 7# 40123223

我這邊提一個問題,請問測試的時候 你是否曾經"蓋上箱子"測試= =?

就是用一個黑色的箱子把整個紅外線感測器罩住?

如果整個罩住=0就是正常,如果=1,那就是不正常!先試試看~

40123223 發表於 2014-12-27 17:30:57

回復 8# ates1687


有的,它還是一直跑1
另外想請問如果要讓馬達足以舉起柵欄,約1公斤
有要哪種馬達比較適合,是不是馬達就要外接電源了
感謝解答!!

ates1687 發表於 2014-12-27 19:20:00

回復 9# 40123223

那八成那顆應該是壞掉了,致於要舉起1kg的話,你要找扭力大一點的伺服馬達,
上沒屋頂拍賣,打"伺服馬達",第一個48元,扭力1.8KG差不多就可以

還有如果你柵欄的材質有點重的話,要算一下物理力學的"力矩",因為柵欄越長
軸心轉動的力量就要越大,不是說柵欄一公斤就需要一公斤這樣,
打個比方你握住一根木桿時舉起來的時候,中間一定是最輕的,
但是如果是握兩邊末端的話一定是最重,所以你的手腕相當於你的馬達的扭力
要舉起來要花更多的力氣!

40123223 發表於 2014-12-27 20:27:41

回復 10# ates1687

ok! 那我大概瞭解了
力矩計算這方面應該還ok,算是本科系的哈哈
那假設我買那顆1.8kg扭力的伺服馬達
這樣是不是電源要另外接6V,就訊號端接到arduino而已
非常感謝你的熱心解答!!

ates1687 發表於 2014-12-27 22:00:07

回復 11# 40123223


    接5V就好(用arduino的5V),超過6V的話,你會聞到一股鐵鏽味
工作電壓代表允許範圍,但未必是電壓剛好6V,扭力就一定會比5V強!

cc1357 發表於 2022-3-13 18:28:35



谢谢楼主分享
頁: [1]
查看完整版本: 紅外線感測器 偵測的問題