Intelligente verkeersmanagement met het Internet van dingen (4 / 4 stap)

Stap 4: programmeren

Het programma zal worden een steeds evoluerende project. Als u beschikken over een bijgewerkte versie wilt, stel ik het vertakken van de code van mijn GitHub repository op de volgende link:

https://github.com/TheInventorMan/IntelligentTraff...

Echter heb ik geplakt de code hieronder voor uw gemak, hoewel dit is alleen voor het lokale apparaat dat zal worden gehouden in het voertuig. Alle zich bestanden van de Server bevinden op de repo.

Voor degenen onder u die geïnteresseerd zijn, is hier een eenvoudige schets van het algoritme dat wordt gebruikt:

  1. GPS ontvangt locatie, snelheid, rubriek en tijd
  2. Apparaat worden gegevens opgevraagd uit server via de 3G dongle
  3. Server reageert met een gegevensstroom, vergelijkbaar met die van een zin NMEA (maar hey, het is een eenvoudig protocol)
  4. Gegevensstroom is geparseerd en geordend in een 2D-matrix, met de signalen locaties, tijdsinstellingen, offsets, enz.
  5. Met behulp van deze informatie, bepaalt het apparaat welke signaal nadert.
  6. Het groene licht-venster wordt bepaald, en maatregelen die daarmee tegen de huidige snelheid
  7. Apparaat wordt gevraagd stuurprogramma te versnellen, vertragen of snelheid te handhaven om te vangen het signaal van groene venster.

In de toekomst, kan dit worden uitgebreid tot niet-getimede signalen (degene met inductie spoelen onder de weg), evenals een "veiligheid buffer" van ongeveer 3 seconden wanneer het voertuig zal * nauwelijks * maken voorbij het signaal. Op deze manier de bestuurder zal nooit opraken geen gele verlichting (gevaarlijk); Er zullen enige tijd te sparen.

importeren van mraa;
importeren van Math;

Initialisatie van de poort

var GPS = mraa. UART(0); var 3G = mraa. USB(0); werkt niet nog, een USB host-poortstuurprogramma zal worden uitgevoerd in de plaats var verhoging = mraa.gpio(2); var handhaven = mraa.gpio(3); de daling van de var = mraa.gpio(4); GPS.setBaudRate(9600);

Constanten

var earthRadius = 6371000; straal van de aarde in meter var degToRad = 0.01745329251; Radialen per graad var radToDeg = 57.2957795131; Graden per radiaal

