Toilet      06/14/2019

About the motion sensor and connecting it to Arduino. GSM home security system based on Arduino Wireless alarm sensors based on Arduino

Hello everyone, today we will look at a device called a motion sensor. Many of us have heard about this thing, some have even dealt with this device. What is a motion sensor? Let's try to figure it out, so:

Motion sensor or displacement sensor - a device (device) that detects the movement of any objects. Very often these devices are used in security, alarm and monitoring systems. There are a great many forms of factors of these sensors, but we will consider the motion sensor module for connection to boards Arduino,and specifically from the company RobotDyn. Why this company? I don’t want to advertise this store and its products, but it was the products of this store that were chosen as laboratory samples due to the high-quality presentation of their products to the end consumer. So, we meet - motion sensor(PIR Sensor) from RobotDyn:


These sensors are small in size, consume little power and are easy to use. In addition, RobotDyn motion sensors also have silk-screened contacts, this is of course a small thing, but very pleasant. Well, those who use the same sensors, but only from other companies, should not worry - they all have the same functionality, and even if the contacts are not marked, the pinout of such sensors is easy to find on the Internet.

Basic specifications motion sensor (PIR Sensor):

Sensor operating area: from 3 to 7 meters

Tracking angle: up to 110 o

Operating voltage: 4.5...6 Volts

Current consumption: up to 50 µA

Note: The standard functionality of the sensor can be expanded by connecting a light sensor to the IN and GND pins, and then the motion sensor will only work in the dark.

Initializing the device.

When turned on, the sensor takes almost a minute to initialize. During this period, the sensor may give false signals; this should be taken into account when programming a microcontroller with a sensor connected to it, or in actuator circuits if the connection is made without using a microcontroller.

Detection angle and area.

The detection(tracking) angle is 110 degrees, the detection distance range is from 3 to 7 meters, the illustration below shows it all:

Adjustment of sensitivity (detection distance) and time delay.

The table below shows the main adjustments of the motion sensor; on the left there is a time delay regulator, respectively, in the left column there is a description of the possible settings. The right column describes the detection distance adjustments.


Sensor connection:

  • PIR Sensor - Arduino Nano
  • PIR Sensor - Arduino Nano
  • PIR Sensor - Arduino Nano
  • PIR Sensor - for light sensor
  • PIR Sensor - for light sensor

A typical connection diagram is shown in the diagram below; in our case, the sensor is shown conventionally from the rear side and connected to the Arduino Nano board.

Sketch demonstrating the operation of the motion sensor (we use the program):

/* * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano */ void setup() ( //Establish a connection to the port monitor Serial.begin(9600); ) void loop() ( //Read the threshold value from port A0 //usually it is higher than 500 if there is a signal if(analogRead(A0) > 500) ( //Signal from the motion sensor Serial.println("There is movement!!!"); ) else ( / /No signal Serial.println("Everything is quiet..."); ) )

The sketch is a common test of the operation of the motion sensor; it has many disadvantages, such as:

  1. Possible false positives, the sensor requires self-initialization within one minute.
  2. Rigid binding to the port monitor, no output actuators (relay, siren, LED indicator)
  3. The signal time at the sensor output is too short; when motion is detected, it is necessary to programmatically delay the signal for a longer period of time.

By complicating the circuit and expanding the functionality of the sensor, you can avoid the above-described disadvantages. To do this, you will need to supplement the circuit with a relay module and connect a regular 220-volt lamp through this module. The relay module itself will be connected to pin 3 on the Arduino Nano board. So the schematic diagram:

Now it's time to slightly improve the sketch that tested the motion sensor. It is in the sketch that a delay in turning off the relay will be implemented, since the motion sensor itself has too short a signal time at the output when triggered. The program implements a 10-second delay when the sensor is triggered. If desired, this time can be increased or decreased by changing the value of the variable DelayValue. Below is a sketch and video of the entire work assembled circuit:

/* * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * Relay Module -> Arduino Nano */ //relout - pin (output signal) for the relay module const int relout = 3; //prevMillis - variable for storing the time of the previous program scanning cycle //interval - time interval for counting seconds before turning off the relay unsigned long prevMillis = 0; int interval = 1000; //DelayValue - the period during which the relay is kept in the on state int DelayValue = 10; //initSecond - Initialization loop iteration variable int initSecond = 60; //countDelayOff - time interval counter static int countDelayOff = 0; //trigger - motion sensor trigger flag static bool trigger = false; void setup() ( //Standard procedure for initializing the port to which the relay module is connected //IMPORTANT!!! - in order for the relay module to remain in the initially off state //and not trigger during initialization, you need to write //the value HIGH to the input/output port , this will avoid false “clicking”, and will //preserve the state of the relay as it was before the entire circuit was put into operation pinMode(relout, OUTPUT); digitalWrite(relout, HIGH); //Everything is simple here - we wait until 60 ends cycles (initSecond variable) //lasting 1 second, during which time the sensor “self-initializes” for(int i = 0; i< initSecond; i ++) { delay(1000); } } void loop() { //Считать значение с аналогового порта А0 //Если значение выше 500 if(analogRead(A0) >500) ( //Set the motion sensor trigger flag if(!trigger) ( trigger = true; ) ) //While the motion sensor trigger flag is set while(trigger) ( //Execute the following instructions //Save in the currMillis variable //the value of milliseconds elapsed since the start //of program execution unsigned long currMillis = millis(); //Compare with the previous value of milliseconds //if the difference is greater than the specified interval, then: if(currMillis - prevMillis > interval) ( //Save the current value of milliseconds to a variable prevMillis prevMillis = currMillis; //Check the delay counter by comparing it with the value of the period //during which the relay should be kept in the ON state if(countDelayOff >= DelayValue) ( ​​//If the value is equal, then: //reset the sensor activation flag movement trigger = false; //Reset the delay counter countDelayOff = 0; //Turn off the relay digitalWrite(relout, HIGH); //Abort the cycle break; ) else ( //If the value is still less, then //Increment the delay counter by one countDelayOff++; //Keep the relay in the on state digitalWrite(relout, LOW); ) ) ) )

The program contains the following structure:

unsigned long prevMillis = 0;

int interval = 1000;

...

unsigned long currMillis = millis();

if(currMillis - prevMillis > interval)

{

prevMillis = currMillis;

....

// Our operations are enclosed in the body of the structure

....

}

To clarify, it was decided to comment separately on this design. So, this design allows you to perform a parallel task in the program. The body of the structure operates approximately once per second, this is facilitated by the variable interval. First, the variable currMillis the value returned when calling the function is assigned millis(). Function millis() returns the number of milliseconds that have passed since the beginning of the program. If the difference currMillis - prevMillis greater than the value of the variable interval then this means that more than a second has already passed since the start of the program execution, and you need to save the value of the variable currMillis into a variable prevMillis then perform the operations contained in the body of the structure. If the difference currMillis - prevMillis less than the variable value interval, then a second has not yet passed between program scanning cycles, and the operations contained in the body of the structure are skipped.

Well, at the end of the article, a video from the author:

Please enable javascript for comments to work. Over the past decade, car thefts have been one of the most significant places in the structure of crimes committed in the world. This is due not so much to the specific gravity of this category of theft relative to the total number of crimes, but to the significance of the damage caused due to the high cost of cars. The weak effectiveness of measures taken in the field of combating vehicle theft by the end of the 90s led to the creation of stable groups specializing in the commission of these crimes and having the distinctive features of organized crime; You've probably heard the term "black auto business." The car fleet of European countries annually lacks ≈ 2% of cars that become the subject of criminal attacks. Therefore, I came up with the idea of ​​​​making a GSM alarm for my car on Arduino based Uno.

Let's begin!

What will we collect from?

We need to choose the heart of our system. In my opinion, there is nothing better for such an alarm than Arduino Uno. The main criterion is a sufficient number of “pins” and price.


Key Features of Arduino Uno

Microcontroller - ATmega328
Operating voltage - 5 V
Input voltage (recommended) - 7-12 V
Input voltage (limit) - 6-20 V
Digital Inputs/Outputs - 14 (6 of which can be used as PWM outputs)
Analog inputs - 6
Constant current through input/output - 40 mA
Constant current for output 3.3V - 50mA
Flash memory - 32 KB (ATmega328) of which 0.5 KB is used for the bootloader
RAM - 2 KB (ATmega328)
EEPROM - 1 KB (ATmega328)
Clock frequency - 16 MHz


Fits!

Now you need to select a GSM module, because our alarm system must be able to notify the car owner. So, you need to google it... Here, an excellent sensor - SIM800L, the size is simply wonderful.


I thought and ordered it from China. However, everything turned out to be not so rosy. The sensor simply refused to register the SIM card on the network. Everything possible was tried - the result was zero.
There were kind people who provided me with a cooler thing - Sim900 Shield. Now this is a serious thing. The Shield has both a microphone and headphone jack, making it a full-fledged phone.


Key Features of Sim900 Shield

4 operating frequency standards 850/ 900/ 1800/ 1900 MHz
GPRS multi-slot class 10/8
GPRS mobile station class B
Complies with GSM phase 2/2+
Class 4 (2 W @850/ 900 MHz)
Class 1 (1 W @ 1800/1900MHz)
Control using AT commands (GSM 07.07, 07.05 and SIMCOM extended AT commands)
Low power consumption: 1.5mA(sleep mode)
Operating temperature range: -40°C to +85°C


Fits!

Ok, but you need to take readings from some sensors in order to notify the owner. If the car is towed away, then the position of the car will obviously change in space. Let's take an accelerometer and a gyroscope. Great. Ok, now we are looking for a sensor.

I think that the GY-521 MPU6050 will definitely fit. It turned out that it also has a temperature sensor. We should use it too, there will be such a “killer feature”. Let's assume that the owner of the car parked it under his house and left. The temperature inside the car will change “smoothly”. What happens if an intruder tries to break into the car? For example, he will be able to open the door. The temperature in the car will begin to change rapidly as the air in the cabin begins to mix with the air environment. I think it will work.


Main Features of GY-521 MPU6050

3-axis gyroscope + 3-axis accelerometer GY-521 module on MPU-6050 chip. Allows you to determine the position and movement of an object in space, angular velocity during rotation. It also has a built-in temperature sensor. It is used in various copters and aircraft models; a motion capture system can also be assembled based on these sensors.

Chip - MPU-6050
Supply voltage - from 3.5V to 6V (DC);
Gyro Range - ±250 500 1000 2000°/s
Accelerometer range - ±2±4±8±16g
Communication interface - I2C
Size - 15x20 mm.
Weight - 5 g


Fits!

A vibration sensor will also come in handy. Suddenly they try to open the car with “brute force”, or in the parking lot another car hits your car. Let's take the vibration sensor SW-420 (adjustable).


Main characteristics of SW-420

Supply voltage - 3.3 - 5V
Output signal - digital High/Low (normally closed)
Sensor used - SW-420
The comparator used is LM393
Dimensions - 32x14 mm
Additionally - There is an adjustment resistor.


Fits!

Screw on the SD memory card module. We will also write a log file.


Main characteristics of the SD memory card module

The module allows you to store, read and write to an SD card the data required for the operation of a device based on a microcontroller. The use of the device is relevant when storing files from tens of megabytes to two gigabytes. The board contains an SD card container, a card power stabilizer, and a connector plug for interface and power lines. If you need to work with audio, video or other large-scale data, for example, keep a log of events, sensor data or store web server information, then the SD memory card module for Arduino will make it possible to use an SD card for these purposes. Using the module, you can study the features of the SD card.
Supply voltage - 5 or 3.3 V
SD card memory capacity - up to 2 GB
Dimensions - 46 x 30 mm


Fits!

And let's add a servo drive; when the sensors are triggered, the servo drive with the video recorder will turn and shoot a video of the incident. Let's take the MG996R servo drive.


Main Features of MG996R Servo Drive

Stable and reliable protection from damage
- Metal drive
- Double row ball bearing
- Wire length 300 mm
- Dimensions 40x19x43mm
- Weight 55 g
- Rotation angle: 120 degrees.
- Operating speed: 0.17sec/60 degrees (4.8V no load)
- Operating speed: 0.13sec/60 degrees (6V no load)
- Starting torque: 9.4kg/cm at 4.8V power supply
- Starting torque: 11kg/cm at 6V power supply
- Operating voltage: 4.8 - 7.2V
- All drive parts are made of metal


Fits!

We collect

There are a huge number of articles on Google about connecting each sensor. And I have no desire to invent new bicycles, so I will leave links to simple and working options.

GSM alarm system on Arduino

In this article you will learn how to (buy) make a GSM alarm yourself using a GSM module and Arduino very cheaply. Object of protection GSM alarm ideal for a cottage, house, garage, apartment.


Step 1: Elements
For this project you will need:


GSM Shield

Buzzer
Alarm siren 12V
12V power supply

Keyboard for Arduino
Frame.

Step 2: Connecting Components


First you place GSM module on Arduino Uno, you will need to solder the GND and VCC wires along with two sensors, a buzzer and a relay module input. After that, connect these soldered wires to the corresponding connector of the GSM shield. Next you will make an I/O signal connector from these parts, and the last thing you will need to do is connect the keyboard

Arduino Uno/GSM Terminals:

Pin 0: not connected;
Conclusion 1: not related;
Pin 2: unconnected (GSM will use this pin);
Pin 3: unconnected (GSM will use this pin);
Pin 4: last line using keyboard (keyboard pin 4 - from 8);
Conclusion 5: unrelated;
Pin 6: second column via keyboard (keyboard pin 6 - from 8);
Output 7: third column from the keyboard (finger keyboard 7 - from 8);
Pin 8: unconnected (GSM will use this pin);
Pin 9: unconnected (GSM will use this pin);
Pin 10: PIR sensor data No. 2;
Pin 11: siren sound signal (entered at the input of the relay module);
Pin 12: PIR sensor data No. 1;
Pin 13: buzzer input signal;

As you can see, although the keyboard has 8 pins, only three are connected (one row and two columns, allowing two numbers to be read - a 1×2 matrix), so I can make passwords using these three wires and there is no need to use all contacts from the keyboard. This is because once the motion sensor detects a person walking in the room, the person will only have 5 seconds to turn off the alarm. After the alarm does not go off for this moment time, GSM Shield sends an SMS to you, or calls your phone number. The Arduino has been programmed to make a call and as soon as you answer phone call, he will hang up.

Of course, it is possible to get false readings from the sensor, so there is an option to turn off the alarm by simply sending an SMS from your phone to the Arduino. Additionally, another option that you can do is to set the shield to send you one message per day so that you know that it is working correctly.

Step 3: Code

Just download the code below and compile. It uses the Keypad.h and GSM.h libraries.
Download file: (downloads: 181)
Download file: (downloads: 104)

Step 4: Conclusion


Given that the Arduino Uno code will text and call your phone in just five seconds after someone breaks into your home, I'm guessing you'll have plenty of time to call the police. Of course, the siren will scare away thieves and your home or other premises will become safer with the help of this article.

Spring, as you know, is accompanied by all sorts of aggravations, and now the main “exacerbation” has crawled out of its holes onto the street in order to appropriate for itself what does not belong to it. This means that the topic of protecting your property is becoming more relevant than ever.
The site already has several reviews of homemade ones. They are of course functional, but everyone has general feature- dependence on the outlet. If this is not a problem with a property where electricity is already supplied, then what about a property where the outlet is far away or the surrounding area is completely de-energized? I decided to take a different route - to assemble a long-lived device that is as simple as possible and independent of mains power, which will sleep all the time, and when robbers break in, it will start up and call the owner’s phone, signaling with a simple alarm call.

Review Items

Purchased:
1. Bread board single sided 5x7 cm: getinaks- or fiberglass
* - fiberglass is much better quality than getinax.
2. Neoway M590 module - with antenna on PCB -
3. Arduino Pro Mini "RobotDyn" ATmega168PA 8MHz 3.3V -
4. Lithium charge-discharge control board -

Mined from the ruins of civilization:
1. Racks for boards, cut from device housings - 6 pcs.
2. Lithium flat battery 1300mAh
3. Staples used to secure the cable to the wall
4. Stationery eraser
5. Copper wire 1.5mm thick
6. Instrument housing from the local radio market - 1.5$
7. A pair of LEDs of different colors (taken from a VHS player)
8. Antenna and button with cap (taken from Wi-Fi router)
9. 4-pin terminal block (taken from dimmer)
10. Power connector (taken from an old charger for 18650)
11. 6-pin connector (taken from DVD drive)
12. Can(from coffee for example)

Arduino Pro Mini "RobotDyn" Atmega 168PA 3.3V 8MHz

Specifications:
Microcontroller: ATmega168PA
Direct operating voltage:.8 - 5.5 V
Operating voltage through stabilizer LE33: 3.3 V or 5 V (depending on model)
Working temperature:-40°C… 105°C
Input voltage: 3.35-12V (3.3V model) or 5-12V (5V model)
Digital Inputs/Outputs: 14 (6 of which can be used as PWM outputs: 3, 5, 6, 9, 10, and 11)
Analog inputs: 6
Timers-counters: two 8-bit and one 16-bit
Energy Saving Modes: 6
DC current via input/output: 40 mA
Flash memory: 16 KB (2 used for bootloader)
RAM: 1 KB
EEPROM: 512 bytes
Memory recording/erasing resource: 10,000 Flash/100,000 EEPROM
Clock frequency: 8 MHz (3.3 V model) or 16 MHz (5 V model)
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
I2C: A4 (SDA) and A5 (SCL)
UART TTL: 0 (RX) and 1 (TX)
Datasheet:

The choice fell on this atmega completely by accident. On one forum where energy-efficient projects were discussed, in the comments there was advice to use the 168th atmega.
However, I had to tinker to find such a board, since quite often all the lots were filled with 328 atmegs at a frequency of 16 MHz, operating from 5V. For my project, such characteristics were redundant and inconvenient from the very beginning, and the search became more complicated.
As a result, I came across a 3.3-volt version of Pro Mini on Atmega 168PA on eBay, and not just a simple Chinese one, but under the RobotDyn brand from a Russian developer. Yes, at first, like you, I also had a grain of doubt. But in vain. When the project was already assembled, and AliExpress introduced mandatory paid delivery for cheap goods (after which parcels began to get lost much more often), I later ordered a regular Pro Mini Atmega168 (without PA) 3.3V 8MHz. I experimented a little with power saving modes with both boards, flashing a special sketch into each that put the microcontroller into maximum power saving mode and this is what came out:
1) Arduino Pro Mini "RobotDyn": ~250µA
2) Arduino Pro Mini “NoName”: when power is supplied to the voltage stabilizer (RAW pin) and the LED is soldered, the current consumption is ~3.92mA




