สารบัญ:

เกจวัดในรถยนต์ OLED ESP32 ที่เปิดใช้งาน Wifi: 3 ขั้นตอน (พร้อมรูปภาพ)
เกจวัดในรถยนต์ OLED ESP32 ที่เปิดใช้งาน Wifi: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เกจวัดในรถยนต์ OLED ESP32 ที่เปิดใช้งาน Wifi: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เกจวัดในรถยนต์ OLED ESP32 ที่เปิดใช้งาน Wifi: 3 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: EP.6 การใช้หน้าจอแสดงผล OLED ร่วมกับ NodeMCU - แบบเรียนรู้ออนไลน์รายวิชา IoT 2024, ธันวาคม
Anonim
Image
Image
Wifi เปิดใช้งาน OLED ESP32 เกจรถยนต์
Wifi เปิดใช้งาน OLED ESP32 เกจรถยนต์

แนะนำตัวก่อน…

ฉันสร้างมาตรวัดรถเป็นงานอดิเรกอีกครั้งและปิดอีกครั้ง ดู https://www.instructables.com/id/Remote-Car-Monit… และ https://www.instructables.com/id/Remote-Car-Monit… สำหรับสองตัวอย่างล่าสุด ฉันชอบส่วนที่กลมกลืนกับชิ้นส่วนดั้งเดิมของรถเป็นพิเศษ ทำไมอันนี้ถึงแตกต่างและอะไรเป็นแรงบันดาลใจให้ฉันสร้างมันขึ้นมา คำตอบคือสองสิ่ง:

1) ESP32 - ฉันต้องการลองใช้เด็กใหม่บนชิปบล็อก โดยเฉพาะอย่างยิ่งเนื่องจาก toolchain ที่ใช้ Arduino นั้นค่อนข้างเป็นผู้ใหญ่ สิ่งที่น่าสนใจอย่างหนึ่งที่ ESP32 เปิดใช้งานคือ IOT ที่มีความสามารถ wifi และบลูทูธในตัว ชุมชนได้เขียนไลบรารีหลายแห่งเพื่อทำให้สิ่งนี้ค่อนข้างตรงไปตรงมา (เว็บเซิร์ฟเวอร์, AP, ไคลเอนต์ wifi, mDNS เป็นต้น)

2) หน้าจอ OLED ราคาถูก - ย้อนกลับไปในปี 2550 ฉันสร้างมาตรวัดโดยใช้ TFT ซึ่งนั่งแทนที่นาฬิกาบน GD (2004-2007) WRX TFT มีหลายรสชาติ บางคนทำงานได้ดีขึ้นในเวลากลางคืน บางคนทำงานได้ดีขึ้นในตอนกลางวัน ฯลฯ แต่ไม่มีใครทำงานได้ดีในทุกสภาวะ ฉันไม่ได้ตระหนักถึงข้อผิดพลาดของวิธีการของฉัน จนกระทั่งหนึ่งในมาตรวัดที่ฉันใช้นั้นไร้ประโยชน์ในระหว่างวันที่มีแดดจ้าของสมาชิกฟอรั่ม ใส่ OLED ซึ่งยอดเยี่ยมสำหรับการใช้งานยานยนต์ ไม่สว่างเกินไปในเวลากลางคืนและ (ที่สำคัญกว่านั้น) สามารถมองเห็นได้ในสภาพแสงแดดส่วนใหญ่

นี่เป็นคำแนะนำแบบสองต่อหนึ่งในขณะที่ฉันเขียนทุกอย่างสำหรับเกจทั่วไปสองตัวคือแรงดันน้ำมันและแรงดันเทอร์โบ โดยพื้นฐานแล้วทั้งสองสิ่งเป็นสิ่งเดียวกัน: มาตรวัดฟอร์มแฟกเตอร์ขนาดเล็กพร้อมจอแสดงผล OLED แบบแอนะล็อกที่ดูเคลื่อนไหวพร้อมตัวเลขและค่าสูงสุดที่ไม่ต่อเนื่อง ทั้งสองยังทำหน้าที่เป็น wifi AP และเว็บเซิร์ฟเวอร์ เมื่อเชื่อมต่อผ่านคอมพิวเตอร์หรือโทรศัพท์มือถือ สามารถดูแผนภูมิรูปแบบ EKG ที่เคลื่อนไหวได้ (นี่เป็นส่วนที่ค่อนข้างสร้างสรรค์)

เสบียง

โมดูล HELTEC ESP32 - รับตัวแปร wifi

ชิ้นส่วนเฉพาะแรงดันน้ำมัน:

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

บูสต์เกจเฉพาะส่วน:

  • เซ็นเซอร์ความดันอากาศ (เฉพาะในกรณีที่คุณต้องการสร้างเกจบูสต์) -
  • ท่อลม
  • ฟิตติ้ง T

