題:
一個輸入上有兩個傳感器
Nicklas Mandrup Frederiksen
2015-08-24 19:31:30 UTC
view on stackexchange narkive permalink

前幾天我從老師那裡得到了一個問題,但我無法解決:

如果您有兩個來自兩個不同輸出的傳感器,但希望它們進入一個輸入,

enter image description here

簡而言之,該項目包含一個Arduino Uno。有兩個超聲波傳感器。

好吧,我猜一個正確的答案是“ Multiplex”,您必須在loop()中切換輸出。一個輸出必須為高,而另一個輸出為低,因此您始終只能從一個傳感器獲得輸入。 Ofc您必須檢查哪個傳感器處於活動狀態才能獲得正確的傳感器信號。另一種方法是為每個傳感器使用模擬輸入和不同的電阻器。因此,您會從傳感器獲得不同的電壓信號。
我認為那些單位拉低發送信號。因此,您可以只使用兩個二極管。儘管我不確定輸出信號的去向,但由於大多數超聲設備只有一個SIG引腳可用作輸入和輸出。
如果多路復用,則需要另一個引腳來控制將要選擇哪個多路復用器輸入。請說明您打算使用哪種傳感器。似乎一無所知,“兩個二極管”的答案似乎是最有可能的。
八 答案:
Majenko
2015-08-24 19:56:10 UTC
view on stackexchange narkive permalink

針對您的問題,有兩種基本解決方案,一種是主動解決方案,一種是被動解決方案,哪種方案最好(甚至可以起作用)取決於您的其餘設置。

主動解決方案需要一個解決方案稱為多路復用器的設備。基本上,這是一個開關,它選擇其輸入之一以路由至其輸出,因此可用於將輸入引腳連接至其中一個傳感器的輸出。不過,它需要一個額外的IO引腳,因此毫無意義,因為您可以將該IO引腳用作第二個傳感器的輸入。不過,這確實意味著兩個傳感器都可以同時處於活動狀態,而您只需選擇一個即可讀取輸出。

被動解決方案稱為開漏集電極開路(如果您使用的是TTL而不是CMOS術語)。這意味著您可以使用晶體管(NPN BJT或N溝道MOSFET)將傳感器的每個輸出轉換為開關,以將輸入引腳接地。然後,當晶體管關閉時,輸入引腳通過上拉電阻(可以在IO引腳內部或外部)上拉。當一個傳感器的輸出激活時,它將導通晶體管,然後將輸入引腳拉低。這意味著一次只能激活一個傳感器,因此它們必須由單獨的輸出引腳觸發。

enter image description here

打開漏極是I2C之類的東西如何在同一總線上支持多個設備而沒有任何電壓衝突。

不需要多路復用器是不是很正確,因為您可以自己在代碼中切換輸出?
@nouseforname只要您有單獨的輸出來控制傳感器,那麼第二個(被動)選項就很適合您。這就是為什麼這是我最詳細介紹的選項。如果信號是模擬信號(模擬多路復用器),則可能需要多路復用器,因為OD不適用於該信號。
可以理解,我對此也很陌生,剛剛了解到我可以在代碼中進行“多路復用” ...這就是為什麼我問。對於這種情況,您的解決方案似乎是非常完美的解決方案
它是與MOSFET並聯的二極管嗎?
這就是所謂的“體二極管”,並且是所有MOSFET不可或缺的。
據我所知MOSFET,那麼輸入(1)是柵極,輸出(2)是源極,地(3)是漏極?
不,2是漏極,3是源極。源極始終連接到最公共的點(在這種情況下為接地),因為控制MOSFET的是源極和柵極之間的電壓差-在這種情況下,這就是柵極與地面之間的電壓差。
我認為最後一個是正確的,儘管我無法弄清楚如何在圖中實現它
您的兩個超聲波的輸出將進入原理圖上的INx引腳。原理圖的OUT轉到工程圖上的IN。 Vdd是Arduino的+ 5V引腳,接地符號連接到Arduino的GND引腳。
讓我們[繼續聊天中的討論](http://chat.stackexchange.com/rooms/27361/discussion-between-nicklas-mandrup-frederiksen-and-majenko)。
假設IN1變為高電平,則OUT與地面之間將存在一條低阻抗路徑。這會不會導致過多的電流從OUT引腳流出?還是在OUT右側沒有顯示電阻?如果有的話,如果用戶錯誤地將引腳設置為OUTPUT(會發生實際錯誤,或者因為先前加載的草圖以這種方式進行了設置,而他只是將其插入以編寫真實的草圖),將會發生什麼情況。明白我的意思了嗎。)
AMADANON Inc.
2015-08-25 02:24:39 UTC
view on stackexchange narkive permalink

該解決方案實際上僅使用一個引腳,但僅適用於簡單的操作,例如按鈕(打開或關閉)。

串聯(不同)電阻器(端對端)結束)。將每個電阻的鬆散端連接到+ 5V。將這兩個開關的鬆散端連接在一起,然後通過另一個電阻器接地。在兩個開關相遇的地方,將它們連接到Arduino上的模擬引腳。

例如,您可以在按鈕A上使用20k電阻,在按鈕B上使用10k電阻,並且將10k電阻連接到地面。它們應該非常接近相同的值,並且每個值至少應為1k。

