датчик шарп 2Y0A21
- Войдите на сайт для отправки комментариев
Вс, 03/01/2016 - 21:35
здравствуйте подскажите пожалуйста как считывать данные с датчика шарп 2Y0A21 зарание спасибо !!
(мне нужна программа)
здравствуйте подскажите пожалуйста как считывать данные с датчика шарп 2Y0A21 зарание спасибо !!
(мне нужна программа)
если можно рпспишиите по детально
Посмотрите кино........
https://www.youtube.com/watch?v=GKa_gkkK8SA
Запустите примеры......
https://github.com/jeroendoggen/Arduino-GP2Y0A21YK-library
http://playground.arduino.cc/Main/SharpIR
https://github.com/guillaume-rico/SharpIR
Будут вопросы- задавайте.....
а шарп 0a41sk f 4z также прописывать ?
Я буду у вас гуглем подрабатывать......
https://www.google.ru/?gws_rd=ssl#newwindow=1&q=gp2y0a41sk0f+arduino
https://github.com/jeroendoggen/Arduino-distance-sensor-library
А если по простому - на выходе датчика напряжение, измеряем его
и по формуле апроксиммированной по графику из pdf вычисляем расстояние.
Формулу легко найти в библиотеке.
Привет, сам невдано работал с этим датчиком, не забудь парраллельно питанию датчика потавить кондер 200-400 мкФ.
// SHARP_2Y0A21.h #ifndef _SHARP_2Y0A21_h #define _SHARP_2Y0A21_h #if defined(ARDUINO) && ARDUINO >= 100 #include "arduino.h" #else #include "WProgram.h" #endif // длина массива, для медианной фильтрации #define ARRLEN 5 class SHARP_2Y0A21 { //public: //SHARP_2Y0A21(const SHARP_2Y0A21&); //SHARP_2Y0A21& operator=(const SHARP_2Y0A21&); public: void init (byte bPort);//: _iS ensorPort(port); word wGetDistanceRaw(); word wGetDistanceMiddle(); byte bGetDistanceSm(); private: word _wArrRawData[ARRLEN]; byte _bSensorPort; byte _bMeasureCntr; word middle(); }; #endif// обработка показаний с датчика SHARP 2Y0A21 // класс реализует медианный фильтр // и преобразование показаний датчика в сантиметры #include "SHARP_2Y0A21.h" void SHARP_2Y0A21::init(byte bPort)// : _iSensorPort(port) // конструктор { _bMeasureCntr=0; _bSensorPort=bPort; pinMode( _bSensorPort, INPUT); _wArrRawData[_bMeasureCntr]=analogRead(_bSensorPort); ++_bMeasureCntr; // Заполняем пул фильтра первоначальными значениями for (int ii=0; ii<ARRLEN; ii++) { _wArrRawData[ii]=_wArrRawData[0]; } Serial.print("Start: "); Serial.print(bPort); Serial.println(""); } word SHARP_2Y0A21::wGetDistanceMiddle() { wGetDistanceRaw(); return middle(); } word SHARP_2Y0A21::wGetDistanceRaw() { word wTemp; //Serial.print(_bMeasureCntr); wTemp = analogRead(_bSensorPort); _wArrRawData[_bMeasureCntr]=wTemp; ++_bMeasureCntr; if (_bMeasureCntr >= ARRLEN) { _bMeasureCntr=0; } // Выводим значение массива Serial.print(" | "); for (int ii=0; ii<ARRLEN; ii++) { Serial.print(_wArrRawData[ii]); Serial.print(' '); } Serial.print(" | "); return wTemp; } #define SWAP(A, B) { word t = A; A = B; B = t; } word SHARP_2Y0A21::middle() // медианный фильтр по произвольном кол-ву элементов { word _iArrTmp[ARRLEN]; //Serial.print(" || "); for (int i = 0; i < ARRLEN; i++) { _iArrTmp[i]=_wArrRawData[i]; } // сортировка пузырьком for (int i = ARRLEN-1 ; i >= 0; i--){ for (int j = 0; j < i; j++) { if (_iArrTmp[j] > _iArrTmp[j + 1]) { SWAP( _iArrTmp[j], _iArrTmp[j + 1]);} } } // медиана - центральный элемент отсортированного массива return (_iArrTmp[ ARRLEN/2]+_iArrTmp[ ARRLEN/2+1])/2; } byte SHARP_2Y0A21::bGetDistanceSm() // дистанция в см, формулы получены апроксимацией кривой // из даташита 4 линиями... { word wRaw=wGetDistanceMiddle(); if (wRaw > 335) { return (7500-9*wRaw)/299; } else if (wRaw > 184) { return (7290-15*wRaw)/151; } else if (wRaw > 102) { return (7980-60*wRaw)/82; } else { return (3240-15*wRaw)/151; } }И желательно ещё на выходе РЦ цепочку с тау 0.1 - 1 секунды.....