ห้องสมุดที่ฉันใช้ซึ่งขาดไม่ได้:

Smoothiecharts - https://smoothiecharts.org/ ชาร์ตอัปเดตสดที่ยอดเยี่ยมและมีน้ำหนักเบา ปรับแต่งได้มากและไม่ต้องอาศัยการอ้างอิงไลบรารี js ที่อื่นบนอินเทอร์เน็ต สิ่งนี้ช่วยให้การตั้งค่าประเภท "local-IOT" และไลบรารีทั้งหมดพอดีกับสตริงเดียวสำหรับคำสั่งเว็บเซิร์ฟเวอร์ในโค้ด!

ESPAsyncWebServer -https://github.com/me-no-dev/ESPAsyncWebServer- ทำในสิ่งที่พูดในกล่องและทำได้ดี

ไลบรารีกราฟิก ThingPulse OLED (บางครั้งเรียกว่าไลบรารี squix) - https://github.com/ThingPulse/esp8266-oled-ssd130… - กราฟิกที่มีประสิทธิภาพและตรงไปตรงมามากสำหรับชิป ESP อนุญาตให้ฉันเขียนโปรแกรมแบบขี้เกียจและยังคงได้แอนิเมชั่นที่น่าเชื่อ

เครื่องมือ/อื่นๆ:

หัวแร้ง - ใช้ทำสายเคเบิลยาวสำหรับเซ็นเซอร์ ติดตั้งส่วนหัวบนบอร์ด ฟิล์มหด ฯลฯ

ไขควง/ซ็อกเก็ต/เครื่องมือรถอื่นๆ - จำเป็นในการติดตั้งเซ็นเซอร์บนรถ

เทปกาวสองหน้า - สำหรับติดตั้งเกจในตัวเรือนและติดตั้งตัวเรือนในรถยนต์ (กาวร้อนและสิ่งของอื่นๆ อาจใช้ได้ แต่ฉันชอบเทปปิดขอบด้านนอก 2 ด้านของ 3M มากกว่า ยึดแน่นดีและสามารถดึงออกได้โดยไม่เกิดความเสียหาย)

กรรไกร - สำหรับเทปและตัดท่อและสายรัด

สายรัดซิป - สำหรับยึดสิ่งของ, มัดสายไฟไว้ใต้แผงหน้าปัดและในห้องเครื่อง, จับเซ็นเซอร์ให้เข้าที่ ฯลฯ

ขั้นตอนที่ 1: รหัสแรก/ฮาร์ดแวร์วินาที

รหัสแรก/ฮาร์ดแวร์ที่สอง
รหัสแรก/ฮาร์ดแวร์ที่สอง
รหัสแรก/ฮาร์ดแวร์ที่สอง
รหัสแรก/ฮาร์ดแวร์ที่สอง

สามารถดาวน์โหลดรหัสได้ที่นี่:

แรงดันน้ำมัน -

เพิ่มแรงดัน -

เพิ่มแรงกดด้วยใบหน้าแทนเกจแบบอะนาล็อก -

รหัสกราฟิก: ไลบรารี ThingPulse มีประสิทธิภาพมากจนคุณสามารถวาด xbms ทับกันและได้ผลลัพธ์ที่น่าเชื่อ!

