Sommario:
- Passaggio 1: schizzo su carta
- Passaggio 2: elenco hardware
- Passaggio 3: progettazione del circuito
- Passaggio 4: connessione hardware
- Passaggio 5: progettazione del software
- Passaggio 6: eseguire il debug su breadboard
- Passaggio 7: assemblaggio dell'hardware
- Passaggio 8: progettazione dell'alloggiamento dell'elettronica in Adobe Illustrator
- Passaggio 9: prototipo in cartone
- Passaggio 10: prototipo in compensato di betulla
Video: FinduCar: una chiave per auto intelligente che guida le persone dove è parcheggiata l'auto: 11 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Per risolvere i problemi di cui sopra, questo progetto propone di sviluppare una chiave per auto intelligente che possa indirizzare le persone verso dove hanno parcheggiato l'auto. E il mio piano è integrare un GPS nella chiave della macchina. Non è necessario utilizzare l'app per smartphone per tracciare l'auto, tutte le indicazioni verranno visualizzate solo sulla chiave dell'auto.
Passaggio 1: schizzo su carta
Quando le persone premono il pulsante per bloccare l'auto, le informazioni sulla posizione potrebbero essere registrate automaticamente nel microcontrollore. Quindi, quando le persone iniziano a navigare verso l'auto, il diverso LED si accende per dirigersi verso la posizione dell'auto e la frequenza lampeggiante mostra la distanza dall'auto. Possono facilmente seguire il LED lampeggiante e trovare rapidamente l'auto.
Passaggio 2: elenco hardware
Questi sono i componenti utilizzati in questo progetto. Alcuni provengono dai kit di particelle (breadboard, pulsante, intestazioni), altri sono acquistati dal sito Web ufficiale di Adafruit (Adafruit Feather M0, modulo GPS Adafruit Ultimate, batteria Lpoly e batteria a bottone) e Amazon (anello NeoPixel - 12 LED RGB).
Passaggio 3: progettazione del circuito
Neopixel_LED è connesso al PIN 6 di Feather M0
Button_Unlock è connesso al PIN 12 di Feather M0
Button_Lock è connesso al PIN 13 di Feather M0
Passaggio 4: connessione hardware
Saldare le intestazioni con Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Impila le due tavole insieme. Il GPS FeatherWing si collega direttamente alla tua scheda Feather M0 senza più fili.
Passaggio 5: progettazione del software
Componenti di prova
Leggi un FIX
void setup() {
Serial.println("Test eco GPS"); Serial.begin(9600); Serial1.begin(9600); // baud GPS NMEA predefinito }
ciclo vuoto() {
if (Serial.available()) { char c = Serial.read(); Serial1.write(c); } if (Serial1.available()) { char c = Serial1.read(); Serial.write(c); } }
Anello LED lampeggiante
Vedi esempi di Adafruit NeoPixel.
Funzioni di calcolo GPS
Calcola l'Azimut
// Calcola l'Azimut
doppio azimut(doppio lat_a, doppio lon_a, doppio lat_b, doppio lon_b) {
doppio 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; ritorno d; }
Calcola l'ora sull'orologio a LED, che è anche la direzione del veicolo
// Calcola l'ora sull'orologio LED
int led_time(doppio angolo){
int flag = 0; if (angolo = 15) { tempo_angolo = tempo_angolo + 1; } if (flag == 1){ tempo_angolo = 12 - tempo_angolo; } return tempo_angolo; }
Calcola la distanza tra la persona e il suo veicolo
// Calcola la distanza
doppia distanza(doppio lat_a, doppio lon_a, doppio lat_b, doppio lon_b) {
doppio RAGGIO_TERRA = 6378137.0; double radLat1 = (lat_a * PI / 180.0); double radLat2 = (lat_b * PI / 180.0); doppia a = radLat1 - radLat2; doppia 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 * RAGGIO_TERRA / 10000000; ritorna; }
Funzioni di visualizzazione a LED
Accendi i LED in un cerchio che mostrano che inizia a navigare
// L'illuminazione circolare a LED mostra l'inizio della navigazione
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i strip.setPixelColor(i, c); strip.show(); delay(wait); } }
Ottieni la frequenza del LED in base alla distanza
// Ottieni la frequenza del LED
frequenza int (distanza doppia){
int f = (int)distanza * 20; ritorno f; }
Lampeggia il certo LED che indica la direzione dell'auto
//Display su LED
strip.clear();
strip.show(); delay(frequency(car_person_distance)); // ritardo(500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.show(); delay(frequency(car_person_distance)); // ritardo(500);
//Disabilita 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);Strip Adafruit_NeoPixel = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Pulsante button_lock(Button_Lock_PIN); Pulsante button_unlock(Button_Unlock_PIN); int flag_pulsante = 0; int led_flag = 1; uint32_t timer = millis(); doppio car_lat, car_lon; doppia distanza_persona_auto; doppia direzione_movimento; doppio auto_azimut; doppio car_person_angle; int tempo_angolo;
void setup() {
Serial.begin(115200); // Serial1.begin(9600); GPS.begin(9600); // default NMEA GPS baud strip.begin(); // toglie il commento a questa riga per attivare RMC (minimo consigliato) e GGA (dati corretti) inclusa l'altitudine GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // Imposta la frequenza di aggiornamento GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // Frequenza di aggiornamento di 1 Hz // Richiedi aggiornamenti sullo stato dell'antenna, commenta per tacere // GPS.sendCommand(PGCMD_ANTENNA); ritardo(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); // se viene ricevuta una frase, possiamo controllare il checksum, analizzarla… if (GPS.newNMEAreceived()) { // una cosa complicata qui è se stampiamo la frase NMEA, o i dati // finiamo per non ascoltare e catturando altre frasi! // quindi fai molta attenzione se usi OUTPUT_ALLDATA e provi a stampare i dati Serial.println(GPS.lastNMEA()); // questo imposta anche il flag newNMEAreceived() su false if (!GPS.parse(GPS.lastNMEA())) // imposta anche il flag newNMEAreceived() su false return; // possiamo fallire nell'analizzare una frase, nel qual caso dovremmo solo aspettare un altro } // se millis() o il timer si avvolge, lo reimposteremo semplicemente if (timer > millis()) timer = millis(); if (millis() - timer > 2000) { timer = millis(); // resetta il timer Serial.print("\nTime: "); Serial.print(GPS.hour, DEC); Serial.print(':'); Serial.print(GPS.minuto, DEC); Serial.print(':'); Serial.print(GPS.secondi, DEC); Serial.print('.'); Serial.println(GPS.millisecondi); Serial.print("Data: "); Serial.print(GPS.day, DEC); Serial.print('/'); Serial.print(GPS.mese, DEC); Serial.print("/20"); Serial.println(GPS.anno, DEC); Serial.print("Correggi: "); Serial.print((int)GPS.fix); Serial.print(" qualità: "); Serial.println((int)GPS.fixquality); if (GPS.fix) { Serial.print("Posizione: "); Serial.print(GPS.latitude, 4); Serial.print(GPS.lat); Serial.print(", "); Serial.print(GPS.longitudine, 4); Serial.println(GPS.lon); Serial.print("Posizione (in gradi, funziona con Google Maps): "); Serial.print(GPS.latitudeDegrees, 4); Serial.print(", "); Serial.println(GPS.longitudeDegrees, 4); Serial.print("Velocità (nodi): "); Serial.println(GPS.velocità); Serial.print("Angolo: "); Serial.println(GPS.angolo); Serial.print("Altitudine: "); Serial.println(GPS.altitudine); Serial.print("Satelliti: "); Serial.println((int)GPS.satellites); // Salva il GPS del veicolo if (button_lock.read()) { car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; //per debug Serial.print("carLatitude: "); Serial.println(car_lat); Serial.print("CarLongitude: "); Serial.println(car_lon); } // Inizia a trovare l'auto 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); //Calcola la distanza //car_person_distance = distance(100.0005, 100.0005, 100.0, 100.0); //per il debug Serial.println(car_person_distance); move_direction = GPS.angle;//Registra la direzione del movimento (angolo) //move_direction = 100.0; // Registra l'Azimut(angolo) car_azimuth = azimuth(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //auto_azimut = azimut(100.0005, 100.0005, 100.0, 100.0); // Calcola l'ora sull'orologio LED car_person_angle = car_azimuth - move_direction; angolo_tempo = led_time(car_person_angle); //Visualizza sulla striscia LED.clear(); strip.show(); // delay(frequency(car_person_distance)); ritardo (500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.show(); // delay(frequency(car_person_distance)); ritardo (500); //Disabilita il LED if (button_flag == 1 && car_person_distance < 5.0){ button_flag = 0; led_flag = 1; strip.clear(); strip.show(); } } } // } } }
Passaggio 6: eseguire il debug su breadboard
Passaggio 7: assemblaggio dell'hardware
Passaggio 8: progettazione dell'alloggiamento dell'elettronica in Adobe Illustrator
Passaggio 9: prototipo in cartone
Questo passaggio viene utilizzato per confermare le dimensioni dell'alloggiamento e di ogni pezzo del modello, assicurandosi che le dimensioni della scatola, la posizione del pulsante e la posizione del LED si adattino ai componenti elettronici assemblati.
Passaggio 10: prototipo in compensato di betulla
Questo era il prototipo iniziale. Infine, a uno dei pezzi è stato aggiunto un foro quadrato per il collegamento a un caricabatterie.
Consigliato:
Quad per bambini che hackera un veicolo a guida autonoma, che segue la linea e rileva ostacoli.: 4 passaggi
Quad per bambini che ha hackerato un veicolo a guida autonoma, che segue la linea e che rileva gli ostacoli.: Nell'istruttivo di oggi trasformeremo un quad elettrico per bambini da 1000 Watt (sì, lo so molto!) In un veicolo a guida autonoma, che segue la linea e che evita gli ostacoli! Video dimostrativo: https://youtu.be/bVIsolkEP1kPer questo progetto avremo bisogno dei seguenti materiali
Una chiave RFID alternativa per la sicurezza della bici: 7 passaggi (con immagini)
Una chiave RFID alternativa per la sicurezza della bici: per la sicurezza della bici, c'è solo un interruttore di blocco dell'accensione. E può essere facilmente hackerato dal ladro. Qui vengo con DIY una soluzione per questo. È economico e facile da costruire. È una chiave RFID alternativa per la sicurezza della bici. Facciamolo
Guida a piedi per migliorare la mobilità delle persone ipovedenti: 6 passaggi
Guida a piedi per migliorare la mobilità delle persone ipovedenti: L'obiettivo dell'istruttore è quello di sviluppare una guida a piedi che possa essere utilizzata dalle persone disabili, in particolare dai non vedenti. L'istruttore intende indagare come la guida a piedi può essere utilizzata in modo efficace, in modo che i requisiti di progettazione
Pike - Guida in modo più sicuro, guida in modo più intelligente, guida una picca!: 5 passaggi
Pike - Guida in modo più sicuro, guida in modo più intelligente, guida un luccio!: Benvenuto nel mio progetto chiamato Pike! Questo è un progetto che fa parte della mia formazione. Sono uno studente NMCT a Howest in Belgio. L'obiettivo era creare qualcosa di intelligente utilizzando un Raspberry Pi. Avevamo una completa libertà in cui volevamo rendere intelligenti. Per me è stato
Un modo davvero semplice/facile/non complicato per far sembrare che persone/umani/animali/robot abbiano una visione del calore davvero fresca/brillante (colore a scelta) utilizzando GIMP: 4 passaggi
Un modo davvero semplice/facile/non complicato per far sembrare persone/umani/animali/robot come se avessero una visione del calore davvero fresca/brillante (colore a scelta) usando GIMP: Leggi…il…titolo