รหัสล็อค Arduino พร้อมการ์ด SD ล็อค "สมาร์ท" อัตโนมัติและ Arduino การพัฒนาต่อไปของโครงการ "ปราสาทสมาร์ท"

มันเกิดขึ้นที่เราตัดสินใจที่จะติดตั้งรหัสล็อคที่ประตูของคุณในที่ทำงานเพราะเราทำงานอยู่ตลอดเวลา - เราหมดสำนักงานประตูที่ควรปิดตลอดเวลาในกรณีที่ไม่มีผู้อยู่อาศัยอยู่ตลอดเวลา คีย์มักจะถูกลืมไปข้างใน โดยทั่วไปแล้วพวกเขาตัดสินใจว่ารหัสล็อคเป็นวิธีที่ยอดเยี่ยม

ฉันค้นหาตลาดนัดจีนและอีเบย์ฉันไม่พบสิ่งที่ราคาถูกกว่าและจริงจังมากขึ้นหรือน้อยลงและตัดสินใจที่จะทำให้มันเป็นมือของตัวเอง ฉันจะทำการจองทันทีว่าแพลตฟอร์ม Arduino ถูกเลือกเพื่อความเรียบง่ายเนื่องจากประสบการณ์การสื่อสารกับไมโครคอนโทรลเลอร์ไม่ได้เลย

ความคิด

ที่ประตูที่มีด้านนอกของประตูควรมีแป้นพิมพ์ที่ป้อนรหัสผ่านส่วนที่เหลือของการออกแบบได้รับการแก้ไขที่ด้านใน เพื่อควบคุมการปิดประตูเต็มรูปแบบโดย Geron ใช้ ออกไปจากคณะรัฐมนตรีบุคคลนั้นกดแป้นพิมพ์ "*" และโดยไม่ต้องรอจนกว่าประตูจะอยู่ใกล้เข้ามาในกิจการของเขาเมื่อประตูถูกปิดอย่างสมบูรณ์ Geron ปิดและล็อคจะปิด ประตูเปิดขึ้นโดยป้อนรหัสผ่าน 4x หลักและคลิกที่ "#"

เครื่องประดับ

Arduino UNO \u003d $ 18
Arduino Protoshield + เขียงหั่นขนม \u003d $ 6
L293D \u003d $ 1
Punch of Wires 30 ชิ้นสำหรับ Braddatrad \u003d $ 4
2 ซ็อกเก็ต RJ45 \u003d $ 4
2 ปลั๊ก RJ45 \u003d $ 0.5
Actuator ล็อคกลาง \u003d 250 รูเบิล
Geron \u003d แช่แข็งฟรีจากหน้าต่างเก่า
จักรเย็บผ้าโลหะขนาดยักษ์ \u003d ฟรี
กรณีจากฮับเก่า D-Link จากเหล็กหนึ่งถึงครึ่งล้าน \u003d ฟรี
แหล่งจ่ายไฟจาก D-Link Hub เดียวกันเป็นเวลา 12 และ 5V \u003d ฟรี
สกรูและถังมากมายสำหรับการยึดทั้งหมดที่ดีต่อตัวเรือน \u003d 100 รูเบิล
แผงควบคุม ot สัญญาณเตือนความปลอดภัย \u003d ฟรี

รวม: $ 33.5 และ 350 รูเบิล

ไม่เพียงเล็กน้อยคุณจะพูดและคุณจะถูกต้องแน่นอน แต่เพื่อความสุขที่คุณต้องจ่าย! และคุณก็ดีเสมอที่จะรวบรวมบางสิ่งบางอย่าง ก่อนที่การออกแบบจะชะลอตัวลงหากคุณใช้ MK ที่เปลือยเปล่าโดยไม่มี Arduino

การเตรียมการสำหรับการชุมนุม

ฉันต้องการพูดคำสองสามคำเกี่ยวกับการซื้อองค์ประกอบสำคัญของการออกแบบแอคชูเอเตอร์ ในร้านค้าอัตโนมัติในพื้นที่ฉันได้รับการเสนอแอคชูเอเตอร์สองประเภท: "มีสองสายและห้า" ตามที่พนักงานขายพวกเขาเหมือนกันอย่างแน่นอนและความแตกต่างในจำนวนของสายไฟไม่ได้หมายความว่าไม่มีอะไรเลย อย่างไรก็ตามเมื่อปรากฎในภายหลังมันไม่เป็นเช่นนั้น! ฉันเลือกอุปกรณ์ที่มีสองสายมันได้รับอาหารจาก 12V ในการออกแบบที่มีห้าสายมีการติดตั้งสวิตช์ จำกัด ซึ่งช่วยให้คุณสามารถควบคุมการเคลื่อนไหวของคันโยกได้ ฉันรู้ว่าฉันไม่ได้ซื้อมันเท่านั้นเมื่อฉันถอดชิ้นส่วนเขาและเปลี่ยนสาย เส้นทางของคันโยกกลายเป็นสั้นเกินไปที่จะผลักดันเทปตามปกติดังนั้นจึงจำเป็นต้องปรับเปลี่ยนมันเล็กน้อยคือการถอดเครื่องซักผ้ายางสองตัวสั้นลงก้านคันแอคชูเอเตอร์ สำหรับสิ่งนี้ร่างกายต้องตัดเลคซอกตามปกติเพราะเครื่องซักผ้าที่สองอยู่ข้างใน เทปสีน้ำเงินเราเช่นเดียวกับช่วยเราในอนาคตเมื่อประกอบมันกลับมา
ในการควบคุมมอเตอร์มอเตอร์มอเตอร์ L293D ถูกนำมาใช้ซึ่งทนต่อการโหลดสูงสุดถึง 1200 mA เมื่อหยุดเครื่องยนต์ของแอคชูเอเตอร์โหลดสูงสุดที่เพิ่มขึ้นถึง 600 mA
การควบคุมจากแป้นพิมพ์พลวัตและไฟ LED สองดวงถูกลบออกจากแผงควบคุมการเตือนภัยควบคุม คอนโซลและอุปกรณ์หลักควรเชื่อมต่อโดยใช้คู่บิดและตัวเชื่อมต่อ RJ45

การเขียนโปรแกรม

ดังนั้นในฐานะที่เป็นประสบการณ์การเขียนโปรแกรม Arduino ฉันยังไม่เคยไปไกล ฉันใช้ประโยชน์จากงานและบทความของคนอื่นจากเว็บไซต์ Arduino.cc ใครสนใจสามารถดูรหัสที่น่าเกลียดนี้ :)

ภาพถ่ายและวิดีโอ



Arduino และ Actuator


แหล่งจ่ายไฟ


แป้นพิมพ์


จักรเย็บผ้า (เชื่อมต่อกับแอคชูเอเตอร์ด้วยเข็มโลหะและที่ความร้อนหดตัวเพื่อความงาม)

การใช้งานวิดีโอของอุปกรณ์:

ความคืบหน้าไม่ได้ยืนนิ่งและ "ปราสาทสมาร์ท" กำลังปรากฏตัวมากขึ้นในประตูของอพาร์ทเมนอพาร์ทเมนท์โรงรถและบ้าน