- as you understand, the difference in energy consumption is almost 16 times, all because NoName's Pro Mini uses an Atmega168+ combination, of which the MK itself eats only 20uA current (I checked this separately), all the rest of the gluttony is accounted for by the AMS1117 linear voltage converter - the datasheet only confirms this:


In the case of the board from RobotDyn, the combination is somewhat different - this is the Atmega168PA+ - here a different LDO stabilizer is used, whose characteristics in terms of energy saving turned out to be more pleasant:


I didn’t desolder it, so I can’t say how much current the Atmega168PA consumes in its pure form. In this case I had enough ~250µA when powered by Nokia lithium battery. However, if you unsolder the AMS1117 from the NoName" motherboard, then the regular ATmega168, in its pure form, as I said above, consumes 20uA.
LEDs with power supply can be knocked off with something sharp. It's not a problem. The stabilizer was desoldered with a hairdryer. However, not everyone has a hair dryer and the skills to work with it, so both of the above options have a right to exist.

Neoway M590E module

Specifications:
Frequencies: EGSM900/DCS1800 Dual-band, or GSM850/1900 or Quad-band
Sensitivity:-107dBm
Maximum power transmission: EGSM900 Class4(2W), DCS1800 Class1(1W)
Peak current: 2A
Working current: 210mA
Sleep current: 2.5mA
Working temperature:-40°C… +85°C
Operating voltage: 3.3V…4.5V (recommended 3.9V)
Protocols: GSM/GPRS Phase2/2+, TCP/IP, FTP, UDP etc.
Internet: GPRS CLASS 10
Datasheet:

The cheapest GSM module that can be found on the market, usually used, soldered not always by skillful with Chinese hands from equipment. Why not always dexterous? Yes, all because of desoldering with a hairdryer - often people receive these modules with shorted plus and minus, which is one of the reasons for their inoperability. Therefore, the first step is to check the power contacts for a short circuit.

Note. I would like to note a separate important point, in my opinion, that these modules can come with a round coaxial connector for the antenna, which allows you to separately order a more serious antenna and connect it to the module without dancing with a tambourine. Or they may come without this connector. This is if we talk about the cheapest sets. If you don’t want to rely on a happy accident, then there are slightly more expensive sets where this connector is present + the kit includes an external antenna on a textolite board.

This module is also capricious when it comes to power supply, since at peak it consumes up to 2A current, and the diode included in the kit seems to be designed to lower the voltage from 5V (which is why it says 5V on the board itself) to 4.2V, but judging by According to people's complaints, it creates more trouble than it is worth.
Let's say you have already assembled this module, and instead of a diode, a jumper is soldered in, since we are not going to supply a voltage of 5V to it, but will power it directly from a lithium battery, which is within the permissible voltage limits of 3.3-4.2V.
It will be necessary to somehow connect it to the computer and check for functionality. For this case, it is better to buy one for yourself in advance - through it we will communicate with the module and Arduino boards via the UART serial interface (USART).
The connection is shown below in the picture (I drew it as best I can):
TX modem >>> RX converter
RX modem<<< TX конвертера
Battery plus - Modem plus
The negative of the lithium battery is combined with the GND of the modem and the GND of the converter
To start the modem, apply the BOOT pin through a 4.7 kOhm resistor to GND


In the meantime, run the program on your computer. Pay attention to the settings:
1) Select the COM port to which the TTL converter is connected, in my case it is COM4, ​​yours may be different.
2) Select the data transfer speed. (There is a nuance here, because the modules themselves can be configured for different speeds, most often 9600 baud or 115200 baud. Here you need to select it empirically, choosing some speed, connecting, and sending the AT command, if the cracks come in response, then it will disconnect , select a different speed and repeat the command, and so on until the answer is OK).
3) Select the packet length (in this case 8 bits), parity bit disabled (none), stop bit (1).
4) Be sure to check the box +CR, and then a carriage return character will be automatically added to each command we send to the module at the end - the module understands commands only with this character at the end.
5) Connection, everything is clear here, click and we can work with the module.

If you click on “Connection” and then start the module by applying BOOT through a 4.7K resistor to ground, then first the terminal will display the inscription “MODEM:STARTUP”, then, after a while, the inscription “+PBREADY”, meaning that the telephone number has been read book, even though it may be empty:

Under this spoiler are AT commands with examples

We print the AT command - in response, the module sends us our command, since the echo mode is enabled, and OK:

Let's check the status of the modem with the AT+CPAS command - the response is again our command, +CPAS: 0 and OK.
0 means that the module is ready for operation, but depending on the situation there may be other numbers, for example 3 – incoming call, 4 – in connection mode, 5 – sleep mode. I couldn’t find any information on 1 and 2.

Changing the data transfer rate via UART is done with the command AT+IPR=9600 - this is if you need a speed of 9600. If something else, similar to AT+IPR=19200, for example, or AT+IPR=115200.

Let's check the network signal. AT+CSQ, the response comes +CSQ: 22.1 - the value before the decimal point has a range of 0... 31 (115... 52 dBl) - this is the signal level, the higher the better. But 99 means its absence. The value after the decimal point is the signal quality 0... 7 - here it’s the other way around, the lower the number, the better.

