Alarm domowy lub wykorzystanie czujnika ruchu i monitora LCD z Arduino. O czujniku ruchu i podłączeniu go do Arduino Alarm bezpieczeństwa na Arduino


Witam wszystkich, dzisiaj przyjrzymy się urządzeniu zwanemu czujnikiem ruchu. Wielu z nas słyszało o tym urządzeniu, niektórzy nawet mieli do czynienia z tym urządzeniem. Co to jest czujnik ruchu? Spróbujmy to rozgryźć, więc:

Czujnik ruchu lub czujnik przemieszczenia - urządzenie (urządzenie), które wykrywa ruch dowolnych obiektów. Bardzo często urządzenia te wykorzystywane są w systemach bezpieczeństwa, alarmowych i monitorujących. Istnieje wiele form tych czujników, ale rozważymy moduł czujnika ruchu do podłączenia do płytek Arduino,a konkretnie od firmy RobotDyn. Dlaczego ta firma? Nie chcę reklamować tego sklepu i jego produktów, ale to właśnie produkty tego sklepu zostały wybrane jako próbki laboratoryjne ze względu na wysoką jakość prezentacji ich produktów konsumentowi końcowemu. A więc spotykamy się - czujnik ruchu(Czujnik PIR) z RobotDyn:


Czujniki te są małe, zużywają mało energii i są łatwe w użyciu. Dodatkowo czujniki ruchu RobotDyn również posiadają styki sitodrukowe, to oczywiście drobnostka, a bardzo przyjemna. Cóż, ci, którzy korzystają z tych samych czujników, ale tylko innych firm, nie powinni się martwić - wszystkie mają tę samą funkcjonalność i nawet jeśli styki nie są oznaczone, to pinout takich czujników można łatwo znaleźć w Internecie.

Podstawowy specyfikacje techniczne czujnik ruchu (Czujnik PIR):

Obszar działania czujnika: od 3 do 7 metrów

Kąt śledzenia: do 110 o

Napięcie robocze: 4,5...6 V

Pobór prądu: do 50 µA

Notatka: Standardową funkcjonalność czujnika można rozszerzyć podłączając czujnik światła do pinów IN i GND, wtedy czujnik ruchu będzie działał tylko w ciemności.

Inicjowanie urządzenia.

Po włączeniu inicjalizacja czujnika zajmuje prawie minutę. W tym okresie czujnik może dawać fałszywe sygnały, należy to wziąć pod uwagę przy programowaniu mikrokontrolera z podłączonym do niego czujnikiem lub w obwodach wykonawczych, jeśli połączenie jest wykonane bez użycia mikrokontrolera.

Kąt i obszar detekcji.

Kąt wykrywania (śledzenia) wynosi 110 stopni, zasięg wykrywania wynosi od 3 do 7 metrów, poniższa ilustracja pokazuje wszystko:

Regulacja czułości (odległości detekcji) i opóźnienia czasowego.

Poniższa tabela przedstawia główne ustawienia czujnika ruchu, po lewej stronie znajduje się odpowiednio regulator opóźnienia czasowego, w lewej kolumnie opis możliwych ustawień. Prawa kolumna opisuje regulację odległości wykrywania.


Podłączenie czujnika:

  • Czujnik PIR - Arduino Nano
  • Czujnik PIR - Arduino Nano
  • Czujnik PIR - Arduino Nano
  • Czujnik PIR - dla czujnika światła
  • Czujnik PIR - dla czujnika światła

Typowy schemat podłączenia przedstawia poniższy schemat; w naszym przypadku czujnik pokazany jest umownie od tyłu i podłączony do płytki Arduino Nano.

Szkic demonstrujący działanie czujnika ruchu (korzystamy z programu):

