Библиотека для датчика пульса

Тема в разделе "Закажу проект", создана пользователем iBoy, 24 июн 2016.

  1. iBoy

    iBoy Гик

    Добрый день! Необходимо сделать библиотеку для амперковского датчика пульса для Ардуино Леонардо. Библиотека должна считывать пульс и возвращать количество ударов в минуту. Оплата по договоренности. Заранее спасибо тем, кто откликнется.
     
  2. andrapet

    andrapet Нуб

  3. iBoy

    iBoy Гик

  4. andrapet

    andrapet Нуб

  5. ostrov

    ostrov Гуру

    Зачем библиотека? Я подключил его к аналоговому входу, подобрал уровни перепада сигнала вверх (а можно и вниз) и получил сердечный ритм, из которого вычислить пульс уж совсем простая задача. Строк на 5 вся работа.

    Причем этот датчик очень хороший и сигнал на нем четкий со всех пальцев идет, а вот с прошлым я намучился там фронт 1-2 единицы был, что меньше чем помехи.
     
    Последнее редактирование: 25 июн 2016
    iBoy нравится это.
  6. iBoy

    iBoy Гик

    Спасибо большое за помощь!

    У меня не получается написать код, а время очень сильно поджимает. Я не достаточно грамотен в программировании. У меня огромная просьба. Если Вам не сложно, Вы не могли бы дать этот код? Я понимаю, что интеллектуальная работа должна оплачиваться, и готов это сделать. И еще раз спасибо за Вашу помощь.
     
    Последнее редактирование: 25 июн 2016
  7. DIYMan

    DIYMan Guest

    Учиться надо вовремя, а не тянуть хвосты.
     
  8. iBoy

    iBoy Гик

    Мне 14 лет, я в 8 классе.Я еще этот вопрос не успел пройти, и я ищу репетитора по схемотехнике. Не хотите им побыть?
     
  9. DIYMan

    DIYMan Guest

    С удовольствием, при одном условии: вы сначала пытаетесь сделать хоть что-то сами, а не выпрашиваете готовый код. Делаете, разбираетесь, если что-то не получается - выкладываете код, ошибки компилятора и т.п. и спрашиваете "что я делаю не так". Вот тогда будет видно, что вы действительно хотите чему-то научиться, а не получить готовое на блюдечке.
     
  10. man9913

    man9913 Гик

    В восьмом классе позновато уже схемотехнике учиться - столько лет упущено. Шансов освоить ноль.
     
  11. ostrov

    ostrov Гуру

    Это шутка такая неуклюжая?
     
    Gippopotam и iBoy нравится это.
  12. man9913

    man9913 Гик

    А ты глупый или так неуклюже притворяешься?
     
  13. ostrov

    ostrov Гуру

    Ведите себя прилично. Не у себя в школе же.
     
    iBoy нравится это.
  14. man9913

    man9913 Гик

    Вот именно, не надо тут выеживаться, не у себя в школе ж.
     
  15. Vetrinus

    Vetrinus Гик

    Ну по схемотехнике я помочь не могу, к сожалению, но по программированию, в силу своих знаний, мог бы. От вас конструктив в плане задач и ваши попытки/размышления по их реализации, от меня - анализ ваших ошибок, подходов и направление в верную, по моему мнению, сторону.
    Мой скайп в подписи.
     
    iBoy нравится это.
  16. iBoy

    iBoy Гик

    Здравствуйте!
    Спасибо за предложение помощи.
    Что я пытался сделать.
    1. Вначале в лоб пытался получить показания датчика. Датчик, как оказалось, показывает не пульс, а разницу между средним пульсом за последние несколько секунд и пульсом сейчас в единицах от 0 до 1023. И точка отсчета (т.е. отстутствие изменений_ - 512.
    Скриншот программы прилагаю.
    2. Я зашел на официальный сайт датчика пульса http://pulsesensor.com и нашел, что там есть способ переделать программу под Arduino Leonardo, и даже прилагалась для него программа. Однако, компилятор нашел несколько ошибок. Я прочитал текст, который был приведен на сайте, и увидел, что там есть способ переделать код для Arduino Leonardo, воспользоваться которым мне тоже не удалось. Компилятор находил ошибки.
    3. Когда не получилось, я стал искать библиотеки. Единственная, которую я нашел, была для Arduino Uno. В моем проекте используется плата на чипе aTmega32u4, и уйти от этого нельзя, потому что в проекте имитируется клавиатура. Поэтому использовать библиотеки для Arduino Uno не получилось, он отказался компилировать код потому что в Arduino Uno используются другие таймеры, Ошибки компиляции выдавались только если я выбирал Arduino Leonardo. Если я выбирал плату для загрузки Arduino Uno, компиляция была успешной.
    Тогда я попытался влезть в код библиотеки и посмотреть, как она работает, чтобы переделать это под Arduino Leonardo, но не смог понять, как она работает.
    После этого я позвонил в техподдержку Амперки и попросил помочь адаптировать библиотеку под Arduino Leonardo. В течение недели они пытались это делать, потом сказали, что на это нужно слишком много времени.
    В итоге, я понял, что я сам не справлюсь и мне нужна помощь.
     

    Вложения:

  17. ostrov

    ostrov Гуру

    Во-первых, пауза между измерениями 1 секунда это слишком дофига. Зачастую даже сердце стучит чаще. Во-вторых, не нужно считать какое-то установленное значение за удар сердца, нужно ловить увеличение этого значения. Причем подобрать рост эксперементально, у меня, например это получилось порядка 50 единиц. В-третьих, сердце стучит не "тук-пауза-тук-пауза" и так далее, а "тук-тук-пауза-тук-тук-пауза", то есть как бы два удара за один (вероятно, так поочередно работают желудочки, не помню уже). То есть вам нужно поймать одноименные ритмы и уже по паузам между ними вычислять пульс в размерности ударов в секунду.
     
    dkg11 нравится это.
  18. ostrov

    ostrov Гуру

    Вот, накатал для примера. Комментариев пока нет, т.к. было некогда.
    Код (C++):
    #define DELT   15

    int pulse[2];
    bool vect[2];
    unsigned long timerPuls;

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

    void loop() {
      vect[0] = (pulse[1] > (pulse[0] + DELT));
      pulse[0] = pulse[1];
      pulse[1] = analogRead(A0);
      vect[1] = (pulse[1] > (pulse[0] + DELT));
      if (!vect[0] && vect[1]) {
        Serial.println(60000.0/(millis()-timerPuls));
        timerPuls = millis();
      }
      delay(50);
    }
    Суть такая: надо приложить палец так, чтобы на каждый удар появлялась строка в терминале с частотой пульса. Для проверки можно второй рукой держать себя за шею. ) Работает только в определенном положении пальца - не сильно прижатым и не сильно отжатым. У меня получилось довольно похоже на правду. Там где "пульс резко подскочил" я просто дернул пальцем:
    [​IMG]
    Скриншотить было лень.

    Разумеется, для готового устройства надо добавить математики, исключить заведомо неверные результаты и сгладить получаемые. Но это уже второй этап.

    Вот замеры показания датчика осциллографом, от туда взял тайминги и перепады:
    [​IMG]
    Но все можно подобрать методом научного тыка (последовательного приближения), хотя и дольше.
     
    iBoy нравится это.
  19. iBoy

    iBoy Гик

    Спасибо огромное!!!!! А можно вопрос: что такое 60000: время с предыдущего цикла измерений?
     
  20. ostrov

    ostrov Гуру

    Это перевод времени между ударами в миллисекундах в удары в минуту.