IR kontrollerade låsmekanismen (4 / 6 steg)
Steg 4: Steg 4: Arduino kod
Jag kommer att gå sektionsvis diskutera de viktigaste funktionerna i koden. Tredjepartsbibliotek kan importeras från GitHub. Den LiquidCrystal och IRremote biblioteken finns på GitHub. Jag var tvungen att skapa biblioteket från början för HCSR04 Proximity Sensor (förhoppningsvis du kan hitta den bifogade ovan). I dessa bibliotek, kan du hitta de variabler som krävs för att skicka ett kommando eller anropa en funktion. Varje bibliotek har en C++ (programvara för kodning) och .h (förlängning header-fil). Om du skapar ditt eget bibliotek, måste du skapa båda dessa.
Nästa gå jag vidare till initiering av variablerna. Vi har flera klasser från Servo, IRremote, LiquidCrystal och HCSR04 bibliotek och de variabler som deklareras. Jag har också definierat flera av knapparna på fjärrkontrollen jag använde. Klassen LiquidCrystal instansierar ett LCD objekt som kallas "lcd". LCD adressen är 0x27 med 16 kolumner och 2 rader. HCSR04 Närhetssensor har två utlösare. "Trigger" PIN-koden är ansvarig för att skicka ut en puls. Denna puls antingen studsar tillbaka (ekon) eller får skingras i rymden. "Echo" PIN-koden får en flytande värde som tilldelats stift 8. Utlösaren tar i utlösta pulserar och konverterar värdet till centimeter (per min egen designade bibliotek). De avstånd som rörelsesensor tar emot definieras som flytande värden. De kunde har definierats som heltalsvärden men jag ville att mätningarna är korrekt och det innebär att de värden som läses har decimalvärden (ett exempel är 6.52 cm).
Flytta till setup, initiera jag i2C bussen på LCD-skärmen som jag använder. I2C i huvudsak minskar antalet stift som jag måste använda på min Arduino. Jag initiera bakgrundsbelysningen på LCD-skärmen också. Om du vill visa dina resultat på en seriell monitor måste du använda ett Serial.begin(baudrate) kommando för att fastställa hur många symboler att läsa. Detta startar kommunikationen mellan Arduino och seriell bildskärmen. Jag klar LCD-skärm om det finns några felaktiga symboler eller bokstäver på skärmen. Jag ställa markören till mitten av den första raden och välkomnar användaren till modulen. Det väntar en sekund och skärmen är avmarkerad igen. IR-mottagaren är redo att ta i värden från IR remote. Likaså flyttas servomotor till läge 0.
Slutligen, vi flytta till den viktigaste loopen. Distance1 deklareras som utlösare som skickas och tas emot. Det här värdet avläses närhet senor till Arduino i centimeter. last_distance har som namnet antyder. Det lagrar senaste avståndet som läses. Mer i detalj kommer att tillhandahållas om funktionen av dessa kommandon senare. Den om (irrecv.decode (& resultat)) kommandot används för att mappa adressen för varje knapptryckning. Varje knapp har en egen bitström är associerade med den. Eftersom detta projekt handlar om att öppna ett lås med ett angivet värde, måste detta kommando vara den första öglan i den viktigaste loopen. last_distance > distance1 jämför de värden som lagrats. Om föregående avståndet var större än det nuvarande avståndet är skärmen avmarkerad så det ingen finns vid dörren. På samma sätt om distance1 < = 7 (cm) så att användaren kommer att uppmanas att ange lösenordet. Endast ett värde fungerar (9). Alla andra värden (0-8) kommer att instruera användaren att försöka igen. Dock för värde = 9, dörren kommer att låsa upp och hälsa på användaren. Det finns också en nästlade for-loop i detta om uttalande. Den kapslade för loop gör motorn att sparka på och simulera låsa upp dörren. Avståndet < = 7 är här för att kontrollera om användaren är fortfarande på dörren eller om han/hon har gått inne eller vänster. Om användaren är fortfarande vid dörren, förblir dörren öppen. Dörren kommer att vara öppet i 4 sekunder att tillåta användaren att gå genom dörren och sedan det kommer fortsätta att stänga. Efter 4 sekunders fördröjning, är servomotor fristående. Jag gör detta för att förhindra överskott kraft levereras till motorn när den inte används. Dessutom har jag serial.println() kommandon för att visa resultaten på serial monitorn.
Som kort diskuterats tidigare, kommer att trycka på någon annan knapp inte aktivera motorn så jag var tvungen att se till att alla andra knappen inte göra någonting (värden för 0-8). LCD-skärmen uppmanas användaren att försöka igen. Om du har glömt ditt lösenord, kan du trycka på EQ-knappen och LCD-skärmen kommer att uppmana dig att betygsätta kursen. Det är en "Påminnelse" meddelande ordstav "påminnelse: på en skala från 0-9, hur AWESOME är denna klass?" Efter detta, kan rensar skärmen och du nu i det korrekta värdet 9.
Denna nästa kommando är mycket viktigt: irrecv.resume(); Om du inte lägger det här, att mottagaren inte längre kontrollera för en annan ingång. Det här kommandot förhindrar slingan låsa upp efter en iteration eller knappen press.
Om avståndet är större än 7 cm men mindre än 10 cm, symboliserar detta användaren närmar sig den modulen eller dörren. Du kommer igen instrueras att ange lösenordet.
Utgående ut slingan, jag har en sista om uttalande. Om senaste avståndet är större än det nuvarande avståndet, betyder det att användaren är ingenstans att finna. Dessutom, jag har den kontroll för att se till att användaren inte någonstans att ses av inklusive & & distance1 > 12 (cm). Detta betyder att någon var där och lämnade. Skärmen rensas igen. Det finns en nästlade for-loop som säger, okej jag såg att dörren öppnas, låsa flyttades till upplåst läge och nu jag kommer att flytta tillbaka till låst läge. Servomotor är ansluten och LCD-skärmen berättar personen hejdå. Motorn rör sig 35 grader tillbaka till låst läge. Efter servomotor görs med sin uppgift, är det återigen fristående för att förhindra överstyrning motorn och minimera kraften för att driva servomotor. Detta är slutet av slingan och kommer att köras kontinuerligt.