Отпугиватель кота [помощь]

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
Что бы кот не ходил где не нужно решился сделать отпугиватель кота.
Это первое моё устройство.
Купил автоматический освежитель воздуха, датчик движения HC-SR501, ардуино нано, инфракрасный приёмник.
Задумка такая - включая на расстоянии пультом ду от телевизора, должен загораться светодиод и при срабатывании датчика движения должен производиться пшик из баллона 1 секунду, следующий пшик должен случиться через заданное время.
Написал скетч, спаял эту конструкцию, мотор подключил на прямую к цифровому контакту, освежитель работал от 2х пальчиковых батареек.
Включаю устройство, нажимаю кнопку на пульте ду, светодиод загорается, мотор не шевелится.
Требуется помочь со скетчем и вероятно схемой. Cледовало подключить мотор через транзистор к 5в?

C++:
// подключаем библиотеку https://github.com/z3t0/Arduino-IRremote
#include "IRremote.h"

// цифровой пин для сервопривода
const int servoPin = 2;
// цифровой пин для диода
const int ledPin = 3;
// цифровой пин для инфракрасного приёмника
const int irdaPin = 4;
// цифровой пин для датчика движения
const int sensorPin = 5;

// код кнопки пульта ДУ
//irCode = '0xE0E040BF'; как передать в переменной?
// режим отладки, 1 - включён, 0 - отключён
int debug = 1;
// дефолтное значение для переменной led
int led = 0;

IRrecv irrecv(irdaPin);
decode_results irda;

void setup() {
    pinMode(ledPin, OUTPUT);
    pinMode(servoPin, OUTPUT);
    pinMode(sensorPin, INPUT);

    Serial.begin(9600);
    irrecv.enableIRIn();
}

void loop() {
    if (irrecv.decode(&irda)) {
        if (debug) {
            // отправляем значения с инфракрасного приёмника в последовательный порт компьютера
            Serial.println(irda.value, HEX);
        }

        // если устройство не работает - включаем его
        if (irda.value==0xE0E040BF&&led==0) {
            // включаем светодиод
            digitalWrite(ledPin, HIGH);
            led = 1;
            irda.value = 0;
        }
        // выключаем устройство
        if (irda.value==0xE0E040BF&&led==1) {
            // выключаем светодиод
            digitalWrite(ledPin, LOW);
            led = 0;
            irda.value = 0;
        }
        irrecv.resume();
    }

    if (led==1) {
        // читаем значение с датчика движения
        int sensor = digitalRead(sensorPin);
        if (debug) {
            // отправляем значения с датчика движения в последовательный порт компьютера
            Serial.println(sensor);
            // пауза 1 секунда
            delay(1000);
        }

        if (sensor==1) {
            // включаем сервопривод
            digitalWrite(servoPin, HIGH);
            // пауза 1 секунда
            delay(1000);
            // отключаем сервопривод
            digitalWrite(servoPin, LOW);
            // пауза 10 секунд
            delay(10000);
        }
    }
}
 

Вложения

Последнее редактирование:

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
1,472
303
Москва
wan-derer.ru

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
Пробовал подключить от 1 пальчиковой батарейки и он крутил.
Подключу значит через мосфет, в штатной схеме он работал от 3в.
От цифрового порта ардуино 3в? что он даже дёрнуться не должен?
 
Последнее редактирование:

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
1,472
303
Москва
wan-derer.ru
@Beaten_Sect0r,
1. Какой ток потребляет мотор? Какой у него пусковой ток?
2. Какой ток обеспечивает выход Ардуино?
3. Мотор - это какой тип нагрузки? Чем такой тип м.б. опасен?
 

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
@Beaten_Sect0r,
1. Какой ток потребляет мотор? Какой у него пусковой ток?
2. Какой ток обеспечивает выход Ардуино?
3. Мотор - это какой тип нагрузки? Чем такой тип м.б. опасен?
1. Не знаю паспорта к нему не дали
2. 40ма
3. Я не жнаю. Чем? поломается ардуина? Вероятно остановка двигателя будет равна короткому замыканию.
Я заметил что в коде не хватает pinMode(servoPin, OUTPUT); добавил и мотор стал крутить.
Какой мосфет посоветуете купить?

ещё HC-SR501 всегда шлёт единицу не зависимо от движения, попробовал 2 HC-SR501 ведут себя одинаково.
 
Последнее редактирование:

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
1,472
303
Москва
wan-derer.ru
1. Не знаю паспорта к нему не дали
Мультиметр дали?

3. Я не жнаю. Чем? поломается ардуина? Вероятно остановка двигателя будет равна короткому замыканию.
Внутри двигателя есть катушка. Значит нагрузка индуктивная. Чем опасна индуктивная нагрузка и как с этим бороться?