使用ReadAnalogVoltage草圖通過按鈕的不同組合(未按下按鈕,A,B,A + B)來測量電壓。 ,然後,在最終草圖中,您可以將讀數與該表中的值進行比較-選擇最接近的值,因為實際讀數可能會略有不同。對於上面的電阻,您應該獲得:(無按鈕= 0v; A = 1.7v,B = 2.5v,均為3v)。對它們進行數字排序(在這種情況下,它們已經是),並精確計算出每對之間的值(最多0.85最接近0 =>無按鈕;否則最多2.1 =>按鈕A;否則最接近2.75

所描述的電路如下所示:

Switch circuit

導線

結果可以在表中,循環中使用,也可以在if / else if語句中使用(我在12鍵鍵盤上使用了此技術,因此列表要長得多。)

閱讀有關分壓器的信息 https://learn.sparkfun.com/tutorials/voltage-dividers,對於同時按下兩個按鈕,並聯的電阻 https://learn.sparkfun.com/tutorials/series-and-parallel-circuits

Narzan Q.
2015-08-25 17:14:39 UTC
view on stackexchange narkive permalink

如果您有兩個來自兩個不同輸出的傳感器,但希望它們進入一個輸入,那麼您需要什麼,以及如何讀取輸入?

如果希望您的老師對此失去理智,回答這個問題:

我需要什麼? :)

  • 一根電線

enter image description here

解決方案是使用一個三角超聲波傳感器和兩個回波。

或一個回波和兩個觸發器。

超聲波傳感器發送脈衝>脈衝返回>現在回波引腳連接到第二個傳感器trig> Second Ultrasonic傳感器發送脈衝,然後開始監聽。當第二次超聲回波返回時,它發送到另一個Arduino引腳,如果要在一個輸入引腳上將其反轉:)

  #define trigPin 6#define echoPin 4#define echoPin2 7void setup( ){Serial.begin(9600); pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT); pinMode(echoPin2,INPUT);} void loop(){持續時間,距離,距離2; digitalWrite(trigPin,HIGH); delayMicroseconds(20); digitalWrite(trigPin,LOW);持續時間= pulseIn(echoPin,HIGH);距離=(持續時間/ 2)/ 29.1;持續時間=持續時間+ pulseIn(echoPin2,HIGH); distance2 =(持續時間/ 2)/ 29.1;如果(距離> = 200 ||距離< = 0){Serial.println(“ Out of range”); } else {Serial.print(distance); Serial.println(“ cm”); Serial.print(distance2); Serial.println(“ cm”); Serial.println(“ H​​HH”); } delay(500);}  

就是這樣。

Alastair Young
2016-05-26 10:46:18 UTC
view on stackexchange narkive permalink

我遇到了同樣的問題,只是我想將8個HC-SR04傳感器放在pro-mini上。

我使用I2C引腳擴展器作為觸發器,並使用八進制OR / NOR

庫,示例和圖片

https://github.com/arielnh56/SonarI2C http:// redhunter.com/blog/2016/04/28/sonari2c-multiple-hc-sr04-sensors-on-arduino-i2c/

SDsolar
2017-07-08 12:07:43 UTC
view on stackexchange narkive permalink

OP並沒有指定重點是硬件還是軟件。

因此,我假定教授可能正在尋找的是使用最少電路的解決方案。盡可能靠近圖表。因此,該解決方案將在軟件中實現。

鑑於所有這些,我建議將觸發信號發送到傳感器1上,並在接收引腳處測量反射。

它是有時間限制的(傳感器在最大範圍內對物體做出反應的時間)。如果檢測到,則設置一個變量以保存在傳感器1上測得的距離。

然後可以從第二個傳感器的觸發針發送相同的變量。如果時間門內有反射,則可以將其記錄在另一個變量中。

這將需要創建兩個超聲波傳感器實例,而它們恰好共享同一接收脈衝引腳。

Lokanath
2015-08-25 12:35:23 UTC
view on stackexchange narkive permalink

enter image description here

嘗試以上邏輯使用555計時器,其C1:10uF,R2:300k和R1:30​​k的切換時間為1.1秒,現在大約每當定時器OUT為高電平時,USS1的一秒數據進入SIN(Arduino IN),同樣,當定時器OUT為低電平時,USS2的信號也變為SIN(Arduino),

但是您將無法知道輸出來自哪個傳感器。

如果您想知道輸出來自哪個傳感器,您只需在一個分支中添加一個INVERTER即可,這樣兩個傳感器將給出不同的狀態例如,一個將返回高電平而另一個將返回低電平

希望這會有所幫助

編輯:請注意555計時器設計部分不完整,我只是給出一個主意:) >

linhartr22
2015-08-28 01:51:50 UTC
view on stackexchange narkive permalink

SPDT開關非常適合問號所在的圖表。

Faizan Gull
2017-07-08 08:45:53 UTC
view on stackexchange narkive permalink

問題是,兩個超聲波數據只能輸入一個。這很簡單。您只需要兩個ID。創建每個傳感器的ID。您也可以使用I2C總線。您需要使誰將兩個輸入保留為原始數據。然後用地址進行數字寫入,然後進行編碼以讀取數據。 z,我的主意們?

歡迎使用Arduino Stack Exchange。請訪問https://arduino.com/Tour進行遊覽,以充分利用本網站。僅供參考-普通的超聲波檢測器無法在I2C上工作-它們通過脈衝信號引腳然後監視輸出引腳來扭曲。圖書館測量時間並推斷距離。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...