Índice:
- Etapa 1: esboço de papel
- Etapa 2: Lista de Hardware
- Etapa 3: Projeto do circuito
- Etapa 4: Conexão de Hardware
- Etapa 5: Design de software
- Etapa 6: depurar no breadboard
- Etapa 7: Montagem de Hardware
- Etapa 8: Projeto de habitação de eletrônicos no Adobe Illustrator
- Etapa 9: Protótipo de papelão
- Etapa 10: Protótipo de Contraplacado de Bétula
Vídeo: FinduCar: uma chave de carro inteligente que guia as pessoas até onde o carro está estacionado: 11 etapas (com fotos)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
A fim de resolver os problemas acima, este projeto propõe o desenvolvimento de uma chave de carro inteligente que poderia direcionar as pessoas para onde estacionaram o carro. E meu plano é integrar um GPS na chave do carro. Não há necessidade de usar o aplicativo do smartphone para rastrear o carro, todas as orientações aparecerão apenas na chave do carro.
Etapa 1: esboço de papel
Quando as pessoas pressionam o botão para trancar o carro, as informações de localização podem ser gravadas no microcontrolador automaticamente. Então, quando as pessoas começam a navegar até o carro, o LED diferente é aceso para direcionar para a posição do carro e a frequência piscando mostra a distância até o carro. Eles podem facilmente seguir o LED piscando e encontrar rapidamente o carro.
Etapa 2: Lista de Hardware
Estes são os componentes usados neste projeto. Alguns são dos kits de partículas (breadboard, botão, cabeçalhos), outros são comprados no site oficial da Adafruit (Adafruit Feather M0, módulo GPS Adafruit Ultimate, bateria Lpoly e bateria de célula tipo moeda) e Amazon (NeoPixel Ring - 12 RGB LED).
Etapa 3: Projeto do circuito
Neopixel_LED está conectado ao PIN 6 do Feather M0
Button_Unlock está conectado ao PIN 12 do Feather M0
Button_Lock está conectado ao PIN 13 do Feather M0
Etapa 4: Conexão de Hardware
Solde os cabeçotes com Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Empilhe as duas placas juntas. O GPS FeatherWing se conecta diretamente à sua placa Feather M0 sem mais fios.
Etapa 5: Design de software
Componentes de Teste
Leia um FIX
void setup () {
Serial.println ("Teste de eco GPS"); Serial.begin (9600); Serial1.begin (9600); // baud NMEA GPS padrão}
void loop () {
if (Serial.available ()) {char c = Serial.read (); Serial1.write (c); } if (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Pisca anel LED
Veja os exemplos de Adafruit NeoPixel.
Funções de cálculo de GPS
Calcule o azimute
// Calcule o azimute
azimute duplo (lat_a duplo, lon_a duplo, lat_b duplo, lon_b duplo) {
duplo 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; return d; }
Calcule a hora no relógio LED, que também é a direção do veículo
// Calcule o tempo no relógio LED
int led_time (ângulo duplo) {
sinalizador int = 0; if (ângulo = 15) {tempo_angulo = tempo_ângulo + 1; } if (sinalizador == 1) {tempo_angulo = 12 - tempo_angulo; } return angle_time; }
Calcule a distância entre a pessoa e seu veículo
// Calcule a distância
distância dupla (lat_a duplo, lon_a duplo, lat_b duplo, lon_b duplo) {
double EARTH_RADIUS = 6378137.0; radLat1 duplo = (lat_a * PI / 180,0); radLat2 duplo = (lat_b * PI / 180,0); double a = radLat1 - radLat2; b duplo = (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; return s; }
Funções de exibição de LED
Acenda LEDs em um círculo mostrando que ele começa a navegar
// A iluminação do anel LED, um por um, mostra que a navegação começa
void colorWipe (uint32_t c, uint8_t wait) {
para (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); delay (wait);}}
Obtenha a frequência do LED com base na distância
// Obter frequência de LED
frequência interna (distância dupla) {
int f = distância (int) * 20; return f; }
Pisque um determinado LED indicando a direção do carro
// Exibir no LED
strip.clear ();
strip.show (); atraso (frequência (distância_carro_pessoal)); // atraso (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); atraso (frequência (distância_do_carro)); // atraso (500);
// Desativar LED
if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }
Principal
#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); tira Adafruit_NeoPixel = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Botão button_lock (Button_Lock_PIN); Botão button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; temporizador uint32_t = millis (); double car_lat, car_lon; double car_person_distance; double move_direction; double car_azimuth; double car_person_angle; int angle_time;
void setup () {
Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // padrão NMEA GPS baud strip.begin (); // descomente esta linha para ligar RMC (mínimo recomendado) e GGA (dados fixos) incluindo altitude GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Defina a taxa de atualização GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Taxa de atualização de 1 Hz // Solicita atualizações no status da antena, comente para ficar quieto // GPS.sendCommand (PGCMD_ANTENNA); atraso (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 uma frase for recebida, podemos verificar a soma de verificação, analisá-la … if (GPS.newNMEAreceived ()) {// uma coisa complicada aqui é se imprimirmos a frase NMEA, ou dados // acabamos não ouvindo e pegando outras frases! // portanto, tenha muito cuidado se usar OUTPUT_ALLDATA e tentar imprimir os dados Serial.println (GPS.lastNMEA ()); // isso também define o sinalizador newNMEAreceived () como falso if (! GPS.parse (GPS.lastNMEA ())) // isso também define o sinalizador newNMEAreceived () como falso return; // podemos falhar na análise de uma sentença, caso em que devemos apenas esperar por outra} // se millis () ou cronômetro encerrar, iremos redefini-lo if (timer> millis ()) timer = millis (); if (milis () - cronômetro> 2000) {cronômetro = milis (); // zera o cronômetro Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minuto, DEC); Serial.print (':'); Serial.print (GPS.segundos, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Data:"); Serial.print (GPS.dia, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/ 20"); Serial.println (GPS.ano, DEC); Serial.print ("Fix:"); Serial.print ((int) GPS.fix); Serial.print ("qualidade:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Localização:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Localização (em graus, funciona com o Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Velocidade (nós):"); Serial.println (GPS.speed); Serial.print ("Ângulo:"); Serial.println (GPS.angle); Serial.print ("Altitude:"); Serial.println (GPS.altitude); Serial.print ("Satélites:"); Serial.println ((int) GPS.satellites); // Salva o GPS do veículo if (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // para depuração Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Comece a encontrar o carro 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); // Calcular a distância // car_person_distance = distance (100.0005, 100.0005, 100.0, 100.0); // para depuração Serial.println (car_person_distance); move_direction = GPS.angle; // Registra a direção do movimento (ângulo) // move_direction = 100.0; // Grave o azimute (ângulo) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimuth (100.0005, 100.0005, 100.0, 100.0); // Calcula o tempo no relógio LED car_person_angle = car_azimuth - move_direction; ângulo_tempo = tempo_dirigido (ângulo_pessoa_carro); // Exibir no LED strip.clear (); strip.show (); // atraso (frequência (distância_carro_pessoal)); atraso (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // atraso (frequência (distância_carro_pessoal)); atraso (500); // Desativa o LED if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Etapa 6: depurar no breadboard
Etapa 7: Montagem de Hardware
Etapa 8: Projeto de habitação de eletrônicos no Adobe Illustrator
Etapa 9: Protótipo de papelão
Esta etapa é usada para confirmar o tamanho da caixa e de cada peça do modelo, certificando-se de que o tamanho da caixa, a posição do botão e a posição do LED se ajustam aos componentes eletrônicos montados.
Etapa 10: Protótipo de Contraplacado de Bétula
Este foi o protótipo inicial. Um orifício quadrado para conectar a um carregador foi finalmente adicionado a uma das peças.
Recomendado:
Campainha inteligente Raspberry Pi DIY que pode detectar pessoas, carros etc.: 5 etapas
Raspberry Pi DIY Smart Doorbell que pode detectar pessoas, carros, etc.: Este design com tema steampunk integra-se com o assistente de casa e nosso sistema de áudio de várias divisões para se comunicar com o resto da nossa casa inteligente DIY. Em vez de comprar uma campainha circular (ou Nest, ou um dos outros concorrentes) Eu construí nossa própria porta inteligente
COELHO COELHO ONDE ESTÁ VOCÊ ?: 3 etapas
COELHO COELHO ONDE VOCÊ ESTÁ ?: Sou de Taiwan, tenho 13 anos e meu nome é Chia-Ying Wu. Nossa família tem um coelho, que costuma brincar de esconde-esconde conosco. Ele gosta de se esconder no canto ao lado do sofá, mas como a visão está bloqueada pelo sofá, muitas vezes não conseguimos encontrá-lo. S
Como ocultar arquivos que você não deseja que outras pessoas vejam e ou leiam .: 7 etapas
Como ocultar arquivos que você não deseja que outras pessoas vejam e leiam .: Este Instructable mostra como alterar o formato de um arquivo para torná-lo inútil, a menos que você saiba que tipo de arquivo era originalmente. Por exemplo, alterando um mpeg (arquivo de filme) em um txt / doc (texto / documento) para que você não possa reproduzi-lo, muito menos ver as informações
Uma maneira realmente simples / fácil / não complicada de fazer pessoas / humanos / animais / robôs parecerem ter uma visão de calor realmente fria / brilhante (cor de sua escolha) usando o GIMP: 4 etapas
Uma maneira realmente simples / fácil / não complicada de fazer pessoas / humanos / animais / robôs parecerem ter uma visão de calor realmente fria / brilhante (cor de sua escolha) usando o GIMP: Leia … o … título
Assista secretamente ao que está acontecendo, não importa onde você esteja: 4 etapas
Assista secretamente ao que está acontecendo, não importa onde você esteja: Este instrutível mostrará como usar o aplicativo iphone / ipod touch "iCam" e seu computador para ver o que está acontecendo usando sua webcam onde você estiver. Este é meu primeiro instrutível, então, por favor, nenhuma crítica severa. Eu não me importo com qualquer feedback que você h