สารบัญ:

ป้ายบอกคะแนนคริกเก็ตโดยใช้ NodeMCU: 9 ขั้นตอน (พร้อมรูปภาพ)
ป้ายบอกคะแนนคริกเก็ตโดยใช้ NodeMCU: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ป้ายบอกคะแนนคริกเก็ตโดยใช้ NodeMCU: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ป้ายบอกคะแนนคริกเก็ตโดยใช้ NodeMCU: 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: SCMA221 Lecture 01: Course Introduction, Review of Vectors, Algebra of Vectors 2024, กรกฎาคม
Anonim
Image
Image
แผนการ
แผนการ

สวัสดี! ฉันเพิ่งได้รับการแนะนำให้รู้จักกับโลกของ IoT (Internet of Things) เมื่อฉันพบอุปกรณ์ที่ได้รับความนิยมสูงสุดในสาขานี้ นั่นคือ ESP8266 ฉันรู้สึกทึ่งกับความเป็นไปได้มากมายที่อุปกรณ์ขนาดเล็กและราคาถูกนี้เปิดขึ้น เนื่องจากตอนนี้ฉันยังใหม่กับสิ่งนี้ ฉันจึงตัดสินใจทำโปรเจ็กต์โดยใช้มันและเรียนรู้ไปพร้อมกัน ดังนั้นฉันจึงเริ่มค้นหาโครงการและแนวคิดทางอินเทอร์เน็ต

ฉันเจอโปรเจ็กต์ที่น่าทึ่งชื่อ Arduino Cricket Score Ticker โดย W. A. Smith ในโครงการนี้ Arduino พร้อมกับ Ethernet Shield และการ์ด SD ใช้เพื่อแสดงคะแนนคริกเก็ตสดจาก Cricbuzz โครงการนี้ทำให้ฉันคิด

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

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

ขั้นตอนที่ 1: แผน

แผนการ
แผนการ

แผนคือการใช้ NodeMCU Development Board (พร้อมโมดูล ESP-12E) เพื่อเข้าถึงอินเทอร์เน็ตและขอรหัส XML จาก Cricbuzz ซึ่งมีข้อมูลทั้งหมดเกี่ยวกับการแข่งขันที่กำลังจะเกิดขึ้น/ที่กำลังจะมีขึ้น รหัสนี้ถูกบันทึกไว้ในการ์ด SD เป็นไฟล์.xml ไฟล์จะถูกอ่านจากการ์ด SD เพื่อแยกวิเคราะห์ข้อมูลที่จำเป็นจากโค้ด XML ฉันจะใช้รหัสของ W. A. Smith เพื่อแยกวิเคราะห์ข้อมูล ขอบคุณความพยายามของเขา ตรวจสอบโครงการของเขาหากคุณต้องการทำเช่นเดียวกันโดยใช้ Arduino และ Ethernet Shield

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

มาเริ่มกันเลย

ขั้นตอนที่ 2: จอแสดงผล OLED

จอแสดงผล OLED
จอแสดงผล OLED
จอแสดงผล OLED
จอแสดงผล OLED

ฉันตัดสินใจเลือกใช้จอแสดงผล OLED เนื่องจากมีขนาดเล็กและมีจำหน่ายในราคาถูก ฉันใช้จอแสดงผล 0.96 ซึ่งเพียงพอสำหรับแสดงข้อมูลการแข่งขัน คุณสามารถใช้จอแสดงผลขนาดใดก็ได้

จอแสดงผลที่ฉันใช้เป็นแบบขาวดำที่มีไดรเวอร์ SSD1306 และอินเทอร์เฟซ I2C (2 สาย) นอกจากนี้ยังมีจอแสดงผลเวอร์ชัน SPI การเรียกใช้งานเหล่านี้เป็นเรื่องง่าย ดาวน์โหลดไลบรารี SSD1306 และ GFX ที่จำเป็นสำหรับการเรียกใช้จอแสดงผล ขอบคุณ Adafruit ที่เขียนห้องสมุดเหล่านี้

