Mobiele telefoon is een revolutionaire uitvinding van de eeuw. Het was voornamelijk ontworpen voor het maken en ontvangen van oproepen en sms-berichten, maar het is de hele wereld geworden nadat de smartphone in beeld is gekomen. In dit project bouwen we een domoticasysteem, waarbij men de huishoudelijke apparaten kan bedienen met behulp van de eenvoudige GSM-telefoon, gewoon door een sms te sturen via zijn telefoon. In dit project is geen smartphone nodig, alleen de oude GSM-telefoon werkt om alle elektronische apparaten in huis AAN en UIT te zetten, waar dan ook. Je kunt hier ook wat meer draadloze domotica-projecten bekijken: IR-afstandsbediende huisautomatisering met Arduino, Bluetooth-gestuurde huisautomatisering samen met DTMF-gebaseerde huisautomatisering, pc-gestuurde huisautomatisering met Arduino.
Werkende uitleg
In dit project wordt Arduino gebruikt om het hele proces te besturen. Hier hebben we GSM draadloze communicatie gebruikt voor het besturen van huishoudelijke apparaten. We sturen enkele commando's zoals "# A.licht aan *", "# A.licht uit *" enzovoort voor het bedienen van AC-huishoudelijke apparaten. Na het ontvangen van opdrachten van Arduino via GSM, stuurt Arduino een signaal naar relais om de huishoudelijke apparaten AAN of UIT te zetten met behulp van een relaisstuurprogramma.
Circuit componenten:
- Arduino UNO
- GSM-module
- ULN2003
- Relais 5 volt
- Lamp met houder
- Draden aansluiten
- Broodplank
- 16x2 LCD
- Stroomvoorziening
- Mobiele telefoon
Hier hebben we een voorvoegsel gebruikt in de commandostring dat "#A." Is. Dit voorvoegsel wordt gebruikt om aan te geven dat het hoofdcommando ernaast komt en een * aan het einde van de string geeft aan dat het bericht is beëindigd.
Wanneer we via mobiel een sms naar de gsm-module sturen, ontvangt gsm die sms en stuurt deze naar Arduino. Nu leest Arduino deze sms en haalt het hoofdcommando uit de ontvangen string en slaat het op in een variabele. Hierna vergelijkt Arduino deze string met een vooraf gedefinieerde string. Als er een overeenkomst is opgetreden, stuurt Arduino een signaal naar het relais via de relaisstuurprogramma om de huishoudelijke apparaten AAN en UIT te zetten. En relatief resultaat wordt ook afgedrukt op een 16x2 LCD-scherm met behulp van de juiste opdrachten.
Hier in dit project hebben we 3 nul watt gloeilampen gebruikt voor demonstratie die ventilator, licht en tv aangeeft.
Hieronder vindt u de lijst met berichten die we via sms verzenden om de ventilator, het licht en de tv in en uit te schakelen:
S.nr. |
Bericht |
Operatie |
1 |
# A.fan aan * |
Ventilator AAN |
2 |
# A.ventilator uit * |
Ventilator UIT |
3 |
# A.licht aan * |
Licht aan |
4 |
# A.licht uit * |
Lichten uit |
5 |
# A.tv aan * |
TV AAN |
6 |
# A.tv uit * |
TV uit |
7 |
# A.all op * |
Alles AAN |
8 |
# A.all off * |
Alles UIT |
GSM-module:
GSM-module wordt gebruikt in veel communicatieapparaten die zijn gebaseerd op GSM-technologie (Global System for Mobile Communications). Het wordt gebruikt voor interactie met het GSM-netwerk met behulp van een computer. GSM-module begrijpt alleen AT-commando's en kan dienovereenkomstig reageren. Het meest basale commando is "AT", als GSM OK reageert, werkt het goed, anders reageert het met "ERROR". Er zijn verschillende AT-commando's zoals ATA voor het beantwoorden van een oproep, ATD om een oproep te plaatsen, AT + CMGR om het bericht te lezen, AT + CMGS om de sms te verzenden, etc. AT-commando's moeten worden gevolgd door Carriage return ie \ r (0D in hex), zoals "AT + CMGS \ r". We kunnen de GSM-module gebruiken met behulp van deze opdrachten:
ATE0 - Voor echo uit
AT + CNMI = 2,2,0,0,0
BIJ D
AT + CMGF = 1
AT + CMGS = "Mobiel nummer"
>> Nu kunnen we ons bericht schrijven
>> Na het schrijven van bericht
Ctrl + Z stuur bericht commando (26 in decimaal).
ENTER = 0x0d in HEX
De SIM900 is een complete quad-band GSM / GPRS-module die GSM / GPRS 850/900/1800/1900 MHz - prestaties levert voor spraak, sms en data met een laag stroomverbruik.
Circuit Beschrijving
Verbindingen van dit op GSM gebaseerde domoticacircuit zijn vrij eenvoudig, hier wordt een liquid crystal display gebruikt voor het weergeven van de status van huishoudelijke apparaten die rechtstreeks is aangesloten op arduino in 4-bit-modus. Datapinnen van LCD, namelijk RS, EN, D4, D5, D6, D7 zijn verbonden met Arduino digitale pin nummer 6, 7, 8, 9, 10, 11. En Rx en Tx pin van GSM module is direct verbonden met Tx en Rx pin van Arduino. En de GSM-module wordt gevoed door een 12 volt adapter. 5 volt SPDT 3 relais worden gebruikt voor het regelen van LICHT, VENTILATOR en TV. En relais zijn verbonden met arduino-pin nummer 3, 4 en 5 via relaisstuurprogramma ULN2003 voor het besturen van respectievelijk LIGHT, FAN en TV.
Code Beschrijving
Bij het programmeren van een deel van dit project, in de eerste plaats bij het programmeren, nemen we een bibliotheek op voor liquid crystal display en vervolgens definiëren we gegevens en controlepennen voor LCD- en huishoudelijke apparaten.
# omvatten
Na deze seriële communicatie wordt geïnitialiseerd op 9600 bps en wordt de gebruikte pin aangegeven.
leegte setup () {lcd.begin (16,2); Serial.begin (9600); pinMode (led, OUTPUT); pinMode (Fan, OUTPUT); pinMode (Licht, OUTPUT); pinMode (TV, OUTPUT);
Voor het serieel ontvangen van gegevens hebben we twee functies gebruikt: de ene is Serieel. Beschikbaar die controleert of er seriële gegevens binnenkomen en de andere is Serieel. Read die de gegevens leest die serieel komen.
while (Serial.available ()) {char inChar = Serial.read ();
Nadat we de gegevens serieel hebben ontvangen, hebben we deze in een string opgeslagen en vervolgens op Enter gewacht.
void serialEvent () {while (Serial.available ()) {if (Serial.find ("# A.")) {digitalWrite (led, HIGH); vertraging (1000); digitalWrite (led, LOW); while (Serial.available ()) {char inChar = Serial.read (); str = inChar; if (inChar == '*') {temp = 1; terugkeren; }
Wanneer Enter komt, begint het programma om de ontvangen string te vergelijken met de reeds gedefinieerde string en als de string overeenkomt, wordt een relatieve bewerking uitgevoerd door het juiste commando te gebruiken dat in code wordt gegeven.
void check () {if (! (strncmp (str, "tv on", 5))) {digitalWrite (TV, HIGH); lcd.setCursor (13,1); lcd.print ("AAN"); vertraging (200); } else if (! (strncmp (str, "tv off", 6))) {digitalWrite (TV, LOW); lcd.setCursor (13,1); lcd.print ("UIT"); vertraging (200); }