สารบัญ:
- ขั้นตอนที่ 1: ร่างกระดาษ
- ขั้นตอนที่ 2: รายการฮาร์ดแวร์
- ขั้นตอนที่ 3: การออกแบบวงจร
- ขั้นตอนที่ 4: การเชื่อมต่อฮาร์ดแวร์
- ขั้นตอนที่ 5: การออกแบบซอฟต์แวร์
- ขั้นตอนที่ 6: ดีบักบน Breadboard
- ขั้นตอนที่ 7: การประกอบฮาร์ดแวร์
- ขั้นตอนที่ 8: การออกแบบที่อยู่อาศัยอุปกรณ์อิเล็กทรอนิกส์ใน Adobe Illustrator
- ขั้นตอนที่ 9: ต้นแบบกระดาษแข็ง
- ขั้นตอนที่ 10: ต้นแบบไม้อัดเบิร์ช
- ขั้นตอนที่ 11: ต้นแบบการประกอบขั้นสุดท้าย
วีดีโอ: FinduCar: กุญแจรถอัจฉริยะที่นำทางผู้คนไปยังสถานที่จอดรถ: 11 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
เพื่อแก้ปัญหาข้างต้น โปรเจ็กต์นี้เสนอให้พัฒนากุญแจรถอัจฉริยะ ซึ่งสามารถนำทางผู้คนไปยังตำแหน่งที่พวกเขาจอดรถได้ และแผนของฉันคือการรวม GPS เข้ากับกุญแจรถ ไม่จำเป็นต้องใช้แอปสมาร์ทโฟนเพื่อติดตามรถ คำแนะนำทั้งหมดจะแสดงบนกุญแจรถ
ขั้นตอนที่ 1: ร่างกระดาษ
เมื่อมีคนกดปุ่มเพื่อล็อครถ ข้อมูลตำแหน่งจะถูกบันทึกลงในไมโครคอนโทรลเลอร์โดยอัตโนมัติ จากนั้น เมื่อผู้คนเริ่มนำทางไปที่รถ ไฟ LED ต่างๆ จะสว่างขึ้นเพื่อนำทางไปยังตำแหน่งของรถ และความถี่การกะพริบจะแสดงระยะห่างจากรถ พวกเขาสามารถติดตามไฟ LED ที่กะพริบและค้นหารถได้อย่างรวดเร็ว
ขั้นตอนที่ 2: รายการฮาร์ดแวร์
เหล่านี้เป็นส่วนประกอบที่ใช้ในโครงการนี้ บางส่วนมาจากชุดอนุภาค (เขียงหั่นขนม ปุ่ม ส่วนหัว) ส่วนอื่นๆ ซื้อจากเว็บไซต์อย่างเป็นทางการของ Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS module, Lpoly Battery และ Coin Cell Battery) และ Amazon (NeoPixel Ring - 12 RGB LED)
ขั้นตอนที่ 3: การออกแบบวงจร
Neopixel_LED เชื่อมต่อกับ PIN 6 ของ Feather M0
Button_Unlock เชื่อมต่อกับ PIN 12 ของ Feather M0
Button_Lock เชื่อมต่อกับ PIN 13 ของ Feather M0
ขั้นตอนที่ 4: การเชื่อมต่อฮาร์ดแวร์
ประสานส่วนหัวด้วย Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing ซ้อนกระดานทั้งสองเข้าด้วยกัน ปลั๊ก GPS FeatherWing เสียบเข้ากับบอร์ด Feather M0 โดยไม่ต้องใช้สายอีกต่อไป
ขั้นตอนที่ 5: การออกแบบซอฟต์แวร์
ส่วนประกอบทดสอบ
อ่านการแก้ไข
การตั้งค่าเป็นโมฆะ () {
Serial.println("GPS echo test"); Serial.begin(9600); Serial1.begin(9600); // ค่าเริ่มต้น NMEA GPS baud }
วงเป็นโมฆะ () {
ถ้า (Serial.available ()) { ถ่าน c = Serial.read (); Serial1.write(c); } if (Serial1.available()) { ถ่าน c = Serial1.read(); Serial.write(c); } }
ไฟ LED กะพริบตา
ดูตัวอย่าง Adafruit NeoPixel
ฟังก์ชันคำนวณ GPS
คำนวณ Azimuth
// คำนวณ Azimuth
ราบคู่ (lat_a สองเท่า, lon_a สองเท่า, lat_b สองเท่า, lon_b สองเท่า) {
สองเท่า d = 0; lat_a = lat_a*PI/180; lon_a = lon_a*PI/180; lat_b = lat_b*PI/180; lon_b = lon_b*PI/180; d = บาป(lat_a)*บาป(lat_b)+cos(lat_a)*cos(lat_b)*cos(lon_b-lon_a); d = sqrt(1-d*d); d = cos(lat_b)*sin(lon_b-lon_a)/d; d = asin(d)*180/PI; กลับ d; }
คำนวณเวลาบนนาฬิกา LED ซึ่งเป็นทิศทางของรถด้วย
// คำนวณเวลาบนนาฬิกา LED
int led_time (มุมคู่){
ธง int = 0; ถ้า (มุม = 15) { angle_time = angle_time + 1; } if (flag == 1){ angle_time = 12 - angle_time; } กลับ angle_time; }
คำนวณระยะห่างระหว่างบุคคลกับรถของเขา
// คำนวณระยะทาง
ระยะทางสองเท่า (lat_a สองเท่า, lon_a สองเท่า, lat_b สองเท่า, lon_b สองเท่า) {
EARTH_RADIUS สองเท่า = 6378137.0; double radLat1 = (lat_a * PI / 180.0); double radLat2 = (lat_b * PI / 180.0); ดับเบิล a = radLat1 - radLat2; ดับเบิล b = (lon_a - lon_b) * PI / 180.0; double s = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2))); s = s * EARTH_RADIUS / 10000000; กลับ s; }
ฟังก์ชั่นจอแสดงผล LED
ไฟ LED เป็นวงกลมแสดงว่าเริ่มนำทาง
// ไฟวงแหวน LED ส่องสว่างทีละดวงแสดงว่าการนำทางเริ่มต้นขึ้น
เป็นโมฆะ colorWipe (uint32_t c, uint8_t รอ) {
for(uint16_t i=0; i strip.setPixelColor(i, c); strip.show(); delay(wait); } }
รับความถี่ LED ตามระยะทาง
// รับความถี่ LED
ความถี่ int (ระยะทางสองเท่า) {
int f = (int)ระยะทาง * 20; กลับ f; }
กะพริบไฟ LED ที่ระบุทิศทางของรถ
//แสดงผลบน LED
แถบ. clear();
แถบ.show(); ล่าช้า(ความถี่(car_person_distance)); // ล่าช้า (500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); แถบ.show(); ล่าช้า(ความถี่(car_person_distance)); // ล่าช้า (500);
//ปิดการใช้งาน LED
ถ้า (button_flag == 1 && car_person_distance < 5.0) { button_flag = 0; led_flag = 1; แถบ. clear(); แถบ.show(); }
หลัก
#รวม Adafruit_GPS.h#รวม Adafruit_NeoPixel.h #include HardwareSerial.h #include Button.h #include math.h
#define Neopixel_LED_PIN 6
#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1
#define GPSECHO เท็จ
Adafruit_GPS GPS(&GPSSerial);Adafruit_NeoPixel แถบ = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); ปุ่ม button_lock (Button_Lock_PIN); ปุ่ม button_unlock(Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t ตัวจับเวลา = มิลลิวินาที (); รถคู่ car_lat, car_lon; car_person_distance คู่; สองครั้ง move_direction; car_azimuth คู่; รถคู่_person_angle; int angle_time;
การตั้งค่าเป็นโมฆะ () {
Serial.begin(115200); // Serial1.begin(9600); GPS.begin(9600); // ค่าเริ่มต้น NMEA GPS baud strip.begin (); // ยกเลิกหมายเหตุบรรทัดนี้เพื่อเปิด RMC (ขั้นต่ำที่แนะนำ) และ GGA (แก้ไขข้อมูล) รวมถึงระดับความสูง GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // ตั้งค่าอัตราการอัพเดต GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // อัตราการอัปเดต 1 Hz // ขออัปเดตเกี่ยวกับสถานะเสาอากาศ แสดงความคิดเห็นเพื่อเก็บเสียง // GPS.sendCommand(PGCMD_ANTENNA); ล่าช้า (1000);}
วงเป็นโมฆะ () {// ถ้า (Serial.available ()) {
// ถ่าน c = Serial.read(); // Serial1.write (c); // } // if (Serial1.available ()) { ถ่าน c = GPS.read (); ถ้า (GPSECHO) ถ้า (c) Serial.print (c); // หากได้รับประโยค เราสามารถตรวจสอบเช็คซัม แยกวิเคราะห์… if (GPS.newNMEAreceived()) { // สิ่งที่ยุ่งยากที่นี่คือถ้าเราพิมพ์ประโยค NMEA หรือ data // ท้ายที่สุดแล้วเราไม่ได้ฟังและ จับประโยคอื่น ๆ ! // ดังนั้นจงระวังให้มากหากใช้ OUTPUT_ALLDATA และลองพิมพ์ข้อมูล Serial.println(GPS.lastNMEA()); // สิ่งนี้ยังตั้งค่าแฟล็ก newNMEAreceived() เป็นเท็จ ถ้า (!GPS.parse(GPS.lastNMEA())) // สิ่งนี้ยังตั้งค่าแฟล็ก newNMEAreceived() เป็นการคืนค่าเท็จ // เราไม่สามารถแยกวิเคราะห์ประโยคได้ ซึ่งในกรณีนี้เราควรรออีก } // ถ้า millis() หรือ timer วนรอบ เราจะรีเซ็ตมันถ้า (timer > millis()) timer = millis(); ถ้า (มิลลิวินาที () - ตัวจับเวลา > 2000) { ตัวจับเวลา = มิลลิวินาที (); // รีเซ็ตตัวจับเวลา Serial.print("\nTime: "); Serial.print (GPS.hour, ธ.ค.); Serial.print(':'); Serial.print (GPS.minute, ธ.ค.); Serial.print(':'); Serial.print(GPS.วินาที,ธันวาคม); Serial.print('.'); Serial.println(GPS.มิลลิวินาที); Serial.print("วันที่: "); Serial.print (GPS.day, ธ.ค.); Serial.print('/'); Serial.print(GPS.เดือน ธ.ค.); Serial.print("/20"); Serial.println(GPS.ปี ธ.ค.); Serial.print("แก้ไข: "); Serial.print((int)GPS.fix); Serial.print(" คุณภาพ: "); Serial.println((int)GPS.fixquality); ถ้า (GPS.fix) { Serial.print ("ตำแหน่ง: "); Serial.print(GPS.ละติจูด, 4); Serial.print (GPS.lat); Serial.print(", "); Serial.print(GPS.ลองจิจูด, 4); Serial.println (GPS.lon); Serial.print("ตำแหน่ง (หน่วยเป็นองศา ใช้งานได้กับ Google Maps): "); Serial.print(GPS.latitudeDegrees, 4); Serial.print(", "); Serial.println(GPS.ลองจิจูดดีกรี 4); Serial.print("ความเร็ว (นอต): "); Serial.println (GPS.speed); Serial.print("มุม: "); Serial.println (GPS.angle); Serial.print("ระดับความสูง: "); Serial.println (GPS.altitude); Serial.print("ดาวเทียม: "); Serial.println((int)GPS.ดาวเทียม); // บันทึก GPS ของรถหาก (button_lock.read ()) { car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; //สำหรับการดีบัก Serial.print ("carLatitude: "); Serial.println(car_lat); Serial.print("รถลองจิจูด: "); Serial.println(car_lon); } // เริ่มค้นหารถถ้า (button_flag == 0){ button_flag = button_unlock.read(); } if(button_flag == 1 && led_flag == 1){ colorWipe(strip. Color(0, 255, 0), 500); led_flag = 0; } ถ้า (button_flag == 1) { car_person_distance = ระยะทาง (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //คำนวณระยะทาง //car_person_distance = ระยะทาง (100.0005, 100.0005, 100.0, 100.0); //สำหรับการดีบัก Serial.println(car_person_distance); move_direction = GPS.angle;// บันทึกทิศทางการเคลื่อนที่ (มุม) //move_direction = 100.0; // บันทึก Azimuth(มุม) car_azimuth = azimuth(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //car_azimuth = ราบ (100.0005, 100.0005, 100.0, 100.0); // คำนวณเวลาบนนาฬิกา LED car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); //แสดงบนแถบ LED.clear(); แถบ.show(); // ล่าช้า (ความถี่ (car_person_distance)); ล่าช้า (500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); แถบ.show(); // ล่าช้า (ความถี่ (car_person_distance)); ล่าช้า (500); //ปิดการใช้งาน LED ถ้า (button_flag == 1 && car_person_distance <5.0){ button_flag = 0; led_flag = 1; แถบ. clear(); แถบ.show(); } } } // } } }
ขั้นตอนที่ 6: ดีบักบน Breadboard
ขั้นตอนที่ 7: การประกอบฮาร์ดแวร์
ขั้นตอนที่ 8: การออกแบบที่อยู่อาศัยอุปกรณ์อิเล็กทรอนิกส์ใน Adobe Illustrator
ขั้นตอนที่ 9: ต้นแบบกระดาษแข็ง
ขั้นตอนนี้ใช้เพื่อยืนยันขนาดของตัวเรือนและชิ้นส่วนของรุ่นทุกชิ้น ตรวจสอบให้แน่ใจว่าขนาดกล่อง ตำแหน่งปุ่ม และตำแหน่ง LED พอดีกับชิ้นส่วนอิเล็กทรอนิกส์ที่ประกอบเข้าด้วยกัน
ขั้นตอนที่ 10: ต้นแบบไม้อัดเบิร์ช
นี่คือต้นแบบเริ่มต้น ในที่สุดรูสี่เหลี่ยมสำหรับเสียบที่ชาร์จก็ถูกเพิ่มเข้าไปในชิ้นส่วนหนึ่ง
ขั้นตอนที่ 11: ต้นแบบการประกอบขั้นสุดท้าย
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-