การเชื่อมต่อทำได้ง่ายมาก

  • GND เป็น GND
  • VCC เป็น 3.3V
  • SCL เป็น D1
  • SDA เป็น D2

ขั้นตอนที่ 3: การ์ด SD และอะแดปเตอร์

การ์ด SD และอะแดปเตอร์
การ์ด SD และอะแดปเตอร์

การ์ด SD เก็บไฟล์ XML จาก Cricbuzz จนกว่าข้อมูลทั้งหมดจะถูกแยกวิเคราะห์ เมื่อแสดงข้อมูลที่จำเป็นแล้ว ไฟล์จะถูกลบ การใช้การ์ด SD เพื่อจัดเก็บไฟล์ XML ขนาด 10 - 20 kB นั้นใช้ยากเกินไปเล็กน้อย แต่มันทำให้การแยกวิเคราะห์ง่ายขึ้นและเข้าใจง่ายขึ้นมาก

สามารถใช้การ์ดหน่วยความจำใดก็ได้ ฉันเลือกการ์ด micro SD สำหรับฟอร์มแฟคเตอร์ขนาดเล็ก คุณสามารถบัดกรีสายไฟเข้ากับการ์ด SD ได้โดยตรง แต่การใช้บอร์ดฝ่าวงล้อมช่วยให้งานง่ายขึ้น ควรสังเกตว่าการ์ด SD ทั้งหมดมีไว้เพื่อให้ทำงานบน 3.3V ซึ่งหมายความว่าไม่เพียงแต่ควรจะใช้พลังงานจาก 3.3V แต่การสื่อสารระหว่างไมโครคอนโทรลเลอร์และการ์ด SD จะต้องอยู่ในระดับลอจิก 3.3V แรงดันไฟฟ้าที่สูงกว่า 3.3V จะฆ่ามัน! เราจะไม่ยุ่งเกี่ยวกับ NodeMCU เพราะ NodeMCU ทำงานบน 3.3V ซึ่งถือว่าใช้ได้ หากคุณกำลังวางแผนที่จะใช้ไมโครคอนโทรลเลอร์อื่นที่มีระดับลอจิก 5V ตรวจสอบให้แน่ใจว่าบอร์ดฝ่าวงล้อมของคุณมีตัวเลื่อนระดับในตัว (ดังแสดงในภาพ) โดยทั่วไปจะแปลงหรือ 'เปลี่ยน' 5V จากไมโครคอนโทรลเลอร์เป็น 3.3V ที่เป็นมิตรกับการ์ด SD การใช้ตัวเลื่อนระดับร่วมกับ 3.3V (อย่างที่ฉันทำ) จะไม่ส่งผลต่อการทำงาน

การ์ด SD ใช้อินเทอร์เฟซ SPI สำหรับการสื่อสาร CS หรือ Chip Select pin สามารถเชื่อมต่อกับพิน GPIO ใดก็ได้ ฉันเลือก GPIO15 (D8) เพียงทำการเปลี่ยนแปลงที่จำเป็นในโค้ดหากคุณใช้พินอื่นที่ไม่ใช่ GPIO15

  • SCK ถึง D5
  • MISO ถึง D6
  • MOSI เป็น D7
  • CS เป็น D8
  • VCC เป็น 3.3V
  • GND เป็น GND

ฟอร์แมตการ์ด SD ของคุณ

ไลบรารีที่เราจะใช้รองรับระบบไฟล์ FAT16 หรือ FAT32 ตรวจสอบให้แน่ใจว่าคุณฟอร์แมตการ์ด SD เป็นรูปแบบที่ถูกต้อง

ขั้นตอนที่ 4: การสร้างปุ่มกด

การทำปุ่มกด
การทำปุ่มกด
การทำปุ่มกด
การทำปุ่มกด
การทำปุ่มกด
การทำปุ่มกด

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

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

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