/* * Czujnik PIR -> Arduino Nano * Czujnik PIR -> Arduino Nano * Czujnik PIR -> Arduino Nano */ void setup() ( //Ustanów połączenie z monitorem portu Serial.begin(9600); ) void pętli( ) ( //Odczytaj wartość progu z portu A0 //zwykle jest ona większa niż 500, jeśli jest sygnał if(analogRead(A0) > 500) ( //Sygnał z czujnika ruchu Serial.println("Występuje ruch! !!!"); ) else ( / /Brak sygnału Serial.println("Wszystko jest cicho...");

Szkic jest powszechnym testem działania czujnika ruchu; ma wiele wad, takich jak:

  1. Możliwe fałszywe alarmy, czujnik wymaga samoinicjalizacji w ciągu jednej minuty.
  2. Sztywne połączenie z monitorem portu, brak aktorów wyjściowych (przekaźnik, syrena, wskaźnik LED)
  3. Czas sygnału na wyjściu czujnika jest zbyt krótki; w przypadku wykrycia ruchu należy programowo opóźnić sygnał na dłuższy okres czasu.

Komplikując obwód i rozszerzając funkcjonalność czujnika, można uniknąć opisanych powyżej wad. Aby to zrobić, konieczne będzie uzupełnienie obwodu modułem przekaźnika i podłączenie przez ten moduł zwykłej lampy 220 V. Sam moduł przekaźnika zostanie podłączony do pinu 3 na płytce Arduino Nano. Zatem schemat:

Teraz czas na lekkie poprawienie szkicu testującego czujnik ruchu. Na szkicu zostanie wprowadzone opóźnienie wyłączenia przekaźnika, ponieważ sam czujnik ruchu ma zbyt krótki czas sygnału na wyjściu po uruchomieniu. Program implementuje 10-sekundowe opóźnienie po uruchomieniu czujnika. W razie potrzeby czas ten można zwiększyć lub zmniejszyć zmieniając wartość zmiennej Wartość opóźnienia. Poniżej szkic i film przedstawiający całą pracę zmontowany obwód:

/* * Czujnik PIR -> Arduino Nano * Czujnik PIR -> Arduino Nano * Czujnik PIR -> Arduino Nano * Moduł przekaźnika -> Arduino Nano */ //relout - pin (sygnał wyjściowy) dla modułu przekaźnika const int relout = 3 ; //prevMillis - zmienna do przechowywania czasu poprzedniego cyklu skanowania programu //interval - odstęp czasu odliczania sekund przed wyłączeniem przekaźnika unsigned long prevMillis = 0; int interwał = 1000; //DelayValue - czas utrzymywania przekaźnika w stanie włączenia int DelayValue = 10; //initSecond – Zmienna iteracji pętli inicjującej int initSecond = 60; //countDelayOff - licznik przedziałów czasowych statyczny int countDelayOff = 0; //trigger - flaga wyzwalacza czujnika ruchu static bool wyzwalacz = false; unieważnij konfigurację() ( // Standardowa procedura inicjalizacja portu do którego podłączony jest moduł przekaźnikowy //WAŻNE!!! - aby moduł przekaźnikowy pozostawał w stanie początkowo wyłączonym //i nie zadziałał podczas inicjalizacji, należy na port wejścia/wyjścia // wpisać WYSOKĄ wartość, co pozwoli uniknąć fałszywego „kliknięcia” i // zachować stan przekaźnika jaki był przed włączeniem całego obwodu do pracy pinMode(relout, OUTPUT);< initSecond; i ++) { delay(1000); } } void loop() { //Считать значение с аналогового порта А0 //Если значение выше 500 if(analogRead(A0) >digitalWrite(relout, WYSOKI); //Tutaj wszystko jest proste - czekamy na zakończenie 60 cykli (zmienna initSecond) //trwających 1 sekundę, w tym czasie czujnik „samoczynnie inicjuje” for(int i = 0; i//Zapisz w zmiennej currMillis //wartość milisekund, które upłynęły od rozpoczęcia //wykonania programu unsigned long currMillis = millis();

//Porównaj z poprzednią wartością milisekund //jeśli różnica jest większa niż podany przedział, to: if(currMillis - prevMillis > interwał) ( //Zapisz aktualną wartość milisekund do zmiennej prevMillis prevMillis = currMillis; // Sprawdź licznik opóźnienia porównując go z wartością okresu / /w którym przekaźnik powinien być utrzymywany w stanie ON if(countDelayOff >= DelayValue) ( ​​//Jeśli wartość jest równa to: //zresetuj flaga wyzwalacza czujnika ruchu = false; //Zresetuj licznik opóźnienia countDelayOff = 0; // Wyłącz przekaźnik digitalWrite(relout, HIGH); //Przerwij przerwanie pętli ) else ( //Jeśli wartość jest nadal mniejsza, następnie //Zwiększ licznik opóźnienia o jeden countDelayOff ++; //Utrzymuj przekaźnik w stanie włączenia digitalWrite(relout, LOW ) ) ) )

Program zawiera następującą strukturę:

bez znaku długi prevMillis = 0;

...

int interwał = 1000;

długi bez znaku currMillis = millis();

{

if(currMillis - prevMillis > interwał)

....

prevMillis = currMillis;

....

}

// Nasze operacje są zamknięte w treści konstrukcji Aby to wyjaśnić, postanowiono osobno skomentować ten projekt. Więc, ten projekt pozwala na wykonanie zadania równoległego w programie. Korpus konstrukcji jest aktywowany mniej więcej raz na sekundę, ułatwia to zmienna interwał . Po pierwsze, zmienna currMillis przypisana jest wartość zwracana przy wywołaniu funkcji milis() przypisana jest wartość zwracana przy wywołaniu funkcji. Funkcjonować zwraca liczbę milisekund, które upłynęły od początku programu. Jeśli różnica currMillis - poprzedniMillis pozwala na wykonanie zadania równoległego w programie. Korpus konstrukcji jest aktywowany mniej więcej raz na sekundę, ułatwia to zmienna większa od wartości zmiennej . Po pierwsze, zmienna oznacza to, że od rozpoczęcia wykonywania programu upłynęła już ponad sekunda i należy zapisać wartość zmiennej w zmienną poprzedniMillis zwraca liczbę milisekund, które upłynęły od początku programu. Jeśli różnica następnie wykonaj operacje zawarte w bryle konstrukcji. Jeśli różnica pozwala na wykonanie zadania równoległego w programie. Korpus konstrukcji jest aktywowany mniej więcej raz na sekundę, ułatwia to zmienna mniejsza niż wartość zmiennej

, wówczas pomiędzy cyklami skanowania programu nie minęła jeszcze sekunda, a operacje zawarte w bryle konstrukcji są pomijane.

Cóż, na końcu artykułu znajduje się wideo od autora:

Projekt ten dotyczy opracowania i udoskonalenia systemu zapobiegania/kontroli wszelkich prób infiltracji przez złodziei. Opracowane urządzenie zabezpieczające wykorzystuje system wbudowany (zawierający sprzętowy mikrokontroler wykorzystujący oprogramowanie typu open source oraz modem GSM) oparty na technologii GSM (Global System for Mobile Communications).

W domu można zainstalować urządzenie zabezpieczające. Czujnik interfejsu alarmu włamaniowego jest również podłączony do systemu bezpieczeństwa opartego na kontrolerze.
W przypadku próby penetracji system wysyła do właściciela wiadomość ostrzegawczą (na przykład SMS). telefon komórkowy lub do dowolnego wstępnie skonfigurowanego telefonu komórkowego w celu dalszego przetwarzania.

System bezpieczeństwa składa się z mikrokontrolera Arduino Uno oraz standardowego modemu SIM900A opartego na technologii GSM/GPRS. Cały układ może być zasilany dowolnym zasilaczem/akumulatorem 12V 2A.

Poniżej znajduje się schemat systemu bezpieczeństwa oparty na Arduino.

Obsługa systemu jest bardzo prosta i nie wymaga objaśnień. Po dostarczeniu zasilania system przechodzi w tryb gotowości. W przypadku zwarcia styków złącza J2 do żądanego użytkownika wysyłany jest zaprogramowany komunikat ostrzegawczy numer telefonu komórkowego. Do złącza wejściowego J2 można podłączyć dowolną czujkę włamania (taką jak bariera świetlna lub czujnik ruchu). Należy pamiętać, że sygnał aktywny-niski (L) na styku 1 złącza J2 aktywuje alarm antywłamaniowy.

Ponadto do systemu dodano opcjonalne urządzenie „alarmowe”. Uruchamia połączenie telefoniczne w momencie naciśnięcia przez użytkownika przycisku S2 (lub gdy inna jednostka elektroniczna zainicjuje alarm). Po naciśnięciu przycisku „zadzwoń” (S2) połączenie można zakończyć naciskając inny przycisk S3 – przycisk „zakończ”. Opcję tę można wykorzystać do wygenerowania alarmu „nieodebranego połączenia” w przypadku włamania.

Układ jest bardzo elastyczny, dzięki czemu można w nim zastosować dowolny modem SIM900A (i oczywiście płytkę Arduino Uno). Przed przystąpieniem do montażu prosimy o dokładne zapoznanie się z dokumentacją modemu. Dzięki temu proces wytwarzania systemu będzie łatwiejszy i przyjemniejszy.

Lista radioelementów

Oznaczenie Typ Określenie Ilość NotatkaSklepMój notatnik
Płyta Arduino

Arduino Uno

1 Do notatnika
Modem GSM/GPRSSIM900A1 Do notatnika
IC1 regulator liniowy

LM7805

1 Do notatnika
C1 100uF 25V1 Do notatnika
C2 Kondensator elektrolityczny10uF 16V1 Do notatnika
R1 Rezystor

1 kOhm

1 Do notatnika
LED1 PROWADZONY 1 Do notatnika
S1 PrzyciskZ fiksacją1

Dzisiaj porozmawiamy o tym, jak korzystać Arduino zbierać systemu bezpieczeństwa. Nasza „ochrona” będzie strzegła jednego obwodu i kontrolowała jedną syrenę.

Dla Arduino nie stanowi to problemu i jak widać z kodu programu i schematu urządzenia, w łatwy sposób można zwiększyć liczbę chronionych punktów dostępowych oraz liczbę urządzeń powiadamiających lub wskazujących.
System bezpieczeństwa można stosować do zabezpieczania zarówno dużych obiektów (budynków i konstrukcji), jak i małych przedmiotów (pudełek, sejfów), a nawet przenośnych walizek i walizek. Chociaż z tym ostatnim trzeba uważać, jeśli zainstalujesz system bezpieczeństwa na przykład w walizce, z którą decydujesz się podróżować, a na którymś lotnisku włączy się system ostrzegawczy, to myślę, że będziesz musiał z nim poważnie porozmawiać lokalne służby bezpieczeństwa :-)

