ล็อค "สมาร์ท" อัตโนมัติและ Arduino ล็อครหัส Arduino

ในบทความนี้ฉันจะแสดงวิธีสร้างรหัสล็อคจาก Arduino ในการทำเช่นนี้ เราจำเป็นต้องมีไฟ LED สีแดงและสีเขียว ออด Arduino nano จอแสดงผล LCD พร้อมตัวแปลง I2C เซอร์โว และแป้นพิมพ์เมทริกซ์ขนาด 4x4 เมื่อเปิดเครื่อง หน้าจอจะเขียนว่า "Enter code",

ไฟ LED สีแดงจะเปิดขึ้น

และสีเขียวจะดับลง เซอร์โวจะถูกตั้งค่าเป็น 0 ° เมื่อป้อนตัวเลขแล้ว * จะสว่างขึ้นบนหน้าจอ

หากป้อนรหัสไม่ถูกต้อง หน้าจอจะแสดง "Enter cod" หากรหัสถูกต้อง เสียงบี๊บจะดังขึ้น เซอร์โวจะหมุน 180° และหน้าจอจะอ่านว่า "เปิด"

ไฟ LED สีเขียวจะเปิดขึ้น

และสีแดงจะปิด หลังจาก 3 วินาที เซอร์โวจะกลับสู่ตำแหน่งเริ่มต้น ไฟ LED สีแดงจะเปิดขึ้น และไฟ LED สีเขียวจะดับลง จอแสดงผลจะเขียนว่า "ปิด",

จากนั้นหน้าจอจะเขียนว่า "Enter code." ตอนนี้เกี่ยวกับโครงการ ก่อนอื่นเราเชื่อมต่อ Arduino กับสายไฟด้วย เขียงหั่นขนม(หน้าสัมผัสไฟฟ้า)

จากนั้นเราเชื่อมต่อแป้นพิมพ์เมทริกซ์กับผู้ติดต่อ D9 - D2

จากนั้นเซอร์โว เราเชื่อมต่อกับพิน 10

LED สีแดงที่ขา 11

สีเขียว - เพื่อตรึง 12

Buzzer - เพื่อพิน 13

ตอนนี้อัปโหลดร่าง

#รวม #รวม #รวม #รวม iarduino_KB KB(9, 8, 7, 6, 5, 4, 3, 2); LiquidCrystal_I2C จอแอลซีดี (0x27, 16, 2); เซอร์โวเซอร์โว int pass = (3, 6, 1, 8); int ใน; int r = 11; int ก. = 12; การตั้งค่าเป็นโมฆะ () ( KB.begin(KB1); pinMode(r, OUTPUT); pinMode(g, OUTPUT); lcd.init(); lcd.backlight(); digitalWrite(g, LOW); digitalWrite(r, HIGH) ); servo.attach(10); servo.write(0); lcd.setCursor(0, 0); ) void loop() ( lcd.clear(); lcd.print("Enter code."); ในขณะที่ ( !KB.check(KEY_DOWN)) (ล่าช้า(1); ) ใน = KB.getNum; lcd.clear(); lcd.setCursor(0, 0); lcd.print("*"); while (!KB.check(KEY_DOWN)) ตรวจสอบ (KEY_DOWN)) (ล่าช้า(1); ) ใน = KB.getNum; lcd.print("*"); ในขณะที่ (!KB.check(KEY_DOWN)) (ล่าช้า(1); ) ใน = KB.getNum; lcd.print("*"); while (!KB.check(KEY_DOWN)) ( delay(1); ) in = KB.getNum; lcd.print("*"); if (in == pass) ( if (ใน == ผ่าน) ( ถ้า (ใน == ผ่าน) ( ถ้า (ใน == ผ่าน) ( lcd.clear(); lcd.setCursor(0, 0); lcd.print("Open."); tone( 13, 400, 750); servo.write (180); digitalWrite (r, LOW); digitalWrite (g, สูง); ความล่าช้า (3000); lcd.clear (); lcd.setCursor (0, 0); จอแอลซีดี พิมพ์ ("ปิด."); โทน (13, 300, 700); servo.write (0); digitalWrite (g, LOW); digitalWrite (r, สูง); dela ปี(1000); ) ) ) ) )

นั่นคือทั้งหมดที่ สนุกกับการล็อครหัส!

รายการองค์ประกอบวิทยุ

การกำหนด พิมพ์ นิกาย ปริมาณ บันทึกร้านค้าแผ่นจดบันทึกของฉัน
E1 บอร์ด Arduino

Arduino นาโน 3.0

1 5V ไปยังแผ่นจดบันทึก
E8, E9 ตัวต้านทาน

220 โอห์ม

2 smd ไปยังแผ่นจดบันทึก
E6 ไดโอดเปล่งแสง

AL102G

1 สีแดง ไปยังแผ่นจดบันทึก
E7 ไดโอดเปล่งแสง

AL307G

