极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: eagler8

【Arduino】108种传感器系列实验(133)---GP2Y0A02YK0F红外测距

[复制链接]
 楼主| 发表于 2019-10-6 17:38:17 | 显示全部楼层
15.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 17:39:27 | 显示全部楼层
16.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 18:27:12 | 显示全部楼层
  1. /*
  2.   【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百三十三:夏普GP2Y0A02YK0F 红外测距传感器模块 20-150cm 距离传感器
  4.   项目:测试距离的方案之二
  5.   Module        UNO
  6.   VCC   ——   5V
  7.   GND  ——   GND
  8.   VO    ——   A0
  9. */

  10. #define pin A0

  11. void setup () {
  12.         Serial.begin (9600);
  13.         pinMode (pin, INPUT);
  14. }

  15. void loop () {
  16.         uint16_t value = analogRead (pin);
  17.         uint16_t range = get_gp2y0a02 (value);
  18.         Serial.println (value);
  19.         Serial.print (range);
  20.         Serial.println (" cm");
  21.         Serial.println ();
  22.         delay (500);
  23. }

  24. //return distance (cm)
  25. uint16_t get_gp2y0a02 (uint16_t value) {
  26.         if (value < 70)  value = 70;
  27.         return 12777.3/value-1.1;        //(cm)
  28.         //return (62.5/(value/1023.0*5)-1.1);        //(cm)
  29.         //return ((67870.0 / (value - 3.0)) - 40.0); //gp2d12 (mm)
  30. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 18:28:29 | 显示全部楼层
17.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 18:55:52 | 显示全部楼层
  1. /*
  2.   【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百三十三:夏普GP2Y0A02YK0F 红外测距传感器模块 20-150cm 距离传感器
  4.   项目:测试距离的方案之三
  5.   说明;参考V-cm图, 用查表法, 连接Vout到Arduino的A0引脚, 测量频率20Hz
  6.   需要进一步校对与调整参数
  7.   Module        UNO
  8.   VCC   ——   5V
  9.   GND  ——   GND
  10.   VO    ——   A0
  11. */

  12. float distance[] = {20, 30, 40, 50, 60, 70, 80, 90, 100,  110,  120,  130,  140,  150};
  13. float voltage[14] = {2.5, 2, 1.55, 1.25, 1.1, 0.85, 0.8, 0.73, 0.7, 0.65, 0.6, 0.5, 0.45, 0.4};

  14. typedef struct {
  15.   float maxDistance;  //cm
  16.   float minDistance;  //cm
  17.   float offset; //cm
  18.   float distance; //cm,
  19.   int frequency;  //Hz
  20.   int pin;
  21. }SHARP;

  22. SHARP Sharp = {150, 20, 0, 0, 20, A0};

  23. void getDistance(SHARP* Sharp) {
  24.   float v = analogRead(Sharp->pin);
  25.   v = v / 1024.0 * 5;
  26.   int index = 0;
  27.   for(index = 0; index < 14; index++) {
  28.     if(v >= voltage[index]) {
  29.       break;
  30.     }
  31.   }
  32.   if(index == 0) {
  33.     Sharp->distance = 20;
  34.   } else if(index == 14) {
  35.     Sharp->distance = 150;
  36.   } else {
  37.     Sharp->distance = map(v, voltage[index], voltage[index-1], distance[index], distance[index-1]);
  38.   }
  39. }

  40. void setup() {
  41.   Serial.begin(115200);
  42. }

  43. void loop() {
  44.   static unsigned long lastTime = millis();
  45.   if(millis() - lastTime > 1000/Sharp.frequency) {
  46.     lastTime = millis();
  47.     getDistance(&Sharp);
  48.     Serial.println(Sharp.distance);
  49. //    int v = analogRead(Sharp.pin);
  50. //    Serial.println(v);
  51.   }  
  52. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 18:57:28 | 显示全部楼层
18.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 19:24:35 | 显示全部楼层
  1. /*
  2.   【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百三十三:夏普GP2Y0A02YK0F 红外测距传感器模块 20-150cm 距离传感器
  4.   库地址:https://github.com/guillaume-rico/SharpIR
  5.   项目:测试距离的方案之四
  6.   Module        UNO
  7.   VCC   ——   5V
  8.   GND  ——   GND
  9.   VO    ——   A0
  10. */

  11. #include <SharpIR.h>

  12. #define ir A0    //模拟输入引脚
  13. #define model 20150    //传感器型号
  14. // ir: the pin where your sensor is attached
  15. // model: an int that determines your sensor:  1080 for GP2Y0A21Y
  16. //                                            20150 for GP2Y0A02Y
  17. //                                            100500 for GP2Y0A710K0F
  18. //                                            430   for  GP2YA41SK0F
  19. //                                            (working distance range according to the datasheets)

  20. SharpIR SharpIR(ir, model);

  21. void setup() {
  22.   // put your setup code here, to run once:
  23.   Serial.begin(9600);
  24. }

  25. void loop() {
  26.   delay(500);

  27.   unsigned long pepe1 = millis(); // takes the time before the loop on the library begins

  28.   int dis = SharpIR.distance(); // this returns the distance to the object you're measuring


  29.   Serial.print("Mean distance: ");  // returns it to the serial monitor
  30.   Serial.println(dis);

  31.   unsigned long pepe2 = millis() - pepe1; // the following gives you the time taken to get the measurement
  32.   Serial.print("Time taken (ms): ");
  33.   Serial.println(pepe2);
  34. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 19:26:26 | 显示全部楼层
19.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 19:44:08 | 显示全部楼层
20.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-6 20:02:39 | 显示全部楼层
21.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-11-18 23:00 , Processed in 0.051637 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表