Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Idee on saada minu isade majast temperatuurilmsms.
Pole midagi väljamõeldud, vaid osade kiire kokkupanek.
Osad on:
- Geekcreit® ATmega328P Nano V3 kontrolleri ühilduv Arduino
- DIY NANO IO Shield V1. O laiendusplaat Arduino jaoks
- DS1307 põhinev RTC IIC / I2C reaalajas kella moodul ja DS18b20
- SIM800L neljaribaline GSM / GPRS
- LM2596 Mini DC-DC muundur Reguleeritav astmelise toiteallika moodul
- Termistori NTC MF52AT temperatuur
Kõigepealt palju lugemisest ja otsimisest.
Kuna ma lõpuks kasutan Geekcreit® Nano, katsetan kõiki osi Arduino Unoga.
Samm: pange SIM800l tööle
Üks peamine asi on Sim800L võimsus.
Kasutan LM2596 Mini DC-DC muundurit, reguleeritud 3,7 voldile ja eraldi toiteallikat.
Ühenduse testimiseks AT+ käskudega on see külg väga kasutatav:
SIM -800 (SIM800L) kiire käivitamine Arduino abil
Kui keelate PIN -koodi, kasutades gsm -modemit käskluste ajal, sain sim -pin -koodi kasutada.
Järgmine kaalutlus, milline raamatukogu. Internet pakub erinevaid lahendusi.
Minu lahendus on Mattias Aabmetsa raamatukogu: AspenSIM800
Tema näide: Send_SMS.ino kasutas I põhiprogrammina ja ühendas ükshaaval kõik ülejäänud osad kokku.
Tx pin ja Rx pin on kood:
RX_PIN 10 Arduino'st. Peab olema ühendatud SIM800 mooduli TX -tihvtiga. Arduino TX_PIN 11. Peab olema ühendatud SIM800 mooduli RX kontaktiga
Alati on hea mõte lugeda raamatukogudes *.ccp ja *.h faile.
Need sisaldavad palju huvitavaid näpunäiteid ja teadmisi.
2. samm: pange RTC DS1307 koos DS18B20 anduriga tööle
Ma kasutasin seda külge: simtronyx - ajaveeb DS1307 ja DS18B20 jaoks.
Kellal on I2C siiniühendus ja see on mõeldud Arduino Uno jaoks: A4 (SDA) - A5 (SCL)
DS18B20 I ühendati D3 -ga.
Lugesin, et SMS -iga ei saa Floats ainult Stringi saata, seega pidin ujukid stringiks tõlkima.
Mida ma teen selle leitud koodilõigu abil:
n
MinuString1 = String (praeguneTemp, 2); // Teisenda ujuk stringiks
MinuString1 = (MinuString1 + "C - RoomTemperatur:)");
// stringide teisendamine chariks algab siit
// Pikkus (koos ühe lisamärgiga null -terminaatori jaoks)
int str_len1 = MinuString1.pikkus () + 1; // Märgimassiivi (puhver) ettevalmistamine
char char_array1 [str_len1]; // Kopeerige see üle
MyString1.toCharArray (char_array1, str_len1); // teisenda string tähemärgiks
Ütlen ausalt, et ma ei tea, kuidas see töötab, aga see töötab.
Samm: laske termistor NTC MF52AT tööle
Töötasin termistoriga, nii et see oli lihtne osa.
Kuid ka siit leiate teistsuguse lahenduse.
Lõplikust koodist leiate minu oma.
Temalt leiate ka tõlke Floats to String.
Termistori külge joodeti mõni traat ja 10 k oomi takisti.
Samm: pange kõik koos tööle
Nii et ma kirjutasin kõik programmi osad kokku.
Nüüd pidin välja mõtlema, kuidas saata üks SMS iga päev samal ajal.
Lugesin erinevatest ideedest, mõnedel oli TimerAlarm ja muu lähenemisviis.
Kuid leidsin arduino foorumist kuskil lihtsa lahenduse:
if (now.hour () == 8 && now.minute () == 00 && now.second () == 59)
{
SIM.smsSend (addr, char_array); // termistor
viivitus (500); SIM.smsSend (addr, char_array1); // DS18B20}
Aga miks nüüd.second = 59, sest see saadab terve minuti SMS -i. See sobib mulle, aga proovige ise.
Pärast mõningast katset laadisin programmi üles Geekcreit® Nano seadmesse.
See pole võib -olla parim programmikirjutamine:) aga soovitud.
Kuna Geekcreit® ATmega328P Nano -l on mõningaid Arduino IDE probleeme, laadin terminali (Linux Mint) kaudu üles USBtinyispi selle abil: avrdude -c usbtiny -p atmega328p -U flash: w: SomeHexFile.hex
Samm 5: see töötas
Jah, see õnnestus ja see on majja paigutatud.
Iga päev kell 6:00 saan SMS -i temperatuuriga.