Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Ideea este să primesc un sms de temperatură de la casa taților mei.
Nimic nu-ți place doar să pui rapid piesele împreună.
Părțile sunt:
- Placă de control Geekcreit® ATmega328P Nano V3 compatibilă Arduino
- Placă de expansiune DIY NANO IO Shield V1. O pentru Arduino
- Modulul de ceas în timp real RTC IIC / I2C bazat pe DS1307 și DS18b20
- SIM800L Quad-band GSM / GPRS
- LM2596 Mini DC-DC Converter Modul reglabil de alimentare cu putere redusă
- Temperatura termistorului NTC MF52AT
În primul rând, o mulțime de lectură și căutare.
Înainte de a folosi Geekcreit® Nano, testez toate piesele cu un Arduino Uno.
Pasul 1: Puneți SIM800l să funcționeze
Un punct principal este puterea pentru Sim800L.
Folosesc un convertor Mini DC-DC LM2596, reglat la 3,7 volți și o sursă de alimentare separată.
Pentru a testa conexiunea cu comenzile AT +, această latură este foarte utilizabilă:
Porniți rapid SIM800 (SIM800L) cu Arduino
Cu Dezactivați codul PIN folosind modemul gsm la comenzi, am obținut codul pin SIM.
Următoarea considerație care bibliotecă. Internetul oferă soluții diferite.
Soluția mea este biblioteca de la Mattias Aabmets: AspenSIM800
Exemplul său: Send_SMS.ino l-a folosit pe I ca program de bază și conectez una câte una toate celelalte părți împreună.
Pinul Tx și pinul Rx sunt codul pentru:
RX_PIN 10 din Arduino. Trebuie conectat la pinul TX al modulului SIM800. TX_PIN 11 din Arduino. Trebuie conectat la pinul RX al modulului SIM800
Este întotdeauna o idee bună să citiți fișierele *.ccp și *.h din biblioteci.
Acestea conțin multe indicii și cunoștințe interesante.
Pasul 2: Porniți RTC DS1307 cu senzorul DS18B20
Am folosit această latură: simtronyx - blogul pentru DS1307 și DS18B20.
Ceasul are o conexiune de autobuz I2C și este pentru Arduino Uno: A4 (SDA) - A5 (SCL)
DS18B20 l-am conectat la D3.
Am citit că într-un SMS nu poți trimite float doar șir, așa că a trebuit să traduc floats în șir.
Asta fac cu acest fragment de cod pe care l-am găsit:
n
MyString1 = String (currentTemp, 2); // Convertiți float în șir
MyString1 = (MyString1 + "C - RoomTemperatur:)");
// converti șirul în caractere începe aici
// Lungime (cu un caracter suplimentar pentru terminatorul nul)
int str_len1 = MyString1.length () + 1; // Pregătiți matricea de caractere (tamponul)
char char_array1 [str_len1]; // Copiați-l
MyString1.toCharArray (char_array1, str_len1); // convertește șirul în caractere o termină
Voi fi sincer, nu fac cum funcționează, dar funcționează.
Pasul 3: Puneți Thermistor NTC MF52AT să funcționeze
Am lucrat înainte cu un termistor, așa că a fost partea ușoară.
Dar și aici puteți găsi o soluție diferită.
În codul final îl puteți găsi pe al meu.
Puteți găsi și traducerea Floats to String.
S-au lipit niște fire și rezistorul de 10 k ohm la termistor.
Pasul 4: Lucrați toți împreună
Așa că am scris împreună toate părțile programului.
Acum a trebuit să-mi dau seama cum să trimit un SMS în fiecare zi, în același timp.
Am citit despre idei diferite, unele cu o abordare TimerAlarm și altele.
Dar am găsit o soluție simplă în forumul arduino:
if (now.hour () == 8 && now.minute () == 00 && now.second () == 59)
{
SIM.smsSend (addr, char_array); // termistor
întârziere (500); SIM.smsSend (addr, char_array1); // DS18B20}
Dar de ce acum.second = 59 pentru că trimite un SMS întreg de minut. Pentru mine, dar încearcă-te singur.
După un test, am încărcat programul pe Geekcreit® Nano.
Poate că acesta nu este cel mai bun program de scriere:), dar face ceea ce doriți.
Deoarece Geekcreit® ATmega328P Nano are unele probleme Arduino IDE, încărc prin terminal (Linux Mint) arunc USBtinyisp cu acest: avrdude -c usbtiny -p atmega328p -U flash: w: SomeHexFile.hex
Pasul 5: A funcționat
Da, a funcționat și este plasat în casă.
În fiecare zi la ora 6:00 primesc un SMS cu temperatura.