SmartWay
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Ferramentas e máquinas necessárias
![]() |
|
Aplicativos e serviços online
![]() |
| |||
![]() |
|
Sobre este projeto
Visão geral
Os pais sempre se preocupam com seus filhos. Os pais desejam que seus filhos cheguem pontualmente à escola e cheguem em casa no horário, seguindo o caminho designado.
O SmartWay visa remover essa preocupação da vida cotidiana dos pais. O SmartWay monitorará seu filho conforme ele entra e sai da escola, garantindo que ele sempre siga o caminho apropriado para chegar ao seu destino, a escola.
SWay monitorará a geolocalização do seu filho usando GPS e enviará imediatamente aos pais um e-mail se o filho se desviar do caminho que você atribuiu a ele. O SmartWay também enviará aos pais um e-mail quando a criança chegar em casa ou na escola, bem como os informará se a criança estiver atrasada. Dessa forma, os pais podem sentar e desfrutar do café sabendo que seu filho chega com segurança à escola e em casa.

Funcionalidade
O SmartWay monitorará continuamente a geolocalização do seu filho, desde o momento em que ele acorda até quando chega em casa. O aparelho também é equipado com LED RGB e motor vibratório para avisar seu filho caso não esteja indo na direção certa para a escola ou se atrasar, e parabenizá-lo na chegada à escola.
O dispositivo funciona por meio de várias funções para garantir que seu filho esteja seguro.


- O primeiro loop
if (off track)
detecta se a criança se desviou do trajeto atribuído, o aparelho possui um sistema que detecta a quantidade de vezes que isso ocorre; se seu filho se desviar do curso na primeira vez, o aparelho irá avisá-lo girando o LED vermelho e vibrando o motor, então a criança terá dois minutos para voltar ao curso. Se a criança ficar fora do curso por mais dois minutos, os pais receberão um e-mail avisando que seu filho está fora do curso junto com sua geolocalização, o e-mail será enviado receptivamente em intervalos de 2 minutos até a chegada da criança em casa ou na escola. -
if (horário escolar)
eif (hora local)
loops detectam se é hora de ir para a escola e para casa, então o dispositivo verifica se a criança chegou na escola ou em casa, se ela chegou a tempo, o LED ficará verde e o dispositivo enviará aos pais um e-mail informando que seus a criança chegou ao seu destino juntamente com a hora de chegada. Caso contrário, se estiver na hora de a escola começar e a criança não estiver na escola, também o fará
O dispositivo pode enviar apenas 12 bytes de informação, portanto, um pacote compacto é necessário ao enviar. Outras variáveis serão configuradas no backend SigFox.



Existem quatro pacotes que o dispositivo pode enviar
- a criança está fora do curso - ("fora do curso")
- a criança chegou em casa - ("em casa")
- a criança chegou à escola - ("na escola")
- criança está atrasada - ("atrasada")
Sistema de Alerta
A criança que usa o dispositivo será alertada sempre que chegar à escola, chegar em casa ou se atrasar para chegar a um destino ou se desviar do curso



O dispositivo em ação



Benefícios
Os pais que usam este dispositivo terão benefícios em:
- certifique-se de que seus filhos cheguem com segurança para a escola
- certifique-se de que seus filhos cheguem pontualmente a esses locais
- certifique-se de que seu filho não se desvie do curso
- Economia de energia e baixo custo - baterias de longa duração
Construindo o projeto
Etapa 1:Aparelho necessário
Para começar a fazer o projeto, precisamos reunir nossos materiais. Para este projeto, você precisará de:
- fios de ligação
- 1, transistor NPN
- 1, capacitor de cerâmica (0,1µF)
- 3, resistores (220Ω)
- 1, resistor (1KΩ)
- 1, RGB LED
- 1, Módulo GPS
- 1, Célula motora vibratória
- 1, Arduino MKR1200 raposa
- 1, 2 caixas de pilhas AAA / AA
- 2, pilhas AA

Etapa 2:Conectando o circuito
A próxima etapa é conectar o circuito; as imagens do Fritzing abaixo ilustrarão como isso é feito. A fiação possui várias partes, portanto, elas são divididas em imagens diferentes.

