Помощь новичку

Тема в разделе "Arduino & Shields", создана пользователем s2dent6732, 23 дек 2016.

  1. Jedi

    Jedi Гик

    Можно. Но для этого его нужно включить. Взять характеристики датчика. Определить режим работы транзистора (если это аналоговый сигнал) с целью определить падение напряжения на транзисторе
     
  2. sslobodyan

    sslobodyan Гик

    Да ладно, что там определять :) Стоит npn в нижнем плече, работает с открытым коллектором. Подтягиваем ему коллектор (выход датчика) к питанию через резюк в пару килоом и готово. Подтягивающие резюки стоят на портах, включабтся при инициализации pinMode(pin, INPUT_PULLUP). Соглашусь только, что подтягивающие резюки в атмелках от 20 ком и до 150 ком, что может быть многовато, особенно в "шумном" окружении, желательно 5-10 ком. Но для работы "на столе" тоже покатит.
     
  3. Jedi

    Jedi Гик

    Аналоговый о чем говорит?
     
  4. sslobodyan

    sslobodyan Гик

    Говорит о том, что ТС сбросил пдфку на свой датчик. Просто он сам не разобрался как его правильно включить, поэтому решил что он аналоговый. Но даже если работать с ним как с аналоговым, то вот как бы я делал
    Код (C++):

    #define SENSOR_PIN A0

    int t_min=20; // порог минимального сигнала: все что меньше - темнота
    int t_max=400; // порог максимального сигнала: все что выше - свет
    byte porog_1=5; // порог накопления суммы для отбрасывания дребезга
    byte value=3;

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

    void loop() {
        int v=analogRead( SENSOR_PIN );
       
        // переводим попугаи датчика в логические уровни
        if (v < t_min) {
            if (value > 0) value -= 1;
        }
        if (v > t_max) {
            value += 1;
            if (value > porog_1) value=porog_1;
        }
       
        // проверяем сумму уровней. если достигли порога, то уже стабильная 1  
        if (value == porog_1) {
            Serial.println("Светло");
        }
       
        // проверяем сумму уровней. если достигли нуля, то уже стабильный 0
        if (value == 0) {
            Serial.println("Темно");
        }
       
        delay(2);
    }  

     
     
  5. Jedi

    Jedi Гик

    Сложно как... Я бы так не делал. Вы просто посмотрите все сообщения ТС, сколько он уже на форуме и сделайте выводы. Я безмерно уважаю людей, стремящихся что-то делать, но если за два с половиной года не разобраться как подключать датчики и как писать для ардуино, то... В общем, доброй ночи.
     
  6. Jedi

    Jedi Гик

    А оптическая обтюрация вообще веселая весчь. Тем более при переменной скорости
     
  7. s2dent6732

    s2dent6732 Нерд

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

    Да, я более двух лет назад зарегистрировался на форуме - это лично вас обижает??? Причем здесь мой стаж??? Раз в год возникает необходимость подключить что-нибудь, отправил сообщение, помогли - все, спасибо.
    Мне, чтобы восстановить знания по "подключать датчики и как писать для ардуино" требуется всю вики амперки 3 раза перечитать.

    Jedi, вы наверное супер специалист в программировании и лет 5 ещё на электронщика учились? Я в своей жизни не занимался ни тем и ни этим, но когда ставиться задача, при выполнении которой я могу получить опыт в любой сфере - я берусь за это дело. Молодец, покрасовались - изучили мою переписку :) Только вот тему я начал в конце декабря (меньше месяца назад).
     
  8. ostrov

    ostrov Гуру

    Если уж датчик таки аналоговый, а не неправильно подключенный цифровой, то зубья через него следует считать не по абсолютным показаниям, а по их изменению за определенный квант времени. Для этого, правда, потребуется провести некоторую исследовательскую подготовку с применением инструментальных средств таких как осциллограф. То есть потребуется узнать: за какой максимальный промежуток времени можно гарантировано словить перепад не являющийся помехой (а для уверенности лучше за два и более промежутка с одинаковым вектором), какова максимальная скорость появления одноименных перепадов - то есть частота мелькания зубьев при самом быстром их вращении, ну и само значение этого перепада за принятый квант времени. Тут может возникнуть проблема: не известно успеет ли функция аналогового преобразования и прочих вычислений успеть сделать все несколько раз за один фронт. Далее дело техники: квант выставляем прерыванием по таймеру, в функции прерывания записываем в кольцевой буфер значение двух (а лучше больше) точек измерения, сравниваем их между собой и, заметив правильный сдвиг засчитываем зуб. Далее, в этом же прерывании отслеживаем спад для фиксации окончания зуба, чтобы не засчитать несколько зубов как один. Примерно так я оцифровывал показания с аналогового датчика пульса, только сложнее. Потому что перепад был очень небольшой и с двумя горбинками, ибо так работает сердце, плюс частенько проскакивали разного рода шумы типа скрипов ребер и хрипов легких, приходилось все как то фильтровать, отбрасывая заведомо неверное. Так что вам еще повезло.

    Надеюсь, я достаточно подробно раскрыл свое видение решения данного вопроса. Но все же, для такой задачи я бы предпочел использовать обычную цифровую щелевую оптопару. И вместо шестеренки со скошенными зубами использовать диск с прорезями как то рекомендует даташит из вашей же ссылки. Тогда сделать все будет возможно за час или два даже не зная тонкостей и не вникая в глубины. Хотя...
     
  9. Jedi

    Jedi Гик

    Изучите хотя бы основы, чтобы не путать программирование со схемотехникой.
     
  10. Onkel

    Onkel Гуру

    Это они самоутверждаются. Кстати, не только на Ваших вопросах, так что не воспринимайте эти наезды как личное- а то бывает сразу 2-3 налетят и самоутверждаются, хотя они абсолютно не правы не только этически (в общем это конечно форум непрофессионалов, и не стоит злорадствовать и высокомерно поучать), но и технически, чего они, впрочем, никогда не признают. С биполярным приветом и фронтом синусоиды..
     
    Последнее редактирование: 15 янв 2017
  11. sslobodyan

    sslobodyan Гик

    Хочу посамоутверждаться :rolleyes:
    Код (C++):
    #define SENSOR_PIN A0

    int t_min=20; // порог минимального сигнала: все что меньше - темнота
    int t_max=400; // порог максимального сигнала: все что выше - свет
    byte porog_1=10; // порог накопления суммы для отбрасывания дребезга
    byte value=5;
    bool light = false; // логический уровень с датчика - свет или темень
    bool has_impulse=false; // флаг прохода одного зуба
    int cnt=0; // счетчик зубов
    int max_cnt=100; //

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

    void loop() {
        int v=analogRead( SENSOR_PIN );
     
        // переводим попугаи датчика в логические уровни
        if (v < t_min) {
            if (value > 0) value -= 1;
        }
        if (v > t_max) {
            value += 1;
            if (value > porog_1) value=porog_1;
        }
     
        // проверяем сумму уровней. если достигли порога, то уже стабильная 1
        if (value == porog_1) {
            //Serial.println("Светло");
            if ( light == false ) { // перход из темноты в свет считаем как один зуб
                has_impulse = true;
            }
            light = true;
        }
     
        // проверяем сумму уровней. если достигли нуля, то уже стабильный 0
        if (value == 0) {
            //Serial.println("Темно");
            light = false;
        }

        if ( has_impulse ) {
            Serial.println("Зуб!"); // дальше обрабатывайте свой счетчик
            cnt = cnt + 1;
            if (cnt >= max_cnt) {
                Serial.println("Насчитали норму");
                cnt = 0;
            }
            has_impulse = false; // сбрасываем флаг
        }
    }
     
     
  12. rkit

    rkit Гуру

    Это называется реле
     
  13. rkit

    rkit Гуру

    Вам лучше с реле.
     
  14. rkit

    rkit Гуру

    Что это значит? Проводить ток с пина на пин? Нет.
     
  15. sslobodyan

    sslobodyan Гик

    Именно так. Желательно еще через резисторы в пару сотен ом.
     
  16. sslobodyan

    sslobodyan Гик

    Выключается питание на устройстве? Значит на выходе нет напряжения и что тогда мерить? Подтяните к земле аналоговый вход резистором в несколько сотен килоом - хотя бы 0 вольт покажет. И покпжите свой код. Влияния входов друг на друга быть не должно.
     
  17. foster08

    foster08 Нуб

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


    Исправил все функции для вывода на экран, я понимаю что там все сикось-накось будет выводится, но это форматирование текста я исправлю чуть позже, когда удастся запустить скетч. После замены всех функций вывода на экран стали переть ошибки. Сама библиотека рабочая ровно как и библиотека генератора. Но где-то я накосячил и битый час не могу понять почему я дурак. Ткните носом, пожалуйста. На данный момент ругается на
    exit status 1
    'setincrement' was not declared in this scope

    Хотя эта функция описана в скетче.

    Исходник в пост не влез, выложил тут http://pastebin.com/6TRHkacF
     
  18. Unixon

    Unixon Оракул Модератор

    Прототип функции объявите выше места использования:
    void setincrement();
     
  19. Neded8

    Neded8 Нуб

    ПРОШУ ПОМОЩИ!
    Не работает ЖК дисплей LCD 16x2, вчера работал стабильно, я разобрал\собрал\включил и из всего только ряд квадратов и не реагирует на скетч.
    Подключал
    Ардуино______________Экран
    А0/А0
    5V/5V
    RST/RST
    GND/GND
    VIN/VIN
    D2-D5,D11,D12/D2-D5,D11,D12
    приметки*
    контрастность регулировал но не в этом дело, он то квадраты показывает, то крякозябры, даж не знаю от чего зависит...
     

    Вложения:

    • Image.jpg
      Размер файла:
      900,1 КБ
      Просмотров:
      596
    • Imagew.jpg
      Размер файла:
      900,1 КБ
      Просмотров:
      904
  20. rkit

    rkit Гуру

    Ну школьная математика же. Делим на 10 с остатком.
     
    mofo нравится это.