functie getLocation() {//Uses de $GPGGA berichten om te bepalen van de huidige locatie var GPSLocation [0,0,0,0] =; while(1) {if(GPS.dataAvailable()) {var buffer = GPS.readStr(512); als (buffer.find("GPGGA")! = -1) {var rawNmea = buffer.substring(buffer.search("GPGGA"), buffer.search("\n")); var nmeaList = rawNmea.strip().split(","); var tijd = nmeaList [1]; var latraw = nmeaList [2]; var latdir = nmeaList [3]; var lonraw = nmeaList [4]; var londir = nmeaList [5]; var lat = (latraw.substring(0,2)) + (latraw.substring(2)) /60; var lon = (lonraw.substring(0,3)) + (lonraw.substring(3,0)) /60; als (londir == "W") {lon lon = * -1;} als (latdir == "S") {lat = lat * -1; } var alt = nmeaList [9]; GPSLocation = [lat, lon, alt, tijd]; Return GPSLocation; }}}} functie getVelocity() {//Uses $GPVTG berichten om snelheid en richting var GPSVel = [0,0]; while(1) {if(GPS.dataAvailable()) {var buffer = GPS.readStr(512); if (buffer.find("GPVTG")! = -1) {var nmeaData = buffer.substring(buffer.search("GPVTG"), buffer.search("\n")); var nmeaList = nmeaData.strip().split(","); var hdg = nmeaList [1]; var rawVel = nmeaList [7]; var vel = rawVel / 3,6; GPSVel = [hdg, vel]; Return GPSVel; } } } }

functie getLights() {var lichten = [7] [10]; //array van stoplicht tijdsinstellingen, 10 dichtstbijzijnde lichten, 7 parameters elke. Lat, Lon NTime, Etime, TimeOffset, kop, afstand / / requestData(); if(3G.dataAvailable()) {var buffer = 3G.readStr(512); if (buffer.find("$$")! = -1) {lightData = buffer.substring(buffer.search("$$"), buffer.search("\n")); //light informatie specificatie volgt GPS systeem, met "$$" ter aanduiding van het begin van een zin. lightList = nmeaData.strip().split(","); voor (ik = 0; ik

functie computeDistance (Latdeg1, Londeg1, Latdeg2, Londeg2) {var Lat1 = Latdeg1 * degToRad; var Lat2 = Latdeg2 * degToRad; var Lon1 = Londeg1 * degToRad; var Lon2 = Londeg2 * degToRad; var afstand = 2 * earthRadius * Math.asin(sqrt((Math.sin(Lat2-Lat1/2)) ^ 2 + (Math.cos(Lat1) * Math.cos(Lat2) * (Math.sin(Lon2-Lon1/2))^2))); //Use haversine formule voor het berekenen van de grootcirkelafstand}

functie computeHeading (Latdeg1, Londeg1, Latdeg2, Londeg2) {var Lat1 = Latdeg1 * degToRad; var Lat2 = Latdeg2 * degToRad; var Lon1 = Londeg1 * degToRad; var Lon2 = Londeg2 * degToRad; var y = Math.sin(Lon2-Lon1) * Math.cos(Lat2); var x = Math.cos(Lat1)*Math.sin(Lat2) - Math.sin(Lat1)*Math.cos(Lat2)*Math.cos(Lon2-Lon1); var rubriek = Math.atan2 (y, x).toDegrees(); terugkeer post;}

Hoofdreeks while(1) {var temp [4]; var currLat var currLon; var currHdg; var currSpd; var lichten; var tijd; var Dir; var currSignal; var t1, t2; temp = getLocation(); currLat = temp [0]; currLon = temp [1]; tijd = temp [3]; temp = getVelocity(); currHdg = temp [0]; currSpd = temp [1]; Verlichting = getLights(); voor (ik = 0; ik < Lights.length(); i ++) {var hdg = computeHeading (currLat, currLon, lichten [0] [i], Lights[1][i]); als (HGD > 180) {Lights [5], [i] = 180 - computeHeading (currLat, currLon, lichten [0] [i], Lights[1][i]);} anders {Lights [5], [i] = computeHeading (currLat, currLon, lichten [0] [i], Lights[1][i]);} Lichten [6], [i] = computeDistance (currLat, currLon, lichten [0], [i], Lights[1][i]); Als (lichten [6], [i] < Lights[6][currSignal]) {currSignal = i;}} Als (HGD < 45 || hdg > 315 || 135 < hdg < 225) {//north-south verkeer Dir = 0;} anders {Dir = 1;} als (Dir == 0) {t1 = lichten [4] [currSignal] + time % (lichten [2] [currSignal] + Lights[3][currSignal]); wellicht vast te stellen t2 = lichten [4] [currSignal] + time % (lichten [2] [currSignal] + Lights[3][currSignal]) + verlichting [2] [currSignal]; } else {t1 = lichten [4] [currSignal] + time % (lichten [2] [currSignal] + Lights[3][currSignal]); T2 = lichten [4] [currSignal] + time % (lichten [2] [currSignal] + Lights[3][currSignal]) + verlichting [3] [currSignal]; } Als (t1 > Lights[6][currSignal]) {\\increase snelheid increase.write(1); maintain.write(0); decrease.write(0);} else if (t1 == Lights[6][currSignal]) {\\maintain snelheid increase.write(0); maintain.write(1); decrease.write(0);} else {\\decrease snelheid increase.write(0); maintain.write(0); decrease.write(1);}

}

Gerelateerde Artikelen

Een weerstation verbinden met het Internet van dingen

Een weerstation verbinden met het Internet van dingen

Hallo en welkom op de stapsgewijze instructies voor het maken van uw weerstation Davies-deel van het Internet van dingen met behulp van onze Intel ICRI kit.Met behulp van deze kit, die u kundig voor uw weerstation Davies verbinden met een Intel Galil
Met behulp van het Internet van dingen (School) website

Met behulp van het Internet van dingen (School) website

Hallo!Dus, je hebt ingesteld uw bodem Sensor, weerstation of RobotTug sterkte-o-meter, en je bent klaar om te beginnen met het verkennen van uw gegevens of het creëren van experimenten. We gaan om u via onze Internet van dingen (School) website staps
Intel Edison gebaseerde mobiele Sensor netwerk voor het Internet van dingen

Intel Edison gebaseerde mobiele Sensor netwerk voor het Internet van dingen

Inleiding en overzichtDe Intel Edison is een handige kleine computer die veel voordelen van andere maker stap combineert. Worden kan gecombineerd met breakout boards van verschillende grootte en doeleinden.In dit artikel zullen we leren welke compone
HackerBoxes 0006: Internet van dingen (IoT) projecten met het deeltje foton

HackerBoxes 0006: Internet van dingen (IoT) projecten met het deeltje foton

Hacken van het Internet van dingen! Deze maand, abonnees op HackerBoxes werken met de spaanplaat van de Photon IoT aan controle-apparaten via het Internet, verzamelen sensor gegevens via het Internet, gegevens opslaan in de cloud, en nog veel meer.Di
Voor het gebruik van oude telefoon om te bouwen van Internet van het huis van dingen

Voor het gebruik van oude telefoon om te bouwen van Internet van het huis van dingen

Met de snelle ontwikkeling van technologie, en nu de smartphone heeft ingevoerd elk huishouden, maar oude mobiele telefoons die werd uitgeschakeld en PHS is echt niets mee? Ik heb eerst vijf oude telefoon te upgraden van uw oude telefoon te gebruiken
Basic Internet van dingen kader met Intel Edison

Basic Internet van dingen kader met Intel Edison

De Internet of Things-stack kan betrekking hebben op sensoren, kleine computerapparaten, on demand diensten en API's. Voor de meeste beginners is uitvoering van elke één van deze delen afzonderlijk goedkoop en eenvoudig, met verschillende opties die
Internet van dingen

Internet van dingen

Meten van de echte wereld dingen, draai een knop en een servo verplaatsen aan de andere kant van de wereld. Dit is mogelijk met een PC, maar nu is het mogelijk met behulp van goedkope boards en batterij of low power. Dit project maakt gebruik van pre
Internet van dingen met Raspberry Pi - 1

Internet van dingen met Raspberry Pi - 1

Toen ik was nieuw voor IOT (Internet van dingen), zag ik dat er nauwelijks tutorials die eenvoudig genoeg voor een beginner om te begrijpen en waren waren uit te proberen. Er was ofwel te veel technisch jargon, of de hardware te ingewikkeld was.Dus n
Nemen van elementaire elektronica met het Internet (IoT) | Home Lights

Nemen van elementaire elektronica met het Internet (IoT) | Home Lights

Dit is de tutorial vier van de serie waarbij ik overnemen elektronische apparaten die u normaal met behulp van een Arduino, met het internet via een vonk Core. Na te praten over de basics het tijd om het niveau een beetje verhogen en dagelijks elektr
Nemen van elektronica met het Internet (IoT) | Servo

Nemen van elektronica met het Internet (IoT) | Servo

Dit is de tutorial twee van de serie waarbij ik overnemen elektronische apparaten die u normaal met behulp van een Arduino, met het internet via een Vonk Core. Check out de vorige instructable zoals het dient als een basis en ik heb enkele details ov
Nemen van elementaire elektronica met het Internet (IoT)

Nemen van elementaire elektronica met het Internet (IoT)

Na het experimenteren en plezier met IoT met behulp van een Vonk Core, besefte ik dat kon overigens een serie tutorials omhoog op Instructables. Dus dit instructable is de eerste van een reeks instructables, waarin ik ga u laten zien hoe uw dagelijks
Control Home Appliances met telefoon en Internet van dingen onder de 6 $

Control Home Appliances met telefoon en Internet van dingen onder de 6 $

Ik wilde altijd al om te zetten op mijn Tv terwijl op mijn bank, of na een vermoeiende dag wanneer ik klaar bent met het lezen van een boek, voor zwenking vandoor mijn licht.Ik deed dit eerder met een Hc-05, en afstandsbediening.Update: Deze aangifte
Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

het hart van dit project is een) aansluiten van een sensor op de analoge ingang van de arduino en b) programmeren met de if... else-statement.dit specifieke project toont een computer koelsysteem te handhaven bepaalde temperatuur binnen een computer
Internet van dingen Toilet gebeurtenissen upload naar de Cloud (Raspberry PI)

Internet van dingen Toilet gebeurtenissen upload naar de Cloud (Raspberry PI)

Internet van dingen Toilet spoelen gebeurtenissen en toiletpapier roll verandering out evenementen naar Google Drive werkblad geüpload.Hoe werkt het? – Een aquarium vloeibare niveausensor vlotterschakelaar detecteert WC tank niveau; blozen verlaagt h