ล็อคที่คล้ายกันจะเปิดขึ้นเมื่อคุณกดปุ่มบนสมาร์ทโฟน โชคดีที่สมาร์ทโฟนและแท็บเล็ตได้ป้อนการใช้งานของเราแล้ว ในบางกรณี "Smart Locks" เชื่อมต่อกับ "บริการคลาวด์" เช่นเดียวกับดิสก์ Google และเปิดจากระยะไกล นอกจากนี้ตัวเลือกนี้ทำให้สามารถเข้าถึงการเปิดประตูกับคนอื่นได้

โครงการนี้จะถูกนำไปใช้โดยรุ่น DIY ของ Smart Lock บน Arduino ซึ่งสามารถจัดการจากระยะไกลจากจุดใด ๆ ของพื้นดิน

นอกจากนี้โครงการเพิ่มความสามารถในการเปิดล็อคหลังจากการระบุลายนิ้วมือ เมื่อต้องการทำเช่นนี้เซ็นเซอร์ลายนิ้วมือจะถูกรวมเข้าด้วยกัน ตัวเลือกทั้งสองสำหรับการเปิดประตูจะทำงานบนพื้นฐานของแพลตฟอร์ม Adafruit IO

ปราสาทที่คล้ายกันอาจเป็นขั้นตอนแรกที่ยอดเยี่ยมในโครงการสมาร์ทโฮมของคุณ

การตั้งค่าเซ็นเซอร์ลายนิ้วมือ

ในการทำงานกับเซ็นเซอร์ลายนิ้วมือมีห้องสมุดที่ยอดเยี่ยมสำหรับ Arduino ซึ่งอำนวยความสะดวกในการปรับเปลี่ยนเซ็นเซอร์อย่างมาก Arduino Uno ใช้ในโครงการนี้ Adafruit CC3000 ใช้เชื่อมต่อกับอินเทอร์เน็ต

เริ่มเชื่อมต่อพลังงานกัน:

  • เชื่อมต่อผู้ติดต่อ 5V จากกระดาน Arduino ไปที่ Red Rail;
  • การติดต่อ GND กับ Arduino เชื่อมต่อกับรถไฟสีน้ำเงินบนแผงวงจรที่ไม่ธรรมดา

ไปที่การเชื่อมต่อของเซ็นเซอร์ลายนิ้วมือ:

  • ก่อนเชื่อมต่อพลังงาน เมื่อต้องการทำเช่นนี้ลวดสีแดงเชื่อมต่อกับราง +5 V และสีดำ - ด้วยราง GND;
  • ลวดเซ็นเซอร์สีขาวเชื่อมต่อกับ 4 ถึง Arduino
  • กรีนไวร์ไปติดต่อ 3 บนไมโครคอนโทรลเลอร์

ตอนนี้เราจะจัดการกับโมดูล CC3000:

  • ติดต่อ IRQ จาก CC3000 การ์ดเชื่อมต่อกับ PIN 2 บน Arduino
  • VBAT - เพื่อติดต่อ 5
  • CS - เพื่อติดต่อ 10
  • หลังจากนั้นคุณต้องเชื่อมต่อผู้ติดต่อ SPI กับ Arduino: Mosi, MISO และ CLK เพื่อติดต่อ 11, 12 และ 13 ตามลำดับ

ในตอนท้ายจำเป็นต้องให้อาหาร: Vin - ถึง Arduino 5V (Red Rail บนกระดานติดตั้งของคุณ) และ GND ถึง GND (Blue Rail บน Laype)

รูปถ่ายของโครงการประกอบอย่างเต็มที่แสดงอยู่ด้านล่าง:

ก่อนที่จะพัฒนาร่างซึ่งจะโหลดข้อมูลใน Adafruit IO คุณต้องถ่ายโอนข้อมูลเกี่ยวกับเซ็นเซอร์ลายนิ้วมือของคุณ มิฉะนั้นในอนาคตเขาไม่รู้จักคุณ;) เราขอแนะนำให้ปรับเทียบเซ็นเซอร์ลายนิ้วมือโดยใช้ Arduino แยกต่างหาก หากคุณทำงานกับเซ็นเซอร์นี้เป็นครั้งแรกเราขอแนะนำให้อ่านกระบวนการสอบเทียบและคำแนะนำโดยละเอียดสำหรับการทำงานกับเซ็นเซอร์ลายนิ้วมือ

หากคุณยังไม่ได้ทำสิ่งนี้คุณจะเริ่มต้นบัญชีใน Adafruit IO

หลังจากนั้นเราสามารถดำเนินการต่อไปยังขั้นต่อไปของการพัฒนา "สมาร์ทล็อค" บน Arduino: ได้แก่ การพัฒนาร่างซึ่งจะส่งข้อมูลใน Adafruit IO เนื่องจากโปรแกรมค่อนข้างยอดเยี่ยมในบทความเราจะเน้นและพิจารณาเฉพาะชิ้นส่วนหลักของมันจากนั้นให้ลิงค์ไปที่ GitHub ซึ่งคุณสามารถดาวน์โหลดร่างเต็มรูปแบบได้

Skatch เริ่มต้นด้วยการโหลดไลบรารีที่จำเป็นทั้งหมด:

#include

#include

#include

#include "adafruit_mqtt.h"

#include "adafruit_mqtt_cc3000.h"

#include

#include >

หลังจากนั้นคุณต้องแก้ไขภาพร่างอย่างถูกต้องใส่พารามิเตอร์ของเครือข่าย WiFi ของคุณโดยการระบุ SSID และรหัสผ่าน (รหัสผ่าน):

#define wlan_security wlan_sec_wpa2\u003e

นอกจากนี้คุณต้องป้อนชื่อและคีย์ AIO (คีย์) เพื่อป้อนบัญชี Adafruti IO ของคุณ:

#define aio_serverport 1883

#define aio_username "adafruitic"

#define aio_key "adafruit_io_key"\u003e

บรรทัดต่อไปนี้รับผิดชอบการโต้ตอบและการประมวลผลข้อมูลจากเซ็นเซอร์ลายนิ้วมือ หากเปิดใช้งานเซ็นเซอร์แล้ว (สำนักพิมพ์ของความใกล้เคียง) จะเป็น "1":

const Char Fingerprint_Feed Progmem \u003d AIO_USERNAME "/ Feeds / ลายนิ้วมือ";

adafruit_mqtt_publish ลายนิ้วมือ \u003d adafruit_mqtt_publish (& mqtt, fingerprint_feed);

นอกจากนี้คุณต้องสร้างอินสแตนซ์ของวัตถุ SoftwareSerial สำหรับเซ็นเซอร์ของเรา:

Softwareserial Myserial (3, 4);

หลังจากนั้นเราสามารถสร้างวัตถุสำหรับเซ็นเซอร์ของเรา:

adafruit_fingerprint finger \u003d adafruit_fingerprint (& myserial);

ข้างในร่างเราระบุว่านิ้วที่ควรเปิดใช้งานล็อคในอนาคต ตัวอย่างนี้ใช้ 0 ที่สอดคล้องกับรหัสลายนิ้วมือแรกซึ่งใช้โดยเซ็นเซอร์:

