Нужна помощь с Arduino NANO и микромоторчиком.

Тема в разделе "Arduino & Shields", создана пользователем F0XYK, 9 авг 2018.

  1. F0XYK

    F0XYK Нуб

    Здравствуйте коллеги, помогите решить следующую задачу:

    Оборудование:
    Есть микромоторчик с напряжением 1.5В и примерно 60мА тока, который работает через свой контроллер + кнопка. Контроллер при нажатии на кнопку включает моторчик на 1-1,5 секунды моторчик в одну сторону и через 3 секунды включает его на те же 1-1,5 секунды в другую сторону через смену полярности. Моторчик подключается 2мя проводами.
    Есть Arduino Nano v3 китайская.

    Вопрос: Как можно с помощью аналоговых портов отследить в какую сторону включен моторчик?

    Может есть какой то другой вариант определить полярность вращения моторчика.

    Пробовал считать информацию с портов А5 и А6, подключит провода к двигателю, но ничего не выходит.
    Помогите с решением данной задачки.

    Так же было бы интересно увидеть код для отображения этой информации в порт монитора.

    Заранее спасибо за помощь.
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Как-как, руками!
    Если честно, в первый раз слышу слово микромоторик...
     
  3. F0XYK

    F0XYK Нуб

    Вот код, который я заливаю в НАНО:


    int led = 13;
    int relay_pin = 4;
    int button_pin= 5;
    int relay2_pin = 6;
    int buttonState = 0;
    int drv_m = analogRead(A6);
    int drv_p = analogRead(A5);

    void setup() {
    // put your setup code here, to run once:
    pinMode(led, OUTPUT);
    pinMode(relay_pin, OUTPUT);
    pinMode(relay2_pin, OUTPUT);
    pinMode(button_pin, INPUT);
    pinMode(drv_m, INPUT);
    pinMode(drv_p, INPUT);
    digitalWrite(relay_pin, HIGH);
    digitalWrite(relay2_pin, HIGH);
    Serial.begin(9600);

    }

    void loop() {
    // put your main code here, to run repeatedly:
    // digitalWrite(led, HIGH);
    // digitalWrite(relay_pin, HIGH);
    // delay(2000);
    // digitalWrite(led, LOW);
    // digitalWrite(relay_pin, LOW);
    // delay(2000);
    Serial.println("drv_m: " + drv_m);
    delay(500);
    Serial.println("drv_p: " + drv_p);
    delay(500);

    buttonState = digitalRead(button_pin);
    if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(relay_pin, LOW);
    digitalWrite(led, HIGH);
    digitalWrite(relay2_pin, LOW);

    } else {
    // turn LED off:
    digitalWrite(relay_pin, HIGH);
    digitalWrite(led, LOW);
    digitalWrite(relay2_pin, HIGH);

    }

    }


    Интересует только аналоговые порты А6 и А5. При подачи напряжения на второй контроллер, моторчик срабатывает как в одну, так и в другую сторону, но информации на портах А5 и А6 нет.

    Возможно я неправильно подключил провода?
    Один провод от моторчика подключил к пину А5, а второй к пину А6.
    подтягивать контакты к земле через резистор боязно, т.к. в разное время провода являются и + и -
     
  4. F0XYK

    F0XYK Нуб

    Спасибо за указание на ошибку, тему подправил.
     
  5. F0XYK

    F0XYK Нуб

    Подскажите как можно замерить напряжение на проводах моторчика подключив хотя бы один провод к аналоговому порту Ардуино, с учетом смены полярности питания на моторчике.
    Очень нужна помощь.
     
  6. parovoZZ

    parovoZZ Гуру

    Точки с нулевыми потенциалами объеденил? Если объединял, то на пин мк с моторчика подключай только через резистор 10-100 кОм, иначе выжжешь защитный диод на порту, а за ним и весь порт. Либо другой вариант - перевести АЦП в дифф. режим работы. Но это не абдурино уровень. А проще всего использовать встроенный компаратор. Но соблюдая описанное выше.
     
  7. F0XYK

    F0XYK Нуб

    1) А можно поподробнее, как это сделать?
    2) Точки с нулевыми потенциалами это земля или минус моторчика?
    Как я понимаю, подключив провода от моторчика к 2м пинам ардуино, мне надо подтянуть каждый порт к земле через резистор, это верно?

    Еще вопрос:
    Если по портам будет подаваться как + так и минус это не повредит ардуино?
     
  8. Daniil

    Daniil Гуру

    Это нужно только с помощью ардуино сделать?
     
  9. parovoZZ

    parovoZZ Гуру

    Пора бы уже выучить - нулевой потенциал - это точка, относительно которой ведутся измерения всех остальных точек схемы. Соответственно, у тебя могут быть точки как с плюсовым потенциалом, так и с минусовым (отрицательных токов и напряжений в природе не существует =)).
    Моторчик и МК запитаны от раздельных источников питания?
     
  10. parovoZZ

    parovoZZ Гуру

    Я ж тебе только что написал - по даташиту на вход АЦП можно подавать не ниже -0.5в. Но на входе стоит защитный диод. Теоретически, ниже -0.7в не опустишься. Но допустимый ток диода не велик и твои 60 мА с моторчика запросто его могут сжечь. Поэтому подключай только через резистор.
    Для чего?
     
  11. F0XYK

    F0XYK Нуб

    Да, моторчик и его контроллер имеют свой блок питания, а ардуина свой.
     
  12. a1000

    a1000 Гуру

    Я бы подключил два диода по такой схеме.

    [​IMG]
    когда с лева плюс а с права минус сигнал есть, при смене полярности сигнал отсутствует. Резистор тоже не повредит. А для вывода информации в монитор порта используйте из из базовых примеров AnalogReadSerial
     
  13. parovoZZ

    parovoZZ Гуру

    Ну тогда выбирай один из двух озвученных мной вариантов и вперёд.
     
  14. F0XYK

    F0XYK Нуб

    Способ хороший, но мне надо знать когда у моторчика произойдет переполюсовка.
    Получается у моторчика есть 3и состояния: отключен, (+ -), (- +). мне надо отловить эти действия.
     
  15. F0XYK

    F0XYK Нуб

    подключать по такой схеме?
     

    Вложения:

  16. F0XYK

    F0XYK Нуб

    Да, механика не рассматривается. В дальнейшем, моторчик будет убран из цепи. Необходимо получать от контроллера сигналы на работу моторчика. Контроллер подает на провода сперва плюс, минус. Потом через 3-5 секунд минус, плюс.
     
  17. a1000

    a1000 Гуру

    А если создать искусственную нулевую точку
    [​IMG]
    Вот и три положения. Порт 0 - в одну сторону, порт 1 - в другую. Нет ни на одном порту - стоп.
     
    Mitrandir нравится это.
  18. F0XYK

    F0XYK Нуб

    Спасибо большое, попробую.
    Еще один глупый вопрос, а резисторы какого номинала брать? 10к подойдут? Не спалю ли порты?
     
  19. Arhat109

    Arhat109 Гик

    упс. Дочитал до конца. Тут уже есть всё что надо.. :)
     
  20. parovoZZ

    parovoZZ Гуру

    Да. Второй контакт с двигателя также. Резистор возьми из диапазона 10 кОм - 100 кОм. Не забудь объединить нули блоков питания.