Let's disable echo mode by sending the ATE0 command so that duplicate commands do not interfere. This mode is switched back on using the ATE1 command.

View firmware version AT+GETVERS



These and many other commands can be viewed

Aligning boards

If soldering the Pro Mini to a breadboard is not difficult, then with the GSM module the situation is somewhat more complicated, because its contact comb is located only on one side, and if you solder only it, then the other side of the board will simply hang in the air. Then, again, I had to drill additional 3 holes by eye near the three corners on the board. The areas around each of the holes were then masked off. For convenience, I placed the disconnected leads from the comb on a solderless breadboard (white) and, installing the GSM module board on them, soldered them normally:

Later I had to make another hole, in my case on the letter “I”, where it says “Made In China”, from the edge of the board.


It turned out that the added contact, which is essentially GND, became located next to the GND of the Pro Mini board, and thus it became possible to connect the ground of the GSM module and the Pro Mini with a drop of solder (the long pin in the middle and the Pro Mini pin to the right of it) - I marked them with arrows. Of course it turned out a little crooked, but now it holds securely:



There was some space left between the boards - in it I placed a lithium discharge charge control board with a pre-soldered microUSB connector and soldered wires.

The scarf fits in there very tightly, and the glow of the LEDs on the side will be clearly visible through a small hole in the case.



Card racks

In order to securely mount the board inside the case, I had to spend a couple of days thinking about how this could be implemented. The option with hot-melt adhesive was not considered for several reasons - it could fall off, become deformed, and most importantly, the structure would be difficult to disassemble.
I came to the conclusion that the simplest and most correct option here would be to use stands, which naturally I did not have. However, there were a couple of non-working chargers, from which one long stand with a thread for self-tapping screws was cut out. Each stand was sawn in half and filed down to about 9.5 mm - it is at this height that the battery located under the board has a sufficient margin of about 2 mm - this is done so that the soldered contacts of the board with their tips do not touch it and so that it is possible to put a piece between them foam for fixation.
As for attaching the board directly to the case, here I cut four strips from a coffee can, drilled a hole at the ends of which, then secured them on the same screws that are screwed into the racks. See in the photo below what it looks like.
The next step is to screw a couple of stands on the other side of the board, that is, on top, so that when the case is closed, the cover rests slightly on these stands, creating additional fixation. A little later, for this purpose, I came across a housing from a Soviet propaganda radio (if it had been found earlier, I would have taken all the stands from here), where I found a couple of more or less suitable heights, but first I drilled them in the center with a drill under self-tapping screws Then I sawed them off and also finished them off with a file, removing the excess. Here I came up with one subtlety - in the photo you can see that one white stand is screwed to the getinaks board from the edge, and the other white one is screwed directly to the module board, because from one edge the modem board completely covers the bottom board, and from the opposite edge - on the contrary - the bottom one is already peeking out. At the same time, additional holes had to be drilled in both boards so that the heads of the screws could pass freely.
And finally, it remains to make sure that the board is always parallel to the body - the staples that are used to fix wires and cables on the wall are perfect for this task; I previously removed the nails from them. The brackets cling well to the board with the concave side without any additional devices, the only thing is to the right of the SIM card, the width of the bracket turned out to be excessive and I also had to sand it.
All details were adjusted by eye and experimentally, below is a photo of all of the above:



Connectors. LEDs. Button.

Since I ran out of comb, I had to remove the 6-pin connector from the DVD drive board, which I then soldered to the Pro Mini, this is for the convenience of flashing the board. Nearby I soldered a round connector (Nokiev 3.5mm) for charging lithium.

The body of the 6-pin connector was slightly finished with a file, because its edges protruded slightly above the body. The charging socket fits perfectly against the wall of the case.

On the other side of the board, I soldered a button to reboot the device and two LEDs for debugging the firmware - the red LED is connected to the GSM module, the second green LED is connected to the 10th pin of the Pro Mini - it’s easier for me to debug the program.

Battery modification

The flat Nokia battery from Nokia phones is no less common than the 18650, but many simply refuse to use it due to the inconvenience of connecting the contacts, which are recessed deep into the battery itself. It is undesirable to solder them, so it was decided to use the method proposed by these, namely, make a contact block yourself from an office eraser and copper wire (1.5 mm thick).
First, I pierced a piece of eraser with two wires with pre-stripped ends, and adjusted them to the battery contacts so that the distance between them coincided,
I bent the ends, tinned them with a soldering iron, and pulled them back slightly by the long ends so that the resulting contacts were recessed into the eraser.



Trying on a battery:

You can secure the contact block with a rubber band or wrap it with blue electrical tape, which is what I did in the end.

Assembly.

The main part of the work is done, all that remains is to assemble and record it.
I put a piece of foam rubber between the battery and the board so that it would not move inside the case later. I additionally soldered a 2200 µF capacitor to power the module.

When charging is connected:

Frame. External terminal block.

The case was available on the local radio market for about $1.5, if converted into dollars, measuring 95x60x25mm, almost the size of a pack of cigarettes. I drilled several holes in it. First for the 4-pin terminal block, taken from a non-working dimmer.
I completely freed the two outer contacts from the bolts with spacers, drilled holes for longer bolts, which will hold the entire terminal block on the body. On the case itself, of course, the two outer holes will be large, and the two in the middle will be smaller - they will have contacts threaded through them, one of which is connected to VCC Pro Mini, and the second contact to pin 2.

Drilling holes, although a simple task at first glance, is still no less labor-intensive, it is very easy to miss, so I did it first with a drill of a smaller diameter, then with a larger one.

For the tact button, I chose a cap with a slightly concave top, so that it would be easy to reach with a match or paper clip through the narrow hole in the case.

Board in a case with a connected USB-TTL converter cable:

About the antenna.
The antenna, as you may have noticed throughout the review, was constantly changing as I experimented with different homemade antennas. Initially, there was a round coaxial connector on the module board, but the fifth time it was used for an external antenna, it simply fell apart, so keep in mind that it is flimsy. As a result, I tore out the antenna on the PCB from the old router, and soldered it to the module board, because... it catches the net a little better than spring and wire.

Well, completely assembled with the charging connected it looks like this:

Test. How it works:

In addition to tests with antennas, I checked how the alarm would behave outside, in -15 frost. To do this, I simply placed the entire insides in a container and left it on the balcony overnight, the alarm did not start, the reason turned out to be generally obvious - lithium does not like frost. This was confirmed by another test, where I left the battery at home, and took the board outside through long wires and left it like that for a day in the same frost - it worked as if nothing had happened. On the other hand, it would be strange if the alarm did not work because... In the datasheets for Atmega, for modules, and for quartz, the permissible operating temperatures are up to -40 degrees.

The principle of operation is organized using an external interrupt, initially pin 2 is closed to VCC and thus logical 1 is maintained at the pin, and the controller is asleep. As soon as the contact is broken and 0 appears on pin 2, the microcontroller wakes up, lowers the 3rd pin (to which the BOOT of the modem is connected through a resistor) to ground - the module starts, the MK periodically polls the module for readiness, and as soon as it catches the network, it immediately sends call to the owner's phone number specified in the code. After rejecting the call, the device turns off without sending any more endless calls, which is the problem with many Chinese alarm systems.

Additional Information