Uproszczona zasada działania urządzenia jest następująca (rys. 1). Po włączeniu zasilania urządzenie przechodzi w tryb pracy i oczekuje na załączenie czuwania. Uzbrajanie i rozbrajanie odbywa się za pomocą jednego przycisku. Aby zwiększyć bezpieczeństwo, lepiej umieścić ten przycisk w chronionym obszarze (sejfie lub skrytce). Przed włączeniem trybu bezpieczeństwa należy lekko uchylić drzwi. Po włączeniu trybu bezpieczeństwa (naciśnij przycisk) obwód elektroniczny czeka, aż zamkniesz drzwi do pokoju (drzwi sejfu, pokrywę skrzynki itp.).

Na drzwiach (lub drzwiach) należy zainstalować wyłącznik krańcowy dowolnego typu, więcej o tym później. Zamknięcie (lub otwarcie) wyłącznika krańcowego poinformuje urządzenie, że chroniony obwód jest zamknięty, a urządzenie przejdzie w tryb bezpieczeństwa. O wejściu w tryb bezpieczeństwa system poinformuje Cię dwoma krótkimi sygnałami (tj alarmy samochodowe). W tym trybie urządzenie „łapie” otwarcie drzwi. Po otwarciu drzwi system czeka kilka sekund (wartość tę można regulować, w przypadku pomieszczeń około dziesięciu sekund, w przypadku skrzynki jedną lub dwie), aż tryb bezpieczeństwa się wyłączy; jeżeli tak się nie stanie, załączy się syrena. Algorytm i obwód zostały zaprojektowane w taki sposób, że wyłączenie sygnalizatora możliwe jest jedynie poprzez całkowity demontaż obudowy i wyłączenie zasilania.

Urządzenie systemu bezpieczeństwa bardzo proste (ryc. 2). Na podstawie tablicy Arduino. Wyłączniki krańcowe podłącza się jak zwykły przycisk, poprzez rezystory podciągające. Zatrzymam się osobno na przełącznikach końcowych. Są albo normalnie zamknięte, albo normalnie otwarte. Można włączyć zwykły przycisk jako wyłącznik krańcowy, tylko skok zwykłego przycisku jest bardzo duży, luz drzwiowy jest zwykle większy. Dlatego należy wymyślić jakiś przycisk do przycisku i tak go sprężynować, aby nie zerwać przycisku z drzwiami. Cóż, jeśli nie jesteś zbyt leniwy, możesz iść do sklepu i kupić wyłącznik magnetyczny (kontaktron) (ryc. 3), nie boi się kurzu i brudu.

Odpowiedni jest również wyłącznik krańcowy do alarmów samochodowych (ryc. 4). Należy zaznaczyć, że program jest napisany dla kontaktronu. Na zamknięte drzwi jego kontakt jest zamknięty. Jeśli użyjesz wyłącznika alarmu samochodowego, to gdy drzwi będą zamknięte, najprawdopodobniej będą otwarte i w odpowiednich miejscach w kodzie będziesz musiał zmienić 0 na 1 i odwrotnie.

Jako syrenę proponuję zastosować syrenę dźwiękową PKI-1 IVOLGA, produkowaną na Białorusi (ryc. 5). Napięcie zasilania 9 - 15 V, prąd roboczy 20 - 30 mA. Dzięki temu można go używać przy zasilaniu akumulatorowym. Jednocześnie „produkuje” 95 - 105 dB.

Przy takich cechach będzie brzmiał przez kilkadziesiąt minut z baterii Krona. Znalazłem go w Internecie za 110 rubli. Tam kontaktron z magnesem kosztuje około 30 rubli. Przełącznik alarmu samochodowego został zakupiony w częściach samochodowych za 28 rubli. Tranzystor KT315 można przyjąć dowolną literą lub zastąpić dowolnym nowoczesnym tranzystorem krzemowym małej mocy o odpowiedniej przewodności. Jeśli głośność jednej syreny nie jest wystarczająca (kto wie, może chcesz, aby była słyszalna z wielu kilometrów), możesz połączyć kilka syren równolegle lub wziąć mocniejszą, tylko w tym przypadku należy wymienić tranzystor mocniejszy (na przykład znany zespół tranzystorowy ULN2003). Jako złącza do podłączenia kontaktronu i syreny zastosowałem najprostsze złącza do urządzeń audio/video - cena na rynku radiowym to 5 rubli. dla pary.

