Table des matières:
- Étape 1: Croquis papier
- Étape 2: Liste du matériel
- Étape 3: Conception de circuits
- Étape 4: connexion matérielle
- Étape 5: Conception du logiciel
- Étape 6: Déboguer sur la planche à pain
- Étape 7: Assemblage du matériel
- Étape 8: Conception de boîtiers électroniques dans Adobe Illustrator
- Étape 9: prototype en carton
- Étape 10: Prototype de contreplaqué de bouleau
Vidéo: FinduCar : une clé de voiture intelligente guidant les gens vers l'endroit où la voiture est garée : 11 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Afin de résoudre les problèmes ci-dessus, ce projet propose de développer une clé de voiture intelligente qui pourrait diriger les gens vers l'endroit où ils ont garé la voiture. Et mon plan est d'intégrer un GPS dans la clé de la voiture. Il n'est pas nécessaire d'utiliser l'application pour smartphone pour suivre la voiture, tous les conseils s'afficheront simplement sur la clé de la voiture.
Étape 1: Croquis papier
Lorsque les gens appuient sur le bouton pour verrouiller la voiture, les informations de localisation peuvent être enregistrées automatiquement dans le microcontrôleur. Ensuite, lorsque les gens commencent à se diriger vers la voiture, les différentes LED s'allument pour se diriger vers la position de la voiture et la fréquence de clignotement indique la distance jusqu'à la voiture. Ils peuvent facilement suivre la LED clignotante et trouver rapidement la voiture.
Étape 2: Liste du matériel
Ce sont les composants utilisés dans ce projet. Certains proviennent des kits de particules (planche à pain, bouton, en-têtes), d'autres sont achetés sur le site officiel d'Adafruit (Adafruit Feather M0, module GPS Adafruit Ultimate, batterie Lpoly et pile bouton) et Amazon (anneau NeoPixel - 12 LED RGB).
Étape 3: Conception de circuits
Neopixel_LED est connecté au PIN 6 de Feather M0
Button_Unlock est connecté au PIN 12 de Feather M0
Button_Lock est connecté au PIN 13 de Feather M0
Étape 4: connexion matérielle
Soudez les embases avec Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Empilez les deux planches ensemble. Le GPS FeatherWing se branche directement sur votre carte Feather M0 sans plus de fils.
Étape 5: Conception du logiciel
Tester les composants
Lire un CORRECTIF
void setup() {
Serial.println("Test d'écho GPS"); Serial.begin(9600); Serial1.begin(9600); // Baud GPS NMEA par défaut }
boucle vide() {
if (Serial.available()) { char c = Serial.read(); Serial1.write(c); } if (Serial1.available()) { char c = Serial1.read(); Serial.write(c); } }
Anneau LED clignotant
Voir les exemples Adafruit NeoPixel.
Fonctions de calcul GPS
Calculer l'azimut
// Calculer l'azimut
double azimut(double lat_a, double lon_a, double lat_b, double lon_b) {
double 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 = asin(d)*180/PI; retour d; }
Calculer l'heure sur l'horloge LED, qui est aussi la direction du véhicule
// Calculer l'heure sur l'horloge LED
int led_time(double angle){
indicateur int = 0; if (angle = 15) { angle_time = angle_time + 1; } if (drapeau == 1){ angle_time = 12 - angle_time; } return angle_time; }
Calculer la distance entre la personne et son véhicule
// Calculer la distance
double distance(double lat_a, double lon_a, double lat_b, double lon_b) {
double EARTH_RADIUS = 6378137.0; double radLat1 = (lat_a * PI / 180,0); double radLat2 = (lat_b * PI / 180,0); double a = radLat1 - radLat2; double 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; Retour; }
Fonctions d'affichage LED
Allumez les LED dans un cercle indiquant qu'il commence à naviguer
// L'éclairage annulaire à LED un par un indique que la navigation commence
void colorWipe (uint32_t c, uint8_t wait) {
for(uint16_t i=0; i strip.setPixelColor(i, c); strip.show(); delay(wait); } }
Obtenez la fréquence LED sur la base de la distance
// Obtenir la fréquence LED
fréquence int(double distance){
int f = (int)distance * 20; retour f; }
Faire clignoter la certaine LED indiquant la direction de la voiture
//Affichage sur LED
strip.clear();
strip.show(); retard(fréquence(voiture_personne_distance)); // retard (500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.show(); retard(fréquence(voiture_personne_distance)); // retard (500);
//Désactiver la LED
if (button_flag == 1 && car_person_distance < 5.0){ button_flag = 0; led_flag = 1; strip.clear(); strip.show(); }
Principale
#include Adafruit_GPS.h#include 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 false
Adafruit_GPS GPS(&GPSSerial); Bande Adafruit_NeoPixel = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Bouton button_lock(Button_Lock_PIN); Bouton button_unlock(Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis(); double car_lat, car_lon; double car_person_distance; double move_direction; double car_azimut; double car_person_angle; int angle_temps;
void setup() {
Serial.begin(115200); // Serial1.begin(9600); GPS.begin(9600); // par défaut NMEA baud strip.begin(); // Décommentez cette ligne pour activer RMC (minimum recommandé) et GGA (données fixes) y compris l'altitude GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // Définir le taux de mise à jour GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // Taux de mise à jour de 1 Hz // Demander des mises à jour sur l'état de l'antenne, commenter pour garder le silence // GPS.sendCommand(PGCMD_ANTENNA); retard(1000);}
boucle vide() {// si (Serial.available()) {
// car c = Serial.read(); // Serial1.write(c); // } // if (Serial1.available()) { char c = GPS.read(); if (GPSECHO) if (c) Serial.print(c); // si une phrase est reçue, nous pouvons vérifier la somme de contrôle, l'analyser… if (GPS.newNMEAreceived()) { // une chose délicate ici est si nous imprimons la phrase NMEA, ou les données // nous finissons par ne pas écouter et attraper d'autres phrases! // soyez donc très prudent si vous utilisez OUTPUT_ALLDATA et essayez d'imprimer les données Serial.println(GPS.lastNMEA()); // cela définit également l'indicateur newNMEAreceived() sur false if (!GPS.parse(GPS.lastNMEA())) // cela définit également l'indicateur newNMEAreceived() sur false return; // nous pouvons échouer dans l'analyse d'une phrase, auquel cas nous devons simplement attendre une autre } // si millis() ou timer se termine, nous allons simplement le réinitialiser if (timer > millis()) timer = millis(); if (millis() - timer > 2000) { timer = millis(); // réinitialiser la minuterie Serial.print("\nTime: "); Serial.print(GPS.hour, DEC); Serial.print(':'); Impression.série(GPS.minute, DEC); Serial.print(':'); Serial.print(GPS.seconds, DEC); Serial.print('.'); Serial.println(GPS.milliseconds); Serial.print("Date: "); Serial.print(GPS.day, DEC); Serial.print('/'); Serial.print(GPS.month, DEC); Serial.print("/20"); Serial.println(GPS.year, DEC); Serial.print("Fix: "); Serial.print((int)GPS.fix); Serial.print(" qualité: "); Serial.println((int)GPS.fixquality); if (GPS.fix) { Serial.print("Emplacement: "); Serial.print(GPS.latitude, 4); Serial.print(GPS.lat); Serial.print(", "); Serial.print(GPS.longitude, 4); Serial.println(GPS.lon); Serial.print("Emplacement (en degrés, fonctionne avec Google Maps): "); Serial.print(GPS.latitudeDegrees, 4); Serial.print(", "); Serial.println(GPS.longitudeDegrees, 4); Serial.print("Vitesse (nœuds): "); Serial.println(GPS.speed); Serial.print("Angle: "); Serial.println(GPS.angle); Serial.print("Altitude: "); Serial.println(GPS.altitude); Serial.print("Satellite: "); Serial.println((int)GPS.satellites); // Sauvegarde le GPS du véhicule if (button_lock.read()) { car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; //pour déboguer Serial.print("carLatitude: "); Serial.println(car_lat); Serial.print("voitureLongitude: "); Serial.println(car_lon); } // Commence à trouver la voiture if (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 = distance(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //Calculer la distance //voiture_person_distance = distance(100.0005, 100.0005, 100.0, 100.0); //pour déboguer Serial.println(car_person_distance); move_direction = GPS.angle;//Enregistrer la direction de déplacement (angle) //move_direction = 100.0; // Enregistrer l'azimut (angle) car_azimuth = azimut(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //voiture_azimut = azimut(100.0005, 100.0005, 100.0, 100.0); // Calculer l'heure sur l'horloge LED car_person_angle = car_azimuth - move_direction; angle_time = led_time(car_person_angle); //Affichage sur bande LED.clear(); strip.show(); // retard(fréquence(voiture_personne_distance)); retard (500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.show(); // retard(fréquence(voiture_personne_distance)); retard (500); //Désactiver la LED if (button_flag == 1 && car_person_distance < 5.0){ button_flag = 0; led_flag = 1; strip.clear(); strip.show(); } } } // } } }
Étape 6: Déboguer sur la planche à pain
Étape 7: Assemblage du matériel
Étape 8: Conception de boîtiers électroniques dans Adobe Illustrator
Étape 9: prototype en carton
Cette étape est utilisée pour confirmer la taille du boîtier et de chaque pièce du modèle, en s'assurant que la taille de la boîte, la position du bouton et la position de la LED correspondent aux composants électroniques assemblés.
Étape 10: Prototype de contreplaqué de bouleau
C'était le prototype initial. Un trou carré pour brancher un chargeur a finalement été ajouté à l'une des pièces.
Conseillé:
Raspberry Pi DIY Smart Doorbell qui peut détecter les gens, les voitures, etc.: 5 étapes
Sonnette intelligente DIY Raspberry Pi pouvant détecter les personnes, les voitures, etc. Nest, ou l'un des autres concurrents) J'ai construit notre propre porte intelligente
Assistant de stationnement Arduino - Stationnez votre voiture au bon endroit à chaque fois : 5 étapes (avec photos)
Assistant de stationnement Arduino - Stationnez votre voiture au bon endroit à chaque fois : Dans ce projet, je vais vous montrer comment créer votre propre assistant de stationnement à l'aide d'un Arudino. Cet assistant de stationnement mesure la distance jusqu'à votre voiture et vous guide pour la garer au bon endroit à l'aide d'un écran LCD et d'une LED, qui prog
Comment faire une clé USB à l'aide d'une gomme - Boîtier de clé USB DIY : 4 étapes
Comment faire une clé USB à l'aide d'une gomme | Boîtier de clé USB DIY : Ce blog traite de "Comment fabriquer une clé USB à l'aide d'une gomme | Boîtier de clé USB bricolage" J'espère que tu l'aimeras
Transformez une clé USB ordinaire en une clé USB sécurisée : 6 étapes
Transformer une clé USB ordinaire en une clé USB sécurisée : dans ce Instructable, nous apprendrons comment transformer une clé USB ordinaire en une clé USB sécurisée. Tous avec des fonctionnalités standard de Windows 10, rien de spécial et rien de plus à acheter. Ce dont vous avez besoin : Une clé USB ou une clé USB. Je recommande fortement getti
Modifier les fenêtres pour afficher l'endroit où une photo a été prise : 4 étapes
Modifier les fenêtres pour afficher l'endroit où une photo a été prise : introductionAvez-vous déjà regardé vos photos de voyage et commencé à vous demander où vous les avez prises ? Comment s'appelait cette petite ville où tu t'es arrêté il y a cinq ans, celle où tu as pris le meilleur café ? Une fois que vous avez modifié Wind