#include #include // UART software library SoftwareSerial gsm(7, 6); // RX(7), TX(6) void wakeUp()() // empty interrupt handler //////////////////////////// /////////////// void gsmOFF())( // PORTD|=(1<<3); // ВЫКЛЮЧЕНИЕ МОДУЛЯ _delay_ms(10); // gsm.println("AT+CPWROFF"); // ПЕЧАТАЕМ КОМАНДУ OFF PORTB &=~ (1<<2); // выключить LED 10 } // //========================================= void gsmON(){ // PORTD|=(1<<6); // 6-му порту (TX) назначить 1 PORTD &= ~(1<<3); // ЗАПУСК МОДУЛЯ _delay_ms(10); // while(!gsm.find("+PBREADY")); // ждём прочтения тел. книги PORTB |= (1<<2); // включить LED 10 _delay_ms(100); // while(1){ // gsm.println("AT+CREG?"); // проверяем в сети ли модуль if (gsm.find("0,1")) break; // если сеть есть, выходим из цикла _delay_ms(400); // проверка раз в 0,4 сек } // } // /////////////////////////////////////////// // void sleepNow(){ // функция засыпания ADCSRA = 0x00; // отключить подсистему АЦП (экономия 140 мкА) PORTD&=~(1<<6); // в вывод TX поставить 0 _delay_ms(100); // set_sleep_mode(SLEEP_MODE_PWR_DOWN); // режим сна PWR_DOWN sleep_enable(); // включение сна attachInterrupt(0, wakeUp, LOW); // включить прерывания sleep_mode(); // sleep_disable(); // detachInterrupt(0); // отключить прерывания } void setup(){ gsm.begin(9600); // скорость работы UART DDRD = B01001000; // 3-й и 6-й выводы на выход DDRB |= (1<<2); // вывод 10 на выход gsmON(); // запуск модуля для теста gsmOFF(); // выключаем модуль } void loop(){ if (!(PIND&(1<<2))){ // если на 0-ом прерывании появился 0 gsmON(); gsm.println("ATD+79xxxxxxxxx;"); // отзваниваемся, в ответ приходит OK и CONNECT _delay_ms(100); if (gsm.find("OK")) while(1){ // ожидание сброса вызова gsm.println("AT+CPAS"); // при каждой итерации опрашиваем модуль if (gsm.find("0")) break; // если 0, то выходим из цикла while _delay_ms(100); // проверка раз в 0,1 сек } for (char i=0; i<14; i++){ PORTB|=(1<<2); // LED 10 ON _delay_ms(200); PORTB&=~(1<<2); // LED 10 OFF _delay_ms(200); } gsmOFF(); // выключить модуль _delay_ms(10); while(1); // блокируем программу } else { sleepNow(); // укладываем контроллер спать } }

Circuit diagram (without charge-discharge control board)



Conclusions and thoughts. Plans.

The alarm is used at the dacha, I am satisfied with the work, however, with further study of the AVR, more and more ideas come up for further modification. Arduino with its pseudo-language Wiring really upset me, because... One unpleasant moment was discovered in the work. When I used the port functions digitalWrite(); or pinMode(); - for some reason the GSM module froze very often. But it was worth replacing them with tricks like DDRB|=(1<Only the operation of directly accessing the ports made the device work as intended.

On energy saving...
The assembled device worked for four full months without recharging and continues to work, although it would be more correct to say “sleep”. This can be checked by simply rebooting via the white button. With a power consumption of 250 μA (through the LE33 stabilizer) and a battery of ~1430 mAh, although okay, due to the newness of the battery, let’s round it up to 1000 mAh, it turns out that the device can sleep for about 5.5 months without recharging. If you still remove the stabilizer, then the operating time can be safely multiplied by 10 times. But in my case there is no need for this, because you still need to spend the balance from the SIM card once every three months, at the same time the device can be checked and recharged.
The example of energy saving given in the review is far from the limit, because judging by the information from the datasheet, you can lower the clock frequency of the microcontroller (and this is done by installing fuses) to 1 MHz and, if you apply 1.8 V voltage, the consumption will drop below the 1 μA bar in active mode. Very nice! But if the MK is clocked from the internal RC oscillator, then another problem will appear - the UART air will be clogged with garbage and errors, especially if the controller is heated or cooled.

Upon completion...
1) An ordinary wire installed to break is not very convenient, I plan to experiment with a Hall sensor and a reed switch, although they say about the latter that it is not very reliable, because the contacts inside it can stick.
2) It would be nice to add the ability to change the “owner number” without the participation of a computer and flashing it. You will have to work with the EEPROM.
3) Try interruptions from the watchdog timer, but not just for the sake of curiosity, but so that the microcontroller periodically wakes up on its own, measures the battery voltage and sends the resulting value via SMS to be aware of how low the battery is.
4) A solar panel can completely eliminate the need to recharge the device; this will be especially true for low-capacity batteries.
5) For a long time I wanted to buy LiFePo4 batteries, which, according to reviews, can withstand frost well, but while I was looking for a suitable lot, spring had already quietly arrived.
6) Work on the aesthetic component

Which Pro Mini should you buy?
If you don’t have a hair dryer, then Pro Mini “RobotDyn” Atmega168PA 3.3V, pick off the LED with something sharp and you have ~250 µA.
If you have a hair dryer, then any board, solder the stabilizer and the LED for power supply - you get ~20 µA of current consumption.

That's all for now, I hope the review was interesting and useful.

Planning to buy +174 Add to favorites I liked the review +143 +278

Good afternoon Again, a multi-review of Chinese electronic components, as usual about a little bit of everything, I’ll try to keep it short, but will it work? So, meet GSM alarm system costing up to 700 ₽. Interesting? Please use “cut”!

Let's get started! Before you start, I recommend taking a look at this one, fewer components and greater autonomy. So, the “technical specifications”, the basic requirements for signaling:

1) Notify when sensors are triggered.
2) In the event of a power failure, some autonomy must be provided.
3) Alarm control via SMS and calls.

Due to the fact that the process of creating an alarm took several months and some sellers no longer sell the components that were purchased from them, links will be updated to products from other sellers who have the maximum or close to the maximum number of product sales and the best price. The prices in the review are current as of the date it was written.

List of what you will need:

List of changes

