Домашня сигналізація або використання датчика руху та LCD монітора з Arduino. Про датчик руху і підключення до Arduino Охоронна сигналізація на arduino


Всім привіт сьогодні ми розглянемо пристрій під назвою датчик руху. Багато хто з нас чув про цю штуку, хтось навіть мав справу з цим пристроєм. Що таке датчик руху? Спробуємо розібратися, отже:

Датчик руху, або датчик переміщення - пристрій (прилад) що виявляє переміщення будь-яких об'єктів. Дуже часто ці пристрої використовуються в системах охорони, сигналізації та моніторингу. Форм факторів цих датчиків існує безліч, але ми розглянемо саме модуль датчика руху для підключення до плат Arduino,і саме від фірми RobotDyn. Чому саме цієї фірми? Я не хочу займатися рекламою цього магазину та його продукції, але саме продукція цього магазину була обрана як лабораторні зразки завдяки якісній подачі своїх виробів для кінцевого споживача. Отже, зустрічаємо - датчик руху(PIR Sensor)від фірми RobotDyn:


Ці датчики малі за габаритами, споживають мало енергії та прості у використанні. Крім того – датчики руху фірми RobotDyn мають ще й марковані шовкографією контакти, це звичайно дрібниця, але дуже приємна. А тим, хто використовує такі ж датчики, але тільки інших фірм, не варто турбуватися - всі вони мають однаковий функціонал, і навіть якщо не промарковані контакти, то цоколівку таких датчиків легко знайти в інтернеті.

Основні технічні характеристикидатчика руху (PIR Sensor):

Зона роботи датчика: від 3 до 7 метрів

Кут стеження: до 110 о

Робоча напруга: 4,5...6 Вольт

Споживаний струм: до 50мкА

Примітка:Стандартний функціонал датчика можна розширити, підключивши на піни IN та GND датчик освітленості, і тоді датчик руху спрацьовуватиме лише у темряві.

Ініціалізація пристрою.

При включенні датчику потрібна майже хвилина для ініціалізації. Протягом цього періоду датчик може давати помилкові сигнали, це слід врахувати при програмуванні мікроконтролера з підключеним до нього датчиком, або в ланцюгах виконавчих пристроїв, якщо підключення здійснюється без використання мікроконтролера.

Кут та область виявлення.

Кут виявлення (стеження) складає 110 градусів, діапазон відстані виявлення від 3 до 7 метрів, ілюстрація нижче показує все це:

Регулювання чутливості (дистанції виявлення) та тимчасової затримки.

На наведеній нижче таблиці показані основні регулювання датчика руху, ліворуч знаходиться регулятор тимчасової затримки відповідно в лівому стовпці наведено опис можливих налаштувань. У правому стовпчику опис регулювань відстані виявлення.


Підключення датчика:

  • PIR Sensor - Arduino Nano
  • PIR Sensor - Arduino Nano
  • PIR Sensor - Arduino Nano
  • PIR Sensor – для датчика освітленості
  • PIR Sensor – для датчика освітленості

Типова схема підключення дана на схемі нижче, у нашому випадку датчик показаний умовно з тильного боку та підключений до плати Arduino Nano.

Скетч демонструє роботу датчика руху (використовуємо програму):

/* * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano */ void setup() ( //Встановити з'єднання з монітором порту Serial.begin(9600); ) void loop() ( //Зчитуємо порогове значення з порту А0 //зазвичай воно вище 500 якщо є сигнал if(analogRead(A0) > 500) ( //Сигнал з датчика руху Serial.println("Є рух!!!"); ) else ( / /Немає сигналу Serial.println("Все тихо..."); ) )

Скетч є звичайною перевіркою роботи датчика руху, в ньому є багато недоліків, таких як:

  1. Можливі несправжні спрацьовування, датчику необхідна самоініціалізація протягом однієї хвилини.
  2. Жорстка прив'язка до монітора порту, немає вихідних виконавчих пристроїв (реле, сирена, світлоіндикація)
  3. Занадто короткий час сигналу на виході датчика, при виявленні руху необхідно програмно затримати сигнал більш тривалий час.

Ускладнивши схему та розширивши функціонал датчика, можна уникнути вищеописаних недоліків. Для цього потрібно доповнити схему реле модулем і підключити звичайну лампу на 220 вольт через даний модуль. Сам модуль реле буде підключений до піна 3 на платі Arduino Nano. Отже принципова схема:

Тепер настав час трохи вдосконалити скетч, яким перевірявся датчик руху. Саме в скетчі буде реалізована затримка вимкнення реле, так як сам датчик руху має занадто короткий час сигналу на виході при спрацьовуванні. Програма реалізує 10 секундну затримку при спрацьовуванні датчика. За бажання цей час можна збільшити або зменшити, змінивши значення змінної DelayValue. Нижче представлений скетч та відео роботи всієї зібраної схеми:

/* * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * Relay Module -> Arduino Nano */ // relout - пін (вихідний сигнал) для модуля реле const int relout = 3; //prevMillis - змінна для зберігання часу попереднього циклу сканування програми //interval - часовий інтервал для відліку секунд до вимкнення реле unsigned long prevMillis = 0; int interval = 1000; //DelayValue - період протягом якого реле утримується у включеному стані int DelayValue = 10; //initSecond - Змінна ітерація циклу ініціалізації int initSecond = 60; //countDelayOff - лічильник часових інтервалів static int countDelayOff = 0; //trigger – прапор спрацьовування датчика руху static bool trigger = false; void setup() (// Стандартна процедураініціалізації порту який підключений модуль реле //ВАЖЛИВО!!! - щоб модуль реле залишався в спочатку вимкненому стані //і не спрацьовував при ініціалізації, потрібно записати в порт входу/виходу //значення HIGH, це дозволить уникнути хибних "переклацань", і збереже //стан реле таким, яким воно було до включення всієї схеми в роботу pinMode(relout, OUTPUT); digitalWrite(relout, HIGH); //Тут все просто - чекаємо коли закінчаться 60 циклів(змінна initSecond) //тривалістю в 1 секунду, за цей час датчик "самоініціалізується" for(int i = 0; i< initSecond; i ++) { delay(1000); } } void loop() { //Считать значение с аналогового порта А0 //Если значение выше 500 if(analogRead(A0) >500) ( //Встановити прапор спрацьовування датчика руху if(!trigger) ( trigger = true; ) ) //Поки прапор спрацьовування датчика руху встановлений while(trigger) ( //Виконувати наступні інструкції//Зберегти в змінній currMillis //значення мілісекунд минулих з початку //виконання програми unsigned long currMillis = millis(); //Порівнюємо з попереднім значенням мілісекунд //якщо різниця більше заданого інтервалу, то: if(currMillis - prevMillis > interval) ( //Зберегти поточне значення мілісекунд в змінну prevMillis prevMillis = currMillis; //Перевіряємо лічильник затримки порівняння /протягом якого реле має утримуватися у включеному //стані if(countDelayOff >= DelayValue) ( ​​//Якщо значення зрівнялося, то: //скинути прапор спрацьовування датчика руху trigger = false; //Обнулити лічильник затримки countDelayOff = 0; // Вимкнути реле digitalWrite(relout, HIGH); // Перервати цикл break; ); ) ) ) )

У програмі є конструкція:

unsigned long prevMillis = 0;

int interval = 1000;

...

unsigned long currMillis = millis();

if(currMillis - prevMillis > interval)

{

prevMillis = currMillis;

....

// Наші операції укладені у тіло конструкції

....

}

Щоб зробити ясність, було вирішено окремо прокоментувати цю конструкцію. Отже, дана конструкціядозволяє виконати паралельну задачу в програмі. Тіло конструкції спрацьовує приблизно раз на секунду, цьому сприяє змінна interval. Спочатку, змінною currMillisприсвоюється значення, що повертається при виклику функції millis(). Функція millis()повертає кількість мілісекундів, що пройшли з початку програми. Якщо різниця currMillis - prevMillisбільше ніж значення змінної intervalто це означає, що вже пройшло більше секунди з початку виконання програми, і потрібно зберегти значення змінної currMillisу змінну prevMillisпотім виконати операції укладені у тілі конструкції. Якщо ж різниця currMillis - prevMillisменше ніж значення змінної interval, то між циклами сканування програми ще не минуло секунди, і операції ув'язнені в тілі конструкції пропускаються.

Ну і на завершення статті відео від автора:

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

Цей проект стосується розробки та вдосконалення системи для запобігання/контролю будь-яких спроб проникнення злодіїв. Розроблений охоронний пристрій використовує вбудовану систему (включає апаратний мікроконтролер із використанням відкритого програмного коду та gsm модем) на базі технології GSM (Глобальна система рухомого зв'язку).

Охоронний пристрій може бути встановлений у будинку. Інтерфейсний датчик охоронної сигналізації також приєднано до охоронної системи на базі контролера.
При спробі проникнення система передає попереджувальне повідомлення (наприклад, SMS) власнику на мобільний телефонабо на будь-який заздалегідь налаштований мобільний телефон для подальшої обробки.

Охоронна система складається з мікроконтролера Arduino Uno та стандартного модему SIM900A на базі GSM/GPRS. Вся система може живитися від будь-якого джерела живлення/батареї 12В 2А.

Нижче показано схему охоронної системина базі Arduino.

Робота системи дуже проста і вимагає роз'яснень. Коли подається харчування, вона переходить у черговий режим. Коли виводи конектора J2 закорочені, заздалегідь запрограмоване попереджувальне повідомлення передається на потрібний мобільний номер. Ви можете підключити будь-який детектор виявлення проникнення (такий як світловий захисний пристрій або датчик руху) до вхідного конектора J2. Зауважте, що активний-низький (L) сигнал на виведенні 1 конектора J2 активує спрацювання охоронної сигналізації.

Більше того, до системи додано опціональний пристрій “виклик – тривога”. Він активує телефонний дзвінок, коли користувач натисне кнопку S2 (або коли інший електронний блок ініціює сигналізацію). Після натискання кнопки “call” (S2), дзвінок можна скасувати, натиснувши іншу кнопку S3 – кнопку “end”. Ця опція може використовуватися для подачі сигналу тривоги у разі пропущеного дзвінка у разі проникнення.

Схема дуже гнучка, тому може використовувати будь-який SIM900A модем (і, звісно, ​​плату Arduino Uno). Уважно прочитайте документацію на модем до початку збирання. Це дозволить полегшити та зробити приємним процес виготовлення системи.

Список радіоелементів

Позначення Тип Номінал Кількість ПриміткаМагазинМій блокнот
Плата Arduino

Arduino Uno

1 До блокноту
GSM/GPRS-модемSIM900A1 До блокноту
IC1 Лінійний регулятор

LM7805

1 До блокноту
C1 100мкФ 25В1 До блокноту
C2 Електролітичний конденсатор10мкФ 16В1 До блокноту
R1 Резистор

1 ком

1 До блокноту
LED1 Світлодіод 1 До блокноту
S1 КнопкаЗ фіксацією1

Сьогодні мова піде про те, як за допомогою Ардуїнозібрати охоронну систему. Наша «охорона» охоронятиме один контур і керуватиме одним оповісником.

Для Ардуїно це не проблема, і, як ви побачите за кодом програми і за схемою пристрою, можна легко збільшити кількість точок доступу, що охороняються, і кількість пристроїв оповіщення або індикації.
Охоронну системуможна застосувати для охорони як великих об'єктів (будівель та споруд), так і невеликих предметів (скриньок, сейфів), і навіть переносних кейсів та валіз. Хоча з останніми треба бути обережнішими, якщо ви встановите систему охорони, наприклад, на валізу, з якою вирішите вирушити в подорож, і система оповіщення спрацює в якомусь аеропорту, то, гадаю, вам належить серйозна бесіда з місцевою службою безпеки:-)

Спрощено принцип роботи пристрою має такий вигляд (рис. 1). Після включення живлення пристрій переходить у робочий режим і чекає на постановку на охорону. Постановка та зняття з охорони здійснюються однією кнопкою. Для підвищення безпеки цю кнопку краще розташувати всередині приміщення (сейфа або скриньки). Перед увімкненням режиму охорони двері потрібно прочинити. Увімкнення режиму охорони (натискання кнопки) електронна схемачекає, поки ви не закриєте двері до приміщення (дверцята сейфа, кришку скриньки, і т.д.).

На дверях (або дверцятах) має бути встановлений кінцевий вимикач будь-якого типу, про це пізніше. Замикаючись (або розмикаючись), кінцевий вимикач повідомить пристрій, що контур, що охороняється, замкнений, і пристрій перейде в режим охорони. Про перехід у режим охорони система сповістить двома короткими сигналами (як у автомобільних сигналізаціях). У цьому режимі пристрій ловить відкриття дверей. Після відкриття дверей система чекає кілька секунд (це величина, що налаштовується, для приміщень близько десяти секунд, для скриньки одна-дві) відключення режиму охорони, якщо цього не відбувається, включається сирена. Алгоритм і схема розроблені так, що відключити сирену можна тільки повністю розібравши корпус і відключивши живлення.

Пристрій охоронної системидуже просте (рис. 2). В основі плата Ардуїно. Кінцеві вимикачі підключаються, як звичайна кнопка, через резистори, що підтягують. На кінцевиках зупинюся окремо. Вони бувають нормально замкнуті та нормально розімкнені. Можна як кінцевик включити звичайну кнопку, тільки хід звичайної кнопки дуже великий, люфт дверей зазвичай більше. Тому необхідно придумати якийсь штовхач для кнопки і пружити, щоб не зламати кнопку дверима. Ну і якщо не ліньки, то можна дійти до магазину і купити магнітний вимикач (геркон) (мал. 3), він не боїться пилу та забруднень.

Підійде і кінцевий вимикач автосигналізації (рис. 4). Слід зазначити, що програма написана під геркон. При закритих двереййого контакт замкнутий. Якщо використовувати вимикач від автосигналізації, то при зачинених дверях він буде швидше за все розімкнений, і у відповідних місцях коду потрібно буде поміняти 0 на 1 і навпаки.

Як сирена пропоную використовувати оповіщувач звукової ПКИ-1 ІВОЛГА білоруського виробництва (рис. 5). Напруга живлення 9 – 15 В, робочий струм 20 – 30 мА. Це дозволяє використовувати його з батарейним живленням. У цьому він «видає» 95 - 105 дБ.

За таких характеристик від батарейки «Крона» він звучатиме кілька десятків хвилин. Я знайшов його в інтернеті за 110 руб. Там же геркон із магнітом коштує близько 30 руб. Вимикач від автосигналізації в автозапчастинах був куплений за 28 руб. Транзистор КТ315 можна взяти з будь-якою літерою або замінити на будь-який сучасний малопотужний транзистор кремнієвий відповідної провідності. Якщо гучності одного оповіщувача не вистачить (хто знає, може, ви захочете, щоб було чути за багато кілометрів), можна підключити кілька оповіщувачів паралельно або взяти потужніший, тільки в цьому випадку транзистор потрібно замінити на потужніший (наприклад, знайому нам транзисторну) складання ULN2003). Як роз'єми для підключення геркона і сирени я застосував найпростіші роз'єми для аудіо / відеопристроїв - ціна на радіоринку 5 руб. за пару.

Корпус пристрою можна склеїти із пластику або фанери; якщо охороняється серйозний об'єкт, його краще зробити металевим. Батареї або акумулятори живлення для підвищення надійності та безпеки бажано розмістити всередині корпусу.

Для спрощення програмного коду були використані елементи енергозбереження, і батарейок надовго бракує. Можна оптимізувати код, а ще краще радикально переробити, застосувавши обробку подій з переривань і режим сну. У цьому випадку живлення від двох квадратних батарейок, включених послідовно (9 В), має вистачити на кілька місяців.

Тепер код

// постійні
const int button = 12; // пін для кнопки
const int gerkon = 3; // пін для геркона
const int sirena = 2; // пін упр-ня сиреною
const int led = 13; // пін індикатора
// змінні
int buttonState = 0; // стан кнопки
int gerkonState = 0; // Стан геркона
int N = 0; // лічильник кнопки відключення охорони
void setup() (
// управління сиреною та індикатором - вихід
pinMode(sirena, OUTPUT);
pinMode(led, OUTPUT); // кнопка та геркон - входи
pinMode(gerkon, INPUT);
pinMode(button, INPUT);
}
void loop()(
digitalWrite(led, HIGH);
while(buttonState= =0)( // цикл очікування, доки натиснемо кнопку
buttonState = digitalRead(button); // для переходу в режим охорони
}
digitalWrite(led, LOW);
buttonState = 0; // обнулюємо значення кнопки
while(gerkonState= =0)( // цикл, доки зачинимо двері

}
delay (500); // :-)
digitalWrite(sirena, HIGH); // Код
delay (100); // індикації
digitalWrite(sirena, LOW); // включення
delay (70); // режиму
digitalWrite(sirena, HIGH); // охорони
delay (100); // оповіщення
digitalWrite(sirena, LOW); // звукове
while(gerkonState= =1)( // чекаємо відкриття дверей
gerkonState = digitalRead(gerkon);
}
for (int i=0; i<= 5; i++){ // 7,5 секунды на нажатие
buttonState = digitalRead(button); // секретної кнопки
if (buttonState = = HIGH) ( // відстежуємо свій - чужий
N=N+1;
}
delay (1500); // секретна фіча:-)))
}
if (N > 0) (// найголовніше
digitalWrite(sirena, LOW); // не включаємо сирену
}
else (
digitalWrite(sirena, HIGH); // або включаємо сирену
}
digitalWrite(led, HIGH); // Включаємо індикатор N = 0;
buttonState = 0;
delay(15000); // нагадування «чайникам», яким подобається
digitalWrite(led, LOW); // тиснути на кнопки без перерви delay (1000);

Весна, як відомо, супроводжується всілякими загостреннями і ось головне «загострення» повилаз зі своїх нір на вулицю, щоб привласнити собі те, що йому не належить. А отже тема захисту свого майна стає як ніколи актуальною.
На сайті вже є кілька оглядів на саморобні. Вони звичайно функціональні, однак у всіх є загальна особливість- Залежність від розетки. Якщо з нерухомістю, де вже підведено електрику, це не проблема, то як бути з майном, де розетка далеко чи околиці зовсім знеструмлені? Я вирішив піти іншим шляхом - зібрати довгоживучий, максимально простий і незалежний від мережевого живлення девайс, який весь час відсипатиметься, а при проникненні грабіжників запускатиметься і віддзвонюватиметься господареві на телефон, сигналізуючи простим дзвінком про тривогу.

Предмети огляду

Покупні:
1. Макетна платаодностороння 5x7 см: гетінакс- або склотекстоліт
*- склотекстоліт набагато якісніший за гетинаксу.
2. Модуль Neoway M590 - , з антеною на текстоліті -
3. Arduino Pro Mini "RobotDyn" ATmega168PA 8MHz 3.3V -
4. Плата контролю заряду-розряду літію -

Добуті на розвалах цивілізації:
1. Стійки для плати, випиляні з корпусів приладів - 6шт.
2. Акумулятор літієвий плоский 1300mAh
3. Скоби, що використовуються для фіксації кабелю до стіни
4. Ластик канцелярський
5. Мідний дріттовщиною 1.5мм
6. Приладовий корпус з місцевого радіоринку - 1.5$
7. Пара світлодіодів різного кольору(взяв із VHS-плеєра)
8. Антена та кнопка з ковпачком (взяв з Wi-Fi роутера)
9. 4-х контактний клемник (взяв з диммера)
10. Роз'єм живлення (взяв зі старого зарядника для 18650)
11. Роз'єм 6-піновий (взяв із DVD-приводу)
12. Жерстяна банка(з-під кави наприклад)

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

Технічні характеристики:
Мікроконтролер: ATmega168PA
Робоча напруга пряма:.8 - 5.5 В
Робоча напруга через стабілізатор LE33: 3.3 або 5 В (залежно від моделі)
Робоча температура:-40°C… 105°C
Вхідна напруга: 3.35-12 (модель 3.3) або 5-12 (модель 5)
Цифрові Входи/Виходи: 14 (6 з яких можуть використовуватися як виходи ШІМ: 3, 5, 6, 9, 10 та 11)
Аналогові входи: 6
Таймери-лічильники:два 8-бітних і один 16-бітний
Режими енергозбереження: 6
Постійний струм через вхід/вихід: 40 мА
Флеш пам `ять: 16 Кб (2 використовуються для завантажувача)
ОЗУ: 1 Кб
EEPROM: 512 байт
Ресурс запису/прання пам'яті: 10,000 Flash/100,000 EEPROM
Тактова частота: 8 МГц (модель 3.3 В) або 16 МГц (модель 5 В)
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
I2C: A4 (SDA) та A5 (SCL)
UART TTL: 0 (RX) та 1 (TX)
Даташит:

Вибір упав на цю атмегу зовсім випадково. на одному форумі, де обговорювалися енергоекономічні проекти, в коментарях попалася порада використати саме 168 атмегу.
Однак довелося повозиться, щоб таку плату відшукати, оскільки всі лоти були завалені 328-ми атмегами на частоті 16МГц, що працюють від 5В. Для мого проекту такі характеристики були надмірними і незручними вже спочатку, пошуки ускладнилися.
У результаті набрав на 3.3-вольтову версію Pro Mini на Atmega 168PA на eBay, причому не просту китайську, а під брендом RobotDyn від російського розробника. Так, у мене теж спочатку, як і у вас, виникло зерно сумніву. А даремно. Коли проект вже був зібраний, а AliExpress ввів обов'язкову платну доставку для дешевих товарів (після якої посилки стали губитися набагато частіше), то пізніше замовив звичайну Pro Mini Atmega168 (без PA) 3.3V 8MHz. Я трохи експериментував з режимами енергозбереження з обома платами, прошиваючи в кожну спеціальний скетч, що занурює мікроконтролер у максимальний режим енергозбереження і ось що вийшло:
1) Arduino Pro Mini "RobotDyn": ~250мкА
2) Arduino Pro Mini "NoName":при подачі живлення на стабілізатор напруги (висновок RAW) і випаяному світлодіоді споживаний струм склав ~3.92мА




- як ви зрозуміли, різниця в енергоспоживання майже в 16 разів, все тому, що в NoName"мовській Pro Mini використовується зв'язка Atmega168+, з яких сам МК їсть всього 20мкАструму (це я перевірив окремо), все інше обжерливість посідає лінійний перетворювач напруги AMS1117 - даташит це тільки підтверджує:


У випадку з платою від RobotDyn зв'язка вже трохи інша - це Atmega168PA+ - тут застосований вже інший LDO-стабілізатор, чиї характеристики в плані енергозбереження виявилися приємнішими:


Випоювати я його не став, тому не можу сказати, скільки Atmega168PA споживає струму в чистому вигляді. В даному випадку мені вистачило ~250мкАпри харчуванні від нокієвського літієвого акумулятора. Однак якщо випаяти AMS1117 c NoName"мовської плати, то ATmega168-я звичайна, в чистому вигляді, як я і сказав вище, споживає 20мкА.
Світлодіоди, що стоять по живленню, можна скинути чимось гострим. Це не проблема. Стабілізатор випаював феном. Однак не у кожного є фен і навички роботи з ним, тому обидва наведені варіанти мають право на існування.

Модуль Neoway M590E

Технічні характеристики:
Частоти: EGSM900/DCS1800 Dual-band, або GSM850/1900 або Quad-band
Чутливість:-107dBm
Максимальна потужність передачі: EGSM900 Class4(2W), DCS1800 Class1(1W)
Піковий струм:
Робочий струм: 210мА
Струм у сплячому режимі: 2.5мА
Робоча температура:-40 ° C ... +85 ° C
Робоча напруга: 3.3V… 4.5V (рекомендоване 3.9V)
Протоколи: GSM/GPRS Phase2/2+, TCP/IP, FTP, UDP, etc.
Інтернет: GPRS CLASS 10
Даташит:

Найдешевший GSM-модуль, що можна знайти на ринку, зазвичай б/в, випаяний не завжди спритними китайськими руками з обладнання. Чому не завжди спритними? Та все через випаювання феном - нерідко людям ці модулі приходять із закороченим плюсом і мінусом, що є однією з причин їхньої непрацездатності. Тому насамперед необхідно продзвонювати контакти живлення на коротке замикання.

Примітка.Окремий важливий, на мій погляд, момент хотілося б відзначити - ці модулі можуть приходити з круглим коаксіальним роз'ємом під антену, що дозволяє окремо замовити більш серйозну і без танців з бубном її до модуля підключити. А можуть приходити без цього роз'єму. Це якщо говорити про найдешевші набори. Якщо не хочеться сподіватися на щасливу випадковість, тобто набори трохи дорожчі, де цей роз'єм присутній + у комплекті йде зовнішня антена на текстолітовій платі.

Цей модуль ще й примхливий до живлення, оскільки в піку він споживає до 2А струму, а діод, що йде в комплекті, як задуманий для зниження напруги з 5В (чому і написано на самій платі 5В) до 4.2В, але судячи за скаргами народу, він створює більше клопоту, ніж користі.
Допустимо цей модуль у вас вже зібраний, а замість діода впаяна перемичка, оскільки ми не збираємося подавати на нього напругу 5В, а живитимемо його безпосередньо від літієвого акумулятора, що укладається в межі допустимих напруг 3.3-4.2В.
Треба буде його якось підключити до комп'ютера, і перевірити на працездатність. Для цього випадку краще заздалегідь придбати собі - за допомогою нього ми будемо спілкуватися з модулем і платами Arduino за послідовним інтерфейсом UART (USART).
Підключення показано нижче на зображенні (намалював, як вмію):
TX модему >>> RX конвертер
RX модему<<< TX конвертера
Плюс акумулятора - Плюс модему
Мінус літієвого акумулятора об'єднаний з GND модемом та GND конвертером.
Для запуску модему виведення BOOT через резистор 4.7 ком подати на GND


Тим часом на комп'ютері запустити програму . Звернути увагу на налаштування:
1) Вибрати COM-порт, до якого підключений TTL-конвертер, у моєму випадку це COM4, ​​може бути інший.
2) Вибрати швидкість обміну даними. (Тут є нюанс, бо самі модулі можуть бути налаштовані під різні швидкості, найчастіше 9600 бод або 115200 бод. Тут потрібно підбирати досвідченим шляхом, вибравши якусь швидкість, з'єднавшись, і відправивши команду АТ, якщо у відповідь приходять крякозябри, то відключиться , вибрати іншу швидкість і повторити команду.
3) Вибрати довжину пакета (у разі 8 біт), біт парності відключений (none), стоп-бит (1).
4) Обов'язково поставити галку +CR, І тоді до кожної посилається нами на модуль команді в кінці буде автоматично додаватися символ перенесення каретки - модуль розуміє команди тільки з цим символом в кінці.
5) З'єднання, тут все зрозуміло, натиснули і можемо працювати з модулем.

Якщо натиснути на «З'єднання» і після цього запустити модуль, подавши BOOT через резистор 4.7К на землю, то спочатку в терміналі висвітиться напис «MODEM:STARTUP», потім через деякий час напис "+PBREADY", що означає, що була прочитана телефонна книга, незважаючи на те, що вона може бути порожньою:

Під цим спойлером АТ-команди з прикладами

Друкуємо команду AT - у відповідь модуль нам надсилає нашу команду, оскільки увімкнено режим відлуння, і OK:

Перевіримо статус модему командою AT+CPAS - у відповідь знову наша команда +CPAS: 0 і ОК.
0 - означає, що модуль готовий до роботи, але в залежності від ситуації можуть бути інші цифри, наприклад 3 - вхідний дзвінок, 4 - в режимі з'єднання, 5 - сплячий режим. За 1 та 2 інформації не знайшов.

Зміна швидкості передачі даних UART відбувається командою AT+IPR=9600 - це якщо потрібна швидкість 9600. Якщо якась інша, аналогічно AT+IPR=19200 наприклад або AT+IPR=115200.

Перевіримо сигнал мережі. AT+CSQ, у відповідь приходить +CSQ: 22,1 – значення до коми має діапазон 0…31 (115…52дБл) – це рівень сигналу, чим більше, тим краще. Але 99 означає його відсутність. Значення після коми - якість сигналу 0 ... 7 - тут вже навпаки, чим менше, тим краще.

Відключимо режим відлуння, відправивши команду ATE0, щоб дублюючі команди не заважали. Назад цей режим включається командою ATE1.

Переглянути версію прошивки AT+GETVERS



Ці та багато інших команд можна подивитися

Поєднання плат

Якщо Pro Mini припаяти до макетної плати праці не становить, то з GSM-модулем справа трохи складніша, т.к. контактна гребінка у нього розташована тільки з одного боку і якщо припаяти тільки її, то інша сторона плати залишиться просто висіти в повітрі. Тоді, знову ж таки, на око довелося свердлити додаткові 3 отвори біля трьох кутів на платі. Потім області навколо кожного отвору були зачищені від маски. Для зручності, на безпайкову макетну плату (білу) помістив роз'єднані висновки від гребінки і, встановивши на них плату GSM-модуля нормально запаяв:

Пізніше довелося робити ще один отвір, у моєму випадку на літері "I", де написано "Мade In China", з краю плати.


Вийшло так, що доданий контакт, який по суті є GND, став поруч із GND плати Pro Mini, і тим самим з'явилася можливість об'єднати землю GSM-модуля та Pro Mini краплею припою (довгий висновок посередині і праворуч від нього висновок Pro Mini) - стрілочками їх наголосив. Кривувато, звичайно, вийшло, зате надійно тепер тримається:



Між платами залишився деякий простір - в нього я помістив плату контролю заряду розряду літію з попередньо випаяним microUSB-роз'ємом і проводами.

Хустка входить туди дуже щільно, при цьому свічення світлодіодів збоку буде добре помітне через невеликий отвір у корпусі.



Стійки для плати

Щоб надійно закріпити плату всередині корпусу, довелося витратити кілька днів на роздуми, як це можна продати. Варіант з термоклеєм не розглядався з кількох причин - він може відвалитися, деформуватися і найголовніше - конструкція вийшла б важко розбирається.
Прийшов до думки, що найпростішим і найправильнішим варіантом тут буде застосувати стійки, яких природно у мене не було. Однак було кілька неробочих зарядників, звідки було випиляно по одній довгій стійці з різьбленням під шурупи. Кожна стійка була розпиляна навпіл допилена напилком до приблизно 9.5мм - саме при такій висоті розташований під платою акумулятор має достатній запас, приблизно в 2мм - це зроблено для того, щоб паяні контакти плати своїми вістрями не торкалися його і щоб була можливість вкласти між ними шматочок поролону для фіксації.
Що стосується прикріплення плати безпосередньо до корпусу, то тут нарізав чотири смужки з баночки з-під кави, на кінцях яких просвердлив по отвору, потім закріпив їх на тих же шурупах, які вкручені в стійки. Нижче на фото подивіться, як це виглядає.
Наступний етап - прикрутити пару стійок з іншого боку плати, тобто зверху, щоб при закритому корпусі кришка злегка впиралася в ці стійки, створюючи додаткову фіксацію. Трохи пізніше, під цю справу мені в руки потрапив корпус з-під радянського пропагандистського радіо (якби він знайшовся раніше - всі стійки взяв би звідси), де знайшов пару більш-менш підходящих по висоті, але спершу я їх по центру розсвердлив дрилем під саморізи. Потім спилив їх і також допил напильником, прибравши надлишки. Тут у мене вийшла одна тонкість - на фото можна помітити, що одна біла стійка прикручена до гетинаксової плати з краю, а інша - безпосередньо до плати модуля, т.к. з одного краю плата модему повністю закриває собою нижню плату, а з протилежного краю - навпаки - виглядає вже нижня. При цьому в обох платах довелося додатково розсвердлювати отвори, щоб капелюшки шурупів могли вільно пройти.
Ну і нарешті, залишилося зробити так, щоб плата завжди була паралельна корпусу - під цю справу чудово підійшли скоби, які застосовують для фіксації проводів та кабелів на стіні, цвяхи з них я витяг. Скоби добре чіпляються до плати увігнутою стороною без будь-яких додаткових пристроїв, єдине - праворуч від SIM-карти, ширина скоби виявилася надмірною і довелося її відшліфувати.
Всі деталі підганялися на око і досвідченим шляхом, нижче за фото всього вищесказаного:



Роз'єми. Світлодіоди. Кнопка.

Так як гребінка у мене закінчилася, довелося з плати DVD-приводу демонтувати 6-піновий роз'єм, який потім припаяв до Pro Mini, це для зручності перепрошивки плати. Поруч припаяв круглий роз'єм (нокієвський 3.5мм) для заряду літію.

Корпус 6-пінового роз'єму трохи допил напильником, бо його краї трохи виступали над корпусом. Гніздо зарядки ідеально щільно уперлося в стінку корпусу.

З іншого боку плати припаяв кнопку для перезавантаження пристрою і два світлодіоди для налагодження прошивки - червоний світлодіод підключений до GSM-модулю, другий зелений світлодіод до 10-го виводу Pro Mini - мені простіше налагоджувати програму.

Доопрацювання акумулятора

Плоский нокієвський акумулятор від телефонів Nokia не менш поширений елемент, ніж 18650, проте багато хто просто відмовляється від його використання через незручність підключення контактів, які на самому акумуляторі втоплені вглиб. Паяти їх небажано, тому вирішено було скористатися способом, запропонованим цими, а саме зробити з канцелярської гумки та мідного дроту (товщиною 1.5мм) контактну колодку самому.
Спочатку проткнув шматочок гумки двома дротами з попередньо зачищеними кінцями, і прикинув до контактів акумулятора, щоб відстань між ними збігалася,
кінчики загнув, залудив паяльником, а за довгі кінці трохи витяг назад, щоб отримані контакти виявилися втоплені в гумку.



Прикладка на акумуляторі:

Закріпити контактну колодку можна канцелярською гумкою або замотати синьою ізолентою, що я зробив у результаті.

Складання.

Основна частина роботи зроблена, залишилося все це зібрати та зафіксувати.
Між акумулятором та платою вклав шматочок поролону, щоб той не елозив потім усередині корпусу. На живлення модуля додатково припаяв конденсатор на 2200 мкФ.

При підключеній зарядці:

Корпус. Зовнішній клемник.

Корпус отримав на місцевому радіоринку приблизно за 1.5 $, якщо перевести в долари, розміром 95x60x25мм, практично з пачку цигарок. У ньому я просвердлив кілька отворів. Спочатку для 4-х контактного клемника, взятого від непрацюючого димера.
Два крайні контакти я повністю звільнив від болтів з прокладками, просвердлив отвори під довші болти, на яких весь клемник і триматиметься на корпусі. На самому ж корпусі, зрозуміло, два крайніх отвори будуть більшими, а два посередині менше - в них будуть просунуті контакти, один з яких підключений до VCC Pro Mini, а другий контакт до піна 2.

Свердління отворів хоч і просте на перший погляд заняття, але все ж таки не менш трудомістке, дуже легко промахнутися, тому робив це спочатку свердлом меншого діаметру, потім побільше.

Для тактової кнопки я підібрав ковпачок зі злегка увігнутою вершиною, щоб через вузький отвір у корпусі по ній зручно було потрапити сірником або скріпкою.

Плата в корпусі із підключеним шлейфом USB-TTL конвертера:

Про антену.
Антена, як ви могли помітити під час огляду, постійно змінювалася, оскільки я експериментував з різними саморобними антенами. Спочатку на платі модуля був присутній круглий коаксіальний роз'єм, але вп'яте його використання під зовнішню антену він просто розвалився, тому майте на увазі, що він кволий. Через війну видер зі старого роутера антену на текстоліті, її припаяв до плати модуля, т.к. вона трохи краще ловить мережу, ніж пружинка та дріт.

Ну і зовсім у зборі із підключеною зарядкою виглядає так:

Тест. Як це працює:

Крім тестів з антенками я перевіряв, як поводитиметься сигналізація на вулиці, в мороз -15. Для цього я просто помістив нутрощі повністю в контейнер і залишав на балконі на ніч, сигналізація при цьому не стартувала, причина виявилася загалом очевидною - літій не любить мороз. Це підтвердилося іншим тестом, де акумулятор я залишав удома, а платню через довгі дроти виводив на вулицю і залишав так на добу в той же мороз - спрацьовування, як ні в чому не бувало. З іншого боку було б дивно, якби сигналізація не почала працювати т.к. в даташитах що у атмегу, що у модуль, що у кварц - допустимі температури роботи до -40 градусів.

Принцип роботи організований за зовнішнім перериванням, спочатку пін 2 замкнутий на VCC і цим на виведенні підтримується логічний 1, а контролер спить. Як тільки контакт порушується і на піні 2 з'являється 0, мікроконтролер прокидається, опускає 3-й пін (до якого через резистор підключений BOOT модему) до землі - запускається модуль, МК періодично опитує модуль на готовність, і як тільки він зловить мережу, відразу посилає виклик на вказаний номер телефону господаря. Після відхилення виклику, девайс відключається, не надсилаючи більше нескінченних викликів, ніж грішить багато китайських сигналізацій.

додаткова інформація

#include #include // бібліотека програмного UART SoftwareSerial gsm (7, 6); // RX(7), TX(6) void wakeUp()() // порожній обробник переривання //////////////////////////// //////////////// 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(); // укладываем контроллер спать } }

Схема (без плати контролю заряду-розряду)



Висновки та думки. Плани.

Сигналізація використовується на дачі, роботою задоволений, проте з подальшим вивченням AVR приходить все більше ідей для подальшої модифікації. Ардуїно з його брехливою мовою Wiring мене сильно засмутила, т.к. виявився один неприємний момент у роботі. Коли я використовував функції для роботи з портами digitalWrite(); або pinMode(); – то GSM-модуль чомусь дуже часто зависав. Але варто було замінити їх на викрутаси на зразок DDRB | = (1<Тільки операція прямого звернення до портів змусила заробити девайс, як і було задумано.

З енергозбереження...
Зібраний девайс відпрацював чотири повні місяці без підзарядки і продовжує працювати, хоча правильніше сказати «спати». Перевіряється це простим перезавантаженням через білу кнопку. При енергоспоживання 250 мкА (через стабілізатор LE33) і акумуляторі ~1430 mAh, хоча добре, через неновизну акумулятора округлим до 1000mAh, виходить, що девайс може відсипатися близько 5.5 місяців без підзарядки. Якщо все-таки випаяти стабілізатор, час роботи можна сміливо помножити в 10 разів. Але в моєму випадку в цьому немає потреби, тому що все одно потрібно раз на три місяці витрачати баланс з сімки, заразом і аксесуар можна перевірити і підзарядити.
Наведений у огляді приклад енергозбереження - далеко ще не межа, т.к. судячи з інформації з даташита, можна знизити тактову частоту мікроконтролера (а це робиться установкою фьюзов) до 1МГц і, якщо подати 1.8В напруги, то споживання опуститься нижче планки 1мкА в активному режимі. Дуже непогано! Але якщо МК при цьому тактуватиметься від внутрішнього RC-генератора, то з'явиться інша проблема – ефір UART виявиться засмічений сміттям та помилками, особливо якщо контролер нагріти чи охолодити.

З доопрацювання...
1) Звичайний дріт, встановлений на розрив не зовсім зручний, планую поекспериментувати з датчиком Холла і герконом, хоча про останній кажуть, що не дуже надійний, бо контакти всередині нього можуть залипнути.
2) Непогано було б додати можливість зміни «номера господаря» без участі комп'ютера та перепрошивки. Це вже з EEPROM доведеться попрацювати.
3) Спробувати переривання від сторожового таймера, але не просто заради цікавості, а щоб мікроконтролер періодично прокидався сам, робив виміри напруги акумулятора і відправляв отримане значення по SMS, щоб бути в курсі наскільки акумулятор розряджений.
4) Сонячна панель може зовсім позбавити необхідності підзаряджати девайс, це буде актуально особливо для малоємних акумуляторів.
5) Ще давно хотів купити LiFePo4 акумулятори, які за відгуками нормально переносять мороз, але поки шукав придатний лот, весна вже непомітно настала.
6) Попрацювати над естетичною складовою

Яку Pro Mini купити?
Якщо фена немає, то Pro Mini «RobotDyn» Atmega168PA 3.3V, чимось гострим скуштуєте світлодіод і маєте ~250мкА.
Якщо є фен, то будь-яку плату, випаює стабілізатор і світлодіод по живленню - отримуєте ~20мкА споживання струму.

На цьому поки що все, сподіваюся, огляд був цікавий і корисний.

Планую купити +174 Додати в обране Огляд сподобався +143 +278