Серво от датчика движения

Firsthero
Offline
Зарегистрирован: 13.10.2019

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

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Вроде никто не запрещал еще.

Firsthero
Offline
Зарегистрирован: 13.10.2019

Может немного не точно спросил..) Есть желание чтоб серво однократно поворачивало на 45 градусов при срабатывании датчика. Хочу все организовать при помощи Ардуино. Искал примеры в инете - в основном используют ультразвуковой датчик, а вот с датчиком движения не нашел примеров, может искал плохо)) Потому и спросил, спасибо! Пойду учить мат часть) 

b707
Offline
Зарегистрирован: 26.05.2017

Firsthero пишет:

Может немного не точно спросил..) Есть желание чтоб серво однократно поворачивало на 45 градусов при срабатывании датчика. Хочу все организовать при помощи Ардуино. Искал примеры в инете - в основном используют ультразвуковой датчик, а вот с датчиком движения не нашел примеров, может искал плохо)) Потому и спросил, спасибо! Пойду учить мат часть) 

задача вполне решаемая. А примеры не находите, потому что, наверно, ищите именно управление "сервы от датчика" - что неверно.

Ищите сначала как работать с датчиком движения, потом, отдельно - как поворачивать серву. А потом совмещайте два скетча сами

Firsthero
Offline
Зарегистрирован: 13.10.2019

Спасибо! Буду пробовать)

nik182
Offline
Зарегистрирован: 04.05.2015

Датчик движения это та же кнопка, что замыкется на массу. Разницы никакой.

Firsthero
Offline
Зарегистрирован: 13.10.2019

Ну как никакой? Прописывать условия для новичка сложнее немножко))

 

nik182
Offline
Зарегистрирован: 04.05.2015

Я про то, что сигнал датчика движения точно такой же как и нажатие на кнопку. Его можно так эмулировать. А уж условия... и для кнопки можно накрутить таких условий...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Ежели для кнопки:
 

#include <Servo.h>
Servo myservo;  
int knobpin = 12;      // Пин подключенной кнопки, второй контакт на GND
int val = 45;         // Угол поворота сервы
int val0 = 0;

void setup() {
  myservo.attach(9);  // Серву подключаем к 9 цифровому пину
  pinMode(knobpin, INPUT_PULLUP); 
}

void loop() {
  if(digitalRead(knobpin) == LOW){
  myservo.write(val);                  // Устанавливаем серву в нашу позицию
  delay(15);                           
  }else{
   myservo.write(val0);  // Да, будет дёргать, можно добавить флаг, что серва уже в нуле
   delay(15); 
  }
}

 

Firsthero
Offline
Зарегистрирован: 13.10.2019

Собственно получилось, все работает) Жду критики!)

#define PIR 2
#include <Servo.h>
Servo servo1;
void setup() {
servo1.attach(5);
}
void loop() {
int pirVal = digitalRead(PIR);
 
if (pirVal == HIGH) {servo1.write(0) ; }
  
if (pirVal == LOW) {servo1.write(90);}
 
}    
bwn
Offline
Зарегистрирован: 25.08.2014

Firsthero пишет:

Жду критики!)

Собственно критика - прочитайте первый пост приколоченной темы и вставьте код правильно.

Firsthero
Offline
Зарегистрирован: 13.10.2019

bwn пишет:

Firsthero пишет:

Жду критики!)

Собственно критика - прочитайте первый пост приколоченной темы и вставьте код правильно.



#define PIR 2
#include <Servo.h>
Servo servo1;
void setup() {
servo1.attach(5);
}
void loop() {
int pirVal = digitalRead(PIR);
 
if (pirVal == HIGH) {servo1.write(0) ; }
  
if (pirVal == LOW) {servo1.write(90);}
 
}    
BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А какая тут критика? Собери схему и попробуй. Например, сначала поднеси руку к датчику и подержите минуту, потом отпустите. А второе - поднесите руку к датчику и сразу уберите (находиться нужно за датчиком оба раза). 

Firsthero
Offline
Зарегистрирован: 13.10.2019

Все собрано, все работает как надо) Критику ждал по коду, может лишнего написал чего или не по фэн шую) Ну судя по работе все норм, продолжим наши изыскания в этой области)) Всем спасибо!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так о чем речь, дерзай. Надеюсь не двери в турникеты проектируешь)

Firsthero
Offline
Зарегистрирован: 13.10.2019

Не)) Кошка достала на стол залезать, пшикалку-пугалку делаю)))

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Для пугалки (если только не вонялка по совместительству) лучше просто звук. И управлять надо, иначе родственников в больничку повезёте вместе с кошкой )))

Firsthero
Offline
Зарегистрирован: 13.10.2019