1 สีเขียว ไปยังแผ่นจดบันทึก
E3 จอ LCDด้วยอินเทอร์เฟซ I2C1 แสงไฟสีเขียว ไปยังแผ่นจดบันทึก
E5 เซอร์โวSG901 180 องศา ไปยังแผ่นจดบันทึก
E2 Buzzer5V1 บู ไปยังแผ่นจดบันทึก
E4 แป้นพิมพ์4X41 เมทริกซ์ ไปยังแผ่นจดบันทึก
ไม่ เขียงหั่นขนม640 คะแนน1 โดยไม่ต้องบัดกรี

ในบทนี้เราจะมาเรียนรู้วิธีการทำ ระบบง่ายๆซึ่งจะปลดล็อคโดย กุญแจอิเล็กทรอนิกส์(เม็ทเคะ).

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

ในบทช่วยสอนนี้ เราจะต้อง:

ในการดำเนินโครงการ เราจำเป็นต้องติดตั้งไลบรารี:

2) ตอนนี้ คุณต้องเชื่อมต่อ Buzzer ซึ่งจะให้สัญญาณหากกุญแจทำงานและล็อคเปิดขึ้น และสัญญาณที่สองเมื่อล็อคปิด

เราเชื่อมต่อออดตามลำดับต่อไปนี้:

Arduino Buzzer
5V VCC
GND GND
พิน 5 IO

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

ชัดเจนยิ่งขึ้น คุณสามารถดูว่าเราเชื่อมต่อโมดูลทั้งหมดในภาพด้านล่างอย่างไร:

ตอนนี้ หากทุกอย่างเชื่อมต่อแล้ว คุณสามารถดำเนินการตั้งโปรแกรมได้

ร่าง:

#รวม #รวม #รวม // ห้องสมุด "RFID" #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); uidDec แบบยาวที่ไม่ได้ลงนาม, uidDecTemp; // เพื่อจัดเก็บหมายเลขแท็กในรูปแบบทศนิยม Servo servo; การตั้งค่าเป็นโมฆะ () ( Serial.begin (9600); Serial.println ("กำลังรอการ์ด ... "); SPI.begin (); // การเริ่มต้น SPI / Init SPI บัส mfrc522.PCD_Init (); // การเริ่มต้น MFRC522 / Init MFRC522 card.servo.attach(6); servo.write(0); // set servo to closed state ) void loop() ( // ค้นหาป้ายกำกับใหม่ if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // เลือกแท็ก if (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // ส่งคืนหมายเลขซีเรียลของแท็กสำหรับ (ไบต์ i = 0; i< mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. { tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие } servo.write(0); // устанавливаем серву в закрытое сосотояние }

มาวิเคราะห์ร่างในรายละเอียดเพิ่มเติม:

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

ต้องป้อน UID ที่เป็นผลลัพธ์ในบรรทัดต่อไปนี้:

If (uidDec == 3763966293) // เปรียบเทียบ Uid ของป้ายกำกับ หากเท่ากับค่าที่ระบุ เซอร์โวจะเปิดวาล์ว

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

วิดีโอ:

ความคืบหน้าไม่หยุดนิ่งและ "ล็อคอัจฉริยะ" ปรากฏขึ้นที่ประตูอพาร์ทเมนท์ โรงรถ และบ้านมากขึ้นเรื่อยๆ

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

ในโครงการนี้ สมาร์ทล็อคเวอร์ชัน DIY บน Arduino จะถูกนำมาใช้ ซึ่งสามารถควบคุมได้จากระยะไกลจากที่ใดก็ได้ในโลก

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

การล็อคแบบนี้อาจเป็นก้าวแรกที่ดีในโครงการบ้านอัจฉริยะของคุณ

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

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

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

  • เชื่อมต่อพิน 5V จากบอร์ด Arduino เข้ากับรางไฟสีแดง
  • พิน GND จาก Arduino เชื่อมต่อกับรางสีน้ำเงินบนแผงวงจรแบบบัดกรี

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

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

ทีนี้มาดูโมดูล CC3000:

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

และสุดท้าย คุณต้องจัดหาพลังงาน: Vin - ถึง Arduino 5V (รางสีแดงบนแผงวงจรของคุณ) และ GND ถึง GND (รางสีน้ำเงินบนเขียงหั่นขนม)

ภาพของโครงการที่ประกอบเสร็จแล้วแสดงไว้ด้านล่าง:

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

หากคุณยังไม่ได้ดำเนินการ ให้ลงชื่อสมัครใช้บัญชี Adafruit IO

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

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

#รวม

#รวม

#รวม

#รวม "Adafruit_MQTT.h"

#รวม "Adafruit_MQTT_CC3000.h"

#รวม

#รวม >

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

#define WLAN_SECURITY WLAN_SEC_WPA2>

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

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_name"

#define AIO_KEY "adafruit_io_key">

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

อักขระ const FINGERPRINT_FEED PROGMEM = AIO_USERNAME "/feeds/fingerprint";

Adafruit_MQTT_เผยแพร่ลายนิ้วมือ = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

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

ซอฟต์แวร์Serial mySerial(3, 4);

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

นิ้ว Adafruit_Fingerprint = Adafruit_Fingerprint (&mySerial);

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

int fingerID = 0;

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

int ActivationCounter = 0;