GSM_03_12_2016-14-38.hex- fixed operation of the device with the M590 modem.
GSM_05_12_2016-13-45.hex- added memtest console command, optimizing RAM usage.
GSM_2016_12_06-15-43.hex- added output of command results to the console, memory optimization. Occupied: 49% SRAM.
GSM_2016_12_07-10-59.hex- now phone numbers are added and removed correctly. Busy: 49% SRAM, 74% Flash Memory.
GSM_2016_12_07-15-38.hex- added the ability to connect a motion sensor, connected to pin A0 (in this case, pin A0 is used as a digital one). Added SMS commands PIROn, PIROff. Busy: 48% SRAM, 76% Flash Memory.
GSM_2016_12_08-13-53.hex- Now, after successfully executing a command that does not send an SMS message in response, the device flashes the blue LED once. Now, after an incorrect execution of a command that does not send an SMS message in response, the device blinks the blue LED twice. Now, after initializing the device parameters, if the “quiet” mode is enabled (SendSms = 0), the device blinks the blue LED frequently for 2 seconds. Fixed a bug due to which the number was not always deleted from memory using the DeletePhone command. Busy: 48% SRAM, 78% Flash Memory.
GSM_2016_12_11-09-12.hex- Added console commands AddPhone and DeletePhone, the syntax is similar to SMS commands. Memory optimization. Busy: 43% SRAM, 79% Flash Memory.
GSM_2017_01_03-22-51.hex- Support has been implemented for similar I/O port expanders on the PCF8574 chip, for connecting additional 8 sensors, including reed switches. Automatic address search and automatic module configuration. The standard names of sensors and the logical level of their response are changed using the EditSensor command. The contents of the alarm SMS for the main sensor (pin D0) have been changed: “Alarm! Main sensor! and motion sensor (pin A0) “Alarm! PIR sensor! Added EditSensor and I2CScan commands. Occupied: 66% SRAM, 92% Flash Memory.
GSM_2017_01_15-23-26.hex- Support for A6_Mini modem. Monitoring the presence of external power (pin D7). Added SMS commands WatchPowerOn, WatchPowerOff. Added console commands ListConfig, ListSensor. Now the EditSensor SMS command works correctly. The output of debugging information to the port monitor has been slightly reduced. Occupied: 66% SRAM, 95% Flash Memory.
GSM_2017_01_16-23-54.hex- Now in the response message to the SMS command “Info” the status of the motion sensor is also reported. Fixed a bug due to which empty reply SMS messages were sometimes sent. Now the device notifies not only about a shutdown, but also about the resumption of external power. All modems began to chatter less, and now the port monitor is a little cleaner. Occupied: 66% SRAM, 95% Flash Memory.
GSM_2017_02_04-20-23.hex- Fixed the “Watch the power on” error. Now, after disarming, the “alarm pin” is turned off. Now, after deleting a number, the correct information is displayed in the console. Possibly fixed a bug due to which empty reply SMS messages were sometimes sent. Busy: 66% SRAM, 90% Flash Memory.
GSM_2017_02_14-00-03.hex- Now SMS messages are sent by default, the SendSms parameter is again equal to 1. Now, when the contacts of the main reed sensor are closed (closing the door), the device blinks with a blue LED for 2 seconds, indicating normal operation of the sensor. Busy: 66% SRAM, 90% Flash Memory.
GSM_2017_03_01-23-37.hex- The WatchPowerOn command has been removed. Added console command WatchPowerOff, identical to the SMS command. Added WatchPowerOn1, WatchPowerOn2 commands. WatchPowerOn1 - external power monitoring is enabled if the alarm is armed, WatchPowerOn2 - external power monitoring is always enabled. The function of arming and disarming by external devices is implemented; pins A1(D15) and A2(D16) are used for this. The alarm arms/disarms when a high level +5V appears at pin A1(D15) or a low level GND appears at pin A2(D16). Pin A1(D15) is pulled up to GND, pin A2(D16) is pulled up to +5V through 20 (10) kOhm resistors. Added GuardButtonOn and GuardButtonOff commands. Now, after arming, the red LED flashes until the integrity of the main reed switch circuit is checked. If the circuit is intact, the red LED lights up. Occupied: 66% SRAM, 95% Flash Memory.
GSM_2017_03_12-20-04.hex- Now the console has become even cleaner, but if the “TestOn” test mode is enabled, additional information is displayed in the console. The “Sent!” bug has been fixed; information about sending messages is now correctly displayed in the console. Fixed the "repeated false call" bug. Now the balance request should work correctly on all modems. Busy: 67% SRAM, 95% Flash Memory.
GSM_2017_04_16-12-00.hex- Corrected. Now the Info and Money commands will always send a response SMS. The GuardButtonOn command has been replaced by the GuardButtonOn1 and GuardButtonOn2 commands. Occupied: 67% SRAM, 99% Flash Memory.
GSM_2017_04_21-09-43.hex - not recommended for use, only for testing purposes, thanks for identifying errors :) - Now the sendsms parameter does not affect the sending of SMS messages for power grid monitoring. Added SMS command DelayBeforeGuard responsible for the delay when arming, the value cannot exceed 255 seconds. Added SMS command DelayBeforeAlarm, which is responsible for delaying the sending of notifications and turning on the “alarm pin” when sensors are triggered; the value cannot exceed 255 seconds. ClearSMS commands have been removed, messages are now deleted automatically upon receipt. Occupied: 68% SRAM, 100% Flash Memory.
GSM_2017_04_22-20-42.hex- Multiple bugs fixed. ClearSMS commands are again present in the firmware. Memory optimization. Busy: 68% SRAM, 98% Flash Memory.
GSM_2017_04_23-17-50.hex- Now the balance request should work correctly on all modems. Arming and disarming with external devices now works correctly. SMS response messages from the Info command should not be empty. Memory optimization. Busy: 68% SRAM, 98% Flash Memory.
GSM_2017_04_24-13-22.hex- Now console commands are sent to the GSM module only if the test mode is enabled. Now there is no division between SMS commands and console commands; all existing commands can be transmitted both via SMS and via the console. A bug with the Info command may have been fixed. Memory optimization. Busy: 68% SRAM, 94% Flash Memory.
GSM_2017_04_25-20-54.hex- Fixed a bug where the ListConfig command changed the value of the last event. Now, when entering commands through the console, unnecessary SMS messages are not sent. A bug with the Info command may have been fixed. Memory optimization. Busy: 66% SRAM, 94% Flash Memory.
GSM_2017_04_30-12-57.hex- Temporarily enabled the output of additional information to the console when sending SMS messages and generating a response to the Info command. A bug with the Info command may have been fixed. Memory optimization. Occupied: 66% SRAM, 92% Flash Memory.
GSM_2017_05_06-11-52.hex- Fixed with DelayBeforeAlarm function. Occupied: 66% SRAM, 93% Flash Memory.
GSM_2017_05_23-21-27.hex- The output of information to the console has been slightly changed. Added support for port expansion modules on PCF8574A with addresses from 0x38 to 0x3f inclusive. Fixed bug c. Now the device reboots automatically after the FullReset, ResetConfig, ResetPhone commands and if the MemTest command is successfully executed. Added WatchPowerTime command. It is now possible to set the time after which an SMS message will be sent indicating that the external power source is turned off. Busy: 67% SRAM, 94% Flash Memory.
GSM_2017_05_26-20-22.hex- Initialization of expansion board sensor memory has been fixed. The AddPhone command syntax has been changed. Added EditMainPhone command. The operating principle of the notification system has been changed; when the sensor is triggered, SMS messages will be sent first, after which voice calls will be made. Alarm SMS messages will be sent to phone numbers with the sign “S” (SMS). Voice calls will be made to numbers with the “R” (Ring) sign. Messages about turning off/on the external power source will be sent to phone numbers with the sign “P” (Power). Added RingTime command. It is now possible to set the duration of an alarming voice call; the parameter can have a value from 10 to 255 seconds. The RingOn/RingOff command now globally enables/disables voice call alerts. Added ResetSensor command. Occupied: 68% SRAM, 99% Flash Memory.
GSM_2017_06_02-17-43.hex- The “I” (Info) parameter has been added to the AddPhone and EditMainPhone commands, which is responsible for SMS notification about arming or disarming the device. Now after adding the main number, the device automatically reboots. Now you can enter identical numbers into the device’s memory. When adding the second and subsequent duplicate numbers, the attributes “M”, “S”, “P” and “I” will be automatically removed from them. These numbers will be used for repeated voice calls when the sensors are triggered. A bug with incorrect console output after executing the AddPhone command has been fixed; now information is not displayed automatically after adding a number. Added Reboot command. Occupied: 69% SRAM, 99% Flash Memory.
GSM_2017_06_11-00-07.hex- Now again, when the contacts of the main reed sensor are closed (closing the door), the device blinks with a blue LED for 2 seconds, indicating normal operation of the sensor, but it does not take into account whether the device is armed or disarmed. RingOn/RingOff commands have been removed. Now the device can be disarmed during an alarm call; now they are made in the background. Occupied: 69% SRAM, 99% Flash Memory.
GSM_2017_07_04-21-52.hex- Now the Pause command does not send a response SMS. The TestOn and TestOff commands have been removed. The Management attribute has been removed from all numbers. Occupied: 68% SRAM, 96% Flash Memory.
GSM_2017_07_24-12-02.hex- Added ReedSwitchOn/ReedSwitchOff commands for monitoring the main reed sensor, now it can be turned on/off in the same way as a motion sensor. Fixed a bug in the Info command. The TestOn and TestOff commands are again present in the firmware. Occupied: 68% SRAM, 96% Flash Memory.
GSM_2017_07_26-10-03.hex- Added ModemID command. Automatic detection of the modem is carried out only if the value of this parameter is 0. After setting the parameter value to 0, the device is automatically rebooted. Busy: 68% SRAM, 98% Flash Memory.
GSM_2017_08_03-22-03.hex- Now the alarm can control external devices. For control, analog output A3 is used (D17 - used as digital). The logical output level (+5V or GND) can be changed; after changing the level through the configuration command, the device will automatically reboot. The duration of the external device control signal can be changed. Added ExtDeviceLevelLow, ExtDeviceLevelHigh, ExtDeviceTime, Open commands. Some changes in the logic of control commands. Memory optimization. Occupied: 68% SRAM, 99% Flash Memory.
GSM_2017_08_10-12-17.hex- The commands SmsOn/SmsOff, ReedSwitchOn/ReedSwitchOff, PIROn/PIROff and everything connected with them have been removed. The DelayBeforeAlarm command has been replaced with extended commands. Changed the output of the Info command. The output of the ListConfig command to the console has been optimized. Now any digital sensors with high or low response levels, including reed switches, can be connected to pins D6 and A0. Pins D6 and A0 should be connected to ground (GND) through a resistance of 10 (20) kOhm. If the sensor is set to a low response level (enabled in reed switch mode), then the integrity of the circuit is checked. The logical triggering level at inputs D6 and A0 (+5V or GND) can be changed; after changing the logical level, the device will automatically reboot. For each of the sensors (main, second, PCF expansion board), when triggered, its own time can be set, after which a notification will be made (SMS and/or voice call). "PIR Sensor" has been renamed to "Second sensor". Fixed the operation of the expansion card, an error due to which the device always notified when sensors were triggered, regardless of whether the device was armed or not. Now you can select an operating mode in which the device can monitor the sensors of the expansion card both in the armed mode (GuardOn) and in the disabled mode (GuardOff). Added commands PCFForceOn/PCFForceOff, MainSensorLevelHigh/MainSensorLevelLow/MainSensorLevelOff, SecondSensorLevelHigh/SecondSensorLevelLow/SecondSensorLevelOff, MainDelayBeforeAlarm, SecondDelayBeforeAlarm, PCFDelayBeforeAlarm. Occupied: 68% SRAM, 99% Flash Memory.

