GSM СМС-Сигнализация на Arduino с минимальным потреблением

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Цель: получать СМС при срабатывании пиродатчика.

Тумблером переводить сигнализацию в положение "Охрана".

Средства:

- Arduino UNO

- GSM Shield

- Arduino пиродатчики

код:

/*
 SMS Alarm
 
 This sketch, for the Arduino GSM shield, made for Arduino SMS-Alarm.
 
 Advantages: minimum power consumption - only for Pirodetector. 
 Maximum time working from battery.
 (Battery charger included to schematic)
 
 Disadvantages: long time to send SMS - about 15 seconds.
 During this time you deactivate alarm with secret switch.
 
 How does it work:
 1) дежурный режим:Arduino UNO + GSM is power OFF. Pirodetector is powered On.
 2) When Alarm: When pirodetector set 1=5V (alarm)
 3) Power ON: Arduino UNO+GSM is power on.
 4) Self power On: Arduino UNO sets DPIN 5 = 1(5V). While DPIN 5 == 1(5V) Arduino UNO Power is on.
 5) Check switch: If secret switch is on - no Alarm. 
 +led On(DPIN 13,4)
 +Wait 30 seconds == time to set alarm to active mode and go out.
 +Switch power OFF. (DPIN 5 = 0(0V))
 6) If Switch OFF - Alarm Active mode.
 7) sends an SMS message
8) wait 20 seconds( between SMS). 
+blink led ((DPIN 13,4))
+power OFF. 

How to use it:
1) Assemble schematic. Connect GSM shield to arduino Uno.
Select switch on GSM Shield to "power from UNO board".
connect lead acid 12V battery and power supply 15V(from notebook).
2) Change phone nomber to you own:
(stored in array txtMsg[]) to phone number remoteNum[20]. 
3) Test it
4) Enjoy
5) you can debug it on hyperterminal.
 created 18 Feb 2015
 by Dmitri Sedorenko(skype: sidatel).
 mail: dmitron1036()mail.ru
 
 *
 */

// Include the GSM library
#include <GSM.h>

#define PINNUMBER ""

// initialize the library instance
GSM gsmAccess;
GSM_SMS sms;

void setup()
{
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }// while
// Digital pins init  
  // PIN 13 == output LED ON. indicates status
  pinMode(13,OUTPUT);//LED
  digitalWrite(13,LOW);//def value
  // PIN 4 == output LED ON. indicates status
  pinMode(4,OUTPUT);//
  digitalWrite(4,LOW);//def value
  // PIN 5 == output self-power on.
  pinMode(5,OUTPUT);//
  digitalWrite(5,HIGH);//def value - self power is on
  // PIN 6 == input internall pull-up. 1 == switch off == work enable. 0 = work disabled.
  pinMode(6,INPUT_PULLUP);
  
  // solder powerkey jumper 
  // PIN 9 == output PWRKEY
  pinMode(9,OUTPUT);
  digitalWrite(9,LOW);//def value

  
  
  Serial.println("SMS Alarm started");

 
}// /setup
void loop()
{
// blink to get how much time you need to turn alarm off
digitalWrite(13,HIGH);
digitalWrite(4,HIGH);
delay(200);
digitalWrite(13,LOW);//def value
digitalWrite(4,LOW);//def value

delay(2000);// time to switch alarm Off 
// Alarm logic
// If Alarm-off switch is On - Alarm is not active
// if(DPIN6 == 1)
if(digitalRead(6) == HIGH){
  // delay 1 min
  delay(20000);// time to go out
  // power off
  digitalWrite(5,LOW);
}else
// Else
// Alarm active
// send SMS
{
  //reset gsm
  delay(100);
  digitalWrite(9,HIGH);//reset
  delay(1000);
  digitalWrite(9,LOW);//def value
   // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }// /while
  
  Serial.println("GSM initialized");
  
 
  Serial.print("Enter a mobile number: ");
  char remoteNum[20] = "+79780146953";  // telephone number to send sms
  //readSerial(remoteNum);
  Serial.println("OK");
  Serial.println(remoteNum);
    
  // sms text
  Serial.print("Now, enter SMS content: ");
  char txtMsg[200] = "Alert!!!";
  //readSerial(txtMsg);
  Serial.println("SENDING");
  Serial.println();
  Serial.println("Message:");
  Serial.println(txtMsg);
  
  // send the message
  //sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  sms.endSMS(); 
  Serial.println("\nCOMPLETE!\n");
  
  //pinMode(13,OUTPUT);
  digitalWrite(13,HIGH);//def value
  digitalWrite(4,HIGH);//def value
// stop
// self power off
delay(18000); 
  digitalWrite(13,LOW);//def value
  digitalWrite(4,LOW);//def value
 delay(1000); 
    digitalWrite(13,HIGH);//def value
  digitalWrite(4,HIGH);//def value
digitalWrite(5,LOW);
delay(1000);
while(true){}
}// /else
}// /loop

