Innholdsfortegnelse:

Autolås datasystem: 4 trinn
Autolås datasystem: 4 trinn

Video: Autolås datasystem: 4 trinn

Video: Autolås datasystem: 4 trinn
Video: От нуля до 10000 долларов с помощью партнерского маркети... 2024, November
Anonim
Image
Image
Montering og opplasting
Montering og opplasting

I denne opplæringen skal vi utforske sikkerheten til dataskjermlås. Operativsystemer har en konfigurerbar timeout som låser skjermen hvis brukeren ikke har rørt musen eller tastaturet.

Vanligvis er standard rundt ett minutt. Hvis du følger denne standarden og lar datamaskinen være i et travelt miljø, kan noen få tilgang til datamaskinen i det minuttet til skjermen låses. Hvis du setter den til noen få sekunder, får du låseskjermen veldig ofte når du ikke berører tastaturet, og det er irriterende …

En dag spurte en arbeidskollega meg om jeg kan "fikse" dette problemet med en slags enhet som låser datamaskinen når han ikke er der, og jeg tok utfordringen:)

Jeg har utforsket flere alternativer i hodet mitt som å bruke arduinos og en infrarød termometersensor, PIR -sensor eller kanskje bruke ansiktsgjenkjenning på datamaskinen, men jeg har bestemt meg for en enklere metode:

Vi skal kombinere Arduino Leonardo HID -funksjonalitet (etterligne tastatur) med en ultralydavstandssensor for å oppdage om en person bruker datamaskinen, hvis ikke sender enheten en tastekombinasjon via USB for å låse datamaskinen.

Trinn 1: Komponenter

Fordi dette er et bevis på konseptet, skal vi bygge enheten på et brødbrett

Du vil trenge:

1. Arduino Leonardo (det er viktig å bruke Leonardo fordi det kan etterligne tastatur)

2. HC-SR04 ultralydavstandssensor

3. 2 x 10 K variable motstander

4. brødbrett, brødbrettledninger

5. USB -kabel

