Robofun 機器人論壇
標題:
紅外線感測器 偵測的問題
[打印本頁]
作者:
40123223
時間:
2014-12-18 15:34
標題:
紅外線感測器 偵測的問題
本帖最後由 40123223 於 2014-12-18 16:00 編輯
使用arduino uno
現在不知道是紅外線感測那顆有問題
還是程式有問題
現在的狀況是有時候會正常執行柵欄升起放下的程序
大部分都是燈號紅綠亂閃,伺服馬達就一下一下動而已
我們這個東西的目的是一個人流控制的柵欄
當紅燈亮起,柵欄放下擋住行人;綠燈亮起,柵欄升起讓行人通行
考慮到沒有人,它還是自己一直在那邊升起放下
所以加了一顆紅外線感測器,當偵測到人進入升起放下的程序
然後沒有偵測到人時,紅燈亮著,柵欄維持在放下的位置
電路圖
1.JPG
(55.55 KB, 下載次數: 767)
下載附件
2014-12-18 15:29 上傳
程式碼
#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
回復
1#
40123223
也許arduino 供給 伺服馬達的電力很小所致,
作者:
ates1687
時間:
2014-12-19 13:14
回復
1#
40123223
我問一個很"笨"的問題
紅外線感測器請問是類比的還是數位的輸出
就像麥克風感測器類比數位都有,數位就加個"比較器",當高於某個數值=1當低於某個數值=0
類比就直接抓數值,你的紅外線使否有這樣的功能?
作者:
40123223
時間:
2014-12-19 18:35
回復
2#
vegewell
我把紅外線感測器拿掉,就是if else拿掉,馬達可以正常作動
不過講到這個,如果我們實際要掛上柵欄,
伺服馬達應該就轉不動了,
這個問題不知道怎麼解決,
我們伺服馬達用模型用的那種而已
作者:
40123223
時間:
2014-12-19 18:38
回復
3#
ates1687
我不太知道耶
東西都實驗室拿的所以跟腳位有關係嗎!?
作者:
ates1687
時間:
2014-12-19 23:10
回復
5#
40123223
= =怎麼會沒有關係,假設你寫的是數位判斷方法是0101,紅外線給你的是類比0~1028,
變成他會亂動!還有你說你從實驗室拿的八成是距離判斷的紅外線,而非人體感測的紅外線,
你要宣告監控式窗看看紅外線丟給你什麼數值!!你才能去做判斷!
作者:
40123223
時間:
2014-12-22 15:47
本帖最後由 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
回復
7#
40123223
我這邊提一個問題,請問測試的時候 你是否曾經"蓋上箱子"測試= =?
就是用一個黑色的箱子把整個紅外線感測器罩住?
如果整個罩住=0就是正常,如果=1,那就是不正常!先試試看~
作者:
40123223
時間:
2014-12-27 17:30
回復
8#
ates1687
有的,它還是一直跑1
另外想請問如果要讓馬達足以舉起柵欄,約1公斤
有要哪種馬達比較適合,是不是馬達就要外接電源了
感謝解答!!
作者:
ates1687
時間:
2014-12-27 19:20
回復
9#
40123223
那八成那顆應該是壞掉了,致於要舉起1kg的話,你要找扭力大一點的伺服馬達,
上沒屋頂拍賣,打"伺服馬達",第一個48元,扭力1.8KG差不多就可以
還有如果你柵欄的材質有點重的話,要算一下物理力學的"力矩",因為柵欄越長
軸心轉動的力量就要越大,不是說柵欄一公斤就需要一公斤這樣,
打個比方你握住一根木桿時舉起來的時候,中間一定是最輕的,
但是如果是握兩邊末端的話一定是最重,所以你的手腕相當於你的馬達的扭力
要舉起來要花更多的力氣!
作者:
40123223
時間:
2014-12-27 20:27
回復
10#
ates1687
ok! 那我大概瞭解了
力矩計算這方面應該還ok,算是本科系的哈哈
那假設我買那顆1.8kg扭力的伺服馬達
這樣是不是電源要另外接6V,就訊號端接到arduino而已
非常感謝你的熱心解答!!
作者:
ates1687
時間:
2014-12-27 22:00
回復
11#
40123223
接5V就好(用arduino的5V),超過6V的話,你會聞到一股鐵鏽味
工作電壓代表允許範圍,但未必是電壓剛好6V,扭力就一定會比5V強!
作者:
cc1357
時間:
2022-3-13 18:28
谢谢楼主分享
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2