Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Het idee is om een temperatuur sms te krijgen van mijn vaders huis.
Niets bijzonders, gewoon snel onderdelen in elkaar zetten.
De onderdelen zijn:
- Geekcreit® ATmega328P Nano V3-controllerkaart Compatibel met Arduino
- DIY NANO IO Shield V1. O uitbreidingskaart voor Arduino
- Op DS1307 gebaseerde RTC IIC / I2C real-time klokmodule en DS18b20
- SIM800L Quad-band GSM / GPRS
- LM2596 Mini DC-DC-converter Instelbare step-down voedingsmodule
- Thermistor NTC MF52AT temperatuur
Allereerst veel lezen en zoeken.
Voordat ik eindelijk de Geekcreit® Nano gebruik, test ik alle onderdelen met een Arduino Uno.
Stap 1: Breng de SIM800l aan het werk
Een belangrijk punt is de kracht van de Sim800L.
Ik gebruik een LM2596 Mini DC-DC converter, afgesteld op 3,7 volt en een aparte voeding.
Om de verbinding met AT+-commando's te testen, is deze kant zeer bruikbaar:
Snelstart SIM800 (SIM800L) met Arduino
Met Pincode uitschakelen met gsm-modem bij commando's kreeg ik rit van de sim-pincode.
De volgende overweging welke bibliotheek. Het internet biedt verschillende oplossingen.
Mijn oplossing is de bibliotheek van Mattias Aabmets: AspenSIM800
Zijn voorbeeld: Send_SMS.ino gebruikte I als basisprogramma en verbond één voor één alle andere delen met elkaar.
De Tx-pin en Rx-pin zijn code voor:
RX_PIN 10 van Arduino. Moet worden aangesloten op de TX-pin van de SIM800-module. TX_PIN 11 van Arduino. Moet worden aangesloten op de RX-pin van de SIM800-module
Het is altijd een goed idee om de *.ccp- en *.h-bestanden in de bibliotheken te lezen.
Ze bevatten veel interessante hints en kennis.
Stap 2: Laat de RTC DS1307 met DS18B20-sensor werken
Ik gebruikte deze kant: simtronyx - de blog voor de DS1307 en DS18B20.
De klok heeft een I2C bus aansluiting en dat is voor de Arduino Uno: A4 (SDA) - A5 (SCL)
De DS18B20 heb ik aangesloten op D3.
Ik las dat je in een sms geen Floats alleen String kunt sturen, dus moest ik floats vertalen naar string.
Dat doe ik met dit codefragment dat ik heb gevonden:
N
MijnString1 = String (huidigeTemp, 2); // Converteer float naar String
MyString1 = (MyString1 + " C - Kamertemperatuur:) ");
// convert string naar char begint hier
// Lengte (met één extra teken voor de nulterminator)
int str_len1 = MijnString1.lengte() + 1; // Bereid de tekenreeks (de buffer) voor
char char_array1[str_len1]; // Kopieer het over
MyString1.toCharArray(char_array1, str_len1); // convert string naar char beëindigt haar
Ik zal eerlijk zijn, ik weet niet hoe het werkt, maar het werkt.
Stap 3: De thermistor NTC MF52AT aan het werk krijgen
Ik werkte eerder met een thermistor, dus het was het makkelijke gedeelte.
Maar ook hier vindt u verschillende oplossingen.
In de uiteindelijke code kun je de mijne vinden.
Hier vind je ook de vertaling Floats to String.
Wat draad en de weerstand van 10 k ohm aan de thermistor gesoldeerd.
Stap 4: Laat iedereen samenwerken
Dus heb ik alle programmaonderdelen bij elkaar geschreven.
Nu moest ik uitzoeken hoe ik elke dag één sms op hetzelfde tijdstip kon verzenden.
Ik las over verschillende ideeën, sommige met een TimerAlarm en andere benadering.
Maar ik heb ergens op het Arduino-forum een eenvoudige oplossing gevonden:
if (nu.uur() == 8 && nu.minuut() == 00 && nu.seconde () == 59)
{
SIM.smsSend(addr, char_array); // thermistor
vertraging (500); SIM.smsSend(addr, char_array1); // DS18B20 }
Maar waarom now.second = 59 omdat het een sms van een hele minuut verstuurt. Voor mij wel, maar probeer het zelf uit.
Na wat testen heb ik het programma geüpload naar de Geekcreit® Nano.
Dit is misschien niet het beste programma om te schrijven:) maar het doet het gewenste.
Omdat de Geekcreit® ATmega328P Nano wat Arduino IDE-problemen heeft, upload ik per terminal (Linux Mint) de USBtinyisp hiermee: avrdude -c usbtiny -p atmega328p -U flash:w:SomeHexFile.hex
Stap 5: Het werkte
Ja het is gelukt en het is in huis geplaatst.
Elke dag om 6.00 uur krijg ik een sms met de temperatuur.