Korpus urządzenia może być sklejony z tworzywa sztucznego lub sklejki; jeśli chroniony jest poważny przedmiot, lepiej zrobić go z metalu. Aby zwiększyć niezawodność i bezpieczeństwo, zaleca się umieszczanie baterii lub akumulatorów wewnątrz obudowy.

Aby uprościć kod programu, nie zastosowano elementów energooszczędnych, a baterie nie wytrzymują długo. Możesz zoptymalizować kod lub jeszcze lepiej, radykalnie go przerobić, korzystając z przetwarzania zdarzeń przerwania i trybu uśpienia MK. W tym przypadku moc z dwóch połączonych szeregowo akumulatorów kwadratowych (9 V) powinna wystarczyć na kilka miesięcy.

Teraz kod

// stałe
const int przycisk = 12; // przypięcie przycisku
const int gerkon = 3; // pin do kontaktronu
const int syrena = 2; // pin sterujący syreną
stała int dioda = 13; //kołek wskaźnika
// zmienne
int stan przycisku = 0; // stan przycisku
int stan stanu = 0; // stan kontaktronu
int N = 0; // licznik przycisków rozbrajania
unieważnij konfigurację() (
// sterowanie syreną i wskaźnikiem - wyjście
pinMode(syrena, WYJŚCIE);
pinMode(led, WYJŚCIE); // przycisk i kontaktron - wejścia
pinMode(gerkon, WEJŚCIE);
pinMode(przycisk, WEJŚCIE);
}
pusta pętla()
digitalWrite (led, WYSOKI);
while(buttonState= =0)( // poczekaj, aż naciśniemy przycisk
przyciskState = digitalRead(przycisk); // aby przejść do trybu bezpieczeństwa
}
digitalWrite(LED, NISKI);
stan przycisku = 0; // zresetuj wartość przycisku
while(gerkonState= =0)( // pętla, aż zamkniemy drzwi

}
opóźnienie (500); // :-)
digitalWrite(syrena, WYSOKI); // Kod
opóźnienie (100); //wskazania
digitalWrite(syrena, LOW); // włączać
opóźnienie(70); // tryb
digitalWrite(syrena, WYSOKI); // bezpieczeństwo
opóźnienie (100); // alarm
digitalWrite(syrena, LOW); // dźwięk
while(gerkonState= =1)( // poczekaj, aż drzwi się otworzą
gerkonState = digitalRead(gerkon);
}
for (int i=0; tj<= 5; i++){ // 7,5 секунды на нажатие
ButtonState = digitalRead(przycisk); //tajny przycisk
if (buttonState = = HIGH) ( // śledź nasze - czyjeś
N=N+1;
}
opóźnienie (1500); // sekretna funkcja :-)))
}
if (N > 0) ( // najważniejsza rzecz
digitalWrite(syrena, LOW); //nie włączaj syreny
}
w przeciwnym razie(
digitalWrite(syrena, WYSOKI); // lub włącz syrenę
}
digitalWrite (led, WYSOKI); // włącz wskaźnik N = 0;
stan przycisku = 0;
opóźnienie (15000); // przypomnienie dla opornych, którzy lubią
digitalWrite(LED, NISKI); // naciskaj przyciski bez opóźnienia przerwania (1000);

Wiosnie, jak wiadomo, towarzyszą najróżniejsze zaostrzenia, a teraz główne „zaostrzenie” wypełzło ze swoich dziur na ulicę, aby przywłaszczyć sobie to, co do niej nie należy. Oznacza to, że temat ochrony Twojego mienia staje się coraz bardziej aktualny niż kiedykolwiek.
Na stronie znajduje się już kilka recenzji domowych. Są oczywiście funkcjonalne, ale każdy je ma cecha ogólna- zależność od gniazdka. Jeśli nie stanowi to problemu w przypadku nieruchomości, w której prąd jest już dostarczony, to co z nieruchomością, w której gniazdko jest daleko lub okolica jest całkowicie pozbawiona prądu? Ja zdecydowałem się na inną drogę – złożyć urządzenie o długiej żywotności, możliwie najprostsze i niezależne od zasilania sieciowego, które będzie cały czas uśpione, a gdy włamią się złodzieje, uruchomi się i zadzwoni na telefon właściciela, sygnalizacja za pomocą prostego wywołania alarmowego.

Przejrzyj przedmioty

Kupiony:
1. Płyta rozwojowa jednostronny 5x7 cm: getinaks- Lub włókno szklane
* - włókno szklane jest znacznie lepszej jakości niż getinax.
2. Moduł Neoway M590 - z anteną na PCB -
3. Arduino Pro Mini „RobotDyn” ATmega168PA 8 MHz 3,3 V -
4. Płyta kontrolna ładowania i rozładowania litu -

Wydobyte z ruin cywilizacji:
1. Stojaki na tablice wycinane z obudów urządzeń - 6 szt.
2. Płaska bateria litowa 1300 mAh
3. Zszywki służące do mocowania kabla do ściany
4. Gumka biurowa
5. Drut miedziany Grubość 1,5 mm
6. Obudowa przyrządów z lokalnego rynku radiowego - 1.5$
7. Para diod LED różne kolory(zrobione z odtwarzacza VHS)
8. Antena i przycisk z nasadką (pobrane z routera Wi-Fi)
9. 4-pinowa listwa zaciskowa (pobrana ze ściemniacza)
10. Złącze zasilania (wyjęte ze starej ładowarki do 18650)
11. Złącze 6-pinowe (pobrane z napędu DVD)
12. Móc(na przykład z kawy)

Arduino Pro Mini „RobotDyn” Atmega 168PA 3,3 V 8 MHz