Не, там тихо все будет, не так сильно как в "ссскэт") И родственники не пострадают, все продумано, в том числе и радиус срабатывания) А вот звук ночью не очень будет...  

nik182
Offline
Зарегистрирован: 04.05.2015

Утразвук, не?

Rolo1
Offline
Зарегистрирован: 13.09.2019

Мне тоже понадобилось так сделать тока не понял это у тебя часть кода? Я попробовал загрузил на ардуино и не реагирует модуль датчика движения.

Rolo1
Offline
Зарегистрирован: 13.09.2019

Подскажите как в этот код правильно встроить работу серво привода чтоб серво однократно поворачивало на 45 градусов при срабатывании датчика движения и обратно возвращалось на 0 при отключении датчика движения?

#define pirPin 8
#define LedPin 13
  
void setup() {
  Serial.begin(9600); // Объявляем работу com порта со скоростью 9600
  pinMode(pirPin, INPUT); //Объявляем пин, к которому подключен датчик движения, входом
  pinMode(LedPin, OUTPUT); //Объявляем пин, к которому подключен светодиод, выходом
}
  
void loop() {
  int pirVal = digitalRead(pirPin); //Считываем значения с датчика движения. Если обнаружили движение, 
                                    //то транслируем сигнал тревоги в монитор порта и включаем светодиод
  if(pirVal == HIGH)
  {
    digitalWrite(LedPin, HIGH);
    Serial.print("Тревога ");
    delay(2000);
  }
else
{
  Serial.print("Сканирую ");
  digitalWrite(LedPin,LOW);
  delay(1000);
}
}

 



 
 
 
 
 
 
 
 
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
#define pirPin 8
#define LedPin 13
#include <Servo.h>
Servo servo;  

void setup() {
  Serial.begin(9600); // Объявляем работу com порта со скоростью 9600
  pinMode(pirPin, INPUT); //Объявляем пин, к которому подключен датчик движения, входом
  pinMode(LedPin, OUTPUT); //Объявляем пин, к которому подключен светодиод, выходом
  servo.attach(5);
}
  
void loop() {
  int pirVal = digitalRead(pirPin); //Считываем значения с датчика движения. Если обнаружили движение, 
                                    //то транслируем сигнал тревоги в монитор порта и включаем светодиод
  if(pirVal == HIGH)
  { servo.write(45)
    digitalWrite(LedPin, HIGH);
    Serial.print("Тревога ");
    delay(2000);
  }
else
{ servo1.write(0)
  Serial.print("Сканирую ");
  digitalWrite(LedPin,LOW);
  delay(1000);
}
}
 
Rolo1
Offline
Зарегистрирован: 13.09.2019

Благодарю за помощь.

Однако  при загрузке (Ошибка и выделяет 18 строку)

Arduino: 1.8.9 (Windows 7), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"
C:\Temp\arduino_modified_sketch_892631\sketch_jan27a.ino: In function 'void loop()':
sketch_jan27a:18:6: error: expected ';' before 'digitalWrite'
digitalWrite(LedPin, HIGH);
 
      ^~~~~~~~~~~~
sketch_jan27a:23:3: error: 'servo1' was not declared in this scope
{ servo1.write(0)
C:\Temp\arduino_modified_sketch_892631\sketch_jan27a.ino:23:3: note: suggested alternative: 'servo'
 
 { servo1.write(0)
 
 servo
 
exit status 1
expected ';' before 'digitalWrite'
 
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
#define pirPin 8
#define LedPin 13
#include <Servo.h>
Servo servo;  

void setup() {
  Serial.begin(9600); // Объявляем работу com порта со скоростью 9600
  pinMode(pirPin, INPUT); //Объявляем пин, к которому подключен датчик движения, входом
  pinMode(LedPin, OUTPUT); //Объявляем пин, к которому подключен светодиод, выходом
  servo.attach(5);
}
  
void loop() {
  int pirVal = digitalRead(pirPin); //Считываем значения с датчика движения. Если обнаружили движение, 
                                    //то транслируем сигнал тревоги в монитор порта и включаем светодиод
  if(pirVal == HIGH)
  { servo.write(45);
    digitalWrite(LedPin, HIGH);
    Serial.print("Тревога ");
    delay(2000);
  }
else
{ servo.write(0);
  Serial.print("Сканирую ");
  digitalWrite(LedPin,LOW);
  delay(1000);
}
}
Rolo1
Offline
Зарегистрирован: 13.09.2019

Загрузилось нормально, благодарю.

Теперь надо разобраться какие куда резисторы приделать ибо подвисает система через какое то время.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

серву запитать правильно, не от стабилизатора дуины для начала )))