Stap 6: Tracking en waarschuwingen
In dit eerste project, zullen we voortdurend nagaan wat de locatie van het project, en zien als we meer dan een bepaalde afstand die we in de schets zo goed hebt ingesteld.
Als dat het geval is, zullen we de LED knipperen, en ook de zoemer uitstoten van een geluid.
Eerst declareren we sommige constanten en variabelen voor het alarm:
// LED & Buzzer pins<br>const int ledPin = 6; const int buzzerPin = 9;
// Alarm int counter = 0; bool alarm = false;
Wij stel vervolgens de maximale afstand die het project kan gaan zonder het verhogen van het alarm. Merk op dat de precisie van een civiele GPS zoals deze ongeveer 10 meter, is dus ik suggereren echt een waarde die superieur aan 20 meter is of zo:
const float maxDistance = 100;
Ook declareren we twee variabelen die de oorspronkelijke locatie van het project zal bevatten:
float initialLatitude;<br>float initialLongitude;
We standaard het alarm vals te zijn:
alarm = false;
In de Setup-functie van de schets krijgen we een GPS-fix de oorspronkelijke locatie van het project instellen:
bool gpsFix = fona.getGPS(&latitude, &longitude, &speed_kph, &heading, &altitude);<br>initialLatitude = latitude;
initialLongitude = longitude;
In the loop() function of the sketch, we constantly get the current GPS location, and then calculate the difference between this & the initial location:
float distance = distanceCoordinates(latitude, longitude, initialLatitude, initialLongitude);
we also print this distance inside the Serial monitor:
Serial.print("Distance: ");<br>printFloat(distance, 5); Serial.println("");
If the measured distance exceeded the maximum distance we allowed, we also set the alarm on:
if (distance > maxDistance) {<br> alarm = true; }
Daarna controleren we als we in alarmmode of niet bent, en op de LED & piëzo-zoemer handelen:
if (alarm == false) {<br>
if (millis() - counter > 5000) {
digitalWrite(ledPin, HIGH);
}
if (millis() - counter > 5100) {
digitalWrite(ledPin, LOW);
Counter = millis(); counter = millis(); }
noTone(buzzerPin);
} else {
if (millis() - counter > 100) {
digitalWrite(ledPin, HIGH);
}
if (millis() - counter > 200) {
digitalWrite(ledPin, LOW);
counter = millis();
}
tone(buzzerPin, 1000);
}
Het is nu tijd om te testen het project! De code upload naar de Arduino board, en de seriële monitor openen. U ziet dat in eerste instantie, de afstand gelijk aan nul, of een kleine waarde is.
Stellen immers vast dat de precisie van de GPS ongeveer 10 meter, is dus tussen de twee metingen wordt de positie iets gewijzigd. Ook kun je het project voor een korte wandeling door uitgaan van de grens die u instelt, en zien als er alarm gegeven!
Het beste ding is dat het laat punten, waar het laatste bleek oftewel geografische doelgerichtheid.