Проблема управления DC мотором через IR (Решено!)

Всем привет
Пытаюсь реализовать управление моторчиком через управление пультом IR.
Что имеем:
Arduino UNO
Моторчик (скорее всего это R140-08500)
Транзистор IRF530N - гейт подключен к порту 3
IR приемник - подключен к порту 2
Батарейка на 6В
Светодиод - порт 5, просто чтоб моргал.
Мой код:

#include <IRremote.h>
IRrecv irrecv(2);
decode_results results;
const int MOT=3;
const int ledPin = 5; 
int motorSpeed=0;
 
void setup() {
 Serial.begin(9600);
 irrecv.enableIRIn();
   pinMode(ledPin, OUTPUT);

}
 
void loop() {

    digitalWrite(ledPin, HIGH);
    delay (500);
    digitalWrite(ledPin, LOW);
    delay (500);
  
  if (irrecv.decode(&results)) {

  if (results.value == 16712445) {
    
    motorSpeed = motorSpeed + 50;
    
  } else if (results.value == 16750695){
    
    motorSpeed = motorSpeed - 50;
   
  }
  motorSpeed = constrain (motorSpeed, 0, 255);
  Serial.println(motorSpeed);
  analogWrite (MOT, motorSpeed); 
 
 irrecv.resume();
  }
  }

Задумка в том, чтобы при нажатии + и - на пульте мотор запускался\выключался, увеличивалась\снижалась скорость его работы.
Проблема в том, если я подключаю питание мотора к ардуино, то с пульта я могу запустить и остановить мотор (только при значени скорости равном 255 в мониторе порта), но не могу влиять на скорость.

Если же питание мотора подключено к батарейке (6В), то мотор вообще никак не реагирует даже при скорости 255.

Собственно вопросы:

  1. Почему на мотор не влияет скорость?
  2. Почему мотор вообще не реагирует, если его запитать отдельно?

Добро пожаловать на форум

очевидно потому, что с пульта не приходит таких команд.
Вставьте в код вывод results.value в Сериал и посмотрите, какие коды команд у вас принимает приемник.

покажите схему с подробным обозначением всех соединений. Можно нарисовать от руки и сфоткать - и выложить в форум

1 лайк

IRremote использует таймер, на котором висит мотор.

По коду видно, что я получаю с пульта сигналы от кнопок + и -. Поэтому и меняется скорость, которую по монитору можно отследить. Я же цифры 16712445 и 16750695 не из головы взял.
Схему прикрепляю ниже.
мотор11 — копия
На этой схеме моторчик запитан от ардуино. Так вот, если протянуть коричневый и оранжевый провода (показаны стрелками) к батарейке 6В, моторчик перестает реагировать.
@rkit ваш комментарий я вообще не понял. Про какой таймер вы говорите?
IR подключен ко второму пину. Мотор к третьему.

Судя по прикрепленному фото - мотор совсем не работает от батареи 6V потому, что нет объединения масс батареи и ARDUINO. Сх. для питания мотора от батареи д.б. приблизительно такая:

1 лайк

Нет, по коду видно, что вы хотите получать эти сигналы. Хотеть и получать это разные вещи.
Судя по тому, что моторчик не реагирует - мне кажется что вы их не получаете.
Однако вы можете думать иначе.

Обратите внимание на сообщение @rkit и поменяйте PWM выход на выход таймера0

1 лайк

Удосужься прочитать документацию на библиотеку, которой пользуешься.

1 лайк

Друзья, всем спасибо за советы!
По итогу:

  1. Сделал общую землю (после этого он снова стал реагировать на кнопки).
  2. Подключил моторчик у пятому пину (таймер0)
  3. Подключил моторчик обратно к питанию ардуино, так как батарейка плохо вывозила нагрузку.
    Буду изучать документацию по таймеру, не знал про это.
1 лайк