Dane techniczne:
Mikrokontroler: ATmega168PA
Bezpośrednie napięcie robocze: 0,8–5,5 V
Napięcie robocze poprzez stabilizator LE33: 3,3 V lub 5 V (w zależności od modelu)
Temperatura pracy:-40°C… 105°C
Napięcie wejściowe: 3,35–12 V (model 3,3 V) lub 5–12 V (model 5 V)
Wejścia/wyjścia cyfrowe: 14 (z czego 6 można wykorzystać jako wyjścia PWM: 3, 5, 6, 9, 10 i 11)
Wejścia analogowe: 6
Liczniki czasowe: dwa 8-bitowe i jeden 16-bitowy
Tryby oszczędzania energii: 6
Prąd stały przez wejście/wyjście: 40 mA
Pamięć flash: 16 KB (2 używane na bootloader)
BARAN: 1KB
Pamięć EEPROM: 512 bajtów
Zasób zapisu/kasowania pamięci: 10 000 Flash/100 000 EEPROM
Częstotliwość zegara: 8 MHz (model 3,3 V) lub 16 MHz (model 5 V)
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
I2C: A4 (SDA) i A5 (SCL)
UART TTL: 0 (odbiór) i 1 (TX)
Arkusz danych:

Wybór padł na tę atmegę zupełnie przez przypadek. na jednym forum, na którym dyskutowano o projektach energooszczędnych, w komentarzach pojawiała się rada, aby zastosować 168. atmegę.
Musiałem jednak majstrować, aby znaleźć taką płytkę, ponieważ dość często wszystkie partie były wypełnione 328 atmegami o częstotliwości 16 MHz, działającymi od 5 V. W moim projekcie takie cechy były od początku zbędne i niewygodne, a poszukiwania stały się bardziej skomplikowane.
W rezultacie natknąłem się na 3,3-woltową wersję Pro Mini na Atmega 168PA w serwisie eBay i to nie tylko prostą chińską, ale pod marką RobotDyn od rosyjskiego programisty. Tak, na początku, podobnie jak Ty, również miałem ziarno wątpliwości. Ale na próżno. Kiedy projekt był już zmontowany, a AliExpress wprowadził obowiązkową płatną dostawę tanich towarów (po czym paczki zaczęły gubić się znacznie częściej), zamówiłem później zwykłego Pro Mini Atmega168 (bez PA) 3,3V 8MHz. Poeksperymentowałem trochę z trybami oszczędzania energii na obu płytach, wrzucając do każdej specjalny szkic, który zanurzał mikrokontroler w trybie maksymalnego oszczędzania energii, i oto co wyszło:
1) Arduino Pro Mini „RobotDyn”: ~250µA
2) Arduino Pro Mini „NoName”: po podłączeniu zasilania do stabilizatora napięcia (pin RAW) i przylutowaniu diody LED, pobór prądu wynosi ~3,92mA




- jak rozumiesz różnica w zużyciu energii jest prawie 16-krotna, a wszystko dlatego, że Pro Mini firmy NoName korzysta z kombinacji Atmega168+, z której sam MK zjada tylko 20uA prąd (sprawdzałem to osobno), całą resztę obżarstwa załatwia liniowy przetwornik napięcia AMS1117 - datasheet tylko to potwierdza:


W przypadku płytki od RobotDyn zestawienie jest nieco inne - jest to Atmega168PA+ - tutaj zastosowano inny stabilizator LDO, którego charakterystyka pod względem oszczędności energii okazała się przyjemniejsza:


Nie wylutowywałem go, więc nie jestem w stanie określić, ile prądu pobiera Atmega168PA w czystej postaci. W tym przypadku miałem dość ~250µA przy zasilaniu przez firmę Nokia bateria litowa. Jeśli jednak odlutujesz AMS1117 od płyty głównej NoName, to zwykły ATmega168 w czystej postaci, jak powiedziałem powyżej, zużywa 20uA.
Diody wraz z zasilaczem można stłuc czymś ostrym. To nie jest problem. Stabilizator został wylutowany suszarką do włosów. Jednak nie każdy ma suszarkę do włosów i umiejętności, aby z nią pracować, więc obie powyższe opcje mają prawo istnieć.

Moduł Neoway M590E

Dane techniczne:
Częstotliwości: EGSM900/DCS1800 Dwuzakresowy lub GSM850/1900 lub czterozakresowy
Wrażliwość:-107 dBm
Maksymalna moc nadawania: EGSM900 klasa 4 (2 W), DCS1800 klasa 1 (1 W)
Prąd szczytowy: 2A
Prąd roboczy: 210 mA
Prąd uśpienia: 2,5 mA
Temperatura pracy:-40°C… +85°C
Napięcie robocze: 3,3 V…4,5 V (zalecane 3,9 V)
Protokoły: GSM/GPRS Phase2/2+, TCP/IP, FTP, UDP itp.
Internet: KLASA GPRS 10
Arkusz danych:

Najtańszy moduł GSM, jaki można znaleźć na rynku, jest zazwyczaj używany, nie zawsze lutowany ze sprzętu przez zręczne chińskie ręce. Dlaczego nie zawsze zręczny? Tak, wszystko przez wylutowanie suszarką - często ludzie otrzymują te moduły ze zwartym plusem i minusem, co jest jedną z przyczyn ich niesprawności. Dlatego pierwszym krokiem jest sprawdzenie styków mocy pod kątem zwarcia.

Notatka. Chciałbym zwrócić uwagę na osobną, ważną moim zdaniem kwestię, że moduły te mogą być wyposażone w okrągłe złącze koncentryczne do anteny, co pozwala osobno zamówić poważniejszą antenę i podłączyć ją do modułu bez tańca z tamburynem. Mogą też zostać dostarczone bez tego złącza. To tak, jeśli mówimy o najtańszych zestawach. Jeśli nie chcesz liczyć na szczęśliwy wypadek to są nieco droższe zestawy, w których występuje to złącze + w zestawie antena zewnętrzna na płytce tekstolitowej.

Moduł ten jest też kapryśny jeśli chodzi o zasilanie, gdyż w szczytowych momentach pobiera aż do 2A prądu, a dioda dołączona do zestawu zdaje się być zaprojektowana tak, aby obniżać napięcie z 5V (dlatego na samej płytce jest napisane 5V ) do 4,2 V, ale sądząc po skargach ludzi, stwarza to więcej problemów niż jest tego warte.
Załóżmy, że zmontowałeś już ten moduł i zamiast diody wlutowano zworkę, ponieważ nie będziemy podawać do niego napięcia 5 V, ale będziemy go zasilać bezpośrednio z akumulatora litowego, co mieści się w dopuszczalnym zakresie limity napięcia 3,3-4,2 V.
Trzeba będzie jakoś podłączyć go do komputera i sprawdzić funkcjonalność. W tym wypadku lepiej wcześniej kupić taki dla siebie - za jego pośrednictwem będziemy komunikować się z modułem i płytkami Arduino poprzez interfejs szeregowy UART (USART).
Połączenie pokazano poniżej na obrazku (narysowałem to najlepiej jak potrafię):
Modem TX >>> Konwerter RX
modemu RX<<< TX конвертера
Plus baterii - plus modemu
Minus baterii litowej łączy się z GND modemu i GND konwertera
Aby uruchomić modem, przyłóż pin BOOT przez rezystor 4,7 kOhm do GND


