Автономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚ΠΎΠ²Π° GSM Ρ€Π΅Π»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ всякакъв Ρ‚ΠΎΠ²Π°Ρ€ с Π½ΠΎΠΌΠΈΠ½Π°Π»Π½ΠΎ Π½Π°ΠΏΡ€Π΅ΠΆΠ΅Π½ΠΈΠ΅ 220 V ΠΈ мощност Π½Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 2 kW във всСки ъгъл Π½Π° ЗСмята, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ° ΠΊΠ»Π΅Ρ‚ΡŠΡ‡Π½Π° ΠΌΡ€Π΅ΠΆΠ°.

Автономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€
Π’ΠΎΠ²Π° устройство сС управлява ΠΎΡ‚ arduino nano Ρ‡Ρ€Π΅Π· gsm ΠΌΠΎΠ΄ΡƒΠ» SIM800L. По-Π΄ΠΎΠ»Ρƒ Π΅ Π΄Π°Π΄Π΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° със списък Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅. МоТС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΡ‚ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΎΡ‚ ΠΌΡ€Π΅ΠΆΠ° 220 V. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‚ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ρ‚ΠΎΠ²Π°Ρ€ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° консумира Π΄ΠΎ 2 kW СлСктроСнСргия. ΠžΡ‚ Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ, максимална ΠΈΠ·Ρ…ΠΎΠ΄Π½Π° мощност 300 W.

Автономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€
Накратко Π·Π° схСмата.

Π’ Ρ‚ΠΎΠ²Π° устройство ΠΈΠΌΠ° 4 Π±Π»ΠΎΠΊΠ°:

  • ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π΅Π½ Π±Π»ΠΎΠΊ
  • ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΠΈ батСрия
  • Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π΅ΠΌΠΎ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ Π±Π»ΠΎΠΊ.

Π˜Π½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ устройство Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅Π½ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€ 500t. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° мощност, Π½ΠΎ максималната ΠΈΠ·Ρ…ΠΎΠ΄Π½Π° мощност ΡΡŠΡ‰ΠΎ Ρ‰Π΅ намалява ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ Π½Π° мощността Π½Π° ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π°.

Π‘Π»ΠΎΠΊΡŠΡ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ батСрия Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Π΅Π²Ρ‚ΠΈΠ½ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ BMS S3, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° 3 Π»ΠΈΡ‚ΠΈΠ΅Π²ΠΎ-ΠΉΠΎΠ½Π½ΠΈ Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ. Π‘Π°Ρ‚Π΅Ρ€ΠΈΠΈΡ‚Π΅ са силнотокови. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° доставят Ρ‚ΠΎΠΊ ΠΎΡ‚ 35 Π°ΠΌΠΏΠ΅Ρ€Π°. Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ мощност, Ρ‚ΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΊΡƒΠΏΠΈΡ‚Π΅ ΠΏΠΎ-Π΅Π²Ρ‚ΠΈΠ½ΠΈ Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ с ΠΏΠΎ-нисък максималСн Ρ‚ΠΎΠΊ.