6. OLED -skjerm (https://www.adafruit.com/product/931)

Trinn 2: Montering og opplasting

Montering og opplasting
Montering og opplasting

Sjekk først om du har alle nødvendige komponenter og en Arduino IDE. Jeg skal kort gå til tilkoblingstrinnene, og du kan alltid ta en titt på den vedlagte fritzingsskjemaet

montering

1. Legg Leonardo på brødbrettet og hold det på plass med et gummibånd

2. Sett de to variable motstandene, OLED -displayet og ultralydsensoren på brødbrettet

3. koble bakken og vcc

4. koble de midterste pinnene på motstandene til arduino A0 og A1

5. koble SDA og SCL på displayet til SDA og SCL merket på Leonardo

6. koble utløseren og ekkopinnen til ultralydsensoren til de 12, 13 digitale pinnene på Leonardo

7. koble USB -en til datamaskinen

Laste opp

Først av alt må du laste ned og installere de nødvendige arduino -bibliotekene:

1. GOFi2cOLED bibliotek:

2. Ultrasonic-HC-SR04 bibliotek:

Hvis du ikke vet hvordan du installerer arduino -biblioteker, sjekk ut denne opplæringen.

Etter at du har lastet ned og installert bibliotekene ovenfor, kan du klone eller laste ned arduino -depotet mitt her: https://github.com/danionescu0/arduino, så bruker vi denne skissen: https://github.com/danionescu0 /arduino/tree/master …

Eller du kan kopiere og lime inn koden nedenfor:

/ * * Biblioteker som brukes av dette prosjektet: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #include "Wire.h" #include "GOFi2cOLED.h" #include "Ultrasonic.h"

GOFi2cOLED GOFoled;

Ultralyd ultralyd (12, 13);

const byte distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int actualDistance; usignert lang maxDistanceDetectionTime; bool lockTimerStarted = false;

ugyldig oppsett ()

{Serial.begin (9600); Keyboard.begin (); initializeDisplay (); }

hulrom ()

{clearDisplay (); actualDistance = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("låstidsur begynner"); } annet hvis (! shouldEnableLockTimer ()) {Serial.println ("låstidsur deaktivert"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Låseskjerm"); } forsinkelse (100); }

bool shouldLockScreen ()

{return lockTimerStarted && (millis () - maxDistanceDetectionTime) / 1000> getTimer (); }

bool shouldEnableLockTimer ()

{int allowDistance = percentMaxDistanceChangedAllowed / 100 * getDistance (); return getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> allowDistance; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Timer:", String (getTimer ())); setDisplayText (1, "ActualDistance:", String (actualDistance)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; String melding = ""; if (shouldLockScreen ()) {melding = "lås sendt"; } annet hvis (shouldEnableLockTimer () && countDown> = 0) {melding = ".." + String (countDown); } annet {melding = "nei"; } setDisplayText (1, "Låser:", melding); }

ugyldig initializeDisplay ()

{GOFoled.init (0x3C); GOFoled.clearDisplay (); GOFoled.setCursor (0, 0); }

void setDisplayText (byte fontSize, strengetikett, strengdata)

{GOFoled.setTextSize (fontSize); GOFoled.println (label + ":" + data); }

ugyldig doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

{GOFoled.clearDisplay (); GOFoled.setCursor (0, 0); }

int getActualDistance ()

{int distanceSum = 0; for (byte i = 0; i <10; i ++) {distanceSum+= ultralyd. Rangering (CM); }

returavstandSum / 10;

}

int getDistance ()

{returkart (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{returkart (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("trykke"); Keyboard.press (KEY_LEFT_CTRL); forsinkelse (10); Keyboard.press (KEY_LEFT_ALT); forsinkelse (10); Keyboard.write ('l'); forsinkelse (10); Keyboard.releaseAll (); }

Til slutt kobler du arduino -datamaskinen til ved hjelp av usb -kabelen, og laster opp skissen til arduinoen.

Trinn 3: Bruke enheten

Bruke enheten
Bruke enheten

Når arduino er koblet til datamaskinen vil den kontinuerlig overvåke avstanden foran sensoren og sende en "lås" skjermtastkombinasjon til datamaskinen hvis avstanden øker.

Enheten har noen konfigurasjoner:

1. Normal avstand, avstanden kan konfigureres ved hjelp av den variable motstanden som er koblet til A0. Avstanden vises også på OLED. Når avstanden vil øke med 25% fra den som er angitt, starter en nedtelling

2. Tidsavbrudd (nedtelling). Tiden i sekunder kan også konfigureres fra motstanden som er koblet til A1. Når tidsavbruddet utløper, blir låskommandoen sendt

3. Lås tastekombinasjon. Standard låsetastkombinasjon er konfigurert til å fungere for Ubuntu Linux 18 (CTRL+ALT+L). For å endre kombinasjonen må du endre skissen i henhold til operativsystemet:

4. Tidsavbrudd og avstandsbeskyttelse. Fordi dette er en enhet som etterligner tastaturet, er det en god idé å ha en mekanisme for å deaktivere tastaturfunksjonaliteten. I skissen min har jeg valgt at timeout og avstand må være større enn "1". (du kan endre det i koden hvis du vil)

Finn og endre funksjonen "lockScreen ()"

void lockScreen () {Serial.println ("trykke"); Keyboard.press (KEY_LEFT_CTRL); forsinkelse (10); Keyboard.press (KEY_LEFT_ALT); forsinkelse (10); Keyboard.write ('l'); forsinkelse (10); Keyboard.releaseAll (); }

For en fullstendig liste over arduino -spesialnøkler, sjekk her:

Trinn 4: Andre tilnærminger

Før denne implementeringen har jeg også vurdert noen andre implementeringer:

1. Infrarødt termometer (MLX90614 https://www.sparkfun.com/products/10740). Et infrarødt termometer er en enhet som måler temperatur ved å analysere infrarøde strålinger som sendes ut av et objekt på avstand. Jeg hadde en liggende og jeg tenkte at jeg kanskje kunne oppdage temperaturforskjellen foran datamaskinen.

Jeg har koblet det til, men temperaturforskjellen var veldig liten (når jeg var foran eller ikke) 1-2 grader og jeg trodde det ikke kunne være så pålitelig

2. PIR -sensor. (https://www.sparkfun.com/products/13285) Disse billige sensorene markedsføres som "bevegelsessensorer", men de oppdager virkelig endringer i infrarød stråling, så i teorien kan det fungere, når en person forlater datamaskinen, ville sensoren oppdage at.. Disse sensorene har også en innebygd tidsavbrudd og følsomhetsknapper. Så jeg har koblet til en og lekt med den, men det ser ut til at sensoren ikke er laget for nært hold (den har vidvinkel), den ga alle slags falske varsler.

3. Ansiktsgjenkjenning ved hjelp av webkameraet. Dette alternativet virket veldig interessant, da jeg lekte med dette datamaskinfeltet i mine andre prosjekter som: https://github.com/danionescu0/robot-camera-platfo… og https://github.com/danionescu0/image-processing- pr…

Dette var et stykke kake! Men det var noen ulemper: Det bærbare kameraet kunne ikke brukes til andre formål når programmet kjørte, og det ville kreves noen datamaskinressurser for det. Så jeg har droppet denne ideen også.

Hvis du har flere ideer om hvordan dette kan gjøres, vennligst del dem, takk!

Anbefalt: