#1 Re: Програмування Arduino » Включение выключение нагрузки с отсрочкой » 2016-10-20 11:32:23

Проверил только что на СД все работает так как хотел. Еще раз огромное спасибо. Готов проставиться немецким пенным.

#3 Re: Програмування Arduino » Включение выключение нагрузки с отсрочкой » 2016-10-19 17:47:11

Задача такова, что по утрам приезжают грузиться курьеры и дверь постоянно открыта, зимой это не сильно комильфо, а так завеса будет включаться автоматически только тогда когда дверь долго открыта. Это бывает не так часто, утром 2-4 раза, и в течении дня, если товар приезжает.
Я так понял мне нужно 2 таймера.
1й например timer_vkl запускается при открытии двери (геркон=0 разомкнут) и начинает отсчет. Дальше дуня смотрит, если значение таймера более 15сек, включается реле с нагрузкой.
Когда геркон=1 (замкнут) таймер останавливается, дуня смотрит на реле, если реле включено, запускается второй таймер (timer_otkl) при достижении 30 сек, реле отключается.
Как то так.
Осталось понять, как засунуть это в скетч

#5 Програмування Arduino » Включение выключение нагрузки с отсрочкой » 2016-10-19 13:49:45

iskander_famous
відповідей: 12

Добрый день.
Помогите пожалуйста решить задачу:
Есть входная дверь, над дверью висит тепловая завеса.
Нужно чтобы завеса включалась если дверь открыта более 15 сек и автоматически отключалась через 30 сек после закрытия двери.
Из того что в наличии:

Геркон
Плата реле
Ардуино уно
Прямые руки

Чего не хватает: мозгов и опыта для написания скетча.
Мигать светодиодами и показывать время я научился, а как прикрутить таймеры с отсчетом к сожаленью не соображу.

#6 Re: Програмування Arduino » Автоматизация света на даче » 2016-04-15 00:22:06

Nefreemen пише:

Имея в меге 4 Serial на борту, зачем софтсериал?

Вы написали про 4 ноги, это 0-1, а какие еще?
Еще, если я соединяю шилд бутербродом к меге, первый скетч так же не работает.

#7 Re: Програмування Arduino » Автоматизация света на даче » 2016-04-15 00:19:37

Nefreemen пише:

Имея в меге 4 Serial на борту, зачем софтсериал?

Честно сам не знаю. Работает полностью только с первым скетчем. Если занимаю 0-1ноги у меги, шилд не работает. Может быть я что-то не так делаю.

#8 Програмування Arduino » Автоматизация света на даче » 2016-04-13 20:29:55

iskander_famous
відповідей: 8

Добрый день. Помогите пожалуйста решить задачу.
1. Есть ардуино мега, GSM шилд sim900, релюшки, датчики и пр.
2. Хочу написать проект из 2х частей:

1. По звонку с моего номера включается прожектор на площадке, через заданное время автоматически отключается. Необходимо для того, чтобы по приезду на дачу зимой после работы, прожектор освещал площадку для машины, и не нужно было парковаться в полной темноте.
2. Управление отоплением по смс, по одной команде (stat - присылалась информация о текущем состоянии дел: температура, состояние реле: вкл/выкл) По другой команде включались 2 реле, по третьей задавалась нужная температура. Соответственно задается нужная температура, и включается реле, после достижения необходимой температуры, реле автоматом отключались.

На данный момент есть скетч который заставил работать мой GSM shield.

#include <SoftwareSerial.h>
SoftwareSerial  SIM900(10, 11);
void setup() 
{
  Serial.begin(19200);
  SIM900.begin(19200);
  InitGprs();
}
 
 
void loop() 
{
  if(Serial.available())
    {
    char x  = Serial.read();
    SIM900.print(x);
    }
  if(SIM900.available())
    {
    char y  = SIM900.read();
    Serial.print(y);
    }
}
 
void InitGprs()
{
  SIM900.print("AT+CMGF=1\r"); //ВКЛЮЧАЕТ ТЕКСТОВЫЙ РЕЖИМ ПЕРЕДАЧИ ДАННЫХ
  delay(300);
  SIM900.print("AT+IFC=1, 1\r"); //РЕЖИМ ПЕРЕДАЧИ ДАННЫХ ОТ МОДУЛЯ В ПОРТ И ОБРАТНО
  delay(300);
  SIM900.println("AT");
}

Есть второй код, который по идее должен соответствовать задаче №1, но не работает.

#include <SoftwareSerial.h>
SoftwareSerial  Serial(10, 11);
String currStr = "";
boolean isStringMessage = false; // Переменная принимает значение True, если текущая строка является сообщением
int led = 13;
     
void setup()
    {
        pinMode(led, OUTPUT);
        Serial.begin(19200);
        // настройка шилда
        Serial.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
        delay(300);
        Serial.print("AT+IFC=1, 1\r"); // устанавливает программный контроль потоком передачи данных 
        delay(300);
        Serial.print("AT+CPBS=\"SM\"\r"); // открывает доступ к данным телефонной книги SIM-карты. У вас может отличатся!
        delay(500);
        Serial.print("ATS0=2\r"); // поднимать трубку после второго звонка
    }
     
void loop()
 { 
   if(Serial.available())
      { 
        char currSymb = Serial.read(); 
        if('\r' == currSymb) 
           {
             if(isStringMessage) 
                {
                  if (!currStr.compareTo("infa")) // блок infa
                    {
                       delay(2000);
                       Serial.println("AT + CMGS = \"+7yornumber\""); // укажите свой номер!
                       delay(100);
                       Serial.println("HELLO");
                       delay(100);
                       Serial.println((char)26);
                       delay(100);
                       Serial.println();
                    } 
                    
                  else if (!currStr.compareTo("vkl")) // блок vkl
                    {
                       delay(2000);
                       digitalWrite(led, HIGH);
                       Serial.println("ATD + +7yornumber;"); // укажите свой номер!
                    } 
           
                  else if (!currStr.compareTo("otkl")) // блок otkl 
                    {
                       delay(2000);
                       digitalWrite(led, LOW);
                       Serial.println("ATD + +7yornumber;"); // укажите свой номер!
                    }
           
                  else if (!currStr.compareTo("bal")) // блок bal 
                    {
                       Serial.print("ATD#100#;\r"); // делаем запрос баланса (мтс), а ответ ловится в блоке ниже...
                    } 
          
                  isStringMessage = false;
               } 
               
            else 
               {
                 if(currStr.startsWith("+CMT")) 
                    {
                      //если текущая строка начинается с "+CMT",
                      //то следующая строка является сообщением
                      isStringMessage = true;
                    }
                    
                 if(currStr.startsWith("+CUSD")) // этот блок отлавливает ответ на запрос баланса и отправляет его смской
                    {
                       currStr = currStr.substring(currStr.indexOf("Balance"),currStr.indexOf("r"));
                       delay(2000);
                       Serial.println("AT + CMGS = \"+yornumber\""); // укажите свой номер!
                       delay(100);
                       Serial.println(currStr);
                       delay(100);
                       Serial.println((char)26);
                       delay(100);
                       Serial.println();
                    }   
               }
               
              currStr = "";
           }  
     
        else if('\n' != currSymb) 
          {
            currStr += String(currSymb);
          }
        
     }
        
  }

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

Підвал форуму