W międzyczasie uruchom program na swoim komputerze. Zwróć uwagę na ustawienia:
1) Wybierz port COM, do którego podłączony jest konwerter TTL, w moim przypadku jest to COM4, ​​u Ciebie może być inaczej.
2) Wybierz prędkość przesyłania danych. (Tu jest niuans, bo same moduły można skonfigurować na różne prędkości, najczęściej 9600 bodów lub 115200 bodów. Tutaj trzeba to dobrać empirycznie, dobierając jakąś prędkość, podłączając się i wysyłając polecenie AT, jeśli wyjdą pęknięcia w odpowiedzi, to się rozłączy, wybierze inną prędkość i powtórzy polecenie I tak dalej, aż odpowiedź będzie OK).
3) Wybierz długość pakietu (w tym przypadku 8 bitów), bit parzystości wyłączony (brak), bit stopu (1).
4) Pamiętaj, aby zaznaczyć pole +CR, a wtedy do każdego polecenia, które wysyłamy do modułu na końcu, automatycznie będzie dodawany znak powrotu karetki - moduł rozumie tylko polecenia z tym znakiem na końcu.
5) Połączenie, tutaj wszystko jest jasne, kliknij i możemy pracować z modułem.

Jeżeli klikniesz na „Połączenie”, a następnie uruchomisz moduł poprzez przyłożenie BOOT przez rezystor 4,7K do masy, to najpierw na terminalu wyświetli się napis „MODEM:STARTUP”, a po chwili napis „+PBREADY”, co oznacza, że ​​numer telefonu został przeczytany w książce, nawet jeśli może być pusty:

Pod tym spoilerem znajdują się polecenia AT z przykładami

Wypisujemy polecenie AT - w odpowiedzi moduł wysyła nam nasze polecenie, ponieważ tryb echa jest włączony i OK:

Sprawdźmy stan modemu komendą AT+CPAS - odpowiedzią znów jest nasza komenda +CPAS: 0 i OK.
Wartość 0 oznacza, że ​​moduł jest gotowy do pracy, ale w zależności od sytuacji mogą występować inne numery, np. 3 – połączenie przychodzące, 4 – w trybie połączenia, 5 – stan uśpienia. Nie znalazłem informacji o 1 i 2.

Zmiana szybkości transmisji danych poprzez UART odbywa się za pomocą polecenia AT+IPR=9600 - to tak, jeśli potrzebna jest prędkość 9600. Jeśli coś innego, podobnie jak np. AT+IPR=19200 lub AT+IPR=115200.

Sprawdźmy sygnał sieci. AT+CSQ pojawia się odpowiedź +CSQ: 22,1 - wartość przed przecinkiem ma zakres 0...31 (115...52 dBl) - jest to poziom sygnału, im wyższy, tym lepiej. Ale 99 oznacza jego brak. Wartość po przecinku to jakość sygnału 0...7 - tutaj jest odwrotnie, im niższa liczba, tym lepiej.

Wyłączmy tryb echa wysyłając polecenie ATE0, aby zduplikowane polecenia nie przeszkadzały. Tryb ten włącza się ponownie komendą ATE1.

Zobacz wersję oprogramowania AT+GETVERS



Te i wiele innych poleceń można wyświetlić

Wyrównywanie desek

O ile lutowanie Pro Mini do płytki prototypowej nie jest trudne, to z modułem GSM sytuacja jest nieco bardziej skomplikowana, gdyż jego grzebień stykowy znajduje się tylko z jednej strony, a jeśli tylko go przylutujesz, to druga strona płytki po prostu wisi w powietrzu. Następnie ponownie musiałem wywiercić na oko dodatkowe 3 otwory w pobliżu trzech rogów deski. Następnie zamaskowano obszary wokół każdego z otworów. Dla wygody odłączone przewody od grzebienia umieściłem na płytce stykowej bezlutowej (białej) i instalując na nich płytkę modułu GSM, przylutowałem je normalnie:

Później musiałem zrobić kolejny otwór, w moim przypadku na literę „I”, gdzie jest napisane „Made In China”, od krawędzi deski.


Okazało się, że dodany styk, czyli w istocie GND, został umiejscowiony obok GND płytki Pro Mini i w ten sposób możliwe stało się połączenie masy modułu GSM i Pro Mini za pomocą kropli lutowia (długi pin na środku i pin Pro Mini po jego prawej stronie) - zaznaczyłem je strzałkami. Oczywiście okazało się trochę krzywe, ale teraz trzyma się bezpiecznie:



Pomiędzy płytkami zostało trochę wolnego miejsca - w nim umieściłem litową płytkę kontrolującą ładowanie wyładowań z wlutowanym fabrycznie złączem microUSB i wlutowanymi przewodami.

Chusta mieści się tam bardzo ciasno, a blask diod umieszczonych z boku będzie doskonale widoczny przez niewielki otwór w etui.



Stojaki na karty