หากคุณต้องการซื้อเมทริกซ์ ให้ตรวจสอบการเชื่อมต่อภายในที่แสดงในแผนภาพ สามารถใช้เมทริกซ์ขนาดใดก็ได้ ตรวจสอบให้แน่ใจว่าใช้ตัวต้านทาน2.2kΩระหว่างแถวและตัวต้านทาน680Ωระหว่างคอลัมน์

การเชื่อมต่อปุ่มกด

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

ฉันได้เชื่อมต่อส่วนหัวของตัวผู้ 3 ขาเพื่อให้สามารถเชื่อมต่อกับกระดานหลักได้ในภายหลัง

ขั้นตอนที่ 5: นำทุกอย่างมารวมกัน

รวมทุกอย่างไว้ด้วยกัน
รวมทุกอย่างไว้ด้วยกัน
รวมทุกอย่างไว้ด้วยกัน
รวมทุกอย่างไว้ด้วยกัน
รวมทุกอย่างไว้ด้วยกัน
รวมทุกอย่างไว้ด้วยกัน

คุณสามารถวางแผนวางส่วนประกอบได้ทุกที่ที่คุณต้องการ ไม่มีข้อ จำกัด เกี่ยวกับมัน ฉันจะแสดงให้คุณเห็นว่าฉันทำอย่างไรเพื่อให้มันกระชับเพราะฉันต้องการสิ่งที่จะพอดีกับฝ่ามือ มันอาจจะเลอะเทอะเล็กน้อยดังนั้นลองใช้วิธีของฉันหากคุณพอใจกับการบัดกรี ฉันตัดสินใจที่จะเติมทั้งสองด้านของบอร์ดเป็น PCB สองชั้น NodeMCU และบอร์ดฝ่าวงล้อมการ์ด SD ที่ด้านหนึ่งและ OLED และปุ่มกดอีกด้านหนึ่ง

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

ฉันงอหมุดของส่วนหัวตัวเมียแบบ 4 พินที่มุมฉากแล้วบัดกรีที่ด้านทองแดงของ perfboard ตามที่แสดงในภาพ

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

ตรวจสอบการเชื่อมต่อทั้งหมดของคุณอีกครั้งว่ามีไฟฟ้าลัดวงจรหรือไม่ก่อนที่จะเปิดเครื่อง

ขั้นตอนที่ 6: การตั้งค่าปุ่มกด

การตั้งค่าปุ่มกด
การตั้งค่าปุ่มกด

เมื่อคุณตรวจสอบการเชื่อมต่อทั้งหมดแล้ว คุณก็พร้อมที่จะเปิดเครื่องอุปกรณ์ของคุณเป็นครั้งแรก ไขว้นิ้วเอาไว้! ไม่มีควันวิเศษ? ยินดีด้วย!

ตอนนี้เราพร้อมที่จะตั้งค่าปุ่มกดแล้ว เรียกคืนการทำงานของปุ่มกด การกดปุ่มทุกครั้งจะส่งแรงดันไฟฟ้าที่แตกต่างกันออกไป ซึ่งจะถูกป้อนไปยังพินอนาล็อกของ NodeMCU ESP-12E มีตัวแปลงอนาล็อกเป็นดิจิตอล (ADC) ที่ความละเอียด 10 บิต 2 ยกกำลัง 10 จะให้ 1024 ซึ่งหมายความว่าเราจะได้รับการอ่านระหว่าง 0 ถึง 1024 สำหรับทุกปุ่มที่กด มาดูกันว่าเราได้อ่านอะไรบ้าง แต่ก่อนอื่น เราต้องเขียนโปรแกรมเล็กๆ เพื่อให้ได้ค่าเหล่านั้น เปิด Arduino IDE คัดลอกวางโค้ดต่อไปนี้แล้วอัปโหลดไปยัง NodeMCU

แป้นพิมพ์ intPin = A0;

การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); } วงเป็นโมฆะ () { int r = analogRead (แป้นกดแป้น); Serial.println(r); }

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

ขั้นตอนที่ 7: มาโค้ดกันเถอะ

