Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 12731|回復: 14
打印 上一主題 下一主題

[請教]arduino uno接GP2Y0A02YK0F(紅外線測距離)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-8-26 10:35:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大大,以下是我測試的code,想請問,print出來的是電壓嗎?因為ADC這一段我沒有做過,想請問一下各位大大

int analogPin = 3;
int val = 0;

void setup(void)
{
    Serial.begin(9600);
}

void loop(void)
{
   val = analogRead(analogPin);
   Serial.println( val );

   dealy( 1000 );
}
2#
發表於 2011-8-26 15:11:00 | 只看該作者
http://www.pololu.com/file/0J156/gp2y0a02yk_e.pdf

基本上他是一個曲線
把這個曲線套用到EXCEL 裡面就可以算出一個逼近這個曲線的公式
拿來套用就能把val 轉換成距離了

約會是長這樣
void loop(void)
{
   val = read_gp2d12_range(analogPin);
   Serial.println( val );

   dealy( 1000 );
}

float read_gp2d12_range(byte pin) {
  int tmp;
  tmp = analogRead(pin);
  if (tmp < 3) return -1; // invalid value
  return (6787.0 /((float)tmp - 3.0)) - 4.0;
}

上面是80cm的範例
150 cm 的不常用, 因為超過一公尺我比較喜歡用超音波
3#
 樓主| 發表於 2011-8-30 08:57:35 | 只看該作者
大大,不好意思,請教一下,你說excel有把曲線變成公式的這個功能,不知大大是否能指導一下,我這幾天問了我一些朋友,都沒有人用過。
4#
發表於 2011-8-30 19:54:25 | 只看該作者
我不會這個
只是某天站在某天王老師背後看他弄的

另外這裡有
http://tw.knowledge.yahoo.com/question/question?qid=1008013002154
基本上建議直接去找EXCEL的書, 裡面會教你

對鯨魚來說, OFFICE系列只要會打字/建資料庫/畫表格就行了
其他秘書都會處理好^^
5#
 樓主| 發表於 2011-8-31 10:16:36 | 只看該作者
大大,不好德思,我想問個觀念的問題,我現在用arduino uno去接GP2Y0A02YK0F,然後用
val = analogRead(analogPin);
Serial.println( val );
想請問,val不是直接的電壓對吧,我看了一下arduino官網上的資料,"This yields a resolution between readings of: 5 volts / 1024 units or, .0049 volts (4.9 mV) per unit."
所以我要把讀出來的val*0.0049就是電壓對吧?
6#
發表於 2011-8-31 13:33:51 | 只看該作者
差不多是這樣
他解析度10bit --> 0~1023
但因為有干擾和一堆奇奇怪怪的事情
出來的值會稍微跳動
7#
 樓主| 發表於 2011-8-31 15:45:38 | 只看該作者
大大,再跟您請教一下,我現在用GP2Y0A02YK0F去量距離,我量20cm時,去量vout輸的電壓為2.36左右,跟datasheet上的20cm為2.5v有些差距,於是我去量30,40,50cm,感覺只有在20cm時,跟datasheet上的電壓差比較多,這樣是正常的嗎?
30cm ------ 1.96v
40cm ------ 1.52v
50cm ------ 1.27v

以下為GP2Y0A02YK0F的datasheet
http://sharp-world.com/products/ ... heet/gp2y0a02_e.pdf
8#
發表於 2011-9-1 00:09:39 | 只看該作者
這很正常啊
他20以下的數值跳太大不能相信
但什麼是"20", 因為元件精確度問題 , 15~25 約都可以稱'20"
實際不會有我說的這麼誇張
可是也相去不遠啦
不用太CARE
紅外線只是用來量個大概, 數公分的精確是OK的
但要再精確到公分以下只能用雷射或是你得在很單純的單波長環境
9#
 樓主| 發表於 2011-9-26 11:52:08 | 只看該作者
本帖最後由 zero7386 於 2011-9-26 11:59 編輯