Aby bezpiecznie zamontować płytkę wewnątrz obudowy, musiałem spędzić kilka dni na zastanawianiu się, jak można to wdrożyć. Opcja z klejem termotopliwym nie była brana pod uwagę z kilku powodów - mógłby spaść, zdeformować się, a co najważniejsze, konstrukcja byłaby trudna do demontażu.
Doszedłem do wniosku, że najprostszą i najwłaściwszą opcją byłoby tutaj użycie stojaków, których oczywiście nie miałem. Było jednak kilka niedziałających ładowarek, z których wycięto jedną długą podstawkę z gwintem na wkręty samogwintujące. Każdy stojak został przecięty na pół i spiłowany do około 9,5 mm - to właśnie na tej wysokości akumulator znajdujący się pod deską ma wystarczający margines około 2 mm - robi się to tak, aby przylutowane styki płytki wraz z jej końcówkami nie nie dotykaj go i tak, aby można było włożyć między nie kawałek pianki w celu unieruchomienia.
Jeśli chodzi o mocowanie płytki bezpośrednio do obudowy, tutaj wyciąłem cztery paski z puszki po kawie, wywierciłem na ich końcach otwór, a następnie przymocowałem je na tych samych śrubach, które wkręca się w stojaki. Zobacz na zdjęciu poniżej jak to wygląda.
Następnym krokiem jest przykręcenie kilku stojaków po drugiej stronie deski, czyli od góry, tak aby po zamknięciu obudowy pokrywa lekko opierała się na tych stojakach, tworząc dodatkowe mocowanie. Nieco później w tym celu natknąłem się na obudowę od sowieckiego radia propagandowego (gdyby zostało znalezione wcześniej, wziąłbym stąd wszystkie stojaki), gdzie znalazłem kilka mniej więcej odpowiednich wysokości, ale najpierw wywierciłem je na środku wiertłem pod wkręty samogwintujące Następnie je odpiłowałem i również wykończyłem pilnikiem, usuwając nadmiar. Tutaj wpadłem na jedną subtelność - na zdjęciu widać, że jeden biały stojak jest przykręcony do płyty getinaks od krawędzi, a drugi biały jest przykręcony bezpośrednio do płyty modułu, ponieważ od jednej krawędzi płytka modemu całkowicie zakrywa dolną płytę, a od przeciwnej krawędzi - wręcz przeciwnie - dolna już wystaje. Jednocześnie w obu płytach trzeba było wywiercić dodatkowe otwory, aby łby wkrętów mogły swobodnie przechodzić.
I na koniec pozostaje upewnić się, że deska jest zawsze równoległa do korpusu - zszywki służące do mocowania przewodów i kabli na ścianie doskonale sprawdzają się w tym zadaniu; wcześniej usunąłem z nich gwoździe. Wsporniki dobrze przylegają do płytki wklęsłą stroną bez żadnych dodatkowych urządzeń, jedyne co jest na prawo od karty SIM, to szerokość wspornika okazała się za duża i też musiałem go przeszlifować.
Wszystkie szczegóły zostały skorygowane naocznie i eksperymentalnie, poniżej znajduje się zdjęcie wszystkich powyższych:



Złącza. Diody LED. Przycisk.

Ponieważ skończył mi się grzebień, musiałem usunąć 6-pinowe złącze z płyty napędu DVD, które następnie przylutowałem do Pro Mini, aby ułatwić flashowanie płyty. Obok przylutowałem okrągłe złącze (Nokiev 3,5mm) do ładowania litu.

Korpus złącza 6-pinowego został lekko wykończony pilnikiem, gdyż jego krawędzie wystawały nieco ponad korpus. Gniazdo ładowania idealnie dopasowuje się do ścianki obudowy.

Z drugiej strony płytki przylutowałem przycisk do restartu urządzenia oraz dwie diody do debugowania oprogramowania - czerwona dioda jest podłączona do modułu GSM, druga zielona dioda jest podłączona do 10-tego pinu Pro Mini - jest łatwiej mi debugować program.

Modyfikacja baterii

Płaska bateria Nokii w telefonach Nokia jest nie mniej powszechna niż 18650, ale wielu po prostu odmawia jej użycia ze względu na niedogodności związane z podłączaniem styków, które są zagłębione głęboko w samej baterii. Lutowanie ich jest niepożądane, dlatego zdecydowano się zastosować zaproponowaną przez nich metodę, a mianowicie samodzielne wykonanie bloku stykowego z gumki biurowej i drutu miedzianego (o grubości 1,5 mm).
Najpierw przebiłem kawałek gumki dwoma drutami z odciętymi końcami i dopasowałem je do styków akumulatora tak, aby odległość między nimi się pokrywała,
Zagiąłem końce, ocynowałem je lutownicą i lekko odciągnąłem za długie końce, tak aby powstałe styki zagłębiły się w gumkę.



Próba na baterii:

Można zabezpieczyć blok styków gumką recepturką lub owinąć niebieską taśmą izolacyjną i tak też zrobiłem.

Montaż.

Zasadnicza część pracy jest już wykonana, pozostaje tylko złożyć i nagrać.
Pomiędzy akumulator a płytkę włożyłem kawałek gumy piankowej, aby później nie przesuwał się wewnątrz obudowy. Dodatkowo przylutowałem kondensator 2200 µF do zasilania modułu.

Gdy ładowanie jest podłączone:

Rama. Zewnętrzna listwa zaciskowa.

Etui było dostępne na lokalnym rynku radiowym za około 1,5 dolara w przeliczeniu na dolary, a jego wymiary to 95 x 60 x 25 mm, czyli prawie wielkość paczki papierosów. Wywierciłem w nim kilka otworów. Najpierw dla 4-pinowej listwy zaciskowej, pobranej z niedziałającego ściemniacza.
Całkowicie uwolniłem dwa zewnętrzne styki od śrub za pomocą podkładek, wywierciłem otwory na dłuższe śruby, które utrzymają całą listwę zaciskową na korpusie. Na samej obudowie oczywiście dwa zewnętrzne otwory będą duże, a dwa środkowe mniejsze - będą miały przewleczone styki, z czego jeden będzie podłączony do VCC Pro Mini, a drugi do pinu 2.

Wiercenie otworów, choć na pierwszy rzut oka proste, jest jednak nie mniej pracochłonne, bardzo łatwo je przeoczyć, dlatego zrobiłem to najpierw wiertłem o mniejszej średnicy, potem większym.

Na przycisk takt wybrałem nasadkę z lekko wklęsłym wierzchołkiem, aby łatwo było do niego sięgnąć zapałką lub spinaczem przez wąski otwór w etui.

Płytka w obudowie z podłączonym kablem konwertera USB-TTL:

O antenie.
Antena, jak być może zauważyłeś w całej recenzji, ciągle się zmieniała, gdy eksperymentowałem z różnymi antenami domowej roboty. Początkowo na płytce modułu znajdowało się okrągłe złącze koncentryczne, jednak przy piątym użyciu do anteny zewnętrznej po prostu się rozpadło, więc należy pamiętać, że jest wątłe. W efekcie wyrwałem antenę na PCB ze starego routera i przylutowałem ją do płytki modułu, bo... łapie siatkę trochę lepiej niż sprężyna i drut.