มาโค้ดกันเถอะ
มาโค้ดกันเถอะ
มาโค้ดกันเถอะ
มาโค้ดกันเถอะ
มาโค้ดกันเถอะ
มาโค้ดกันเถอะ

ดาวน์โหลดไฟล์ Scoreboard.ino ที่ให้ไว้ด้านล่างบนคอมพิวเตอร์ของคุณและเปิดโดยใช้ Arduino IDE

ก่อนที่คุณจะอัปโหลด

1) ตั้งเวลารีเฟรชสำหรับกระดานคะแนน ตัวอย่างเช่น 15L เป็นเวลา 15 วินาที

2) ป้อน SSID และรหัสผ่านของเราเตอร์ที่ต้องการเชื่อมต่อ

3) ทำการเปลี่ยนแปลงที่จำเป็นหากคุณเลือกที่จะเชื่อมต่อ CS pin ของการ์ด SD กับพินอื่นที่ไม่ใช่ GPIO15

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

เราจะเพิ่มขีดจำกัดบนและขีดจำกัดล่างของค่าด้วยระยะขอบ 5 ตัวอย่างเช่น ฉันได้ค่า 617 สำหรับคีย์ 1

  • ลบ 5 จากมัน 617 - 5 = 612 นี่คือขีดจำกัดล่าง
  • ตอนนี้เพิ่ม 5 เข้าไป 617 + 5 = 622 นี่คือขีดจำกัดบน
  • เลื่อนไปที่ส่วนท้ายของรหัส กรอกช่องว่างที่ให้ไว้สำหรับค่าทั้งสองค่าในรหัสตามที่แสดงในภาพ
  • ทำเช่นนี้กับทุกๆ 9 ค่า

if(r > 612 && r < 622) { keyNumber = 1; }

สิ่งนี้หมายความว่า?

หากการอ่าน (r) มากกว่า 612 และน้อยกว่า 622 ให้กดปุ่ม 1 ค่าใดๆ ระหว่าง 612 ถึง 622 จะถือเป็นคีย์ 1 ซึ่งจะช่วยแก้ปัญหาการอ่านที่ผันผวน

ขั้นตอนที่ 8: สร้างเคส

การสร้างเคส
การสร้างเคส
การสร้างเคส
การสร้างเคส
การสร้างเคส
การสร้างเคส
การสร้างเคส
การสร้างเคส

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

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

ทำช่องเล็ก ๆ เพื่อเข้าถึงพอร์ต USB โดยใช้ไฟล์ ควรมีขนาดใหญ่พอที่จะเสียบสาย USB ได้

สร้างตาราง 3x3 บนหน้าปกสำหรับปุ่มกด ซึ่งจะทำให้ปุ่มกดเข้าถึงได้ยาก เพื่อแก้ปัญหานี้ ฉันตัดชิ้นส่วนสี่เหลี่ยมสำหรับแต่ละปุ่มเพื่อให้ปุ่มของพวกมันขยายขึ้นไปที่พื้นผิว

หลังจากการขัด ตัด ประกอบ และปรับแต่งมามาก ในที่สุดมันก็เสร็จ!

ขั้นตอนที่ 9: ขอให้สนุก

มีความสุข!
มีความสุข!

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

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

รายการการแข่งขันทั้งหมดจะแสดงพร้อมกับหมายเลขการแข่งขัน

เลือกหมายเลขการแข่งขันโดยใช้ปุ่มกด

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

หากต้องการกลับไปที่เมนู ให้กดปุ่ม BACK (คีย์ 8) ค้างไว้จนกระทั่งหน้า "ดึงคะแนน…" ปรากฏขึ้น

แผนการในอนาคต

  • ออกแบบ PCB แบบกำหนดเองด้วยโมดูล ESP8266 12-E
  • เพิ่มแบตเตอรี่แบบชาร์จไฟได้
  • ปรับปรุงโค้ดด้วยคุณสมบัติใหม่

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

แนะนำ: