CS4985 Project: verkeer Scanner (4 / 5 stap)

Stap 4: Stap 4: codering van het apparaat

Nu dat we het allemaal hebben zetten samen, zijn tijd maken we het werk. Eerste dingen eerst, open te stellen uw Arduino software. Zorg ervoor dat u het juiste apparaat selecteert en start een nieuw project.

Zodra je klaar, zijn tijd om te beginnen met onze initiële setup. We beginnen met het definiëren van onze constanten, bestanden, en variabelen opnemen.

 #include #define trig 8 //Trig pin #define echo 9 //Echo pin #define serv 10 //Servo pin #define loopDuration 60 //Duration of scan loop #define alertDuration 30 //Duration of alert long duration, initialDistance, scannedDistance, timer, alertTimer; Servo servo; int servoPosition; bool alertMode; bool positiveMovement; 

Vervolgens is de setup. Hier zetten we onze eerste variabelen die we zullen meteen gebruiken. De positie van de servo is ingesteld, de pinnen zijn toegewezen en de eerste lezen is lezen. Er is over het algemeen een 2.1 seconden vertraging voordat de setup is voltooid.

 void setup() { servoPosition = 45; positiveMovement = 1; timer = 0; alertMode = 0; servo.attach(serv); servo.write(servoPosition); pinMode(trig, OUTPUT); pinMode(echo, INPUT); Serial.begin(9600); delay(1000); Serial.println("Initializing..."); delay(1000); Serial.println("Initialized."); initialScan(); delay(100); } 

Nu voor de hoofdlus. Het programma controleert de voorwaarden en zal uitvoeren op basis van het resultaat. Namelijk, als het programma in de alert modus is, het zal doen een specifieke scan alleen voor die modus. Als niet gecontroleerd als de lus is voorbij, en als dat zo is zal de servo naar een nieuwe positie verplaatsen en deelnemen aan een nieuwe lezing en opnieuw instellen van de timer. Anders zal het controleren op verkeer en verhogen van de timer.

 void loop() { if (alertMode) { alertScan(); } else if (timer > loopDuration ) { adjustServo(); initialScan(); timer = 0; } else { movementCheck(); timer++; } delay(10); } 

alertScan handgrepen informeren de gebruiker er geweest een probleem en het aftellen voor de alert duur. Als de waakzame tijd met geen problemen is, het beëindigen van de waarschuwing en terug te keren naar de normale scan. Anders zal het informeren van de gebruiker van de situatie en af te tellen.

 void alertScan() { if (alertTimer >= alertDuration) { alertMode = 0; initialScan(); Serial.println("Alert ended. Returning to normal."); delay(50); initialScan(); } else { Serial.print("Alert in progress. Time left: "); Serial.println(alertDuration - alertTimer); movementCheck(); alertTimer++; delay(10); } } 

initialScan krijgt de afstand die worden vergeleken met de rest van de scans. De sensor zal afgeven van ultrasone golven en dan lezen ze in. Het lezen in gegevens vervolgens wordt geconverteerd naar inches en weergegeven in de seriële monitor.

 void initialScan() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); initialDistance = duration / 148; //Converts to inches Serial.print("Monitoring Distance: "); Serial.print(initialDistance); Serial.println("\""); delay(100); } 

movementCheck doet het zelfde ding als initialScan, maar vergelijkt vervolgens de resultaten aan de aanvankelijk Lees in afstand. Als er geen problemen, dan is de lus blijft op. Anders wordt het de alertMode ingesteld op true.

 }void movementCheck() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); scannedDistance = duration / 148; delay(100); if (alertMode) { return; } if (scannedDistance > initialDistance + 2 || scannedDistance < initialDistance - 2) { Serial.print("Issue detected. Distance at: "); Serial.print(scannedDistance); Serial.println("\""); Serial.println("Alert in progress."); alertMode = 1; alertTimer = 0; timer -= 50; delay(10); } } 

adjustServo is wat de aanpassing van de huidige hoek van de sensor worden verwerkt. Momenteel gebruikt het 45, 90 en 135 graden, hoewel dit kan zijn aangepast hoe u nodig hebt. De vertraging na servo.write is om te compenseren voor verschuiven of beweging die anders problemen met de lezingen veroorzaken kan.

 void adjustServo() { if (alertMode) { Serial.println("Lockdown in progress."); return; } if (positiveMovement) { servoPosition+=45; } else if (!positiveMovement) { servoPosition-=45; } servo.write(servoPosition); delay(500); Serial.print("Current angle: "); Serial.println(servoPosition); if (servoPosition == 135) { positiveMovement = 0; } else if (servoPosition == 45) { positiveMovement = 1; } } 

Hier is de volledige code. Voel je vrij om te wijzigen en te gebruiken aangezien u pasvorm ziet.

 /* Nicholas RoweCS4985Movement Scanner */#include <Servo.h>#define trig 8 #define echo 9 #define serv 10 #define loopDuration 60 #define alertDuration 30 long duration, initialDistance, scannedDistance, timer, alertTimer; Servo servo; int servoPosition; bool alertMode; bool positiveMovement;void setup() { servoPosition = 45; positiveMovement = 1; timer = 0; alertMode = 0; servo.attach(serv); servo.write(servoPosition); pinMode(trig, OUTPUT); pinMode(echo, INPUT); Serial.begin(9600); delay(1000); Serial.println("Initializing..."); delay(1000); Serial.println("Initialized."); initialScan(); delay(100); }void loop() { if (alertMode) { alertScan(); } else if (timer > loopDuration ) { adjustServo(); initialScan(); timer = 0; } else { movementCheck(); timer++; } delay(10); }void alertScan() { if (alertTimer >= alertDuration) { alertMode = 0; initialScan(); Serial.println("Alert ended. Returning to normal."); delay(50); initialScan(); } else { Serial.print("Alert in progress. Time left: "); Serial.println(30 - alertTimer); movementCheck(); alertTimer++; delay(10); } }void initialScan() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); initialDistance = duration / 148; Serial.print("Monitoring Distance: "); Serial.print(initialDistance); Serial.println("\""); delay(100); }void movementCheck() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); scannedDistance = duration / 148; delay(100); if (alertMode) { return; } if (scannedDistance > initialDistance + 2 || scannedDistance < initialDistance - 2) { Serial.print("Issue detected. Distance at: "); Serial.print(scannedDistance); Serial.println("\""); Serial.println("Alert in progress."); alertMode = 1; alertTimer = 0; timer -= 50; delay(10); } }void adjustServo() { if (alertMode) { Serial.println("Lockdown in progress."); return; } if (positiveMovement) { servoPosition+=45; } else if (!positiveMovement) { servoPosition-=45; } servo.write(servoPosition); delay(500); Serial.print("Current angle: "); Serial.println(servoPosition); if (servoPosition == 135) { positiveMovement = 0; } else if (servoPosition == 45) { positiveMovement = 1; } } 

Gerelateerde Artikelen

Bouw een DIY Desktop 3d Scanner met oneindige resolutie.

Bouw een DIY Desktop 3d Scanner met oneindige resolutie.

Als u al een camera dan kost dit project minder dan $50 om te voltooien. Als je winkel op AliExpress kan je waarschijnlijk bouwen voor ongeveer $30. Als je ter ondersteuning van uw lokale tussenpersoon, meer macht ook u, maar het kost een beetje meer
Fading RGB toetsenbord licht

Fading RGB toetsenbord licht

Oude elektronica zijn overal verkrijgbaar en kunnen meestal worden gerecycled in coole gadgets en opgenomen in andere projecten. Dit Instructable doorloopt het proces van het gebruik van een oude scanner om een fading rainbow toetsenbord licht te mak
Goedkope digitale groot formaat Pinhole Camera (Hack stijl)

Goedkope digitale groot formaat Pinhole Camera (Hack stijl)

hoe te maken van alternatieve beeldvormende methoden uit in de buurt van verouderde materialen zoals oude flatbed-scanners met variabele resoluties en geweldige animatie-effecten dankzij de lineaire methode.Bekijk dit instructable voor het maken van
Maak een aangepaste 3D prothetische afdrukbare apparaat met behulp van gegevens uit een CT-scanner

Maak een aangepaste 3D prothetische afdrukbare apparaat met behulp van gegevens uit een CT-scanner

Dit Instructable illustreert hoe maak je een aangepaste 3D prothetische afdrukbare apparaat met behulp van gegevens uit een CT-scanner. In dit geval zal ik het proces voor het maken van een aangepaste luchtpijp stent illustreren. Dit Instructable bev
Golf JT - Larson Scanner met Joule dief

Golf JT - Larson Scanner met Joule dief

Ik hou van LED chasers. Een stelletje LEDs netjes draaien in- en uitschakelen op een precieze timing - lichten draait unidirectioneel, dan de andere kant... Het is ontspannen, rustgevende en hypnotische.Er zijn zoveel LED chaser/scanner/sequencer cir
De Cylon - Larson Scanner Kit - met Charlieplexing!

De Cylon - Larson Scanner Kit - met Charlieplexing!

Dit instructable dekt bouwen de kit die het resultaat van verschillende bouwstijlen, en vele herhalingen. Als u wilt meer informatie over eerdere pogingen en/of het ontwerp proces reactie hieronder en ik graven zal uit de oudere (en nog veel kleiner)
Ultra Low-Cost 3D Scanner

Ultra Low-Cost 3D Scanner

Onlangs, bouw ik zelf een 3D scanner die soort ok werkt, maar als gevolg van de goedkope prijs, het was erg traag en lage kwaliteit. Echter, het is een leuk project om te doen hoor.Stap 1: pre versieDit is een voorlopige versie van de 3D-Scanner. Zoa
Zelfgemaakte Smartphone Film Scanner

Zelfgemaakte Smartphone Film Scanner

Inleiding:Fotografie is een van mijn favoriete hobby., weg terug dan, ik gebruikte om mijn Kodak-camera, een analoge camera. Voor mij om te schieten of het nemen van enkele foto's in speciale gelegenheden, zoals kerst, verjaardagen of omstandigheden.
Telefoon van de Stand van de Scanner

Telefoon van de Stand van de Scanner

Als een leraar, ben ik altijd scannen van documenten (antwoord van sleutels, studentenwerk, enz.) en de scans op te slaan als PDF's. Jarenlang heb ik gebruiker de scanner functie op het kantoor fotokopieerapparaat. Nu, met het gebruik van een scanner
DIY 3D scanner gebaseerd op gestructureerde licht en stereo-visie in Python taal

DIY 3D scanner gebaseerd op gestructureerde licht en stereo-visie in Python taal

Deze 3D scanner is gemaakt met behulp van low-cost conventionele items zoals videoprojector en webcams. Een gestructureerd-licht 3D-scanner is een 3D scanner voor het meten van de driedimensionale vorm van een object met behulp van de geraamde lichte
Galaxy Scanner!  (zorg thuis planetaire foto's)

Galaxy Scanner! (zorg thuis planetaire foto's)

Tijd om te breken van de ol ' pulsars uit de kelder, wormgaten uit de lade van de ambachtelijke, planeten uit opslag in entrepot en Supernova uit de zolder, want het is tijd om te maken van een sterrenstelsel. Zoals Carl Sagan ooit zei, zijn"wij ster
Verkeer signaal / halte licht bedrading met Arduino Controller

Verkeer signaal / halte licht bedrading met Arduino Controller

ik wilde altijd al een oude verkeer signaal en eindelijk een onlangs.  Echter was het heel gewoon bedraad, zodat alle lichten werden vastgesteld op.  Wat leuk is dat?  Ik wilde proberen een Arduino controller en dacht dat dit zou een mooi eenvoudig p
Mislukt Project: Tow kind fiets

Mislukt Project: Tow kind fiets

het concept beschreven in deze Instructible is geïnspireerd op de bespreking in de commentarensectie van het onlangs gepubliceerde openproducts' 'ouder-kind Tandem' (juli 22, 2013 - op basis van een commercieel beschikbaar product) en kelseymh de Ins
GotMesh: De meest goedkope en simplistische 3D-scanner.

GotMesh: De meest goedkope en simplistische 3D-scanner.

heeft u gaas? is de meest goedkope en simplistische opensource 3D-scanner.Als je dit instructable, please vote voor het in de 3D printen wedstrijd 2016 .heeft u gaas? kunnen eigenaars van 3D printers gemakkelijk opnieuw gedetailleerde moeilijk te mod