各位大大,請教一下,因為我在網路上找到公式,可是為什麼它輸出的數值很會漂很大,例如:我量20公分的距離,它輸出的值大概是24 cm左右,但它有時會降到21 cm想請問這是什麼問題?

以下是我的test code
int IRpin = 0;                                    // analog pin for reading the IR sensor
float sensorValue, distance;

void setup()
{
  Serial.begin(9600);                             // start the serial port
  pinMode(IRpin, INPUT);
}

void loop()
{
  sensorValue = analogRead(IRpin);
  sensorValue *= 0.0048828125;
  distance = 65 * pow(sensorValue, -1.10);

  Serial.println(distance);

  delay(1000);  
}
10#
發表於 2011-9-26 18:32:01 | 只看該作者
各位大大,請教一下,因為我在網路上找到公式,可是為什麼它輸出的數值很會漂很大,例如:我量20公分的距離 ...
zero7386 發表於 2011-9-26 11:52



    把這行:
distance = 65 * pow(sensorValue, -1.10);
改成
distance = 60.495 * pow(sensorValue,-1.1904);     
試看看,
既然你量20公分的距離,它輸出的值也應該大概是20 cm左右
11#
 樓主| 發表於 2011-9-27 14:07:46 | 只看該作者
謝謝vegewell大大的幫忙,我想問一下,因為我量20公分,它大概都在20.x -  21.x之間,但偶爾會出現17.x or 18.x想請問,這樣正常嗎?
12#
發表於 2011-9-27 18:42:07 | 只看該作者
本帖最後由 vegewell 於 2011-9-27 18:43 編輯

回復 11# zero7386


    這個GP2Y0A02YK0F紅外測距傳感器,
探測距離:20-150cm,
你測20公分距離的物品,在臨界點,難免有混淆的狀況,
請你用以下的程式,(先copy到計事本,再copy到arduino編輯視窗)
把欲測量的物品放在30公分距離,測量後,然後放在100公分距離,
測試看看出來的值,是否都很準或接近?

#define sensorPin 0
#define VOLTS_PER_UNIT    .0049F        // (.0049 for 10 bit A-D)
float volts;
float proxSens = 0;
int cm;
void setup()
{
   beginSerial(9600);
   pinMode(sensorPin, INPUT);
  }
void loop()
{
    proxSens = analogRead(sensorPin);
     volts = (float)proxSens * VOLTS_PER_UNIT; // ("proxSens" is from analog read)
     cm = 60.495 * pow(volts,-1.1904);     // same in cm
     Serial.print(cm);
     Serial.print(' ');
  }
13#
 樓主| 發表於 2011-9-28 10:33:51 | 只看該作者
謝謝大大的幫忙,因為我想要拿來做量身高用的,不過看來,值好像不怎麼穩定....

原來在臨界點,會有混淆的狀況,謝謝大大又讓我學到一些經驗
14#
發表於 2011-9-28 20:18:01 | 只看該作者
謝謝大大的幫忙,因為我想要拿來做量身高用的,不過看來,值好像不怎麼穩定....

原來在臨界點,會有混 ...
zero7386 發表於 2011-9-28 10:33


不客氣,彼此都是互相研究求進步,
量身高的時候,頭髮包起來也許會比較準.
15#
發表於 2011-10-9 16:57:48 | 只看該作者
本帖最後由 pizg 於 2011-10-9 17:35 編輯

我是自動控制這方面的新手, 所學也與電子電機無關, 但我對這方面非常有興趣, 還請各位專家指點一下.
我買了一個IRM3638紅外線接收晶體, 已經自行摸索出接收搖控器的訊號了, 想更進一步瞭解紅外線測距,
有兩個問題想請教:
1.是否任意一種紅外線接收晶體都可以用來測距離, IRM3638可以嗎?
2.任意的紅外線接收晶體和紅外線LED都可搭配用來測距離嗎?
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-4-29 19:16 , Processed in 0.261503 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表