Съдържание:
- Стъпка 1: Хартиена скица
- Стъпка 2: Списък на хардуера
- Стъпка 3: Дизайн на верига
- Стъпка 4: Хардуерна връзка
- Стъпка 5: Проектиране на софтуер
- Стъпка 6: Отстраняване на грешки в дъската
- Стъпка 7: Сглобяване на хардуер
- Стъпка 8: Дизайн на корпуси за електроника в Adobe Illustrator
- Стъпка 9: Прототип от картон
- Стъпка 10: Прототип на брезов шперплат
Видео: FinduCar: ключ за интелигентна кола, който води хората до мястото, където е паркирана колата: 11 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
За да се разрешат горепосочените проблеми, този проект предлага да се разработи интелигентен ключ за кола, който да насочва хората до мястото, където са паркирали колата. И моят план е да интегрирам GPS в ключа на колата. Няма нужда да използвате приложението за смартфон за проследяване на колата, всички указания ще се показват само на ключа на колата.
Стъпка 1: Хартиена скица
Когато хората натиснат бутона, за да заключат колата, информацията за местоположението може да бъде записана автоматично в микроконтролера. След това, когато хората започнат да се ориентират към колата, различният светодиод светва, за да насочи към позицията на колата и мигащата честота показва разстоянието до колата. Те могат лесно да следват мигащия светодиод и бързо да намерят колата.
Стъпка 2: Списък на хардуера
Това са компонентите, използвани в този проект. Някои от тях са от комплектите за частици (макет, бутон, заглавки), други са закупени от официалния уебсайт на Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS модул, Lpoly батерия и Coin Cell батерия) и 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, Adafruit Ultimate GPS Featherwing. Подредете двете дъски заедно. GPS FeatherWing се включва директно във вашата платка Feather M0 без повече кабели.
Стъпка 5: Проектиране на софтуер
Тестови компоненти
Прочетете КОРЕКС
void setup () {
Serial.println ("GPS ехо тест"); Serial.begin (9600); Serial1.begin (9600); // по подразбиране NMEA GPS бод}
void loop () {
if (Serial.available ()) {char c = Serial.read (); Serial1.write (c); } if (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Мигащ LED пръстен
Вижте Примери за Adapruit NeoPixel.
Функции за изчисляване на GPS
Изчислете азимута
// Изчисляване на азимута
двоен азимут (двоен 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 = sin (lat_a)*sin (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 = азин (d)*180/PI; връщане d; }
Изчислете времето на LED часовника, което е и посоката на превозното средство
// Изчисляване на времето на LED часовника
int led_time (двоен ъгъл) {
int флаг = 0; if (ъгъл = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } ъгъл на връщане_ време; }
Изчислете разстоянието между лицето и неговото превозно средство
// Изчисляване на разстоянието
двойно разстояние (двойно lat_a, двойно lon_a, двойно lat_b, двойно lon_b) {
двойно EARTH_RADIUS = 6378137.0; двоен radLat1 = (lat_a * PI / 180.0); двоен radLat2 = (lat_b * PI / 180.0); двойно a = radLat1 - radLat2; двойно b = (lon_a - lon_b) * PI / 180.0; двойно s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; се завръща; }
Функции на LED дисплея
Запалете светодиоди в кръг, показващи, че той започва да се движи
// LED пръстеновото осветление едно по едно показва, че навигацията започва
void colorWipe (uint32_t c, uint8_t чакане) {
for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); забавяне (изчакване);}}
Вземете светодиодната честота въз основа на разстоянието
// Вземете LED честота
int честота (двойно разстояние) {
int f = (int) разстояние * 20; връщане f; }
Мигайте с определен светодиод, посочващ посоката на колата
// Дисплей на LED
strip.clear ();
strip.show (); забавяне (честота (car_person_distance)); // забавяне (500); strip.setPixelColor (ъгъл_време, strip. Color (0, 0, 255)); strip.show (); забавяне (честота (car_person_distance)); // забавяне (500);
// Деактивиране на светодиода
if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }
Основен
#include Adafruit_GPS.h #include Adafruit_NeoPixel.h #include HardwareSerial.h #include Button.h #include math.h
#дефинирайте Neopixel_LED_PIN 6
#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1
#define GPSECHO false
Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel strip = 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 таймер = millis (); двойна car_lat, car_lon; двойна car_person_distance; двойно move_direction; двоен car_azimuth; двойна car_person_angle; int ъгъл_ време;
void setup () {
Serial.begin (115200); // Serial1.begin (9600); GPS.бегин (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);}
void loop () {// if (Serial.available ()) {
// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serial.print (c); // ако е получено изречение, можем да проверим контролната сума, да го анализираме … if (GPS.newNMEAreceived ()) {// сложно нещо е тук, ако отпечатаме изречението NMEA или данни // в крайна сметка не слушаме и улавяне на други изречения! // така че бъдете много предпазливи, ако използвате OUTPUT_ALLDATA и се опитвате да отпечатате данни Serial.println (GPS.lastNMEA ()); // това също задава флага newNMEAreceived () на false, ако (! GPS.parse (GPS.lastNMEA ())) // това също задава флага newNMEAreceived () на false return; // можем да пропуснем синтактичния анализ на изречение, в който случай просто трябва да изчакаме друго} // ако millis () или таймерът се завърта, просто ще го нулираме if (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // нулиране на таймера Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Дата:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.месец, DEC); Serial.print ("/20"); Serial.println (GPS.година, DEC); Serial.print ("Fix:"); Serial.print ((int) GPS.fix); Serial.print ("качество:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Местоположение:"); Serial.print (GPS. Latitude, 4); Serial.print (GPS.lat); Serial.print (","); Сериен.принт (GPS.дължина, 4); Serial.println (GPS.lon); Serial.print ("Местоположение (в градуси, работи с Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Скорост (възли):"); Serial.println (GPS.speed); Serial.print ("ъгъл:"); Serial.println (GPS.ъгъл); Serial.print ("Надморска височина:"); Serial.println (GPS.вътрешна височина); Serial.print ("Сателити:"); Serial.println ((int) GPS.сателити); // Запазване на GPS на автомобила if (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // за отстраняване на грешки Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); 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; } if (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; // Записване на азимута (ъгъл) 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 (); strip.show (); // забавяне (честота (car_person_distance)); забавяне (500); strip.setPixelColor (ъгъл_време, strip. Color (0, 0, 255)); strip.show (); // забавяне (честота (car_person_distance)); забавяне (500); // Деактивиране на светодиода if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Стъпка 6: Отстраняване на грешки в дъската
Стъпка 7: Сглобяване на хардуер
Стъпка 8: Дизайн на корпуси за електроника в Adobe Illustrator
Стъпка 9: Прототип от картон
Тази стъпка се използва за потвърждаване на размера на корпуса и на всяка част от модела, като се уверите, че размерът на кутията, позицията на бутона и позицията на LED съответстват на сглобените електронни компоненти.
Стъпка 10: Прототип на брезов шперплат
Това беше първоначалният прототип. Към едно от парчетата накрая беше добавен квадратен отвор за включване в зарядно устройство.
Препоръчано:
Срамежлива маска, която се затваря, когато види хората: 9 стъпки (със снимки)
Срамежлива маска, която се затваря, когато види хората: Тъжно е, че трябва да носим маски за лице поради Covid -19. Това не е особено приятно изживяване, кара ви да се горете, да се потите, да изнервяте и, разбира се, да дишате по -трудно. Има жадни моменти, когато настоявате да премахнете маската, но се страхувате да го направите. Какво аз
Сонда за измерване на нивото на подземните води за настройки на ниски ресурси: 4 стъпки (със снимки)
Сонда за измерване на нивото на подземните води за настройки на ниски ресурси: Въведение Получихме искане от Oxfam да разработим прост начин, по който учениците в Афганистан могат да наблюдават нивата на подземните води в близките кладенци. Тази страница е преведена на Дари от д -р Амир Хайдари и преводът може да бъде
IoT RC кола с дистанционно управление или порта за интелигентна лампа: 8 стъпки (със снимки)
IoT RC Car With Smart Lamp Remote или Gateway: За несвързан проект писах код на Arduino, за да говоря с интелигентните лампи MiLight и дистанционните лампи, които имам в дома си. След като успях да прихваща команди от безжичните дистанционни управления, Реших да направя малка RC кола за тестване
Супервайзор Ерик Вдъхновен LED куб (Хората на Земята): 10 стъпки (със снимки)
Supervisor Eric Inspired LED Cube (Хората на Земята): Кой или какво е Supervisor Eric - и защо бихте построили това. Supervisor Eric е BOX или Cube или нещо от шоуто на TBS "People of Earth". Което е малко забавно предаване за хора, отвлечени от извънземни - в по -голямата си част всички
Наистина прост/лесен/неусложнен начин да накарате хората/хората/животните/роботите да изглеждат така, сякаш имат наистина готина/ярка топлинна визия (цвят по ваш избор) с помощта на GIMP: 4 стъпки
Наистина прост/лесен/неусложнен начин да накарате хората/хората/животните/роботите да изглеждат така, сякаш имат наистина готина/ярка топлинна визия (цвят по ваш избор) с помощта на GIMP: Прочетете … заглавието