/*
  Read input serial
 */
int readSerial(char result[])
{
  int i = 0;
  while(1)
  {
    while (Serial.available() > 0)
    {
      char inChar = Serial.read();
      if (inChar == '\n')
      {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if(inChar!='\r')
      {
        result[i] = inChar;
        i++;
      }
    }
  }
}

Схема: http://uselect-el.ucoz.com/blogfiles/ZU_2_RU.pdf

фото:

Пиродетектор

Главный модуль

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

много проводков, будет глючить..

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Вопрос спорный....Допустим если паял инженер с 15-летним стажем то работать будет стабильно. Ну а если студент - то и заводская ППМ будет работать нестабильно.

Конечное лучше разводить плату.

axill
Offline
Зарегистрирован: 05.09.2011

Прекрасный проект
Только тема минимального потребления отсутствует. Где специальные меры в железе и в софте для снижения потребления?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

никто не выпаивал светожиодов и тд - ДО ЛАМПОЧКИ тот режим микропотребления.

Будете удивляться, но я по такому пути как здесь прошел.

Мой вывод в итоге? Нужно ставить МОП ключ на всю часть  кроме датчика движения, тогда реально мкропотребление пару десятков микроампер.

 А то что на фото - будет милиамперы ржать и высадит батарею. Сами можетте посчитать как быстро.

питать можно(нужно!)  от трех пальчиковых батареек.

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Уважаемый Шорт Сиркуит, сделал как вы и рекомендуете - поставил ключ на всё кроме датчика движения.

Естесственно после такого появляется другая проблема - много хотелок которые хотелось бы реализовать но никак, потому как контроллер без питания.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

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

 

 

ну и схема какая то мудренная, нельзя ее проще  сделать, зачем стольео логики? А хотелки - то на обычную сигнализацию, здесь хотелка должна быть одна - длительное питание без 220в. (легко можно добиться 1 год на атарейках, и никаких дорогих аккумуляторов ставить не придется)

схема таймера на 4010 - выбрасывается, и задействуется еще одна нога ардуино + пишется таймер в скетч, сколько быть вклченным модулю. модуль сам себя будет выключать.

посмотрел еще раз схему - где там микропотребление, если логика жрет порядочно? Это схема расчитана на питание от 220В? нет? тогда зачем там стабилизаторы тока, которые сколько милиампер потребляют? Хотя да, это тоже можно считать минимальное потребление, но тогда уже проще перевести гсм модуль в  режим ожидания, где 590й модуль может всего 3мА !!! потреблять, и никакой логики ставить не нужно для таймеров, и тревога придет быстрее намного и т.д. А то что вы сделали - обычно делают для батарейного питания для МИКРОПОТРЕБЛЕНИЯ тока от батарей. чтобы сигнализация автономно могла проработать например год на батарейках!

У вас получилось ни туда - ни сюда. вроде и ключ на всю схему, но вроде и таймера в логике стоят + стабилизатор тока, в итоге ток там тоже значительный. Вы сами пишите, что пришлось отказаться от хотелок. Тогда какой смысл в  такой схеме? Отвечу - никакого смысла нет, даже если оставить гсм модуль сим800 в обычном режиме, то он всего навсего от батареи потреблять будет около 10мА - что сравнимо с потреблением вашей схемы!!  Еще раз - нет смысла в вашей схеме. никакого.

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Позвольте я вам объясню суть работы схемы:

http://uselect-el.ucoz.com/blogfiles/ZU_2_EN.pdf.

Логика на DD1 не относится к GSM сигнализации.

Её цель - пищать мне в ухо когда мимо кто-то идёт.

Потребляет - ничего, как и положено медленным КМОП схемам.

Логика работы GSM сигнализации такова:

1) Срабатывает пиродатчик 2, даёт 1 на выходе.

2) 1 подаётся на затвор транзистора - подаётся питание на модуль.

3) модуль просыпается - смотрит состояние переключателя блокирующего (запрещающего) сигнализацию. самозапитывает себя.

4) отправляет смс

5) делает паузу - выключает себе питание. 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

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

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