Ви не увійшли.
Сторінки 1

2 Датчика движения HC-SR501 
2 серво привода SG-5010
2 светодиода
примерно должен работать по принципу створчатых турникетов метро
то есть (датчик  движения 1) замечает объект , поворачивает серво в состояние 0 и 180 (градусов).
Объект проходит и (второй датчик) запускает таймер на 3 сек чтобы вернуть серво в изначальное положение (90 и 90 градусов),
светодиоды просто горят показывая в какую сторону работает устройство
после происходит рестарт и прибор работает заново..
собираю на Arduino Mega 2560 R3
собрать не сложно , а написать программу не получается , в интернете слишком мало информации как это сделать , помогите пожалуйста
Остання редакція лёля (2019-02-16 12:52:36)
Неактивний

вы хотите, что бы вам помогли или написали за вас программу ?
 Я смог написать конечно программу но работает хоть бы как ,то работает то не работает , можете помочь подкорректировать или предложить другую версию программы  
мой пример:
#define pirPin 8
#define pirPin2 7
#define LedPin 13
#include <Servo.h>
Servo servo1;//серво первое
Servo servo;//серво второе
void setup() {
  Serial.begin(9600); // Объявляем работу com порта со скоростью 9600
  pinMode(pirPin, INPUT); //Объявляем пин, к которому подключен датчик движения, входом
  pinMode(LedPin, OUTPUT); //Объявляем пин, к которому подключен светодиод, выходом
  servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11
  servo.attach(12);
  }
  void loop() {
  int pirVal = digitalRead(pirPin); //Считываем значения с датчика движения. Если обнаружили движение,
 int pirVal1 = digitalRead(pirPin2);                                 
                                    //то транслируем сигнал тревоги в монитор порта и включаем светодиод
  if(pirVal == HIGH)
  {
    digitalWrite(LedPin, HIGH);
    Serial.print("Тревога ");
    delay(2000);
    servo1.write(5); // ставим угол поворота под 0 1 серво
    servo.write(5);//ставим угол поворота под 180 2 серво
    delay(3000); // ждем 3 секунды
  }
else if (pirVal1==HIGH)
  {
  Serial.print("Сканирую ");
  digitalWrite(LedPin,LOW);
  delay(1000);
   servo1.write(85); // ставим угол поворота под 180
   servo.write(85);
    delay(3000); // ждем 3 секунды
  }
Неактивний

renoshnik пише:вы хотите, что бы вам помогли или написали за вас программу ?
Я смог написать конечно программу но работает хоть бы как ,то работает то не работает , можете помочь подкорректировать или предложить другую версию программы
мой пример:#define pirPin 8
#define pirPin2 7
#define LedPin 13
#include <Servo.h>
Servo servo1;//серво первое
Servo servo;//серво второе
void setup() {
Serial.begin(9600); // Объявляем работу com порта со скоростью 9600
pinMode(pirPin, INPUT); //Объявляем пин, к которому подключен датчик движения, входом
pinMode(LedPin, OUTPUT); //Объявляем пин, к которому подключен светодиод, выходом
servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11
servo.attach(12);
}void loop() {
int pirVal = digitalRead(pirPin); //Считываем значения с датчика движения. Если обнаружили движение,
int pirVal1 = digitalRead(pirPin2);
//то транслируем сигнал тревоги в монитор порта и включаем светодиод
if(pirVal == HIGH)
{
digitalWrite(LedPin, HIGH);
Serial.print("Тревога ");
delay(2000);servo1.write(5); // ставим угол поворота под 0 1 серво
servo.write(5);//ставим угол поворота под 180 2 серво
delay(3000); // ждем 3 секунды}
else if (pirVal1==HIGH)
{
Serial.print("Сканирую ");
digitalWrite(LedPin,LOW);
delay(1000);
servo1.write(85); // ставим угол поворота под 180
servo.write(85);
delay(3000); // ждем 3 секунды
}
вставьте код правильно, чтобы можно было читать и давать советы ...
Неактивний

Ну вот - нажал на кнопку повернулось на 3 секунды
/**/
const byte btnPin = 2; // кнопка
const byte servoPin = 12; //серва
const byte ledPin = 13; //светодиод
//---------------------------
#include <Servo.h>
Servo servo;
//----автомат-------------------
typedef void (*pDo)();
pDo run = [] {};
// состояния
const byte sCLOSE = 0; // открыто
const byte sOPEN = 1 ; // закрыто
bool state;
const unsigned long time3s=3000;// константа 3 секунды
void set(bool s) {
  static unsigned long past;
  past = millis();
  state = s;
  switch (s) {
    case sCLOSE:
      digitalWrite(ledPin, LOW);
      servo.write(90);
      run = [] {};
      break;
    case sOPEN:
      digitalWrite(ledPin, HIGH);
      servo.write(0);
      run = [] {
        if (millis() - past >= time3s) set(sCLOSE);
      };
      break;
  }
}
//--------кнопка-----------------------------------
pDo runBtn = [] {};
bool btn;
void setBtn(bool b) {
  static unsigned long past;
  btn = b;
  past = millis();
  switch (b) {
    case false:
      set(sOPEN);
      runBtn = [] {
        if (!digitalRead(btn) && millis() - past >= 100)  setBtn(true);
      };
      break;
    case true:
      runBtn = [] {
        if (digitalRead(btn) && millis() - past >= 100)  setBtn(false);
      };
      break;
  }
}
//--------------------------------------------
void setup() {
  servo.attach(servoPin);
  pinMode(btnPin, INPUT_PULLUP);
  setBtn(false);
  pinMode(ledPin, OUTPUT);
  set(sCLOSE);
}
void loop() {
  runBtn();
  run();
}Неактивний
Сторінки 1