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

Тема в разделе "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. mofo

    mofo Нуб

    Ребят заранее прошу прощения, я только осваиваю данную платформу. Возник вопрос: например берём какие нибудь два выхода, задача сделать так чтобы они были либо замкнуты, либо разомкнуты. Хочу подключить к материнке компа на разъём кнопки питания и таким образом ВКЛ/ВЫКЛ компьютер.
     
  13. rkit

    rkit Гуру

    Это называется реле
     
  14. mofo

    mofo Нуб

    Я впринципе изначально и хотел на реле делать, просто думал может можно без них. Значит рекомендуете приобрести реле к ардуино?
     
  15. rkit

    rkit Гуру

    Вам лучше с реле.
     
  16. mofo

    mofo Нуб

    А вообще программно не замыкаются выходы? Чисто на будущее чтобы знать.
     
  17. rkit

    rkit Гуру

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

    mofo Нуб

    Спасибо!
     
  19. mofo

    mofo Нуб

    Ещё момент, есть некие 2 устройства, у них есть выходы - плюс и минус с напряжением 3 и 4В. Вопрос: с ардуины нужно это напряжение замерить, как подключить?

    [​IMG]
     
  20. sslobodyan

    sslobodyan Гик

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