Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Ide o to, aby ste dostali temperamentnú sms z domu mojich otcov.
Nič fantastické, len rýchle zostavenie dielov.
Časti sú:
- Arduino kompatibilná s doskou radiča Geekcreit® ATmega328P Nano V3
- Rozširujúca doska DIY NANO IO Shield V1. O pre Arduino
- Hodinový modul RTC IIC / I2C v reálnom čase založený na DS1307 a DS18b20
- SIM800L Štvorpásmový GSM / GPRS
- Mini menič DC-DC LM2596 nastaviteľný modul zdroja napájania
- Teplota termistora NTC MF52AT
Najprv veľa od čítania a hľadania.
Predtým, ako konečne použijem Geekcreit® Nano, testujem všetky diely pomocou Arduino Uno.
Krok 1: Spustite SIM800l
Jedným z hlavných bodov je výkon Sim800L.
Používam menič DC-DC LM2596 Mini, upravený na 3,7 voltov a samostatné napájanie.
Na testovanie pripojenia pomocou príkazov AT+ je táto strana veľmi použiteľná:
Quickstart SIM800 (SIM800L) s Arduino
Pomocou príkazu Zakázať kód PIN pomocou modemu GSM v príkazoch som získal kód PIN sim.
Ďalšia úvaha, ktorá knižnica. Internet ponúka rôzne riešenia.
Moje riešenie je knižnica od Mattias Aabmets: AspenSIM800
Jeho skúška: Send_SMS.ino použil I ako základný program a jeden po druhom spájal všetky ostatné časti dohromady.
Pin Tx a Rx pin kódujú:
RX_PIN 10 pre Arduino. Musí byť pripojený k TX pinu modulu SIM800. TX_PIN 11 Arduina. Musí byť pripojený k kolíku RX modulu SIM800
Vždy je dobré prečítať si súbory *.ccp a *.h v knižniciach.
Obsahuje veľa zaujímavých rád a znalostí.
Krok 2: Začnite pracovať so snímačom RTC DS1307 so snímačom DS18B20
Použil som túto bočnú stránku: simtronyx - blog pre DS1307 a DS18B20.
Hodiny majú pripojenie na zbernicu I2C a to pre Arduino Uno: A4 (SDA) - A5 (SCL)
DS18B20 som pripojil k D3.
Čítal som, že v SMS nemôžete odoslať iba plaváky ako reťazec, takže som musel preložiť plaváky na reťazec.
Našiel som tento útržok kódu, ktorý som našiel:
n
MyString1 = String (currentTemp, 2); // Previesť float na String
MyString1 = (MyString1 + "C - teplota miestnosti:)");
// tu začína konverzia reťazca na char
// Dĺžka (s jedným znakom navyše pre nulový terminátor)
int str_len1 = MyString1.length () + 1; // Pripravte pole znakov (vyrovnávacia pamäť)
char char_array1 [str_len1]; // Skopírujte to
MyString1.toCharArray (char_array1, str_len1); // konvertovanie reťazca na char ju končí
Budem úprimný, nechápem, ako to funguje, ale funguje to.
Krok 3: Začnite pracovať s termistorom NTC MF52AT
Predtým som pracoval s termistorom, takže to bola jednoduchá časť.
Ale aj tu môžete nájsť rôzne riešenia.
V záverečnom kóde môžete nájsť ten môj.
Nájdete v nej aj preklad Pláva na reťazec.
Na termistor pripojte nejaký drôt a odpor 10 kOhm.
Krok 4: Nechajte všetko spolupracovať
Napísal som teda všetky časti programu spoločne.
Teraz som musel zistiť, ako odosielať jednu SMS každý deň v rovnakom čase.
Čítal som o rôznych myšlienkach, niektoré s TimerAlarm a iným prístupom.
Na fóre arduino som však našiel jednoduché riešenie:
if (now.hour () == 8 && now.minute () == 00 && now.second () == 59)
{
SIM.smsSend (addr, char_array); // termistor
oneskorenie (500); SIM.smsSend (addr, char_array1); // DS18B20}
Ale prečo teraz.sekunda = 59, pretože odosiela celú minútu SMS. Mne to robí, ale vyskúšajte si to sami.
Po nejakom teste som nahral program do Geekcreit® Nano.
Možno to nie je najlepšie písanie programu:), ale robí to požadované.
Pretože Geekcreit® ATmega328P Nano má určité problémy s Arduino IDE, nahrávam pomocou terminálu (Linux Mint) USBtinyisp pomocou tohto: avrdude -c usbtiny -p atmega328p -U flash: w: SomeHexFile.hex
Krok 5: Fungovalo to
Áno, vyšlo to a je to umiestnené v dome.
Každý deň o 6:00 mi príde SMS s teplotou.