int fingerid \u003d 0;

หลังจากนั้นเริ่มต้นเคาน์เตอร์และความล่าช้า (ล่าช้า) ในโครงการของเรา ในสาระสำคัญเราต้องการให้ล็อคทำงานโดยอัตโนมัติหลังจากเปิด ตัวอย่างนี้ใช้ความล่าช้า 10 วินาที แต่คุณสามารถปรับค่านี้ตามความต้องการของคุณเอง:

int activationcounter \u003d 0;

int lastactivation \u003d 0;

การเปิดใช้งาน int \u003d 10 * 1,000;

ในร่างกายของฟังก์ชั่นการตั้งค่า () เราจะเริ่มต้นเซ็นเซอร์ลายนิ้วมือและตรวจสอบการเชื่อมต่อของชิป CC3000 ไปยังเครือข่าย WiFi ของคุณ

ในร่างกายของวงดนตรี () ฟังก์ชั่นเชื่อมต่อกับ adafruit io บรรทัดต่อไปนี้เป็นผู้รับผิดชอบ:

หลังจากเชื่อมต่อกับแพลตฟอร์ม Adafruit IO ตรวจสอบลายนิ้วมือสุดท้าย ถ้ามันเกิดขึ้นพร้อมกันและล็อคจะไม่เปิดใช้งานเราส่ง "1" สำหรับการประมวลผลใน Adafruit IO:

ถ้า (fingerprintid \u003d\u003d fingerid && lockstate \u003d\u003d false) (

serial.println (f ("การเข้าถึงที่ได้รับ!));

lockstate \u003d true;

serial.println (f ("ล้มเหลว"));

serial.println (f ("ตกลง!"));

lastactivation \u003d Millis ();

หากภายในฟังก์ชั่นลูป () การล็อคถูกเปิดใช้งานและเราถึงค่าความล่าช้าซึ่งถูกระบุไว้ข้างต้นส่ง "0":

ถ้า ((เปิดใช้งานการเปิดใช้งาน - Lastactivation\u003e เวลาเปิดใช้งาน) && lockstate \u003d\u003d true) (

lockstate \u003d false;

ถ้า (! fingerprint.publish (รัฐ)) (

serial.println (f ("ล้มเหลว"));

serial.println (f ("ตกลง!"));

คุณสามารถดาวน์โหลดรหัสเวอร์ชันล่าสุดใน GitHub

ได้เวลาทดสอบโครงการของเราแล้ว! อย่าลืมดาวน์โหลดและติดตั้งไลบรารีที่จำเป็นทั้งหมดสำหรับ Arduino!

ตรวจสอบให้แน่ใจว่าคุณได้ทำการเปลี่ยนแปลงที่จำเป็นทั้งหมดในภาพร่างและดาวน์โหลดไปยัง Arduino ของคุณ หลังจากนั้นเปิดหน้าต่างมอนิเตอร์แบบอนุกรม

เมื่อ Arduino เชื่อมต่อกับเครือข่าย WiFi เซ็นเซอร์ลายนิ้วมือจะกะพริบสีแดง ตำนานนิ้วของคุณไปที่เซ็นเซอร์ หน้าต่าง Monitor Serial ควรปรากฏหมายเลข ID ถ้ามันเกิดขึ้นตรงข้อความจะปรากฏขึ้น "ตกลง!" ซึ่งหมายความว่าข้อมูลถูกส่งไปยังเซิร์ฟเวอร์ Adafruit IO

Scheme และ Sketch สำหรับการตั้งค่าการล็อคเพิ่มเติมบนตัวอย่างของ LED

ตอนนี้เราจะจัดการกับส่วนของโครงการที่รับผิดชอบโดยตรงในการจัดการล็อคประตู ในการเชื่อมต่อกับเครือข่ายไร้สายและเปิดใช้งาน / ปิดใช้งานล็อคคุณจะต้องใช้โมดูล Adafruti ESP8266 ที่เป็นตัวเลือก (โมดูล ESP8266 ไม่จำเป็นต้องมาจาก Adafruit) ในตัวอย่างที่เราจะพิจารณาด้านล่างคุณจะสามารถประเมินว่ามันง่ายแค่ไหนเพื่อให้แน่ใจว่าการแลกเปลี่ยนข้อมูลระหว่างสองแพลตฟอร์ม (Arduino และ ESP8266) โดยใช้ Adafruit IO

ในส่วนนี้เราจะไม่ทำงานโดยตรงกับการล็อค แต่เราเพียงแค่เชื่อมต่อนำไปสู่การติดต่อที่ล็อคจะเชื่อมต่อต่อไปนี้ สิ่งนี้จะให้โอกาสในการทดสอบรหัสของเราโดยไม่ต้องลึกลงไปในคุณสมบัติของการออกแบบปราสาท

โครงการนี้ค่อนข้างง่าย: ตั้งค่า ESP8266 ก่อนบนเขียง หลังจากนั้นให้ตั้งค่า LED อย่าลืมว่าขายาว (บวก) ของ LED เชื่อมต่อผ่านตัวต้านทาน เท้าตัวต้านทานที่สองเชื่อมต่อกับการติดต่อ 5 ในโมดูล ESP8266 ที่สอง (แคโทด) ของ LED เชื่อมต่อกับ PIN GND ใน ESP8266

เต็มที่ รวบรวมโครงการ แสดงในภาพด้านล่าง


ลองคิดดูด้วยภาพร่างที่ใช้สำหรับโครงการนี้ อีกครั้งรหัสค่อนข้างใหญ่และซับซ้อนดังนั้นเราจะพิจารณาเฉพาะชิ้นส่วนหลักเท่านั้น:

เราเริ่มต้นด้วยการเชื่อมต่อของไลบรารีที่จำเป็น:

#include

#include "adafruit_mqtt.h"

#include "adafruit_mqtt_client.h"

กำหนดค่า wifi:

#define wlan_ssid "your_wifi_ssid"

#define wlan_pass "your_wifi_pall"

#define wlan_security wlan_sec_wpa2

นอกจากนี้ยังกำหนดค่าพารามิเตอร์ของ Adafruit IO เช่นเดียวกับในส่วนก่อนหน้า:

#define aio_server "io.adafruit.com"

#define aio_serverport 1883

#define aio_username "adafruit_io_" ผู้ใช้ "

#define aio_key "adafruit_io_key"

เราระบุว่าต้นสนที่เราเชื่อมต่อ LED (ในอนาคตมันจะเป็นล็อคหรือรีเลย์ของเรา):

int relaypin \u003d 5;

การโต้ตอบกับเซ็นเซอร์ลายนิ้วมือเช่นเดียวกับในส่วนก่อนหน้า:

const ถ่าน char_feed progmem \u003d aio_username "/ ฟีด / ล็อค";

adafruit_mqtt_subscribe lock \u003d adafruit_mqtt_subscribe (& mqtt, lock_feed);

ในฟังก์ชั่นของการตั้งค่า () เราระบุว่าหมุดที่ LED เชื่อมต่อควรทำงานในโหมดเอาต์พุต:

pinMode (Relaypin, เอาท์พุท);

ภายในวงจรลูป () ตรวจสอบครั้งแรกว่าเราเชื่อมต่อกับ Adafruit IO:

หลังจากนั้นตรวจสอบว่าสัญญาณใดมา หากส่งสัญญาณ "1" ให้เปิดใช้งานผู้ติดต่อที่เราได้ประกาศก่อนหน้านี้ที่ LED ของเราเชื่อมต่อ ถ้าเราได้รับ "0" เราแปลผู้ติดต่อไปยังสถานะ "ต่ำ":

adafruit_mqtt_subscribe * สมัครสมาชิก;

ในขณะที่ ((การสมัครสมาชิก \u003d mqtt.readsubscription (1000))) (

ถ้า (การสมัครสมาชิก \u003d\u003d & ล็อค) (

Serial.print (F ("ได้รับ:"));

serial.println ((ถ่าน *) lock.lasttread);

// บันทึกคำสั่งไปยังข้อมูลประเภทข้อมูล

string command \u003d string (char *) lock.lasttread);

ถ้า (คำสั่ง \u003d\u003d "0") (

digitalWrite (Relaypin, Low);

ถ้า (คำสั่ง \u003d\u003d "1") (

digitalWrite (Relaypin, High);

การค้นหา รุ่นล่าสุด ร่างที่คุณสามารถทำได้ใน GitHub

ได้เวลาทดสอบโครงการของเราแล้ว อย่าลืมดาวน์โหลดไลบรารีที่จำเป็นทั้งหมดสำหรับ ARDUINO ของคุณและตรวจสอบว่าคุณได้ทำการเปลี่ยนแปลงร่างร่างหรือไม่

ในการตั้งโปรแกรมชิป ESP8266 คุณสามารถใช้ตัวแปลง USB-FTDI ที่เรียบง่าย

โหลด Skatch บน Arduino และเปิดหน้าต่าง Monitor Serial ในขั้นตอนนี้เราเพียงตรวจสอบว่าจะเชื่อมต่อกับ Adafruti IO: ฟังก์ชั่นราคาไม่แพงที่เราจะมองต่อไป

โครงการทดสอบ

ตอนนี้ไปทดสอบต่อไปแล้ว! ไปที่เมนูผู้ใช้ Adafruit IO ของคุณในเมนูฟีด ตรวจสอบสร้างหรือไม่มีช่องทางสำหรับลายนิ้วมือและล็อค (บนหน้าจอพิมพ์ด้านล่างเป็นลายนิ้วมือแถวและล็อค):


หากไม่มีคุณต้องสร้างด้วยตนเอง

ตอนนี้เราจำเป็นต้องให้การแลกเปลี่ยนข้อมูลระหว่าง Fingerprint และช่องล็อค ช่องล็อคต้องทำให้ค่า "1" เมื่อช่องนิ้วลายนิ้วมือใช้ค่า "1" และในทางกลับกัน

ในการทำเช่นนี้ใช้เครื่องมือที่ทรงพลังมาก Adafruit IO: ทริกเกอร์ ทริกเกอร์อยู่ในสภาพสาระสำคัญที่คุณสามารถนำไปใช้กับช่องที่กำหนดค่าได้ นั่นคือพวกเขาสามารถใช้เพื่อประสานสองช่องทาง

สร้างทริกเกอร์ปฏิกิริยาใหม่จากส่วนทริกเกอร์ใน Adafruit IO สิ่งนี้จะให้ความสามารถในการแลกเปลี่ยนข้อมูลระหว่างช่องสัญญาณเซ็นเซอร์ลายนิ้วมือและปราสาท:


นี่คือวิธีที่ควรดูเมื่อทริกเกอร์ทั้งสองถูกปรับแต่ง:

ทุกอย่าง! ตอนนี้เราสามารถทดสอบโครงการของเราได้จริงๆ! ใช้นิ้วของคุณกับเซ็นเซอร์และดูเมื่อ Arduino เริ่มขยิบตาโดย LED ซึ่งสอดคล้องกับการส่งข้อมูล หลังจากนั้น LED จะกะพริบบนโมดูล ESP8266 ซึ่งหมายความว่าเขาเริ่มรับข้อมูลผ่าน MQTT ไฟ LED บนแผงวงจร ณ จุดนี้ควรเปิด

หลังจากความล่าช้าซึ่งคุณติดตั้งในภาพร่าง (ตามค่าเริ่มต้นค่านี้คือ 10 วินาที) LED จะปิด ขอแสดงความยินดี! คุณสามารถควบคุม LED ด้วยลายนิ้วมือได้ที่จุดใดก็ได้ในโลก!

ปรับแต่งปราสาทอิเล็กทรอนิกส์

เราไปถึงส่วนสุดท้ายของโครงการ: การเชื่อมต่อโดยตรงและการควบคุมของล็อคอิเล็กทรอนิกส์โดยใช้ Arduino และเซ็นเซอร์ลายนิ้วมือ โครงการไม่ใช่เรื่องง่ายคุณสามารถใช้แหล่งที่มาทั้งหมดในรูปแบบที่ตั้งค่าสูงขึ้น แต่แทนที่จะเป็นไฟ LED เพื่อเชื่อมต่อรีเลย์

ในการเชื่อมต่อล็อคโดยตรงคุณจะต้องมีส่วนประกอบเพิ่มเติม: แหล่งจ่ายไฟถึง 12 V, แจ็คสำหรับแหล่งจ่ายไฟทรานซิสเตอร์ (ในตัวอย่างนี้ใช้ IRLB8721PBF MOSFET แต่คุณยังสามารถใช้อีกตัวอย่างเช่น TIP102 ทรานซิสเตอร์สองขั้วหากคุณ ใช้ทรานซิสเตอร์ bipolar คุณจะต้องเพิ่มตัวต้านทาน

แสดงด้านล่าง วงจรไฟฟ้า การเชื่อมต่อคอมโพเนนต์ทั้งหมดไปยังโมดูล ESP8266:


โปรดทราบว่าหากคุณใช้ทรานซิสเตอร์ MOSFET คุณจะไม่ต้องการตัวต้านทานระหว่าง PIN 5 ของโมดูล ESP8266 และทรานซิสเตอร์

โครงการประกอบอย่างเต็มที่แสดงอยู่ในภาพด้านล่าง:


คลื่นโมดูล ESP8266 โดยใช้โมดูล FTDI และเชื่อมต่อแหล่งจ่ายไฟ 12 V ถึงแจ็ค หากคุณใช้หมุดที่แนะนำเพื่อเชื่อมต่อคุณไม่จำเป็นต้องเปลี่ยนอะไรในภาพร่าง

ตอนนี้คุณสามารถเชื่อมนิ้วของคุณกับเซ็นเซอร์: ล็อคต้องทำงานตอบสนองลายนิ้วมือของคุณ วิดีโอด้านล่างแสดงโครงการของปราสาท "สมาร์ท" อัตโนมัติในการดำเนินการ:

การพัฒนาต่อไปของโครงการ "ปราสาทสมาร์ท"

ในโครงการของเราเปิดตัวการควบคุมระยะไกลของล็อคประตูโดยใช้ลายนิ้วมือ

คุณสามารถทดสอบอย่างปลอดภัยปรับเปลี่ยนร่างและรัด ตัวอย่างเช่นคุณสามารถแทนที่ล็อคประตูอิเล็กทรอนิกส์บนรีเลย์เพื่อจัดการเครื่องพิมพ์ 3 มิติของคุณหุ่นยนต์หรือ quadcopter ...

คุณสามารถพัฒนา " บ้านอัจฉริยะ"ตัวอย่างเช่นเปิดใช้งานระบบการชลประทานจากระยะไกลบน Arduino หรือรวมถึงแสงในห้อง ... อย่าลืมว่าคุณสามารถเปิดใช้งานอุปกรณ์ที่ไม่ จำกัด จำนวนเกือบไม่ จำกัด โดยใช้ Adafruit IO

แสดงความคิดเห็นคำถามและแบ่งปันของคุณ ประสบการณ์ส่วนตัว ด้านล่าง. ความคิดและโครงการใหม่มักเกิดในการอภิปราย!

เมื่อวันก่อนฉันทบทวนภาพยนตร์เรื่องนี้ "ใหม่เดอร์แมน" และในขั้นตอนเดียว Peter Parker เปิดออกจากระยะไกลและปิดประตูจากแล็ปท็อปของเขา ทันทีที่ฉันเห็นมันฉันรู้ทันทีว่าฉันต้องการล็อคอิเล็กทรอนิกส์ที่ประตูหน้า

แบริ่งฉันรวบรวมแบบจำลองที่ถูกต้องของปราสาทสมาร์ท ในบทความนี้ฉันจะบอกคุณว่าฉันรวบรวมเธออย่างไร

ขั้นตอนที่ 1: รายการวัสดุ





ในการรวบรวมล็อคอิเล็กทรอนิกส์บน Arduino คุณจะต้องใช้วัสดุต่อไปนี้:

อิเล็กทรอนิกส์:

  • อะแดปเตอร์ผนัง 5V

ส่วนประกอบ:

  • สกรู 6 สกรูสำหรับลำไส้
  • กระดาษแข็ง
  • สายไฟ

เครื่องมือ:

  • หัวแร้ง
  • ปืนกาว
  • เจาะ
  • เจาะ
  • เจาะรูไกด์
  • มีดเครื่องเขียน
  • คอมพิวเตอร์ที่มี Arduino IDE

ขั้นตอนที่ 2: วิธีการทำงานของปราสาท

ความคิดคือฉันสามารถเปิดหรือปิดประตูได้โดยไม่มีกุญแจและแม้กระทั่งไม่เข้ามา แต่นี่เป็นเพียงแนวคิดหลักเพราะคุณยังสามารถเพิ่มเซ็นเซอร์การระเบิดเพื่อให้มันตอบสนองต่อการเคาะพิเศษหรือคุณสามารถเพิ่มระบบจดจำเสียงได้!

คันโยกเซอร์โวที่เชื่อมต่อกับ Scorelet จะปิด (0 °) และเปิด (60 °) โดยใช้คำสั่งที่ได้รับผ่านโมดูลบลูทู ธ

ขั้นตอนที่ 3: รูปแบบการติดตั้งลวด


ก่อนอื่นให้เชื่อมต่อ Servo กับคณะกรรมการ Arduino (ฉันต้องการทราบว่าแม้ว่าฉันจะใช้ค่าธรรมเนียม ARDUINO NANO ในคณะกรรมการ UNO ซึ่งเป็นที่ตั้งของข้อสรุปนั้นเหมือนกัน)

  • servo ลวดสีน้ำตาล - ดินเชื่อมต่อกับพื้นดินบน Arduino
  • red Wire - Plus เชื่อมต่อกับขั้วต่อ 5B บน Arduino
  • ลวดสีส้ม - เอาท์พุทของแหล่งที่มาของเซอร์โวเชื่อมต่อกับข้อสรุปที่ 9 บน Arduino

ฉันแนะนำให้คุณตรวจสอบการทำงานของเซอร์โวก่อนดำเนินการชุมนุมต่อไป ในการทำเช่นนี้ในโปรแกรม Arduino IDE ในตัวอย่างเลือก Sweep ตรวจสอบให้แน่ใจว่างานเซอร์โวเราสามารถเชื่อมต่อโมดูลบลูทู ธ คุณต้องเชื่อมต่อเอาต์พุต RX ของโมดูลบลูทู ธ ด้วยเอาต์พุต TX ARDUINO และเอาต์พุต TX ของโมดูลที่มีเอาต์พุต RX ARDUINO แต่ยังไม่ทำ! เมื่อการเชื่อมต่อเหล่านี้บัดกรีคุณจะไม่สามารถดาวน์โหลดรหัสใด ๆ บน Arduino ได้อีกต่อไปดังนั้นคุณจึงดาวน์โหลดรหัสทั้งหมดของคุณก่อนและหลังจากการเชื่อมต่อบัดกรีนั้น

นี่คือรูปแบบของสารประกอบโมดูลและไมโครคอนโทรลเลอร์:

  • โมดูล RX - บอร์ด TX Arduino
  • โมดูล TX - บอร์ด Rx
  • โมดูล VCC (เอาต์พุตบวก) - 3.3V Arduino Boards
  • เชื่อมต่อกับพื้นดิน (พื้นดิน)

หากคำอธิบายดูเหมือนว่าคุณไม่สามารถเข้าใจได้ให้ทำตามรูปแบบของการเชื่อมต่อสายไฟ

ขั้นตอนที่ 4: การทดสอบ

ตอนนี้เรามีชิ้นส่วนการแสดงทั้งหมดให้เราตรวจสอบให้แน่ใจว่าเซอร์โวสามารถเคลื่อนย้ายความมืดได้ ก่อนที่จะติดตั้งคะแนนที่ประตูฉันรวบรวมตัวอย่างทดลองเพื่อให้แน่ใจว่าเซอร์โวค่อนข้างทรงพลัง ตอนแรกดูเหมือนว่า Servo ของฉันอ่อนแอและฉันเพิ่มน้ำมันหยดลงในสีแดงหลังจากนั้นเขาก็ทำงานได้ดี มันสำคัญมากที่กลไกสไลด์จะดีมิฉะนั้นคุณจะเสี่ยงที่จะล็อคในห้องของคุณ

ขั้นตอนที่ 5: เคสสำหรับ Electrocomponets



ฉันตัดสินใจที่จะใส่คอนโทรลเลอร์เฉพาะในกรณีและโมดูลบลูทู ธ และเซอร์โวก็อยู่ด้านนอก ในการทำเช่นนี้บนกระดาษแข็งชิ้นหนึ่งเราจัดหาวงจรวงจรของ Arduino Nano และเพิ่มพื้นที่ 1 ซม. รอบปริมณฑลและตัดออก หลังจากนั้นเราก็ตัดร่างกายอีกห้าด้าน ในผนังด้านหน้ามันจะจำเป็นต้องตัดรูรูสำหรับสายไฟของตัวควบคุม

ขนาดด้านข้างของกรณี:

  • ด้านล่าง - 7,5x4 ซม
  • ปก - 7,5x4 ซม
  • ซ้าย ผนังด้านข้าง - 7.5x4 ซม
  • ผนังด้านขวา - 7.5x4 ซม
  • ผนังด้านหน้า - 4x4 ซม. (พร้อมสล็อตสำหรับสายไฟ)
  • ผนังด้านหลัง - 4x4 ซม

ขั้นตอนที่ 6: ภาคผนวก

ในการควบคุมคอนโทรลเลอร์คุณต้องใช้อุปกรณ์บน Android หรือ Windows ที่มีบลูทู ธ ในตัว ฉันไม่มีโอกาสตรวจสอบการทำงานของแอปพลิเคชันบนอุปกรณ์ Apple บางทีคุณอาจต้องการไดรเวอร์บางอย่าง

ฉันแน่ใจว่าบางคนมีโอกาสที่จะตรวจสอบมัน สำหรับ Android ดาวน์โหลดแอปพลิเคชันบลูทู ธ เทอร์มินัลดาวน์โหลด Teraterm สำหรับ Windows จากนั้นคุณต้องเชื่อมต่อโมดูลกับสมาร์ทโฟนชื่อจะต้องเป็น linvor, รหัสผ่าน - 0000 หรือ 1234 เมื่อตั้งค่าการจับคู่ให้เปิดแอปพลิเคชันที่ติดตั้งป้อนตัวเลือกและเลือก "ติดตั้งการเชื่อมต่อ (ไม่ปลอดภัย)" ตอนนี้สมาร์ทโฟนของคุณเป็นจอภาพอินเตอร์เฟสแบบอนุกรม Arduino นั่นคือคุณสามารถแลกเปลี่ยนข้อมูลกับคอนโทรลเลอร์

หากคุณป้อน 0 ประตูจะปิดและบนหน้าจอของสมาร์ทโฟนจะมีข้อความ "ปิดประตู"
หากคุณป้อน 1 คุณจะเห็นว่าประตูเปิดขึ้นและบนหน้าจอจะมีข้อความ "เปิดประตู"
บน Windows กระบวนการนี้เหมือนกันยกเว้นว่าคุณต้องติดตั้งแอปพลิเคชัน Teraterm

ขั้นตอนที่ 7: Intim the Scorelet


ก่อนอื่นคุณต้องเชื่อมต่อไดรฟ์เซอร์โวที่ดุร้าย ในการทำเช่นนี้ตัดปลั๊กจากรูยึดของที่อยู่อาศัยไดรฟ์ หากเราใส่ไดรฟ์เซอร์โวจะต้องปิดรูติดตั้งด้วยการแตก จากนั้นคุณต้องใส่คันโยกเซอร์โวลงในช่องโหว่สปอตเลตซึ่งมีที่จับแบบสต็อก ตรวจสอบวิธีการล็อคในกรณี หากทุกอย่างเรียบร้อยดีให้ยึดก้านเซอร์โวด้วยกาว

ตอนนี้คุณต้องเจาะรูคู่มือประตูสำหรับสกรู ในการทำเช่นนี้แนบคะแนนไปที่ประตูและดินสอเครื่องหมายที่ประตูหลุมประตูใต้สกรู เจาะในสถานที่ที่สังเกตเห็นหลุมใต้สกรูที่ระดับความลึกประมาณ 2.5 ซม. ใช้ Screehold และรักษาความปลอดภัยด้วยสกรู ตรวจสอบการทำงานของเซอร์โวอีกครั้ง

ขั้นตอนที่ 8: โภชนาการ


ในการเติมอุปกรณ์ให้สมบูรณ์คุณจะต้องใช้แหล่งจ่ายไฟสายไฟและปลั๊กขนาดเล็ก USB เพื่อเชื่อมต่อกับ Arduino
เชื่อมต่อเอาต์พุตพลังงานของแหล่งพลังงานที่มีเอาต์พุตของ Earth ของ Mini-Port USB เชื่อมต่อลวดสีแดงกับลวดสีแดงของ USB Mini-Port จากนั้นยืดลวดจากล็อคไปที่ห่วงประตูและยืด มันจากไปที่เต้าเสียบ

ขั้นตอนที่ 9: รหัส

#include servo myservo; INT POS \u003d 0; สถานะ int; ธง int \u003d 0; การตั้งค่าเป็นโมฆะ () (myservo.attach (9); serial.begin (9600); myservo.write (60); ล่าช้า (1000);) เป็นโมฆะลูป () () () () () () \u003e\u003e) () Serial.read (); flag \u003d 0;) // หากสถานะคือ "0" มอเตอร์ DC จะปิดถ้า (สถานะ \u003d\u003d "0") (myservo.write (8); ความล่าช้า (1000); Println ("ล็อคประตู");) อื่นถ้า (สถานะ \u003d\u003d "1") (myservo.write (55); ล่าช้า (1000); serial.println ("ปลดล็อคประตู");););)

ขั้นตอนที่ 10: ปราสาทที่สมบูรณ์บนพื้นฐานของ Arduino

เพลิดเพลินกับปราสาทของคุณด้วยการควบคุมระยะไกลและอย่าลืมที่จะ "บังเอิญ" เพื่อล็อคเพื่อนในห้อง

โครงการนี้เป็นแบบแยกส่วน I.e. คุณสามารถเชื่อมต่อ / ปิดการใช้งานรายการต่าง ๆ และรับฟังก์ชั่นที่แตกต่างกัน ภาพด้านบนแสดงตัวเลือกที่มีฟังก์ชั่นเต็มรูปแบบคือ:

  • กลไกการล็อค. ใช้เพื่อเปิดและปิดประตู โครงการนี้กล่าวถึงการใช้กลไกที่แตกต่างกันสามกลไก:
    • เซอร์โว มีขนาดใหญ่มีขนาดเล็ก กะทัดรัดมากและควบคู่ไปกับปลอกที่รุนแรง - ตัวเลือกที่ยอดเยี่ยม
    • ประตูรถขับเคลื่อนปราสาทไฟฟ้า สิ่งที่ยิ่งใหญ่และทรงพลัง แต่กินกระแสที่บ้าคลั่ง
    • Solenoid Pike ตัวเลือกที่ดีเพราะมันตบตัวเอง

    ในการตั้งค่าเฟิร์มแวร์คุณสามารถเลือกสามประเภทใด ๆ (การตั้งค่า lock_type)

  • ปุ่มภายใน. มันทำหน้าที่เปิดและปิดประตูจากด้านใน สามารถวางไว้บนมือจับประตู (จากฝ่ามือหรือจากด้านข้างของนิ้วมือ) บนประตูตัวเองหรือบนแยม
  • ปุ่มด้านนอก. มันทำหน้าที่ปิดประตูเช่นเดียวกับการปลุกจากการประหยัดพลังงาน สามารถวางไว้บนมือจับประตู (จากฝ่ามือหรือจากด้านข้างของนิ้วมือ) บนประตูตัวเองหรือบนแยม
  • บริบท เมื่อปิดประตู ใช้เพื่อปิดล็อคโดยอัตโนมัติเมื่อปิดประตู พวกเขาอาจจะ:
    • ปุ่มนาฬิกา
    • เซ็นเซอร์ฮอลล์ + แม่เหล็กที่ประตูตัวเอง
    • Gercon + แม่เหล็กที่ประตูตัวเอง
  • ความลับ ปุ่มรีเซ็ตการเข้าถึง. ใช้เพื่อรีเซ็ตรหัสผ่าน / ป้อนรหัสผ่านใหม่ / การท่องจำของคีย์ / การรวมกันใหม่ ฯลฯ สามารถซ่อนอยู่ที่ไหนสักแห่งในกรณี
  • ไดโอดเปล่งแสง เพื่อระบุงาน LED RGB ใช้สีแดงและสีเขียว (เมื่อผสมเป็นสีเหลือง):
    • Gorite Green - ปราสาทเปิดอยู่ Gorbs ไม่ลืมที่จะปิดประตู
    • สีเหลืองคือการเผาไหม้ - ระบบตื่นขึ้นมาและคาดว่าการป้อนรหัสผ่าน
    • กระพริบสีแดง - นั่งลงแบตเตอรี่

องค์ประกอบใด ๆ เหล่านี้สามารถแยกออกจากระบบ:

  • เราลบความสับสน ในเฟิร์มแวร์ในการตั้งค่ายังปิด (การตั้งค่า tail_button. ตอนนี้เพื่อปิดล็อคคุณต้องกดปุ่ม
  • เราลบปุ่มกลางแจ้ง ในเฟิร์มแวร์ในการตั้งค่ายังปิด (การตั้งค่า wake_button. ตอนนี้ระบบไม่จำเป็นต้องตื่นขึ้นมามันจะทำให้ตัวเองตื่นขึ้นมา (การใช้พลังงานมีขนาดใหญ่กว่าเล็กน้อย) และตอนนี้เราไม่มีปุ่มปิดที่ประตูหน้าและคุณต้องสับสน ทั้งปราสาท - Tickold
  • เราลบปุ่มภายใน ตัวเลือกนี้เหมาะสำหรับตู้และตู้นิรภัย คุณไม่จำเป็นต้องเปลี่ยนอะไรในการตั้งค่า
  • เราลบไฟ LED คุณไม่จำเป็นต้องเปลี่ยนอะไรในการตั้งค่า
  • ปุ่มรีเซ็ตการเข้าถึงสามารถหายไปหลังจากการใช้งานครั้งแรกหรือเขียนรหัสสำหรับตัวเอง
  • ประตูถูกปิดคลิกนอก - ตื่นขึ้นรอการป้อนรหัสผ่าน / ป้าย RFID / กุญแจอิเล็กทรอนิกส์ / ลายนิ้วมือ
  • ประตูปิดระบบจะตื่นขึ้นรอรหัสผ่าน สามารถกำหนดเวลาเวลา (การตั้งค่า เวลานอน.)
  • ประตูถูกปิดรหัสผ่าน / ฉลาก / คีย์ ฯลฯ - เปิด
  • ประตูถูกปิดกดภายใน - เปิด
  • ประตูเปิดให้คลิกจากภายนอก - ปิด
  • ประตูเปิดให้กดภายใน - ปิด
  • ประตูเปิดให้กด - ปิด

ล็อคให้การทำงานของแบตเตอรี่ในโหมดประหยัดพลังงานต่ำ (เปิดใช้งานการตั้งค่า: การตั้งค่า sleep_enable) คือ:

  • ตื่นทุกสองสามวินาทีให้ทำตามเหตุการณ์ (ตัวเลือกเสริมหากไม่มีปุ่มข้างนอกคุณสามารถเปิดใช้งานในการตั้งค่า wake_button)
  • ทุก ๆ สองสามนาทีในการตรวจสอบแรงดันไฟฟ้า Akum (การตั้งค่าเปิด / ปิด battery_Monitor)
  • หาก Akum ถูกปล่อยออกมา (มีการตั้งค่าแรงดันไฟฟ้าในการตั้งค่า bat_low):
    • เปิดประตู (ไม่จำเป็นสามารถกำหนดค่าได้ในเฟิร์มแวร์ open_bat_low)
    • ห้ามการเปิดและปิดเพิ่มเติม
    • เมื่อคุณคลิกที่ปุ่มเพื่อแฟลช LED สีแดง
    • หยุดดูเหตุการณ์ (I.e. รหัสผ่าน / ฉลาก ฯลฯ )

เมื่อระบบไม่ได้นอนให้กดปุ่มเปลี่ยนรหัสผ่าน (ปุ่มที่ซ่อนอยู่) ค้นหา B. โหมดเปลี่ยนรหัสผ่าน:
เราป้อนรหัสผ่านจากตัวเลข ( สูงสุด 10 หลัก !!!)

  • การคลิก * รหัสผ่านจะถูกบันทึกในหน่วยความจำและระบบจะออกจากการเปลี่ยนรหัสผ่าน
  • เมื่อคุณคลิกรหัสผ่านจะถูกรีเซ็ต (คุณสามารถป้อนอีกครั้ง)
  • หากคุณไม่กดอะไรเลย 10 วินาทีให้เปิดโหมดการเปลี่ยนรหัสผ่านโดยอัตโนมัติรหัสผ่านจะยังคงเก่า

เมื่อระบบไม่หลับ (ฉันตื่นขึ้นมาปุ่มหรือปิดการนอนหลับ) คลิก * เพื่อเข้าสู่โหมดการเข้ารหัสผ่าน
หากระบบกำลังนอนหลับและตื่นขึ้นมาเป็นระยะ ๆ เพื่อตรวจสอบเหตุการณ์จากนั้นกด * แล้วกดค้างไว้จนกระทั่งไฟ LED สีแดงจะสว่างขึ้น
โหมดรายการรหัสผ่าน:

  • การประมวลผลรหัสผ่านทำในลักษณะที่รหัสผ่านที่ถูกต้องถูกนับเฉพาะเมื่อตั้งค่าเป็นลำดับของตัวเลขที่ถูกต้องนั่นคือหากรหัสผ่านคือ 345 จากนั้นหมายเลขใดก็ได้สามารถป้อนได้จนกว่าลำดับที่ 345 จะปรากฏขึ้น I.e. 30984570345 จะเปิดล็อคเมื่อสิ้นสุด 345
  • หากป้อนรหัสผ่านอย่างถูกต้องประตูจะเปิดขึ้น
  • หากคุณไม่กดอะไรหลังจาก 10 วินาทีระบบจะกลับสู่โหมดปกติ (หน้าที่)
  • หากคุณคลิก # ออกมาทันทีออกจากโหมดรายการรหัสผ่านทันที
  • หากคุณกดปุ่มเปลี่ยนรหัสผ่านลับในโหมดป้อนรหัสผ่านคุณจะออกมาจากนั้น

Arduino คือ ระบบที่ดีที่สุด เพื่อคัดลอกอุปกรณ์ใด ๆ ความคิดส่วนใหญ่จะไม่สามารถเป็นจริงได้หากไม่มีเธอ เป็นเวลานานมีความคิดเช่นนี้สร้างล็อครหัสพิเศษบน Arduino ในการเปิดมันเป็นสิ่งจำเป็นที่จะเสียบคีย์เฉพาะ ในกรณีนี้ไม่ควรเปิดล็อคแม้ว่าคุณจะรู้ว่าปุ่มที่ต้องการ ในการเปิดมันมีความจำเป็นต้องทนต่อช่วงเวลาหนึ่งโดยใช้หน่วยความจำกล้ามเนื้อ อาชญากรดังกล่าวจะไม่สามารถกระทำได้ แต่นี่คือทฤษฎีทั้งหมด

ในการรวบรวมคุณต้องใช้ประโยชน์จากอุปกรณ์พิเศษของพัลส์สี่เหลี่ยมผืนผ้ารวมถึงหลายเมตรและกอง แต่อุปกรณ์ที่เสร็จแล้วจะมีขนาดใหญ่ มิติ และไม่สามารถใช้งานได้ ตามกฎแล้วความคิดดังกล่าวไม่ให้พักผ่อน ขั้นตอนแรกในศูนย์รวมของความฝันคือการสร้างโปรแกรมภายใต้ Arduino เธอเป็นคนที่จะทำหน้าที่เป็นรหัสล็อค เพื่อที่จะเปิดคุณจะต้องกดปุ่มเดียว แต่ไม่กี่คนและทำในเวลาเดียวกัน โครงการสำเร็จรูป ดูเหมือนว่า:

คุณภาพของภาพไม่ดีที่สุด แต่การเชื่อมต่อจะดำเนินการกับพื้นดิน D3, D5, D7, D9 และ D11

รหัสถูกนำเสนอด้านล่าง:

INT INA \u003d 3; INT INB \u003d 5; Const Int Inc \u003d 9; Const Int ledpin \u003d 13; int i \u003d 1,000; ไบต์ a \u003d 0; ไบต์ b \u003d 0; ไบต์ c \u003d 0; ไบต์ d \u003d 0; ไม่ได้ลงนามเป็นเวลานาน \u003d 0; // อย่าลืมทุกสิ่งที่ใช้ค่าของ Millis () อุณหภูมิยาวที่ไม่ได้ลงชื่อ \u003d 0; // เก็บใน keya byte ยาวที่ไม่ได้ลงนาม \u003d (0, 0, 0, 0, 0, 0, 0, 0); // รหัสจริงไบต์ keyb \u003d (1, 1, 1, 1, 0, 1, 0, 0); BYTE KEYC \u003d (1, 0, 1, 0, 1, 1, 1, 0); ไบต์ k \u003d 0; การตั้งค่าเป็นโมฆะ () (PinMode (INA, Input_pullup); // 3 อินพุตที่เชื่อมต่อกับปุ่ม PinMode (inb, input_pullup); PinMode (Inc, Input_pullup); PinMode (Ledpin, เอาท์พุท); // LED ในตัวในวันที่ 13 PINE PINMODE (7, เอาท์พุท); pinmode (11, เอาท์พุท); digital เขียน (7, ต่ำ); // แทนที่ Digital Digital เขียน (11, ต่ำ); time \u003d millis (); // จำเป็นต้องใช้เวลาอ้างอิง) void blinktwice ( ) (// LED DougherWrite DigitalWrite (Ledpin, High); DigitalWrite (Ledpin, Low); DigitalWrite (Ledpin, High); DigitalWrite (Ledpin, Low); ล่าช้า (200);) เป็นโมฆะวน () () (ถ้า (k \u003d\u003d 0) (กะพริบ (); // คำเชิญป้อนรหัส) ถ้า (k \u003d\u003d 8) (digital เขียน (ledpin, high); ล่าช้า (3000); k \u003d 0;) A \u003d DigitalRead (INA); // ระดับสัญญาณถูกอ่านจากปุ่มกด / ไม่กด B \u003d DigitallRead (inb); c \u003d DigitalRead (Inc); ล่าช้า (100); // ถัดไปถ้า - การป้องกัน เทียบกับผลบวกเท็จคุณไม่สามารถใช้ถ้า ((DigitallRead (INA) \u003d\u003d A) && (DigitalRead (inb) \u003d\u003d B) && (DigitalRead (Inc) \u003d\u003d C)) (ถ้า (a \u003d\u003d keya [k] ) (ถ้า (b \u003d\u003d KEYB [K]) (ถ้า (c \u003d\u003d keyc [k]) (k ++; )))) ถ้า (k \u003d\u003d 1) (ถ้า (d \u003d\u003d 0) (เวลา \u003d millis (); d ++;)) temp \u003d millis (); temp \u003d temp - เวลา; ถ้า (temp\u003e 10,000) (k \u003d 0; d \u003d 0; time \u003d millis ();))

เพื่อไม่ให้มีคำถามพิเศษใด ๆ ในรหัสบางช่วงเวลาควรอธิบาย ฟังก์ชั่นการตั้งค่าใช้เพื่อกำหนดพอร์ต ฟังก์ชั่นต่อไปนี้คือ input_pullup ซึ่งจำเป็นต้องเพิ่มแรงดันไฟฟ้าของสนโดย 5 V. สิ่งนี้ดำเนินการโดยใช้ตัวต้านทาน เนื่องจากสิ่งนี้มีการลัดวงจรต่างๆจะไม่เกิดขึ้น เพื่อความสะดวกที่มากขึ้นขอแนะนำให้ใช้คุณสมบัติ BlinkTwice โดยทั่วไปเมื่อสร้างโปรแกรมต่าง ๆ คุณต้องลองใช้งานฟังก์ชั่นอื่น ๆ

หลังจากกำหนดฟังก์ชั่นแล้วสัญญาณจะถูกอ่านจากพอร์ต หากกดปุ่มนี้จะแสดงให้เห็นด้วยหมายเลข 1 และถ้าไม่ - 2. ถัดไปมีการวิเคราะห์ค่าทั้งหมด ตัวอย่างเช่นการรวมกันดังกล่าวปรากฏเป็น 0.1.1 ซึ่งหมายความว่ากดปุ่มแรกและทั้งสองที่เหลือไม่ได้ หากค่าทั้งหมดถูกดำเนินการอย่างถูกต้องเงื่อนไขที่ 8 ก็เป็นจริงเช่นกัน นี่คือหลักฐานโดย LED ที่มีแสงบนแผงด้านหน้า ถัดไปคุณต้องป้อนรหัสเฉพาะที่จะให้บริการเพื่อเปิดประตู

องค์ประกอบรหัสล่าสุดใช้เพื่อวางค่ามิเตอร์ ฟังก์ชั่นนี้จะดำเนินการหากหลังจากการกดแป้นพิมพ์ครั้งสุดท้ายผ่านไปเกินกว่า 10 วินาที หากไม่มีรหัสนี้มันเป็นไปได้ที่จะผ่านทุกอย่าง ตัวเลือกที่เป็นไปได้แม้ว่าจะมีจำนวนมากพอ หลังจากสร้างอุปกรณ์นี้จำเป็นต้องทดสอบ ยัง

mob_info