Устройството Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π΅ΠΌΠΎ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π½Π° транзистор VT3, VD4, R4, R5, R3. ΠšΠ°Ρ‚ΠΎΠ΄ΡŠΡ‚ Π½Π° цСнСровия Π΄ΠΈΠΎΠ΄ VD4 Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΏΠΎΠ΄Π°Π΄Π΅ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅, Ρ‚Ρ€Π°Π½Π·ΠΈΡΡ‚ΠΎΡ€ΡŠΡ‚ VT3 сС отваря. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ сС ΠΎΡ‚Π²ΠΎΡ€ΠΈ, Π½Π° всички Ρ€Π΅Π»Π΅ΠΉΠ½ΠΈ Π²Ρ…ΠΎΠ΄ΠΎΠ²Π΅ ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π° ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» ΠΈ Ρ€Π΅Π»Π΅Ρ‚Π°Ρ‚Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅ Π½Π° Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° ΠΎΡ‚ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅Ρ‚ΠΎ. Π’Π°ΠΆΠ½Π° характСристика Π½Π° Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π΅Π»Π΅ΠΉΠ½ΠΈ възли: някои ΠΎΡ‚ тях работят, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄Π° ΠΈΠ΄Π²Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π», Π° Π΄Ρ€ΡƒΠ³ΠΈ - ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π». Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° опция, Ρ‚ΠΎΠ³Π°Π²Π° трябва Π΄Π° прСмСститС R3 Π² Π΅ΠΌΠΈΡ‚Π΅Ρ€Π½Π°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π° Π½Π° транзистора VT3 ΠΈ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ рСлСйния Π²Ρ…ΠΎΠ΄ към Π΅ΠΌΠΈΡ‚Π΅Ρ€Π° Π½Π° ΡΡŠΡ‰ΠΈΡ транзистор.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡΡ‚ Π±Π»ΠΎΠΊ Π΅ сглобСн Π½Π° ΠΌΠΎΠ΄ΡƒΠ» SIM800 ΠΈ arduino nano.

Автономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° сглобСната схСмаАвтономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° опакованАвтономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€

Автономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€

Автономно GSM Ρ€Π΅Π»Π΅ със сглобяСм ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ устройството Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° SMS ΠΎΡ‚ вашия Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, трябва Π΄Π° Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ тСлСфонния си Π½ΠΎΠΌΠ΅Ρ€ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° your_phone. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ възмоТно Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ LCD дисплСй към Arduino, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ wh1601 ΠΈΠ»ΠΈ wh0802, Π½ΠΎ Ρ‰Π΅ трябва Π΄Π° Ρ€Π°Π·ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ всички Ρ€Π΅Π΄ΠΎΠ²Π΅ с надпис lcd.

Код

char your_phone = "+79148389933";

#include <SoftwareSerial.h>                                          // ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ SoftwareSerial для общСния с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ шинС UART
SoftwareSerial softSerial(8,9);                                      // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ softSerial указывая Π²Ρ‹Π²ΠΎΠ΄Ρ‹ RX, TX (ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ Arduino UNO)
// include the library code:
//#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
//const int rs = 12, en = 11, d4 = 5, d5 = 6, d6 = 7, d7 = 10;
//LiquidCrystal lcd(rs, en, d4, d5, d6, d7);                                                               // Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π²Ρ‹Π²ΠΎΠ΄ TX модуля ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ 2 Arduino, Π° Π²Ρ‹Π²ΠΎΠ΄ RX модуля ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ 3 Arduino.
//  Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ шин UART с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ скоростСй ΠΎΠ±Π΅ΠΈΡ… шин:      //
String buf2,buf3;
int g=0;

    String cmd1;
void setup(){                                                        //
init_port();
      // lcd.begin(16, 2);
  // Print a message to the LCD.
  //lcd.clear();
  //  lcd.setCursor(0, 0);
 /// lcd.print("VKL");
 // lcd.setCursor(0, 1);
 /// lcd.print("ZHDITE");

        /// init_port();// Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ  шинС UART Π½Π° скорости  9600 (ΠΌΠ΅ΠΆΠ΄Ρƒ Arduino ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ)
    softSerial.begin(9600);                                         // Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ шинС UART Π½Π° скорости 38400 (ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈ Arduino)
        Serial.begin(9600);   
        delay(30000);

  //  cmd1 ="AT+CMGF=1rn";
  softSerial.print("AT+CMGF=1rn"); 
  ///  print_lcd(cmd1);
delay(1000);
       dellAllSMS();  
//  cmd1 ="AT+CMGDA="DEL ALL"rn";
    // print_lcd(cmd1);
//cmd1="AT+CPAS";
  ///   print_lcd(cmd1);
}                                                                    //
      
   
      char c;  
      int m=0;
      int i=0;//
      int n=0;