Cóż, całkowicie zmontowany z podłączonym ładowaniem wygląda tak:

Test. Jak to działa:

Oprócz testów z antenami sprawdziłem jak alarm będzie się zachowywał na zewnątrz przy -15 mrozie. Aby to zrobić po prostu włożyłem całe wnętrze do pojemnika i zostawiłem na noc na balkonie, alarm nie włączył się, przyczyna okazała się w zasadzie oczywista - lit nie lubi mrozu. Potwierdził to kolejny test, gdzie akumulator zostawiłem w domu, a płytkę wyniosłem na zewnątrz długimi kablami i zostawiłem tak na jeden dzień na tym samym mrozie - działała jak gdyby nic się nie stało. Natomiast dziwne by było, gdyby alarm nie działał, bo... W kartach katalogowych Atmegi, modułów i kwarcu dopuszczalne temperatury pracy wynoszą do -40 stopni.

Zasada działania zorganizowana jest w oparciu o przerwanie zewnętrzne, początkowo pin 2 jest zwarty do VCC i tym samym na wyjściu utrzymywana jest logiczna 1, a sterownik śpi. Gdy tylko styk zostanie zerwany i na pinie 2 pojawi się 0, mikrokontroler budzi się, opuszcza 3-ci pin (do którego podłączony jest BOOT modemu przez rezystor) do masy - moduł uruchamia się, MK okresowo odpytuje moduł gotowości, a gdy tylko złapie sieć, natychmiast wysyła połączenie na podany w kodzie numer telefonu właściciela. Po odrzuceniu połączenia urządzenie wyłącza się nie wysyłając już żadnych niekończących się połączeń, co jest problemem wielu chińskich alarmów.

Dodatkowe informacje

#włączać #włączać // Biblioteka oprogramowania UART SoftwareSerial gsm(7, 6); // RX(7), TX(6) void wakeUp()() // pusta obsługa przerwań /////////////////////////// /////////////// 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(); // укладываем контроллер спать } }

Schemat obwodu (bez karty sterującej ładowaniem i rozładowaniem)



Wnioski i przemyślenia. Plany.

Alarm jest używany na daczy, jestem zadowolony z pracy, jednak wraz z dalszymi badaniami AVR pojawia się coraz więcej pomysłów na dalsze modyfikacje. Arduino ze swoim pseudojęzykowym Wiringiem naprawdę mnie zdenerwowało, ponieważ... W pracy odkryto jeden nieprzyjemny moment. Kiedy użyłem funkcji portu digitalWrite(); lub tryb pin(); - z jakiegoś powodu moduł GSM bardzo często się zawieszał. Ale warto było je zastąpić sztuczkami takimi jak DDRB|=(1<Dopiero operacja bezpośredniego dostępu do portów sprawiła, że ​​urządzenie działało zgodnie z przeznaczeniem.

O oszczędzaniu energii...
Zmontowane urządzenie pracowało pełne cztery miesiące bez ładowania i nadal działa, chociaż bardziej słuszne byłoby powiedzenie „uśpiony”. Można to sprawdzić, po prostu uruchamiając ponownie komputer za pomocą białego przycisku. Przy poborze prądu 250 μA (przez stabilizator LE33) i akumulatorze ~1430 mAh, choć ok, ze względu na nowość akumulatora, zaokrąglimy to w górę do 1000 mAh, okazuje się, że urządzenie potrafi spać przez około 5,5 miesiąca bez ładowania. Jeśli nadal usuniesz stabilizator, czas działania można bezpiecznie pomnożyć 10 razy. Ale w moim przypadku nie ma takiej potrzeby, bo i tak saldo z karty SIM trzeba wydać raz na trzy miesiące, przy okazji można sprawdzić i naładować urządzenie.
Przykład oszczędzania energii podany w recenzji jest daleki od limitu, ponieważ sądząc po informacjach z datasheet, można obniżyć częstotliwość taktowania mikrokontrolera (odbywa się to poprzez włożenie bezpieczników) do 1 MHz i przy podaniu napięcia 1,8 V pobór w trybie aktywnym spadnie poniżej paska 1 µA . Bardzo miło! Ale jeśli MK jest taktowany z wewnętrznego oscylatora RC, pojawi się inny problem - powietrze UART zostanie zatkane śmieciami i błędami, szczególnie jeśli sterownik jest podgrzewany lub chłodzony.

Po zakończeniu...
1) Zwykły drut zainstalowany do zerwania nie jest zbyt wygodny, planuję poeksperymentować z czujnikiem Halla i kontaktronem, choć o tym drugim mówią, że nie jest zbyt niezawodny, ponieważ styki w nim mogą się sklejać.
2) Przydałoby się dodać możliwość zmiany „numeru właściciela” bez udziału komputera i flashowania go. Będziesz musiał pracować z EEPROM.
3) Spróbuj przerwać od timera watchdoga, ale nie tylko z ciekawości, ale po to, aby mikrokontroler co jakiś czas sam się budził, mierzył napięcie akumulatora i wysyłał wynikową wartość SMS-em, żeby wiedzieć, jak niski jest poziom naładowania akumulatora.
4) Panel słoneczny może całkowicie wyeliminować potrzebę ładowania urządzenia; będzie to szczególnie prawdziwe w przypadku akumulatorów o małej pojemności.
5) Już od dawna chciałem kupić akumulatory LiFePo4, które według opinii dobrze znoszą mróz, jednak gdy szukałem odpowiedniej partii, wiosna już spokojnie przyszła.
6) Pracuj nad elementem estetycznym

Którego Pro Mini kupić?
Jeśli nie masz suszarki do włosów to Pro Mini „RobotDyn” Atmega168PA 3,3V, odetnij diodę LED czymś ostrym i masz ~250 µA.
Jeśli masz suszarkę do włosów, to dowolną płytkę, przylutuj stabilizator i diodę LED do zasilania - otrzymasz ~20 µA poboru prądu.

To wszystko na razie, mam nadzieję, że recenzja była interesująca i przydatna.

Planuję kupić +174 Dodaj do ulubionych Recenzja przypadła mi do gustu +143 +278