*Subsequent firmware versions include changes from previous versions.


Arduino Nano v3 ports used

D4- output of an “alarm” pin; when the sensor is triggered, a high level signal is set on this pin
D5- inverse output of the “alarm” pin; when the sensor is triggered, a low level signal is set on this pin

D6- reed sensor. Starting from version GSM_2017_08_10-12-17.hex, any digital sensors with high or low response levels, including reed switches, can be connected to pin D6. Pin D6 should be pulled to ground (GND) through a resistance of 10 (20) kOhm.
D7- connected to a voltage divider from an external +5V power source. Upper arm 2.2 kOhm, lower arm 3.3 kOhm.

Voltage divider


D8- TX modem
D9- RX modem

D10- red LED
D11- blue LED
D12- green LED

Peripheral connection:
A0- Motion Sensor . Starting from version GSM_2017_08_10-12-17.hex, any digital sensors with a high or low response level, including reed switches, can be connected to pin A0. Pin A0 should be pulled to ground (GND) through a resistance of 10 (20) kOhm.

A1- Input for external control. The alarm arms/disarms when a high level of +5V appears at the input.
A2- Inverse input for external control. The alarm arms/disarms when a low GND level appears at the input.

A3- Configurable (+5V or GND) output for controlling external devices. When a control command is received, the value at this output changes depending on what was set for a set period of time.

A4- SDA I2C
A5- SLC I2C
, for connecting additional 8 sensors.


Control commands for hex firmware

Attention! Teams dedicated in bold can only be executed from the main number, as they are responsible for the device configuration. Other commands can be executed from numbers with the “Management” attribute.

SMS - control commands are not case sensitive:
AddPhone- Add a phone number. In total, no more than 9 numbers can be added + 1 main number, which is automatically saved in memory the first time you call the device after resetting it to factory settings using commands ResetPhone or FullReset. Those. whoever first called the device after resetting it to factory settings is the “master”, this number is entered into the first memory cell and cannot be changed or deleted via SMS. It is not possible to add two identical numbers.
Example command:



Command syntax:

AddPhone- team
: - delimiter
5 - write to the fifth memory cell
+71234567890 - phone number
Up to version GSM_2017_05_26-20-22.hex:
a - “Alarm” parameter - SMS messages will be sent to numbers with this parameter - messages about alarm activation and messages about arming or disarming.
Starting from version GSM_2017_05_26-20-22.hex:
m - “Management” parameter - alarm management is enabled
s - “SMS” parameter - an SMS message will be sent when the sensors are triggered
r - “Ring” parameter - a voice call will be made when the sensors are triggered
p - “Power” parameter - an SMS message will be sent when the external power is turned on/off
i - “Info” parameter - an SMS message will be sent when arming or disarming
If the parameters “m”, “s”, “r”, “p”, “i” are missing, the phone is stored in memory, but is not used in any way.


DeletePhone- Delete phone number.
Example command:

Command syntax:

DeletePhone - command
: - delimiter
+71234567891 - phone number


EditMainPhone- Change the parameters “s”, “r”, “p”, “i” of the main phone, this number is stored in the first memory cell.
Example command:

Command syntax:

EditMainPhone - command
: - delimiter
srpi - parameters


BalanceNum- Changing the balance request number and processing the length of the request response. Default value for Beeline: #100#L22.
Example command:

Command syntax:

BalanceNum - command
: - delimiter
#103# - balance request number
L24 - The length (len) of the forwarded response is 24 characters, we cut off spam from the balance request.


EditSensor- Change the name of the sensor and the logical response level. There can be no more than 8 additional sensors in total. After changing the parameters, the device must be rebooted.
Example command:
EditSensor:1+Datchik dvizheniya v koridore#h

Command syntax:

EditSensor - command
: - delimiter
1 - write to the first memory cell
+ - separator
Datchik dvizheniya v koridore - the name of the sensor, cannot exceed 36 characters, including spaces.
#h - Sign of a high logical level from the sensor, upon receipt of which an alarm will be triggered. If "#h" is missing, the alarm will be triggered when a low logic level is received from the sensor.


SleepTime- The time the alarm goes to sleep when receiving the SMS command “Pause” is indicated in minutes. Default value: 15, cannot be less than 1 or more than 60.
Example command:

Command syntax:

SleepTime - command
: - delimiter
20 - 20 minutes of “sleep”.


AlarmPinTime- The time for which the alarm/inverse pin is turned on/off is indicated in seconds. Default value: 60, cannot be less than 1 second and more than 43200 seconds (12 hours).
Example command:

Command syntax:

AlarmPinTime - command
: - delimiter
30 - 30 seconds to turn on/off the alarm pin.


DelayBeforeGuard- Time before arming the device, after receiving the corresponding command.
Example command:

Command syntax:

DelayBeforeGuard - command
: - delimiter
25 - 25 seconds before arming


DelayBeforeAlarm- The time after which an “alarm” SMS notification will be sent if the alarm has not been disarmed during this period of time. Replaced by extended commands starting from version GSM_2017_08_10-12-17.hex
Example command:

Command syntax:

DelayBeforeAlarm - command
: - delimiter
40 - 40 seconds before sending an “alarm” notification


WatchPowerTime- Time in minutes after which an SMS message will be sent indicating that the external power source is turned off. If external power is restored before the set time has elapsed, the message will not be sent.
Example command:

Command syntax:

WatchPowerTime - command
: - delimiter
5 - 5 minutes before sending SMS message


RingTime- Duration of an alarming voice call, the parameter can have a value from 10 to 255 seconds.
Example command:

Command syntax:

RingTime - command
: - delimiter
40 - 40 the call duration will be 40 seconds, after which the next subscriber will be called.


ModemID- Forced installation of the model of the modem being used. Possible values: 0 - modem auto-detection, 1 - M590, 2 - SIM800l, 3 - A6_Mini.
Example command:

Command syntax:

ModemID - command
: - delimiter
2 - Modem ID.


ExtDeviceTime- The number of seconds by which the signal level at the control output of the external device will change.
Example command:

Command syntax:

ExtDeviceTime- command
: - delimiter
5 - 5 seconds


ExtDeviceLevelLow- The external device connected to output A3 is controlled by a low signal level (GND). The output will default to a high level of +5V until a control command from an external device is received
ExtDeviceLevelHigh- An external device connected to output A3 is controlled by a high signal level (+5V). The output will default to GND low until an external device control command is received.

ResetSensor- reset port expander sensors

ResetConfig- reset settings to factory settings

ResetPhone- deleting all phone numbers from memory

FullReset- reset settings, delete all phone numbers from memory, restore the default value of the BalanceNum command.

RingOn- enable notification by calling the “main” number recorded in the first memory cell when the sensor is triggered. Removed starting from version GSM_2017_06_11-00-07.hex
RingOff- turn off the notification by ringing when the sensor is triggered. Removed starting from version GSM_2017_06_11-00-07.hex