Какой мосфет посоветуете купить?
IRLZ44N

HC-SR501 всегда шлёт единицу не зависимо от движения
Там есть регулировки и перемычки
 

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
Спасибо!
Мультиметр дали?
Дали, пользоваться не научили. ~100 миллиампер, включается на 300 миллисекунд.
Внутри двигателя есть катушка. Значит нагрузка индуктивная. Чем опасна индуктивная нагрузка и как с этим бороться?
Нужен диод?
уже купил IRF 3205
Там есть регулировки и перемычки
Всё пробовал, ни чего не помогает, только 1

Есть тут кто живой пользовавшийся этим модулем совместно с ардуино?
 
Последнее редактирование:

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
1,472
303
Москва
wan-derer.ru
@Beaten_Sect0r, Надо измерить ток двигателя при номинальном напряжении. На холостом ходу будет номинальный, при заблокированном валу - максимальный.

Нужен защитный диод параллельно мотору, включённый обратно напряжению питания.

IRF3205 сгодится.

Модуль HC-SR501 у меня есть, настраивал по первой попавшейся статье из поиска. Всё работает.
 

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
@Beaten_Sect0r, Надо измерить ток двигателя при номинальном напряжении. На холостом ходу будет номинальный, при заблокированном валу - максимальный.
Человек что-то делавший с таким же освежителем замерял и написал в статье ~100 миллиампер.
Нужен защитный диод параллельно мотору, включённый обратно напряжению питания.

IRF3205 сгодится.
Диод поставлю, нужен ли мосфет если питать мотор буду 3в.
Модуль HC-SR501 у меня есть, настраивал по первой попавшейся статье из поиска. Всё работает.
Модулю есть разница аналоговый или цифровой пин?

Не могли бы вы попробовать данный код у себя на этих же пинах ардуино нано?
C++:
const int pirPin = 5;
const int ledPin = 3;

void setup() {
    pinMode(pirPin, INPUT);
    pinMode(ledPin, OUTPUT);
}

void loop(){
    int val = digitalRead(pirPin);
    if (val)
        digitalWrite(ledPin, HIGH);
    else
        digitalWrite(ledPin, LOW);
}
у меня диод горит не выключаясь.
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
1,472
303
Москва
wan-derer.ru
@Beaten_Sect0r,
Если ток, потребляемый нагрузкой, превышает возможности выхода МК, надо ставить буферный элемент - транзистор.

По поводу модуля подробностей не помню, просто он у меня сразу запустился, ну я его и положил в коробочку.

Проверить не могу т.к. нет под рукой железа.

Код, вроде, работать должен, но:
- первые две строки д.б. #define
- val д.б. boolean
- loop можно записать одной строкой

C-like:
digitalWrite(ledPin, digitalRead(pirPin));
 

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
@Beaten_Sect0r,
Если ток, потребляемый нагрузкой, превышает возможности выхода МК, надо ставить буферный элемент - транзистор.

По поводу модуля подробностей не помню, просто он у меня сразу запустился, ну я его и положил в коробочку.

Проверить не могу т.к. нет под рукой железа.

Код, вроде, работать должен, но:
- первые две строки д.б. #define
- val д.б. boolean
- loop можно записать одной строкой

C-like:
digitalWrite(ledPin, digitalRead(pirPin));
То есть так
C-like:
#define pirPin 5
#define ledPin 3

void setup() {
    pinMode(pirPin, INPUT);
    pinMode(ledPin, OUTPUT);
}

void loop(){
    boolean val = digitalRead(pirPin);
    digitalWrite(ledPin, digitalRead(pirPin));
}
Тоже самое.
 

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
Загрузил
C-like:
const int movPin = 5;

void setup() {
    Serial.begin(9600);
    pinMode(movPin, INPUT);
}

void loop(){
    int val = digitalRead(movPin);
    Serial.println(val);
    delay(100);
}
В мониторе порта в течении 5 минут одни 1.
Есть смысл выкорчевать сам датчик из модуля?
 
Последнее редактирование:

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
@Wan-Derer, на двигателе есть маркировка 500tb-18280-1
нашел даташит
motor.png
 
Последнее редактирование:

Beaten_Sect0r

✩✩✩✩✩✩✩
5 Окт 2018
11
0
Подключил датчик движения к уне и он заработал, потом выяснил что причина была в том, что перепутал землю с 5в.
Из диодов нашел только RGP15G я так понимаю 1,5 ампера будет с лихвой?
Нужен ли такому мотору мосфет или можно на прямую к цифровому порту и сколько mA на pin 5v?
 
Последнее редактирование: