Охранная система на Arduino

Тема в разделе "Arduino & Shields", создана пользователем Amidey, 15 апр 2017.

  1. Slavdej

    Slavdej Нерд

    Ардуино Уно Р3 и GSM Shield Sim900 v .1
    НУ вроде ничего Вы тут не поменяли кроме того что убрали пины связи с GSM модулем.
    Это разве не обязательный параметр указывать по каким пинам связ шилда с ардуино?
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Ну да убрал программный УСАРТ - источник глюков используем только аппаратный УСАРТ при этом перемычки на шильде переставляем из sw в hw. Указывать пины Rx/Tx нужно при использовании программного УСАРТ при использовании аппаратного связь всегда через пины 0- Rx и 1-Tx Быстродействие при этом увеличиться а обьём кода уменьшиться. Уменьшил Бодрейт до 9600 на нём минимум ошибок. Ещё в своих скетчах убрал Булевы константы сработка только по уровню на PIN (высокому или низкому) Вот в общем то и всё. Удачи!
     
    Последнее редактирование: 22 апр 2017
    Slavdej нравится это.
  3. Slavdej

    Slavdej Нерд

    Огромное Вам спасибо добрый человек!
    Желаю Вам так же успехов.
     
  4. Slavdej

    Slavdej Нерд

    Доброго времени суток, вот к чему пришел мой проект, но столкнулся с проблемой на данном этапе.
    В окне серийного порта по данному коду показывает команду вызов
    ATD + +380686617468;
    а по факту не звонит, в чём я ошибся, ума не приложу.
    когда софтварным вариантом подключения пользовался, всё звонило и такого небыло.
    Может стоит снова на софтвар подключение перейти или я где то накосячил.



    Код (C++):

    #include <Wire.h>
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(2, 3, 4, 5, 11, 12);

    int analogInput = 0;               // переменная для удобства инициализации и работы с аналог. портом 0
    float vout = 0.0;                  // переменная с значением выходного напряжения
    float vin = 0.0;                   // переменная с результатом измерений
    float R1 = 100000.0;               // сопротивление R1
    float R2 = 10000.0;                // сопротивление R2
    int value = 0;                     // переменная хранения данных
    int btnPin = 10;                   // переменная прерывателя
    boolean prevBtn = HIGH;
    void setup()
    {
        Serial.begin(19200);
      pinMode(btnPin, INPUT);
      //Включаем GPRS Shield, эмулируя нажатие кнопки POWER
      pinMode(9, OUTPUT);
      digitalWrite(9, HIGH);    // Подаем High на пин 9
      delay(1000);              // на 3 секунды
      digitalWrite(9, LOW);     // и отпускаем в Low.
      delay(3000);              // Ждём 5 секунд для старта шилда
      {
        pinMode(analogInput, INPUT);    // инициализируем аналоговый порт 0, как вход
       lcd.begin(16, 2);
       lcd.print("DC VOLTMETER");
      }
    }

    void loop()                                                                                                                                                                                                                                                                                                                                              
       
       {
        boolean currBtn = digitalRead(btnPin);
        if (prevBtn != currBtn && currBtn == LOW) {
            //сразу после нажатия кнопки начинаем звонить по заданному номеру
            Serial.println("ATD + +380686617468;");
            delay(10000);
         }
          prevBtn = currBtn;
    {
       value = analogRead(analogInput);// читаем аналоговый сигнал, с аналог. порта - 0
       vout = (value * 4.95) / 1024.0;  // не забываем про внесение поправки (5.0 - это идеальный вариант,хотя все возможно)
       vin = vout / (R2/(R1+R2));      // в переменной будет значение входного напряжения
    } if (vin<0.09)                   // проверка, для получ. 0
      {  
       vin=0.0;                        // обнуляем нежелательное значение
     
    }
    lcd.setCursor(0, 1);
    lcd.print("INPUT V= ");
    lcd.print(vin);
    delay(500);
    }
     
     
  5. Slavdej

    Slavdej Нерд

    там вольтметр добавился, ещё буду добавлять отчёт по смс , т.е. если критически заряд падает нише указанного значения, приходит смс тревоги низкого заряда АКБ
     
  6. Slavdej

    Slavdej Нерд

    если подскажете что нибудь, буду очень признателен
     
  7. Slavdej

    Slavdej Нерд

    И булевы не могу догнать как заменить на сработку по уровню 1,0,
     
  8. Airbus

    Airbus Радиохулиган Модератор

    первое что резануло глаза ATD + +380686617468; зачем два плюса? Второе Вы с Украины-судя по номеру?И киевстар судя по коду? Как Вы набираете номера с мобилы?Пару лет назад был в гостях у родителей в Кировограде помню что есть какой то нюанс?ЕМНИП как то так - 0686617468?Попробуйте убрать + потом +38 вообщем поэксперементируйте в этом нрправлении.
    Тут все просто if (digitalRead(buttonPin) == HIGH) что то делаем (звоним СМСим итд) типа так
    Код (C++):
    // отправляем смс в текстовом режиме v2
    int buttonPin = 12; // номер входа, подключенный к кнопке
    int power = 9 ; // подача питания пин 9
    void setup (){
    // инициализируем пин, подключенный к кнопке, как вход
    // пин 9 для включения шилда
    pinMode(buttonPin, INPUT);
    pinMode(power, OUTPUT);
    digitalWrite(power,HIGH); //подали питание
    delay(1000); //на 1 сек
    digitalWrite(power,LOW); //сняли питание
    Serial.begin(9600);
    Serial.print("AT+CMGF=1\r");
    delay(500);
    }
    void loop()
    {
        if (digitalRead(buttonPin) == HIGH)
    {
        Serial.println("AT + CMGS = \"+79121542496\"");
        delay(300);
        // Пишем текст сообщения
        Serial.println("ALARM!");
        delay(300);
        // Отправляем Ctrl+Z, обозначая, что сообщение готово
        Serial.println((char)26);
        delay(1000);
           }
        }
     
    Кусок из реально работающего скетча когда то делал коллеге СМС пэйджер.
     
    Последнее редактирование: 23 апр 2017
    Slavdej нравится это.
  9. Airbus

    Airbus Радиохулиган Модератор

    Тут тоже просто измеряем напряжение переводим в вольты volt и if (volt<5) что то делаем например отправляем СМС или звоним. Можно сначала опрашивать пины по условию HIGH/LOW по результатам звонить и/или СМСить (или нет) потом мерить напряжение также звонить и/или СМСить (или нет) и так по кругу.
     
    Slavdej нравится это.
  10. Slavdej

    Slavdej Нерд

    Премного благодарен Вам, за подсказки, Вы мне очень помогаете, совершенно бескорыстно...
    Вы хороший человек, пусть удача преследует Вас.
     
  11. Slavdej

    Slavdej Нерд

    Я ваще не глупый и учусь очень быстро, но такие вещи как я только что обнаружил меня убивают просто.
    ТАк как плату я покупал китайскую, я не подумал о том что Китайцы ведь на самом то деле такие китайцы.
    Короче не могу связаться с шилдом и всё.
    Хоть ты тресни.
    Как это получалось ранее я не знаю, но теперь не могу команды проходят, ответов нет(
    Я взял лупу только что и обнаружил перепутанные пины на шилде.
    Т.е. По умолчанию должно быть для хардварного варианта соединения RX=A0, TX=A01
    По факту же НА шилде всё наоборот всё RX=А01, а ТХ=А0.
    А я голову ломаю ))
    Сейчас попробую подключить не сендвичем с ардуино а раздельно на перемычках.
     
  12. Airbus

    Airbus Радиохулиган Модератор

    Должно быть крест накрест rx шилда к tx арды a tx арды к rx шилда Ну если вообще никак то попробуйте на софтсериале.
     
    Slavdej нравится это.
  13. Airbus

    Airbus Радиохулиган Модератор

    Откройте монитор порта посмотрите что идет с Ардуины.
     
    Slavdej нравится это.
  14. Slavdej

    Slavdej Нерд

    С ардуины идёт всё что посылаешь, а вот ответа нет.
    Пробовал только что накрест перемычки поставить.
    Безрезультатно(
    Потерял связь с шилдом((((
    Ещё вчера баловался через серийный порт звонил и команды отправлял.
    Странно(
    Буду разбираться дальше.
    Вновь спасибо.
     
  15. Slavdej

    Slavdej Нерд

    Разбудил вроде, еле нашёл код при помощи которого шилд начал меня понимать по АТ командам в серийнике.
     
  16. Slavdej

    Slavdej Нерд

    Код (C++):
    //Serial Relay - Arduino will patch a
    //serial link between the computer and the GPRS Shield
    //at 19200 bps 8-N-1
    //Computer is connected to Hardware UART
    //GPRS Shield is connected to the Software UART

    #include <SoftwareSerial.h>

    SoftwareSerial GSMSerial(7, 8);

    void setup()
    {
    GSMSerial.begin(19200);               // the GPRS/GSM baud rate  
    Serial.begin(19200);                 // the GPRS/GSM baud rate  
    }

    void loop()
    {
    if(Serial.available())

    GSMSerial.print((char)Serial.read());

    else  if(GSMSerial.available())

    Serial.print((char)GSMSerial.read());
    }
     
    Вот он.
     
  17. Slavdej

    Slavdej Нерд

    Может быть при помощи его можно понять как хардвар настроить?
     
  18. Airbus

    Airbus Радиохулиган Модератор

    Попробуйте покопаться обуздать хардвар.Если нет возвращаем все как было с софтовым УСАРТ и рисуем скетч по алгоритму который я предлагал ОК?Как прилечу поищу свои наработки авось что сваяяем?
     
    Slavdej нравится это.
  19. Slavdej

    Slavdej Нерд

    Шоферы отдали пульс, а пациенты потянулись к вешалке. Ветродуй дал четыре девятки. Горилка подана. Организмы успешно воспользовались удавкой и перешли в статус защищенной микрофлоры. Бизнесменов и трюфелей сегодня нет, все экономисты. На рейсе один Умка.

    Подали кашу, физзарядка прошла успешно, лапти убраны, арбуз покатил по бетонке к выходу.
    Сколько взлетов, столько и посадок Арбуз!!!)
     
    Airbus нравится это.
  20. Slavdej

    Slavdej Нерд

    Если что не так написал, простите, я просто подумал что Вы лётчик в жизни.
     
    Airbus нравится это.