Board logo

標題: 奇怪的 Arduino 旋轉編碼器 (KY-040) [打印本頁]

作者: Super169    時間: 2017-3-2 22:37     標題: 奇怪的 Arduino 旋轉編碼器 (KY-040)

本帖最後由 Super169 於 2017-3-2 22:39 編輯

之前在淘寶買左幾個 KY-040 (旋轉編碼器), 諗住比 Arduino 做旋轉按鈕.
收左之後至發覺, 針腳同預期既有 D 唔同.  佢係 CLK, DT, SW, +, GND.
用網上搵到既程式, 全部都唔 work, 總係話我不停轉緊.  
佢就同 呢度 (https://www.youtube.com/watch?v=J9cDEef0IbQ)  講果塊完全一樣, 但結果不一樣.

舊野係咁樣既:
20170302-001.jpg

覺得好奇怪, 以為佢 short 左線, 但..當我放低佢, 佢就唔跳. 試在好多次都係咁, 奇怪.
為左再清楚發生乜事, 我將三條 pin 分別接 D3, 用 attachInterrupt 去測試, 結果真係估你唔到.

當我隻手接近 (係接近, 唔係接觸), 只需要去到大約 2cm 以內, 佢就會自己亂跳.  一走開少少, 就會即停.

玩左好耐, 比我原來想買既野更得意, 幾乎好似人體感應一樣.
所以之前我攞住黎試, 佢就不停咁跳了.
但係, 成件野點睇都唔似內置左乜野 sensor.

我買左幾隻都係咁, 好奇怪, 好似原來既設計就係咁.  但隻手接近就當轉緊, 點用?
唔知仲有無 ching 買過, 會唔會有咁既情況?
家陣既問題, 已經唔係點樣可以用佢.  而係想知道, 有乜野原理, 可以咁樣.

會唔會係因為佢本身產生左既磁場, 因為隻手接近而改變, 所以觸發左 interrupt?

圖片附件: 20170302-001.jpg (2017-3-2 22:34, 73.96 KB) / 下載次數 68
https://h2.hkepc.com/forum/attachment.php?aid=1964248&k=66f15c472f39941f24a5c372dbe938d4&t=1781582514&sid=UH48RPQg2R


作者: icefire    時間: 2017-3-2 23:00

果3條線要pull up, 冇pull up就float, float住接觸人體就會pickup倒50hz
作者: Super169    時間: 2017-3-2 23:11

果3條線要pull up, 冇pull up就float, float住接觸人體就會pickup倒50hz
icefire 發表於 2017-3-2 23:00


問題係...我無接觸到, 仲有 2cm 距離佢就會跳了.

而且, 條 youtube 片入面, 佢好似都無自己接 pullup 喎.

SW (按鍵) 果條反應無咁大, 接線就用 pin8, set 左 INPUT_PULLUP, 可以當成用左 internal pullup.
但係 CLK 同 DT 佢係就咁 INPUT, 連 internal pullup 都無用.

等我搵下有無 10k 既接黎試下先.  唔該哂先.
作者: Offer    時間: 2017-3-2 23:12

問題係...我無接觸到, 仲有 2cm 距離佢就會跳了.

而且, 條 youtube 片入面, 佢好似都無自己接 pullup 喎 ...
Super169 發表於 2017-3-2 23:11


for 3.3v or 5v MCU 4.7k ~ 20k also ok
作者: ahuo    時間: 2017-3-2 23:35

個code系寫成點?
你應該系有將2個input IO set成高電平(HIGH),再將佢set做input掛??
作者: Super169    時間: 2017-3-2 23:41

唔知我有無攪錯,  我 加左2 個  10K:  CLK 接 5V, DT 接 5V, 結果不斷出 interrupt.
拔走個 10K, 就要隻手接近至會跳.
作者: Super169    時間: 2017-3-2 23:47

個code系寫成點?
你應該系有將2個input IO set成高電平(HIGH),再將佢set做input掛??
ahuo 發表於 2017-3-2 23:35


條 youtube 片既原碼:
https://dl.dropboxusercontent.co ... rInterrruptsLED.ino

pinA pinB 都係 INPUT, pinSW 至係 INPUT_PULLUP (按下去出 LOW, 正常)

我試過改左 pinA pinB 做 INPUT_PULLUP 就會不斷跳.

再發覺一樣野, 原來唔需要隻手接近 KY-040, 係隻手接近連線既電線就會跳.
頭先去拔 UNO 果邊條線, 發覺佢一樣跳, 再慢慢將隻手沿條線行, 一直都在跳, 一攞開少少就停.
作者: Super169    時間: 2017-3-2 23:53

我將成個 program 簡化成只測試一條 pin, 睇下 interrupt  點解成日跳.
  1. // Used for generating interrupts using CLK signal
  2. const int PinA = 3;

  3. bool isrTriggered = false;
  4. int interruptCnt = 0;

  5. void isr () {
  6.     isrTriggered = true;
  7.     interruptCnt++;
  8. }

  9. void setup() {
  10.   // put your setup code here, to run once:
  11.   pinMode(PinA, INPUT);
  12.   Serial.begin(115200);
  13.   attachInterrupt(digitalPinToInterrupt(PinA), isr, LOW);
  14.   Serial.println("Start");

  15. }

  16. void loop() {
  17.   // put your main code here, to run repeatedly:
  18. //  Serial.println(digitalRead(PinSW));
  19.   if (isrTriggered) {
  20.     Serial.println(interruptCnt);
  21.     isrTriggered = false;
  22.   }
  23. }
複製代碼
(attachInterrupt 用 LOW, CHANGE, FALLING  結果都一樣).

唔加 10K pullup: 只有隻手接近才跳
加左 10K pullup: 本身就跳緊, 放隻手埋去就會加速
作者: ahuo    時間: 2017-3-3 07:04

我將成個 program 簡化成只測試一條 pin, 睇下 interrupt  點解成日跳.(attachInterrupt 用 LOW, CHANGE, F ...
Super169 發表於 2017-3-2 23:53


你試下咁改吧:
...
pinMode(PinA, INPUT);
digitalWrite(PinA, HIGH);
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(PinA), isr, FALLING);
...
作者: Super169    時間: 2017-3-3 13:32

你試下咁改吧:
...
pinMode(PinA, INPUT);
digitalWrite(PinA, HIGH);
Serial.begin(115200);
attachInte ...
ahuo 發表於 2017-3-3 07:04



唔該 ching 先.  好奇怪, 可能係我塊 UNO 有問題.
因為心急想試, 帶左個 KY-040 番公司玩, 我本身放左塊 UNO 在公司.
再行個測試程式, 完全正常.  無比隻手干擾.
再行番 Youtube 片果個 program, 一切正常.  
睇住一格格扭, 一格格行.  正負方向同按鈕都正常.

咁就奇怪, 屋企塊 UNO 發生乜事.  要搵多幾塊試下先.
今晚帶埋呢塊 UNO 番屋企再試, 睇下係咪公司風水好 D.
作者: Super169    時間: 2017-3-3 19:06

Believe or not.....

我將公司成套野 UNO + KY040 加埋幾條杜邦線帶番屋企.
插著, program 都唔駛 update 直接行, 結果......令我想死.

竟然係屋企就會不斷跳.....

玩乜呀?  初時以為係 塊 UNO 版既問題, 家陣帶埋番屋企了.
情況完全一樣, 隻手未掂到佢已經有反應.   唔通屋企有鬼?

同一套電路, 同一個 program, 只係換左地方, 當然電腦都唔同, 但點解會有分別.
小弟電子知識係超級有限公司, 完全諗唔明.

有無 ching 可以幫忙解答一下小弟.

家陣諗住盡地一煲, 搵塊 display, 做到完全獨立開到既.  
由屋企試完再帶番公司,  連電腦都唔用, 睇下會唔會有分別.
如果仲係咁.....九成係屋企有鬼了.
作者: elbahk    時間: 2017-3-3 19:37

可能近電制房,可以試吓個人放靜電
作者: Super169    時間: 2017-3-3 19:56

搵到原因了, 可能係我部電腦既 USB 問題.

攞左塊 TFT, 改左個 program 由 TFT 出顯示, 轉用 UNO 外接電源, 唔經 USB 攞電.  完全正常了.
20170303_193933.jpg

都幾煩, 改改要用 TFT 出, 唔可以用 serial monitor debug.  

應該係我部機既 USB 唔穩定....比佢玩死了.

插左個 之前手痕淘番黎既 USB 隔離器, 竟然真係可以解決問題.
不過, 呢舊野太耐歷史了, 好似只係支援 USB 1.0, 好在 UNO 都用到.
呢次真係養兵千日, 用在一朝了.  估唔到成日亂淘野, 今次竟然有用, 好在早輪掉垃圾果陣無掉走佢.

唔知除左加個 隔離器, 仲會有無好既笨法了.

圖片附件: 20170303_193933.jpg (2017-3-3 19:55, 148.93 KB) / 下載次數 61
https://h2.hkepc.com/forum/attachment.php?aid=1964474&k=6105db0725e98af5e95171ccac0f7f35&t=1781582514&sid=UH48RPQg2R


作者: jwong852    時間: 2017-3-3 20:32

可能你部PC無接水線,用錶度下咪知囉。
作者: Super169    時間: 2017-3-3 21:59

可能你部PC無接水線,用錶度下咪知囉。
jwong852 發表於 2017-3-3 20:32



ching, 唔好意思, 小弟只係識寫 program, 電子野好白痴.....
火牛插拖板既, 拖板有水線的.  但機殼就可能無接線.  請問, 應該點樣度?  
如果無接, 應該點做?  直接拖條線去插頭位?

唔該哂先.
作者: jwong852    時間: 2017-3-3 22:57

用他錶AC檔一邊度下電腦機箱,另一邊用手揸住,
有接水線就0V,無接水線就有讀數。
作者: Super169    時間: 2017-3-3 23:04

用他錶AC檔一邊度下電腦機箱,另一邊用手揸住,
有接水線就0V,無接水線就有讀數。 ...
jwong852 發表於 2017-3-3 22:57



唔該  ching, 我照住周圍掃個機殼有金屬既地方都係 0, 連 USB   插頭外圍都係 0, 插條線去再度另一端都係 0, 中間四條線就無試, 怕自己篤得唔好 short 線.





歡迎光臨 電腦領域 HKEPC Hardware (https://h2.hkepc.com/forum/) Powered by Discuz! 7.2