Etapa 3:Reconhecendo o Código
O código é composto por múltiplas funções, cada função desempenha um papel específico na composição do projeto.
- Sistema de alerta
- Obtenha GPS
- Sincronizar RTC
- Local do processo
- Enviar pacote
- Faça ações
Essas seções são explicadas a seguir.
- Sistema de advertência
void setOutputs () {pinMode (R, OUTPUT); pinMode (G, SAÍDA); pinMode (B, OUTPUT); pinMode (motorPin, OUTPUT);} void vibrateMotor () // faz vibrar a célula do motor {digitalWrite (motorPin, HIGH); atraso (1000); digitalWrite (motorPin, LOW);} void ledGreen () // LED, Verde {analogWrite (R, 0); analogWrite (G, 255); analogWrite (B, 0);} void ledOrange () // LED, laranja {analogWrite (R, 255); analogWrite (G, 45); analogWrite (B, 0);} void ledRed () // LED, vermelho {analogWrite (R, 255); analogWrite (G, 0); analogWrite (B, 0);} void resetLED () // Desliga o LED {analogWrite (R, 0); analogWrite (G, 0); analogWrite (B, 0);}
Esta seção do código é encontrada em
functions.h
Arquivo. O código notificará a criança usando o dispositivo sobre o estado atual. No geral, esses loops controlam o LED RGB e a célula do motor vibratório. - Obtenha GPS
bool getGPS (int run) {while (Serial1.available ()> 0) {if (gps.encode (Serial1.read ())) {if (run ==1) {processData (); } else if (run ==2) {synchRTC (); } if (gps.location.isValid () &&gps.time.isValid () &&gps.date.isValid ()) {return true; } else {return false; }}} if (millis ()> 10000 &&gps.charsProcessed () <10) {Serial.println ("Erro - Módulo GPS respondeu com erro"); Serial.println ("Código de terminação"); Serial.println ("________________________________________"); enquanto (1) {}; }}
Este é o loop encarregado de receber a localização e a hora do módulo GPS. Existem 3 coisas que este loop faz, ele é usado no
loop de configuração
para sincronizar o GPS, ele é então usado para sincronizar o RTC de bordo com o GPS e é usado no loop principal para obter a geolocalização do dispositivo. - Sincronizar RTC
void synchRTC () {Serial.println ("Sincronizando RTC"); Serial.println ("________________________________________"); Serial.println ("OK - Inicializando RTC"); rtc.begin (); Serial.println ("OK - Tempo de sincronização"); // temos que cortar os primeiros 2 dígitos da variável (2018 -> 18) uint16_t yearRAW =gps.date.year (); String yearString =String (yearRAW); yearString.remove (0,1); uint16_t year =yearString.toInt (); rtc.setTime (gps.time.hour (), gps.time.minute (), gps.time.second ()); rtc.setDate (gps.date.day (), gps.date.month (), ano); Serial.println ("Sucesso - RTC sincronizado"); Serial.println ("________________________________________"); Serial.println (""); Serial.println (""); Serial.println ("");}
Esta seção de código sincroniza o RTC a bordo com a hora recebida do módulo GPS, ele primeiro lê os dados do módulo GPS e depois os processa. O loop então define a hora atual do RTC integrado com a hora recebida e inicia o RTC.
- Processo Localização
bool processData () {if (gps.location.isValid ()) {latitude =gps.location.lat (); longitude =gps.location.lng (); latitude =53.355504; longitude =-6,258452; if (check.isOut ()) {if (check.track ()) {Serial.println ("FORA DOS LIMITES"); warn.offTrackLoop (); }} if (check.isHomeTime () &&comesSchool) {if (check.isHome ()) {Serial.println ("EM CASA"); warn.arrivedHomeLoop (); } else {Serial.println ("ATRASADO -> CASA"); warn.lateLoop (); }} else if (check.isSchoolTime () &&comesHome) {Serial.println ("."); if (check.isSchool ()) {Serial.println ("NA ESCOLA"); warn.arrivedSchoolLoop (); } else {Serial.println ("ATRASADO -> ESCOLA"); warn.lateLoop (); }} else {Serial.println ("ON WAY"); }}}
Este loop irá processar a localização do dispositivo e compará-lo com a hora atual para ver onde a criança deve estar neste momento. Em seguida, ele executará a ação apropriada com base no resultado.
- Faça Ações
struct Do {void offTrackLoop () {if (offTrackVar) {parseData (0); } vibrateMotor (); ledRed (); atraso (1000); vibrateMotor (); resetLED (); offTrackVar =true; atraso (120000); } void lateLoop () {if (! lateVar) {parseData (1); } vibrateMotor (); ledOrange (); atraso (1000); resetLED (); lateVar =verdadeiro; } void comesHomeLoop () {lateVar =false; offTrackVar =false; vibrateMotor (); ledGreen (); atraso (1000); resetLED (); parseData (2); chegouHome =verdadeiro; chegadoEscola =falso; } void chegouSchoolLoop () {lateVar =false; offTrackVar =false; vibrateMotor (); ledGreen (); atraso (1000); resetLED (); parseData (3); chegouHome =falso; chegadoEscola =verdadeiro; }};
Esta estrutura é chamada para agir na resposta dada por Local do processo, avisará a criança ao alternar o LED RGB e a célula do motor vibratório. Ele também enviará um pacote para SigFox se necessário.
- Enviar Pacote
void parseData (estado interno) {SigFox.beginPacket (); // iniciar o processo de envio da mensagem if (state ==0) // off track {SigFox.print ("off track"); // enviar a mensagem} else if (state ==1) // late {SigFox.print ("late"); // envia a mensagem} else if (state ==2) // chegou em casa {SigFox.print ("em casa"); // envie a mensagem} else // chegou à escola {SigFox.print ("na escola"); // envie a mensagem} SigFox.endPacket ();}
Esta função envia os dados para o SigFox, o envio do pacote é iniciado e o valor apropriado é analisado.
Configurando as Variáveis
O código conterá várias variáveis com TODO escrito como um comentário depois delas, essas variáveis devem ser personalizadas para se adequar ao cliente, o cliente será solicitado a configurar
- Hora da escola
- Tempo que a criança leva para viajar
- Horário em que termina a escola
- Depurando?
- Geolocalização escolar (LAT, LNG);
- Geolocalização residencial (LAT, LNG);
O guia abaixo o orienta na configuração das variáveis.











Bibliotecas
SigFox - copyright (c) 2016 Arduino LLC GNU Lesser General Public License esta biblioteca é de domínio público
ctype - copyright (c) 2006 Free Software Foundation sob a GNU General Public License, esta biblioteca é de domínio público
RTCZero - copyright (c) 2015 Arduino LLC sob a GNU Lesser General Public License, esta biblioteca é de domínio público
String - copyright (c) 2009-10 Hernando Barragan, copyright (c) 2011 Paul Stoffrengen sob a GNU Lesser General Public License, esta biblioteca é de domínio público
TinyGPS ++ - copyright (c) 2008-13 Mikal Hart sob a GNU Lesser General Public License, esta biblioteca é de domínio público
Configuração
Certifique-se de que o circuito está conectado corretamente. Para obter detalhes sobre como configurar seu MKR fox, clique aqui para o tutorial do Arduino. Se você deseja saber mais sobre a biblioteca Arduino SigFox, clique aqui.
Programa de back-end
Você deve ter um Arduino MKR1200 fox registrado para programar o back-end.
- Etapa 1
Abra o back-end SigFox e faça login em sua conta SigFox.
- Etapa 2
clique em "Tipo de dispositivo" no menu suspenso no topo da página

- Etapa 3:
selecione seu Arduino MKRfox e clique em editar

- Etapa 4:
Selecione retornos de chamada no menu à esquerda e navegue até o botão "novo" no canto superior direito.

- Etapa 5:
Depois de clicar em novo, serão apresentadas várias opções de configuração de retorno de chamada, clique em Retornos de chamada personalizados

Em seguida, uma janela será aberta, você deve preencher o formulário fornecido para criar seu retorno de chamada
No final, sua mensagem deve ser assim:

Agora clique em ok e está tudo pronto.
Final
A última coisa que você precisa fazer é carregar o código abaixo, certifique-se de que personalizou a variável marcada com "TODO" de acordo com sua preferência, espere a luz azul no módulo GOS piscar e, em seguida, desconecte o microcontrolador do computador e coloque as baterias na caixa de baterias. Estás pronto.
Projetei um invólucro para manter o dispositivo seguro e para torná-lo atraente, usei duas peças de acrílico e derreti as bordas curvando-as a 90 graus. Coloquei todo o circuito dentro e a caixa da bateria abaixo deles e, em seguida, amarrei os pedaços de plástico juntos usando duas braçadeiras.


No final, cobri um pedaço da parte superior (tampa transparente) para esconder todos os fios da vista e apenas permitir que o cérebro do projeto fosse visível.
Antecedentes
Eu pessoalmente sei como pode ser estressante executar a tarefa simples de mandar seu filho para a escola, todos se preocupam com todas as coisas que podem acontecer com seu filho enquanto ele vai para a escola.
Este projeto é dirigido a todas as pessoas que se sentem estressadas quando mandam seus filhos para a escola. SWay permitirá que você relaxe, sabendo que seu filho chegará em segurança à escola.

Código
SmartWay
O código completoPeças personalizadas e gabinetes
Não incluído no Fritzing por padrão arduino_mkr_fox_1200_fixed_gwlzp1tuih_uh8ucYEGxI.fzpzEsquemas

Processo de manufatura