- Vereiste materialen
- Arduino LoRa Shield
- Fabricage van PCB voor LoRa Shield
- De printplaat in elkaar zetten
- GPS-module verbinden met LoRa-zender
- Programmeren van Arduino LoRa als GPS-zender
- Programmeren van Arduino LoRa als GPS-ontvanger
- Arduino LoRa GPS Tracker werkt
Het is altijd prettig geweest om te weten waar een bepaald object / persoon zich bevindt. Tegenwoordig wordt GPS op grote schaal gebruikt in toepassingen voor activabeheer, zoals voertuigvolgsysteem, vlootvolgsysteem, vermogensmonitoring, persoonstracering, huisdierentracker enz. Voor elk volgapparaat zal de primaire overweging bij het ontwerp zijn de batterijverwachting en het bewakingsbereik. Gezien beide lijkt LoRa de perfecte keuze, omdat het een zeer laag stroomverbruik heeft en op lange afstanden kan werken. Dus in deze tutorial zullen we een GPS-volgsysteem bouwen met behulp van LoRa, het systeem zal bestaan uit een zender die de locatie-informatie van de NEO-6M GPS-module zal lezenen verzend het draadloos via Lora. Het ontvangergedeelte ontvangt de informatie en geeft deze weer op een 16x2 LCD-scherm. Als u nieuw bent bij LoRa, leer dan over LoRa en LoRaWAN-technologie en hoe deze kan worden gekoppeld aan Arduino voordat u verder gaat.
Om het voor dit project eenvoudig en kosteneffectief te houden, zullen we geen LoRa-gateway gebruiken. In plaats daarvan voert peer-to-peer communicatie uit tussen de zender en ontvanger. Als u echter een wereldwijd bereik wilt, kunt u de ontvanger vervangen door een LoRa Gateway. Omdat ik uit India kom, zullen we de 433MHz LoRa-module gebruiken, wat hier een legale ISM-band is, daarom moet je misschien een module selecteren op basis van je land. Dat gezegd hebbende, laten we beginnen…
Vereiste materialen
- Arduino Lora Shield - 2Nos (PCB-ontwerp beschikbaar om te downloaden)
- Arduino Uno - 2 nrs
- SX1278 433 MHz LoRa-module - 2
- 433 MHz Lora-antenne
- NEO-6M GPS-module
- LCD-weergavemodule
- Draden aansluiten
Arduino LoRa Shield
Om het bouwen met LoRa gemakkelijker te maken, hebben we voor dit project een LoRa Arduino Shield ontworpen. Dit schild bestaat uit de SX1278 433MHz met een 3.3V-regelaar ontworpen met behulp van LM317 Variabele regelaar. Het schild zal direct bovenop Arduino zitten, mits het LoRa-mogelijkheden heeft. Dit LoRa Shield komt goed van pas wanneer u LoRa sensing nodes moet inzetten of om een LoRa mesh netwerk te creëren. Het volledige schakelschema voor het LoRa Arduino Shield wordt hieronder gegeven
Het schild bestaat uit een 12V-aansluiting die, wanneer hij wordt gevoed, wordt gebruikt om 3,3V voor de LoRa-module te regelen met behulp van de LM317-regelaar. Het zal ook worden gebruikt om de Arduino UNO via Vin-pin van stroom te voorzien en de gereguleerde 5V van de Arduino wordt gebruikt om het LCD-scherm op het schild van stroom te voorzien. De uitgangsspanning van de LM317 is vastgesteld op 3,3V met respectievelijk de weerstand R1 en R2, de waarde van deze weerstanden kan worden berekend met de LM317 Calculator.
Omdat de LoRa-module zeer weinig stroom verbruikt, kan deze ook rechtstreeks worden gevoed vanaf de 3.3V-pin van Arduino, maar we hebben een extern regelaarontwerp gebruikt, aangezien de LM317 betrouwbaarder is dan de ingebouwde spanningsregelaar. Het schild heeft ook een potentiometer die kan worden gebruikt om de helderheid van het LCD-scherm aan te passen. De verbinding van de LoRa-module met Arduino is vergelijkbaar met wat we deden in onze vorige tutorial over Arduino koppelen met Lora.
Fabricage van PCB voor LoRa Shield
Nu ons circuit klaar is, kunnen we doorgaan met het ontwerpen van onze printplaat. Ik opende met PCB-ontwerpsoftware en begon mijn sporen te vormen. Toen het PCB-ontwerp eenmaal voltooid was, zag mijn bord er ongeveer zo uit als hieronder
U kunt de ontwerpbestanden ook downloaden in GERBER-formaat en deze bewerken om uw borden te krijgen. De Gerber-bestandslink wordt hieronder gegeven
Download Gerber-bestand voor Arduino LoRa Shield
Nu ons ontwerp klaar is, is het tijd om ze te laten fabriceren. Om de printplaat klaar te krijgen, is het vrij eenvoudig, volg gewoon de onderstaande stappen
Stap 1: Ga naar www.pcbgogo.com, meld u aan als dit de eerste keer is. Voer vervolgens op het tabblad PCB Prototype de afmetingen van uw PCB, het aantal lagen en het aantal PCB's dat u nodig heeft in. Ervan uitgaande dat de printplaat 80 cm x 80 cm is, kunt u de afmetingen instellen zoals hieronder weergegeven.
Stap 2: Ga verder door op de knop Nu citeren te klikken. U wordt naar een pagina geleid waar u indien nodig enkele aanvullende parameters kunt instellen, zoals het gebruikte materiaal voor de spoorafstand enz. Maar meestal werken de standaardwaarden prima. Het enige waar we hier rekening mee moeten houden, is de prijs en tijd. Zoals je kunt zien, is de bouwtijd slechts 2-3 dagen en kost het slechts $ 5 voor onze PSB. U kunt vervolgens een gewenste verzendmethode selecteren op basis van uw vereisten.
Stap 3: De laatste stap is om het Gerber-bestand te uploaden en door te gaan met de betaling. Om ervoor te zorgen dat het proces soepel verloopt, controleert PCBGOGO of uw Gerber-bestand geldig is alvorens verder te gaan met de betaling. Zo weet u zeker dat uw printplaat fabricagevriendelijk is en u als toegewijd zult bereiken.
De printplaat in elkaar zetten
Nadat het bord was besteld, bereikte het me na enkele dagen via een koerier in een keurig gelabelde, goed verpakte doos en zoals altijd was de kwaliteit van de PCB geweldig.
Ik zette mijn soldeerstaaf aan en begon het bord te monteren. Omdat de Footprints, pads, via's en zeefdruk perfect de juiste vorm en maat hebben, had ik geen probleem met het monteren van het bord. Nadat het solderen was voltooid, zag het bord er als volgt uit, zoals je kunt zien, het past goed op mijn Arduino Uno-bord.
Omdat ons project een Arduino LoRa-zender en een Arduino LoRa-ontvanger heeft, hebben we twee schilden nodig, een voor de ontvanger en de andere voor de zender. Dus ging ik verder met het solderen van nog een PCB, zowel de PCB met LoRa-module als LCD is hieronder weergegeven.
Zoals je kunt zien heeft alleen de ontvanger LoRa shied (linker) een LCD aangesloten, de zenderzijde bestaat alleen uit de LoRa module. We zullen verder een GPS-module aansluiten op de zenderzijde, zoals hieronder wordt besproken.
GPS-module verbinden met LoRa-zender
De GPS-module die hier wordt gebruikt, is de NEO-6M GPS-module, de module kan op zeer laag vermogen werken met een kleine vormfactor waardoor deze geschikt is voor trackingtoepassingen. Er zijn echter veel andere GPS-modules beschikbaar die we eerder hebben gebruikt in verschillende soorten voertuigvolg- en locatiedetectietoepassingen.
De module werkt op 5V en communiceert via seriële communicatie met 9600 baudrate. Daarom voeden we de module met + 5V pin van Arduino en verbinden we de Rx en Tx pin met respectievelijk digitale pin D4 en D3 zoals hieronder getoond
De pinnen D4 en D3 worden geconfigureerd als seriële software pinnen. Eenmaal gevoed, zoekt de NEO-6M GPS-module naar een satellietverbinding en zal deze automatisch alle informatie serieel uitvoeren. Deze uitvoergegevens zijn in het NMEA-zinformaat dat staat voor National Marine Electronics Association en is het standaardformaat voor alle GPS-apparaten. Volg de link voor meer informatie over het gebruik van gps met Arduino. Deze gegevens zullen groot zijn en meestal moeten we ze handmatig formuleren om het gewenste resultaat te verkrijgen. Gelukkig voor ons is er een bibliotheek genaamd TinyGPS ++ die al het zware werk voor ons doet. Je moet ook de LoRa-bibliotheek toevoegen als je dit nog niet hebt gedaan. Dus laten we zowel de bibliotheek downloaden via de onderstaande link
Download TinyGPS ++ Arduino-bibliotheek
Download Arduino LoRa-bibliotheek
De link downloadt een ZIP-bestand dat vervolgens aan de Arduino IDE kan worden toegevoegd door de opdracht Sketch -> Inclusief bibliotheek -> Add.ZIP- bibliotheek te volgen. Zodra u klaar bent met de hardware en bibliotheek, kunnen we doorgaan met het programmeren van onze Arduino-kaarten.
Programmeren van Arduino LoRa als GPS-zender
Zoals we weten, is de LoRa een transceiver-apparaat, wat betekent dat het zowel informatie kan verzenden als ontvangen. In dit GPS-trackerproject zullen we echter één module gebruiken als zender om de coördinaatinformatie van GPS te lezen en deze te verzenden, terwijl de andere module als ontvanger de GPS-coördinaatwaarden zal ontvangen en op het LCD-scherm zal afdrukken. Het programma voor zowel de zender- als ontvangermodule vindt u onderaan deze pagina. Zorg ervoor dat u de bibliotheken voor de GPS-module en LoRa-module hebt geïnstalleerd voordat u doorgaat met de code. In deze sectie zullen we de zendercode bekijken.
Zoals altijd beginnen we het programma door de vereiste bibliotheken en pinnen toe te voegen. Hier wordt de SPI- en LoRa-bibliotheek gebruikt voor LoRa-communicatie en wordt de TinyGPS ++ en SoftwareSerial-bibliotheek gebruikt voor GPS-communicatie. De GPS-module in mijn hardware is aangesloten op pin 3 en 4 en daarom definiëren we dat ook als volgt
# omvatten
Binnen de setup- functie beginnen we met de seriële monitor en initialiseren we ook de software serieel als "gpsSerial " voor communicatie met onze NEO-6M GPS-module. Merk ook op dat ik 433E6 (433 MHz) heb gebruikt als mijn LoRa-werkfrequentie, u moet deze mogelijk wijzigen op basis van het type module dat u gebruikt.
void setup () { Serial.begin (9600); gpsSerial.begin (9600); while (! Serial); Serial.println ("LoRa Sender"); if (! LoRa.begin (433E6)) { Serial.println ("Starten van LoRa is mislukt!"); terwijl (1); } LoRa.setTxPower (20); }
Binnen de loop- functie controleren we of de GPS-module wat gegevens uitzendt, zo ja, dan lezen we alle gegevens en formuleren we deze met de functie gps.encode. Vervolgens controleren we of we geldige locatiegegevens hebben ontvangen met behulp van de functie gps.location.isValid () .
while (gpsSerial.available ()> 0) if (gps.encode (gpsSerial.read ())) if (gps.location.isValid ()) {
Als we een geldige locatie hebben ontvangen, kunnen we beginnen met het verzenden van de lengte- en breedtegraadwaarden. De functie gps.location.lat () geeft de breedtegraadcoördinaat en de functie gps.location.lng () geeft de lengtecoördinaat. Aangezien we ze op het 16 * 2 LCD-scherm zullen afdrukken, moeten we vermelden wanneer we naar de tweede regel moeten schijten, daarom gebruiken we het trefwoord "c" om de ontvanger te laten weten de volgende informatie op regel 2 af te drukken.
LoRa.beginPacket (); LoRa.print ("Lat:"); LoRa.print (gps.location.lat (), 6); LoRa.print ("c"); LoRa.print ("Long:"); LoRa.print (gps.location.lng (), 6); Serial.println ("Verzonden via LoRa"); LoRa.endPacket ();
Programmeren van Arduino LoRa als GPS-ontvanger
De zendercode verzendt al de waarde van de lengte- en breedtegraadcoördinaten, nu moet de ontvanger deze waarden lezen en op het LCD-scherm afdrukken. Op dezelfde manier voegen we hier de bibliotheek voor LoRa-module en LCD-display toe en definiëren we op welke pinnen het LCD-scherm is aangesloten en initialiseren we ook de LoRa-module zoals voorheen.
# omvatten
Binnen de loop- functie luisteren we naar datapakketten van de LoRa-module van de zender en de grootte ervan met behulp van de LoRa.parsePacket () -functie en slaan het op in de variabele " packetSize ". Als er pakketten worden ontvangen, gaan we verder met het lezen ervan als tekens en drukken we ze af op het LCD-scherm. Het programma controleert ook of de LoRa-module het sleutelwoord “c” verstuurt, zo ja, dan print de overige informatie op de tweede regel.
if (packetSize) {// If pakket ontvangen Serial.print ("Ontvangen pakket '"); lcd.clear (); while (LoRa.available ()) { char inkomend = (char) LoRa.read (); if (inkomend == 'c') { lcd.setCursor (0, 1); } else { lcd.print (inkomend); } }
Arduino LoRa GPS Tracker werkt
Zodra de hardware en het programma klaar zijn, kunnen we beide codes in de respectievelijke Arduino-modules uploaden en ze voeden met een 12V-adapter of USB-kabel. Als de zender is ingeschakeld, ziet u de blauwe LED op de GPS-module knipperen, dit geeft aan dat de module op zoek is naar een satellietverbinding om coördinaten te krijgen. Ondertussen wordt de ontvangermodule ingeschakeld en wordt een welkomstbericht op het LCD-scherm weergegeven. Zodra de zender de informatie heeft verzonden, geeft de ontvangermodule deze weer op het LCD-scherm, zoals hieronder weergegeven
Nu kunt u zich verplaatsen met de gps-module van de zender en u zult merken dat de ontvanger zijn locatie bijwerkt. Om te weten waar de zendermodule precies is, kunt u de breedte- en lengtegraadwaarden op het LCD-scherm lezen en deze invoeren in Google maps om de locatie op de kaart te krijgen, zoals hieronder weergegeven.
De volledige werking is ook te vinden in de video onderaan deze pagina. Ik hoop dat je de tutorial hebt begrepen en het leuk vond om er iets nuttigs mee te bouwen. Als u twijfels heeft, kunt u deze achterlaten in de commentaarsectie hieronder of onze forums gebruiken voor andere technische vragen.