เกจอิมเมจจริง ๆ แล้วมาจากที่เก็บกราฟิกโอเพ่นซอร์ส (https://thenounproject.com/) ศิลปิน Iconic, CY (https://thenounproject.com/icon/490005/).

ฉันใช้ gimp เพื่อสร้างเฟรมที่แตกต่างกัน 20 เฟรมโดยให้เข็มชี้ไปที่เครื่องหมายถูกแต่ละอัน ไอคอนหน้ายิ้มโดย NOVITA ASTRI, ID และอยู่ที่นี่:

จากนั้นฉันก็แปลงสิ่งเหล่านี้เป็นอาร์เรย์ const uint8_t โดยใช้เทคนิคนี้ (คำใบ้: ถ้าสีกลับด้านเมื่อคุณแสดง ให้กลับสีบนต้นฉบับ): https://blog.squix.org/2015/05/esp8266- โนเดมคูโฮ…

รหัสแอนิเมชั่นสดค่อนข้างตรงไปตรงมา:

  • รับการอ่านจากเซ็นเซอร์
  • การอ่านค่าสเกล (ฉันทำ 1 ต่อ 1 สำหรับค่าบูสต์ที่เป็นบวก และขยับเข็มเฉพาะเมื่ออยู่ในบูสต์ ไม่ใช่เมื่ออยู่ในสุญญากาศ)
  • วาด xbm แล้วใส่อักขระตัวเลขสำหรับอย่างอื่น
  • ล้างแล้วทำซ้ำ

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

รหัสบูสต์ (เซ็นเซอร์ให้ค่าแอนะล็อกตั้งแต่ 0-5 โวลต์ซึ่ง ADC เปลี่ยนเป็นขั้นตอนตั้งแต่ 0-1024):

int getBoost () { float rboost = ((analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36))/5); //float ResultPSI = (rboost*(.00488)/(.022)+20)/6.89 - atmo; // ออกจาก /6.89 สำหรับ kpa float ResultPSI = (((rboost / 4095) + 0.04) / 0.004) * 0.145 - atmo; // โดย 0.145 ถึง calc psi //4096 ค่าบน esp32 /*rBoost = rBoost + 1; ถ้า (rBoost >= 20) { rBoost = 0; }*/ ผลตอบแทน (ResultPSI); }

รหัสแรงดันน้ำมัน (เซ็นเซอร์จะแปรความต้านทานตามความดันที่สัมผัสได้ ดังนั้นตัวแบ่งแรงดันจึงจำเป็นต้องเปลี่ยนค่านี้เป็นแรงดันไฟฟ้าตั้งแต่ 0-5v ดู: https://electronics.stackexchange.com/questions/3…https://electronics.stackexchange.com/questions/3…https:/ /www.instructables.com/id/Remote-Car-Monito…(ไปทางด้านล่าง) สำหรับข้อมูลเพิ่มเติม):

int getOilPSI () { float psival = ((analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36))/5); psival = -0.0601*psival + 177.04 - 14.5; ผลตอบแทน psival; }

ฟังก์ชันเว็บเซิร์ฟเวอร์และ AP: ฟังก์ชัน AP ค่อนข้างง่าย - สร้างอินสแตนซ์และอ็อบเจ็กต์ AP ด้วย ESSID ที่คุณต้องการแพร่ภาพและรหัสผ่าน และคุณพร้อมแล้ว

const char *ssid = "boost_gauge_ap";const char *password = "รหัสผ่าน";

WiFi.softAP(ssid, รหัสผ่าน);

มันยังมีเซิร์ฟเวอร์ DHCP ดังนั้นคุณไม่ต้องกังวลกับมัน โดยค่าเริ่มต้น IP คือ 192.168.1.4 (ไม่รู้ว่าทำไม นั่นคือสิ่งที่เลือก) บิตของเว็บเซิร์ฟเวอร์นั้นซับซ้อนกว่าเล็กน้อยและต้องการการค้นคว้าเล็กน้อย โดยทั่วไปคุณต้องการเว็บเซิร์ฟเวอร์แบบ async เพื่อให้สามารถอัปเดตข้อมูลสดได้ โชคดีที่มีห้องสมุดสำหรับสิ่งนั้น ฉันไม่ใช่นักพัฒนาจาวาสคริปต์ ดังนั้นฉันจึงปรับแต่งไลบรารีแผนภูมิและกราฟจำนวนมาก จนกระทั่งฉันสะดุดกับแผนภูมิสมูทตี้ ไลบรารีการสร้างแผนภูมิอื่นๆ ส่วนใหญ่เขียนขึ้นเพื่อให้รับช่วงโค้ดทุกประเภทจากไลบรารีอื่นๆ จากทั่วทั้งเว็บที่โหลดแบบไดนามิกเมื่อมีการแสดงหน้าเว็บ ฉันต้องการให้สิ่งนี้ทำงานโดยไม่ขึ้นกับอินเทอร์เน็ต ดังนั้นนี่จึงเป็นการค้นพบครั้งใหญ่ ประการที่สอง มันต้องมีขนาดเล็กพอที่จะพอดีกับ Arduino และอย่างที่คุณเห็นในโค้ด มันพอดีกับอาร์เรย์ถ่านตัวเดียว

ประกาศเว็บเซิร์ฟเวอร์: #include AsyncTCP.h #include ESPAsyncWebServer.h … เซิร์ฟเวอร์ AsyncWebServer(80); // ตรวจสอบและเลือกพอร์ต (80 เป็นมาตรฐานสำหรับ http) … server.on("/", HTTP_GET, (AsyncWebServerRequest *request){ request->send(200, "text/html", "… // หน้าเว็บ + ไลบรารี Smoothiecharts ในอาร์เรย์ถ่านขนาดใหญ่ }); server.on("/val", HTTP_GET, (AsyncWebServerRequest *request){ // หน้าแรกจริง ๆ แล้วเรียกหน้าเล็ก ๆ นี้ที่เพิ่งส่งคืนคำขอค่า ->ส่ง(200, "ข้อความ/html", Sboost); }); server.begin();

ขั้นตอนที่ 2: ฮาร์ดแวร์และการเดินสาย

ฮาร์ดแวร์และสายไฟ
ฮาร์ดแวร์และสายไฟ
ฮาร์ดแวร์และสายไฟ
ฮาร์ดแวร์และสายไฟ
ฮาร์ดแวร์และสายไฟ
ฮาร์ดแวร์และสายไฟ

ภาพในแกลเลอรีคือเซ็นเซอร์สองตัวที่ฉันใช้ สีทองขนาดใหญ่คือเซ็นเซอร์แรงดันน้ำมัน Autometer 2242 ตัวเครื่องและเกลียวของเซ็นเซอร์นี้มีกราวด์ และขั้วต่อเป็นค่าความต้านทานที่อ่านได้

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

เซ็นเซอร์ความดันอากาศ MPX4250AP มีหมุดอยู่สามตัวและหมุดที่ไม่ได้ใช้หลายตัว พวกมันคือ V in, กราวด์และเอาต์พุตเซ็นเซอร์ มันส่งค่าการอ่าน 0-5v ที่ไมโครคอนโทรลเลอร์สามารถอ่านได้ (หรือในกรณีของ mcu 0-3 โวลต์นี้ ดังนั้น การอ่านเซ็นเซอร์จะถูกลดขนาดลงโดยใช้ตัวแบ่งแรงดันไฟฟ้า) สามารถดูแผ่นข้อมูลจำเพาะได้ที่นี่:

มีปัญหาหลายประการในการลดขนาดจากตรรกะ 5v เป็น 3v ในกรณีของฉัน ฉันใช้ตัวแบ่งแรงดันไฟฟ้าเพื่อความเรียบง่าย และฉันมีชิ้นส่วนรอบๆ โต๊ะของฉัน คุณจะแนะนำข้อผิดพลาดเล็กน้อยในการอ่านโดยพิจารณาจากข้อผิดพลาดที่เป็นไปได้ของส่วนประกอบเพิ่มเติม (ตัวต้านทานสองตัว) ซึ่งจะทำให้การอ่านของคุณลดลง 10% ในบางกรณี ฉันสามารถอยู่กับสิ่งนี้ได้ หากคุณทำไม่ได้คุณอาจต้องการใช้ opamp และตัวต้านทานหรือตัวแปลงระดับลอจิก (มีให้จากผู้จำหน่ายอุปกรณ์อิเล็กทรอนิกส์หลายแห่ง Sparkfun มีที่นี่: https://www.sparkfun.com/products/12009 ฉันอาจเปลี่ยนเป็น บางครั้งฉันได้รับการอ่านค่าสูงในมาตรวัดนี้ (อันที่จริงฉันได้แสดงผลิตภัณฑ์นี้ในแผนภาพการเดินสายของฉัน)

ฉันขับเคลื่อน ESP32 ผ่าน USB ซึ่งรวมถึงการเดินสายที่ชาร์จโดยตรงแบบนี้: https://www.amazon.com/gp/product/B00U2DGKOK/ref=p… ไปที่รถแล้วใช้ฮับ USB เพื่อแยกออก คุณจะเห็นว่าฉันใช้สาย usb มุมฉากเพื่อให้แน่ใจว่าทุกอย่างทำงานในพื้นที่ขนาดเล็ก (https://www.amazon.com/gp/product/B00ENZDFQ4/ref=p…)

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

ขั้นตอนที่ 3: ตัวเรือนพิมพ์ 3 มิติ

ที่อยู่อาศัยพิมพ์ 3 มิติ
ที่อยู่อาศัยพิมพ์ 3 มิติ

ฉันใช้ตัวเรือนที่พิมพ์ 3 มิติมาหลายตัวสำหรับสิ่งนี้

  • เกจวัดรอบหน้าจอขนาดใหญ่ทั่วไป 2 จอ คุณสามารถเห็นสิ่งนี้ได้จากรูปภาพของหน้าแรก ฉันวางไว้ข้างนาฬิกาบนหน้าปัด
  • สไตล์ลิ่มเกจเดียวที่เหมาะกับพื้นที่นาฬิกาของ subaru impreza (wrx, sti ฯลฯ) ตั้งแต่ประมาณปี 2008 ถึง 2014
  • เกจวัดคู่ที่พอดีกับคอพวงมาลัยและพื้นผิวโค้งมนอื่นๆ:

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

หมายเหตุบางส่วน:

  • ฉันทำของฉันเสร็จด้วยพลาสติดิป เป็นวิธีที่ชอบของคนเกียจคร้าน
  • การขัดพลาสติกทำให้เกิดอนุภาคเล็กๆ ที่ไม่ดีสำหรับคุณ ให้ใช้หน้ากากที่เหมาะสม
  • ฉันใช้ PETG สำหรับตัวเรือนของฉัน เอบีเอสยังดี PLA จะบิดเบี้ยวในแสงแดดที่ร้อนจัดบนแดชบอร์ด
IoT Challenge
IoT Challenge
IoT Challenge
IoT Challenge

รางวัลที่สองใน IoT Challenge

แนะนำ: