Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Ideja je, da dobim temperaturni sms iz hiše mojih očetov.
Nič lepega, samo hitro sestavljanje delov.
Deli so:
- Arduino, združljiv s krmilno ploščo Geekcreit® ATmega328P Nano V3
- DIY NANO IO Shield V1. O razširitvena plošča za Arduino
- DS1307 RTC IIC / I2C Cloud Modul za realni čas in DS18b20
- SIM800L Štiripasovni GSM / GPRS
- LM2596 Mini DC-DC pretvornik, nastavljiv napajalni modul za navzdol
- Termistor NTC MF52AT temperatura
Sprva veliko o branju in iskanju.
Preden končno uporabim Geekcreit® Nano, vse dele preizkusim z Arduino Uno.
1. korak: Vklopite SIM800l
Ena glavna točka je moč za Sim800L.
Uporabljam LM2596 Mini DC-DC pretvornik, nastavljen na 3,7 voltov in ločen napajalnik.
Za testiranje povezave z ukazi AT+ je ta stran zelo uporabna:
Hitri zagon SIM800 (SIM800L) z Arduinom
Z možnostjo Onemogoči pin kodo z uporabo modema gsm pri ukazih sem dobil kodo pin pin.
Naslednji premislek, katera knjižnica. Internet ponuja različne rešitve.
Moja rešitev je knjižnica Mattiasa Aabmetsa: AspenSIM800
Njegov izpit: Send_SMS.ino je uporabil I kot osnovni program in enega za drugim poveže vse ostale dele skupaj.
Pin Tx in Rx sta koda za:
RX_PIN 10 iz Arduina. Mora biti priključen na TX pin modula SIM800. TX_PIN 11 Arduina. Mora biti priključen na RX pin modula SIM800
Vedno je dobro prebrati datoteke *.ccp in *.h v knjižnicah.
Vsebujejo veliko zanimivih namigov in znanja.
2. korak: Začnite delovati RTC DS1307 s senzorjem DS18B20
Uporabil sem to stransko stran: simtronyx - blog za DS1307 in DS18B20.
Ura ima povezavo z vodilom I2C in to je za Arduino Uno: A4 (SDA) - A5 (SCL)
DS18B20 I sem priključil na D3.
Prebral sem, da v SMS -u ne morete poslati samo nizov, zato sem moral prevesti plavajoče v niz.
To, kar naredim s tem delčkom kode, sem našel:
n
MyString1 = Niz (currentTemp, 2); // Pretvori float v niz
MyString1 = (MyString1 + "C - RoomTemperatur:)");
// tukaj se pretvori niz v char
// Dolžina (z enim dodatnim znakom za ničelni terminator)
int str_len1 = MyString1.length () + 1; // Pripravimo niz znakov (medpomnilnik)
char char_array1 [str_len1]; // Kopirajte
MyString1.toCharArray (char_array1, str_len1); // pretvori niz v char
Iskreno povedano, ne vem, kako deluje, ampak deluje.
3. korak: Zaženite delovanje termistorja NTC MF52AT
Pred tem sem delal s termistorjem, zato je bil to lažji del.
Toda tudi tukaj lahko najdete drugačno rešitev.
V končni kodi lahko najdete mojo.
Lahko tudi najdete prevod Floats to String.
Spajamo nekaj žice in 10 k ohmski upor na termistor.
4. korak: Naj vsi sodelujejo
Zato sem skupaj napisal vse dele programa.
Zdaj sem moral ugotoviti, kako poslati vsak dan po en SMS, hkrati.
Prebral sem različne ideje, nekatere s TimerAlarm in drugim pristopom.
Toda na forumu arduino sem našel preprosto rešitev:
if (now.hour () == 8 && now.minute () == 00 && now.second () == 59)
{
SIM.smsSend (addr, char_array); // termistor
zamuda (500); SIM.smsSend (addr, char_array1); // DS18B20}
Zakaj pa zdaj.second = 59, ker pošlje celo minuto SMS -a. Meni gre, ampak preizkusi sam.
Po nekaj preizkusih sem program naložil v Geekcreit® Nano.
Morda to ni najboljše pisanje programov:), vendar naredi želeno.
Ker ima Geekcreit® ATmega328P Nano nekaj težav z Arduino IDE, naložim prek terminala (Linux Mint) in vržem USBtinyisp s tem: avrdude -c usbtiny -p atmega328p -U flash: w: SomeHexFile.hex
5. korak: Uspelo je
Da, uspelo je in je postavljeno v hišo.
Vsak dan ob 6:00 dobim SMS s temperaturo.