SmsOn- enable SMS notification when the sensor is triggered. Removed starting from version GSM_2017_08_10-12-17.hex
SmsOff- turn off SMS notification when the sensor is triggered. Removed starting from version GSM_2017_08_10-12-17.hex

PIROn- enable motion sensor processing
PIROff- disable motion sensor processing

ReedSwitchOn- enable processing of the main reed sensor
ReedSwitchOff- turn off processing of the main reed sensor

WatchPowerOn- enable external power control, an SMS message about turning off the external power will be sent provided that the alarm system is armed. Removed starting from version GSM_2017_03_01-23-37.

WatchPowerOn1- enable external power control, an SMS message about turning off the external power will be sent provided that the alarm system is armed.
WatchPowerOn2- enable external power control, an SMS message about turning off the external power will be sent in any case

WatchPowerOff- turn off external power control

GuardButtonOn- alarm control by external devices or button is enabled. Removed starting from version GSM_2017_04_16-12-00.
GuardButtonOn1- function setting or removing protection by external devices or button is enabled
GuardButtonOn2- function only productions armed by external devices or the button is turned on; disarming is done by calling the device or using an SMS command.
GuardButtonOff- alarm control by external devices or button is disabled

PCForceOn- constant monitoring of a group of all expansion module sensors
PCFForceOff- monitoring a group of all expansion module sensors only when the device is armed

MainSensorLevelHigh- an alarm notification will be sent when a high level signal (+5 V) appears at the input (D6) from the sensor
MainSensorLevelLow- an alarm notification will be sent when a low level signal (GND) appears at the input (D6) from the sensor
MainSensorLevelOff- sensor input processing (D6) is disabled

SecondSensorLevelHigh- an alarm notification will be sent when a high level signal (+5 V) appears at the input (A0) from the sensor
SecondSensorLevelLow- an alarm notification will be sent when a low level signal (GND) appears at the input (A0) from the sensor
SecondSensorLevelOff- processing of the sensor input (A0) is disabled

MainDelayBeforeAlarm- time after which an “alarm” SMS notification will be sent when the main sensor (D6) is triggered, if the alarm has not been disarmed during this period of time. The syntax is the same as the DelayBeforeAlarm command.
SecondDelayBeforeAlarm- time after which an “alarm” SMS notification will be sent when an additional sensor (A0) is triggered, if the alarm has not been disarmed during this period of time. The syntax is the same as the DelayBeforeAlarm command.
PCFDelayBeforeAlarm- the time after which an “alarm” SMS notification will be sent when the expansion board sensors (PCF8574) are triggered, if the alarm has not been disarmed during this period of time. The syntax is the same as the DelayBeforeAlarm command.

GuardOn - arm
GuardOff - remove guard

Open - external device control command

Info - check the status, in response to this message an SMS will be sent with information about which number the security was turned on/off

Pause - pauses the system for the time set by the sleeptime command in minutes; the system does not respond to sensor triggers.

TestOn - test mode is turned on, the blue LED flashes.
TestOff - test mode is turned off.

LedOff - turns off the standby LED.
LedOn - turns on the standby LED.

Money - balance request.

ClearSms - Delete all sms from memory

Console commands (up to version GSM_2017_04_24-13-22.hex) - entered in the Arduino IDE port monitor:

AddPhone - similar to the AddPhone sms command

DeletePhone - similar to the DeletePhone sms command

EditSensor - similar to the EditSensor sms command

ListPhone - output to the port monitor a list of phones stored in memory

ResetConfig - similar to the ResetConfig sms command

ResetPhone - similar to the ResetPhone sms command

FullReset - similar to the FullReset sms command

ClearSms - similar to the ClearSms sms command

WatchPowerOn1 - similar to the WatchPowerOn1 sms command
WatchPowerOn2 - similar to the WatchPowerOn2 sms command
WatchPowerOff - similar to the WatchPowerOff sms command

GuardButtonOn - similar to the GuardButtonOn sms command. Removed starting from version GSM_2017_04_16-12-00
GuardButtonOn1 - similar to the GuardButtonOn1 sms command
GuardButtonOn2 - similar to the GuardButtonOn2 sms command
GuardButtonOff - similar to the GuardButtonOff sms command

Memtest - test of the device's non-volatile memory; all device settings will be reset, similar to the FullReset command.

I2CScan - search and initialize supported devices on the I2C bus.

ListConfig - displays the current device configuration to the port monitor.

ListSensor - output to the port monitor of the current sensor configuration.

UPD. When using a motion sensor, to avoid false positives during modem operation, it is necessary between pins GND And A0 Arduino put up resistance, thank you comrade
AllowPhone = (“70001234501”, “70001234502”, “70001234503”, “70001234504”, “70001234505”) - Numbers that are allowed to manage security.
AlarmPhone = (“70001234501”, “70001234502”) - Numbers for sending SMS notifications when the sensor is triggered and notifications about disarming or arming. The first number in the list will be called when the sensor is triggered if the RingOn command is executed; by default, this option is enabled. This is done because SMS messages may arrive with some delay, but the call should go through immediately.

If a call is received from an authorized number or an SMS message with the GuardOn/GuardOff command, then, depending on the current security status, an SMS message about arming or disarming will be sent to the numbers listed in the AlarmPhone array, and an SMS message will also be sent to the number from which the call came.

When the sensor is triggered SMS messages are sent to all numbers from the AlarmPhone array (list) and a voice call is made to the first number from this array.

Light indication:
The LED lights up red - it is armed.
The LED glows green - disarmed, turned on/off by SMS command LedOn/LedOff.
The LED constantly blinks blue - it indicates that everything is in order with the Arduino, the board is not frozen, it is used exclusively for debugging, it is turned on/off by the TestOn/TestOff SMS command.
* The code contains the LedTest() function, it blinks with a blue LED, it is made only to monitor the Arduino, blinks - it means it’s working, does not blink - it’s frozen. Haven't hung up yet :)

Not relevant!

Connecting 2 or more sensors for open firmware (applies only to this firmware sketch_02_12_2016.ino)
To connect additional reed sensors, we use free digital pins D2, D3, D5 or D7. Connection diagram with additional sensor on D7.

Necessary changes in firmware
... #define DoorPin 6 // Input number connected to the main sensor int8_t DoorState = 0; // Variable for storing the state of the main sensor int8_t DoorFlag = 1; // Variable for storing the state of the main sensor #define BackDoorPin 7 // Input number connected to the additional sensor int8_t BackDoorState = 0; // Variable for storing the state of the additional sensor int8_t BackDoorFlag = 1; // Variable to store the state of the additional sensor...
void setup() ( ... pinMode(DoorPin, INPUT); pinMode(BackDoorPin, INPUT); ...
... void Detect() ( // Read values ​​from sensors DoorState = digitalRead(DoorPin); BackDoorState = digitalRead(BackDoorPin); // Processing the main sensor if (DoorState == LOW && DoorFlag == 0) ( DoorFlag = 1; delay(100); if (LedOn == 1) digitalWrite(GLed, LOW); Alarm(); ) if (DoorState == HIGH && DoorFlag == 1)( DoorFlag = 0; delay(100); ) //Processing additional sensor if (BackDoorState == LOW && BackDoorFlag == 0) ( BackDoorFlag = 1; delay(100); if (LedOn == 1) digitalWrite(GLed, LOW); Alarm(); ) if (BackDoorState == HIGH && BackDoorFlag == 1)( BackDoorFlag = 0; delay(100); ) ) ...

And one more thing:
1. It is better to use diodes rated for a current of 2 A, since the module carries a current of 1 A and we still need to power the Arduino and the modem with something. This instance uses 1N4007 diodes; if they fail, replace them with 2 A ones.
2. I used all resistors for the LED at 20 kOhm, so as not to illuminate the entire corridor at night.
3. I also placed a 20 kOhm resistor on the reed sensor between the GND pin and the D6 pin.

That's all for now. Thank you for your attention! :)

I'm planning to buy +207 Add to favorites I liked the review +112 +243