двигатель не слушается

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Atikin, 17 окт 2018.

  1. Atikin

    Atikin Нуб

    сначала я думал сделать машинку на радиоуправлении. Передача информации с джойстика идет, а вот двигатель слушаться не хочет. Использовал дравер FAN8082 и радио модуль на 433МГц . Я думаю что проблема в скетче, но не могу найти. Помогите пожалуйста.
    Скетч передатчика:
    #include <RH_ASK.h> //библиотека радио модуля
    const int X = A1; //потенциометр на джойстике по оси Х
    int data; //переменная для передачи информации
    RH_ASK radioDriver; //объявление радио модуля

    void setup()
    {
    Serial.begin(9600);
    radioDriver.init(); //начало работы радио модуля
    }

    void loop()
    {
    int x =analogRead(X);
    Serial.println(x);// только в отладочных целях
    data = x;
    radioDriver.send((uint8_t *)&data, sizeof(data)); //отправка данных
    radioDriver.waitPacketSent(); //ждем пока они отправятся
    delay(10);
    }

    Скетч приемника:
    #include <RH_ASK.h> //библиотека радио модуля
    RH_ASK radioDriver; //объявление радио модуля
    int data; //переменная для передачи информации
    const int MC1 = 2; //первый контакт для Н моста
    const int en2 = 9; //пин для скорости двигателя
    const int MC2 = 3; //второй контакт для Н моста

    void setup()
    {
    pinMode(MC1, OUTPUT);
    pinMode(MC2, OUTPUT);
    pinMode(en2, OUTPUT);
    Serial.begin(9600); // только в отладочных целях
    radioDriver.init();
    }

    void loop()
    {

    uint8_t buf[sizeof(data)];
    uint8_t buflen = sizeof(data);
    if (radioDriver.recv(buf, &buflen))
    {
    memcpy(&data,&buf,buflen);
    Serial.println(data); //чисто только для проверки
    int val = data;
    if (val > 562) //движение двигателя по часовой стрелке
    {
    digitalWrite(en2,HIGH);
    digitalWrite(MC1, HIGH);
    digitalWrite(MC2, LOW);
    }
    else if (val < 462) //движение двигателя против часовой стрелке
    {
    digitalWrite(en2, HIGH);
    digitalWrite(MC1, LOW);
    digitalWrite(MC2, HIGH);
    }
    else //остановка двигателя
    {
    digitalWrite(en2, LOW);
    digitalWrite(MC1, LOW);
    digitalWrite(MC2, LOW);
    }
    }
    }
     
    Последнее редактирование: 17 окт 2018
  2. val = map(data, 563, 1023, 0, 255);
    val = map(data, 0, 461, 0, 255);
    Это что такое?
     
  3. Atikin

    Atikin Нуб

    это вращение двигателя в разные стороны
     
  4. Atikin

    Atikin Нуб

    проблема заключается в том, что двигатель как будто "блокирует" прием данных с передатчика.
     
  5. нет, это бесполезный код
     
  6. Atikin

    Atikin Нуб

    хорошо. я еще неопытный. Вам виднее
     
  7. Daniil

    Daniil Гуру

    Поясните, пожалуйста, зачем тогда эти строки.
    Вставьте код через теги, пожалуйста, читать не удобно.
    Что такое МС1/2х чем они управляют? То чем они управляют не сгорело из-за случая когда на МС2 было "1", а потом на МС1 вывелось "1", а до МС2 "0" ещё не дошёл.
    И схему, если можно.
     
    Igor68 нравится это.
  8. Atikin

    Atikin Нуб

    Вот схема. Только вместо Н моста FAN8082 изображен Н мост SN754410. Untitled Sketch_bb.jpg
     
  9. Daniil

    Daniil Гуру

    К сожалению, я не могу ответить на вопрос, т.к. по схеме вы привели не то, что нужно, может быть там и опечатки, а может и ошибки, но нужно, чтобы вы проверяли то, что выкладываете.
    Зачем мне схема с мостом SN754410 если у вас используется другая микросхема, включение которой другое. (может быть ошибка)
    У вас шина "+" и "-" на бредборде не соединены с "+" и "-" питания. (подозреваю опечатка)
    Н-мост по коду включён в пины 2 и 3, а по картинке в 1 и 2. (?)
    По предыдущему моему замечанию, про сгорание, в даташите указано, что если выводы МС1 = МС2 , то мотор отключается.
    Приёмник получает данные? Они верные? (В передатчике вы выводите в сериал для контроля, в приёмнике не мешало бы так же)
    Код вставляется так (сами попробуйте почитать сухой код без оформления)
     
  10. AlessandrIT

    AlessandrIT Гик

    Итак
    1. Здесь советовали разобраться с программой.Я хз каким буераком у вас управляется движок но подозреваю что нажатие тех или иных кнопок выдаёт разное напряжение на аналоговый пин а дальше тяп-ляп и готово
    2. Ежели двигатель блокирует электронику - ставим ёмкости на питание логики, немножко электролита, ежели не помогло сразу то можно подцепить немножко керамики.
    3. Двигатель постоянного тока?Херачим керамику на его вывода.Поближе к мотору.
    4. Проверьте что ваш Аш-мост не испустит душу (белый дым) при двух сигналах на управляющих пинах.
    5. Прозвоните земли, питание в целом.На схеме вы действительно оставили их разобщёнными.
    6. Все вывода ардуинок выставляйте как выходы.Иначе ардуина будет жадно поедать помехи из среды своего нахождения пока не заглотнёт что-то такое, отчего перестанет работать.
    7. Вот будет хохма если у вас передатчик/приёмник висит на пинах, связанных с USB но по схеме вроде такого нет.
    И только после всех описанных мной операций заходим на форум и вежливо просим помощь.
    И да, научитесь оформлять
    Код (C++):
    код
    по-нормальному.Выкладывать код так, как это сделали вы - возмутительно.
     
    Последнее редактирование: 17 окт 2018
    Daniil нравится это.
  11. Чушь какая. Ничего работать не перестанет. Производитель рекомендует выставлять pullup, чтобы не переключать триггеры зазря, но это полнейшая мелочь, и пудрить никому мозги этим не надо.
     
  12. Atikin

    Atikin Нуб

    я понял все свои ошибки. Спасибо за советы.
     
  13. Daniil

    Daniil Гуру

    Какие они были? Поделитесь опытом