int lastActivation = 0;

int การเปิดใช้งานเวลา = 10 * 1,000;

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

ในเนื้อความของฟังก์ชัน loop() เราเชื่อมต่อกับ Adafruit IO บรรทัดต่อไปนี้รับผิดชอบสิ่งนี้:

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

ถ้า (fingerprintID == fingerID && lockState == false) (

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

lockState=จริง;

Serial.println(F("ล้มเหลว"));

Serial.println(F("ตกลง!"));

LastActivation = มิลลิวินาที ();

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

ถ้า ((activationCounter - lastActivation > enableTime) && lockState == true) (

lockState=เท็จ;

ถ้า (! fingerprint.publish(สถานะ)) (

Serial.println(F("ล้มเหลว"));

Serial.println(F("ตกลง!"));

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

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

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

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

แบบแผนและแบบร่างสำหรับการตั้งค่าล็อคเพิ่มเติมโดยใช้ตัวอย่างของ LED

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

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

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

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


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

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

#รวม

#รวม "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

กำหนดการตั้งค่า WiFi:

#define WLAN_SSID "ของคุณ_wifi_ssid"

#define WLAN_PASS "รหัสผ่านของคุณ"

#define WLAN_SECURITY WLAN_SEC_WPA2

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

#define AIO_SERVER "io.adafruit.com"

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_username"

#define AIO_KEY "adafruit_io_key"

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

int รีเลย์พิน = 5;

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

อักขระ const LOCK_FEED PROGMEM = AIO_USERNAME "/feeds/lock";

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

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

โหมดพิน (รีเลย์พิน, เอาต์พุต);

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

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

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

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

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

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

Serial.println((ถ่าน *)lock.lastread);

// บันทึกคำสั่งเป็นข้อมูลสตริง

คำสั่งสตริง = สตริง ((ถ่าน *) lock.lastread);

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

digitalWrite (รีเลย์พิน ต่ำ);

if (คำสั่ง == "1") (

digitalWrite (รีเลย์พิน สูง);

การค้นหา รุ่นล่าสุดคุณสามารถดูภาพสเก็ตช์ได้ที่ GitHub

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

ตัวแปลง USB-FTDI แบบธรรมดาสามารถใช้เพื่อตั้งโปรแกรมชิป ESP8266 ได้

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

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

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


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

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

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

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


นี่คือสิ่งที่ควรมีลักษณะเมื่อกำหนดค่าทริกเกอร์ทั้งสอง:

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

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

การตั้งค่าล็อคอิเล็กทรอนิกส์

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

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

แสดงด้านล่าง แผนภูมิวงจรรวมการเชื่อมต่อส่วนประกอบทั้งหมดเข้ากับโมดูล ESP8266:


โปรดทราบว่าหากคุณใช้ MOSFET คุณไม่จำเป็นต้องมีตัวต้านทานระหว่าง ESP8266 พิน 5 กับทรานซิสเตอร์

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


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

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

การพัฒนาเพิ่มเติมของโครงการ Smart Lock

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

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

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

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

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

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

ความคิด

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

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

Arduino UNO = 18 เหรียญ
Arduino protoshield + เขียงหั่นขนม = $6
L293D = $1
มัดสายไฟ 30 ชิ้นสำหรับกระดานเพาะพันธุ์ = $4
ช่องเสียบ RJ45 2 ช่อง = $4
ปลั๊ก RJ45 2 อัน = 0.5 เหรียญสหรัฐ
ตัวกระตุ้นเซ็นทรัลล็อค = 250 รูเบิล
สวิตช์กก = ขาดฟรีจากหน้าต่างเก่า
โลหะ Espagnolette ขนาดมหึมา = ฟรี
เคสจากดุม D-LINK เก่า เหล็ก 1.5 mm = ฟรี
แหล่งจ่ายไฟจากฮับ D-LINK เดียวกันสำหรับ 12 และ 5v = ฟรีเช่นกัน
สกรูและน็อตจำนวนมากสำหรับยึดสิ่งของทั้งหมดนี้เข้ากับเคส = 100 รูเบิล
แผงควบคุมจาก สัญญาณกันขโมย= ฟรี

รวม: 33.5 ดอลลาร์และ 350 รูเบิล

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

การเตรียมการประกอบ

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

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

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

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



Arduino และแอคชูเอเตอร์


พาวเวอร์ซัพพลาย


แป้นพิมพ์


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

วิดีโอขั้นตอนการทำงานของอุปกรณ์:

โฮสต์ของช่อง youtube "AlexGyver" ถูกขอให้ทำล็อคอิเล็กทรอนิกส์ด้วยมือของเขาเอง ยินดีต้อนรับสู่วงจรวิดีโอเกี่ยวกับการล็อคอิเล็กทรอนิกส์บน Arduino ใน ในแง่ทั่วไปอาจารย์จะอธิบายความคิด

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

ทุกสิ่งที่คุณต้องการสำหรับปราสาทมีอยู่ในร้านค้าจีนแห่งนี้

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

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

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

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

ส่วนที่สอง

มีอะไรให้อ่านอีกบ้าง