//  ВыполняСм Ρ€Π΅Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ:                                          // Всё Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ с модуля - отправляСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, Π° всё Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° - отправляСм ΠΌΠΎΠ΄ΡƒΠ»ΡŽ

void dellAllSMS(){
  /* This deletes all sms in memory  
  
  */

  softSerial.print("AT+CMGDA="DEL ALL"rn"); // set sms to text mode

delay(3000);
}
void pin_on_setb()
{
 digitalWrite(2,1);
  digitalWrite(13,1);
}
void pin_off_setb()
{
 digitalWrite(2,0);
  digitalWrite(13,0);
}
void pin_on_inv()
{
 digitalWrite(3,1);
  //  digitalWrite(13,1);
}
void pin_off_inv()
{
 digitalWrite(3,0);
   // digitalWrite(13,0);
}
void init_port()
{
pinMode(2,1);
pinMode(3,1);
    pinMode(13,1);
}
String readData(){
   // this function just reads the raw data
   uint16_t timeout=0;
   while (!softSerial.available() && timeout<10000)
   {
     delay(10);
     timeout++;
   }
   if(softSerial.available())
   {
     String output = softSerial.readString();
     //if(DEBUG)
    ///   Serial.println(output);
     return output;
   }
 }
String buf, bufferIndex; 
int tempIndex=0;
int messageIndex;
int prev=0;
int power=0;
void loop(){                                                         //
   /* if(softSerial.available()){    Serial.write(softSerial.read());} // ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΡˆΠΈΠ½Ρ‹ UART Π² Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ  (ΠΎΡ‚ модуля     Ρ‡Π΅Ρ€Π΅Π· Arduino ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ)
    if(    Serial.available()){softSerial.write(    Serial.read());} // ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ  ΡˆΠΈΠ½Ρ‹ UART Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ (ΠΎΡ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· Arduino ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ    )*/

         //   lcd.clear();
     //  lcd.setCursor(0, 0);
     //  lcd.print("Nagruzka");
            //  lcd.setCursor(0, 1);
           //   if (power==1)
          //    {
         //              lcd.print("VKL");
     //         }
         //     else {lcd.print("VIKL");}
      softSerial.print(F("AT+CMGL="ALL",0"));
  softSerial.print("r");
  buf = readData();
 // Serial.println(buf);
tempIndex = buf.lastIndexOf("+CMGL: ");
tempIndex = tempIndex + 6;
    bufferIndex = buf.substring(tempIndex);
    bufferIndex = bufferIndex.substring(1,(bufferIndex.indexOf(",")));
    messageIndex = bufferIndex.toInt();
    ///Serial.println(messageIndex);
    if(prev!=messageIndex)
    {
      tempIndex = buf.lastIndexOf(your_phone);
     //  lcd.clear();
     //  lcd.setCursor(0, 0);
     //  lcd.print("SMS READ");

     if((digitalRead(4))&&(tempIndex!=-1))
     {
      pin_on_inv();
      delay(2000);
      pin_off_inv();
     // i=1;
   //  power=1;
     }
     else 
     {
     pin_on_setb();
           delay(2000);
     pin_off_setb();
  //   i=1;
 //         power=1;
     }
        //    send_sms(number3);

     
    prev++;
    
    }
if(messageIndex>=2)
{
 dellAllSMS();
// lcd.clear();
     //   lcd.setCursor(0, 0);
     //  lcd.print("SMS READ");
     //   lcd.setCursor(0, 1);
// lcd.print("SMS DEL");
 //  cmd1 ="AT+CMGDA="DEL ALL"rn";
   //  print_lcd(cmd1);
prev=0;
}
delay(10000);

}

STL Ρ„Π°ΠΉΠ»ΡŠΡ‚ Π·Π° ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π°Π½Π΅ Π½Π° кутията ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Ρ‚ΡƒΠΊ.

Π’ΠΈΠ΄Π΅ΠΎ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°:



Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€