Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Seguirme

Componentes y suministros

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Protector de tarjeta SD Adafruit
× 1
Protector de tarjeta SD Adafruit
× 1
Seeedstudio gprs shield V2.0
× 1
Seeed GPRS Shield V2.0
× 1
Cables de puente (genéricos)
× 1
batería de 9V (genérica)
× 1
Caja
× 1
Caja
× 1

Acerca de este proyecto

Hace un tiempo decidí construir un rastreador personal / de coche.

Este fue mi primer prototipo en esta dirección.


El sistema en sí es muy simple. Solo un Arduino Mega, un GPS, un GPRS Shield y una tarjeta SD. Este es opcional pero lo incluí porque pensé en lanzar un desafío a mis amigos en Facebook, ellos llaman al sistema y reciben un SMS con mi puesto o mi último puesto conocido.


El sistema siempre está buscando la posición real. Si alguien llama al número de la tarjeta SIM, el sistema enviará un SMS con la posición real y con un enlace a Google Maps. Por ejemplo:


La ubicación de Hugo es ahora:Lat:54.315010, Log:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


Si el GPS no recibe ninguna posición, el sistema enviará la última posición conocida. Por ejemplo:


Parece que no puedo encontrar a Hugo. La última vez que lo vi fue en:Lat:54.315010, Log:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


La fecha, la hora, la posición y el estado del SMS se almacenan en la tarjeta SD.


Componentes

Yo usé:


1x Arduino MEGA

1x Escudo GPRS (También es posible utilizar otros escudos GSM disponibles en el mercado)

1x GPS (utilicé el NEO 6, muy popular en eBay)

1x protector de tarjeta SD

1x batería de 9V

1x caja de plástico

Algunos cables


Conecte los componentes


Dado que Arduino Mega usa un pinout diferente, es necesario volver a cablear.

Primero, el SD Card Shield, que fue diseñado para Arduino Uno, usa pines 10 a 13 para SPI, por lo que para que esto funcione en Mega, deben "pasarse" a los pines SPI en MEGA.

Pines Arduino UNO SPI - Pines Arduino MEGA SPI

MOSI - 11 a 51

MISO - 12 a 50

SCK - 13 a 52

SS - 10 a 53

En GPRS Shield, primero es necesario configurar los pines de comunicación al Software Serial en el puente J7 del shield.

Luego, usando algunos cables, conecté los pines 7 y 8 en el blindaje GPRS al puerto Serie 1 (pines 18 y 19 en el Arduino Mega).

Para obtener más detalles sobre cómo conectar la tarjeta SIM en GPRS Shield, consulte mi otro proyecto en Hackster.


El GPS está conectado al puerto serie 2 (pines 16 y 17) en el Arduino Mega.

Además, la energía necesaria para el GPS se toma del pin 5V de la tarjeta SD y del pin GND.


La batería de 9 V se puede conectar al pin Vin o al enchufe de alimentación.

Preparándose para cerrar la caja y prueba de campo.

Código


Dejo aquí algunas notas rápidas sobre el código.


Usé esta biblioteca para GPRS Shield.

Es necesario hacer algunos cambios para poder usar Arduino Mega:


1) Abra GSM.hy comente-descomponga las líneas apropiadas como a continuación, p. Ej. para Arduino Mega:

// # definir UNO

#define MEGA


2) En HWSerial.h, descomponga la línea para Mega definición, p. Ej. para Arduino Mega:

#define MEGA


Para GPS, estoy usando esta biblioteca.


El programa en sí se ejecuta de una manera muy sencilla. Después de todas las rutinas de inicio (inicialización de GPRS, GPS y tarjeta SD), el GPS intentará determinar la cantidad de satélites que tiene disponibles y un punto de coordenadas GPS válido.

Si se realiza una llamada durante este período, la llamada se rechazará automáticamente y no sucederá nada.

Cuando el GPS tiene una ubicación válida y está detectando más de 3 satélites (supongo que el GPS tiene buena recepción), si se realiza una llamada, el sistema enviará un SMS al número de llamada con mi posición. Todos estos datos se almacenarán en la tarjeta SD.

Si el GPS tiene menos de 3 satélites, no se puede recuperar una posición válida, por lo que si se realiza una llamada, el número de llamada recibirá un SMS con mi última posición conocida. Nuevamente, todos los datos se almacenan en la tarjeta SD.


Pros y contras


Dado que se trata de un prototipo, hay muchas cosas que no funcionaron bien. Pero el objetivo es siempre mejorar.

Primero, ¡la batería solo dura una hora! No implementé ninguna mecánica de ahorro de energía en el software. Por lo tanto, para futuras mejoras, el "Modo de suspensión" es imprescindible.

También se revisó el tamaño y diseño una tabla completamente nueva. El primer vistazo es este:

Escríbeme si encuentras algún error o si tienes alguna sugerencia / mejora o pregunta.

Gracias por leer.

Hugo Gomes

Código

  • Código
Código Arduino
 #include "SIM900.h" #include  #include "sms.h" #include "call.h" #include  // Para cambiar pines para Software / Hardware Serial, use 27, 28 líneas en GSM.cpp.//Para usar Arduino Mega, defina MEGA en la línea 5 en GSM.h. # include  #include  // Mega CS pinconst int chipSelect =53; // Tenemos que crear las clases para SMS y llamadas CallGSM call; SMSGSM sms; char number [20]; byte stat =0; int value =0; char value_str [5]; // GPS Variable // The TinyGPS ++ objectTinyGPSPlus gps; const char * googlePrefix ="http://maps.google.com/maps?q=";double Lat; double Long; int día, mes, año; int hora, minuto, segundo; int num_sat; boolean one_point_true =false; void setup () {// Conexión en serie. Serial.begin (9600); // Conexión GPRS Serial.print (F ("Iniciando GSM ...")); // Iniciar la configuración del escudo con velocidad en baudios. if (gsm.begin (9600)) Serial.println (F ("LISTO")); else Serial.println (F ("INACTIVO")); // Conexión GPS Serial.println (F ("Iniciando GPS")); // Puerto de comunicaciones GPS Serial2.begin (9600); // Inicio de la tarjeta SD Serial.print (F ("Inicializando la tarjeta SD ...")); // asegúrese de que el pin de selección de chip predeterminado esté configurado en // salida, incluso si no lo usa:pinMode (53, OUTPUT); // ver si la tarjeta está presente y se puede inicializar:if (! SD.begin (chipSelect)) {Serial.println (F ("Tarjeta fallida o no presente")); // no hagas nada más:return; } Serial.println (F ("tarjeta inicializada."));} // ****************************** ********************************************* // Bucle principal vacío loop () {Get_GPS (); // Obtener la posición Check_call (); // Vea si alguien está llamando}; /////////////////////////////////////////// ///////////////////////////////////////// ********* *********************************************** ******************* // Obtenga la posición del GPSvoid Get_GPS () {while (Serial2.available ()> 0) if (gps.encode (Serial2.read ())) num_sat =gps.satellites.value (); //Serial.println(num_sat); if (gps.location.isValid () ==1) {Lat =gps.location.lat (); Long =gps.location.lng (); if (Lat! =0 &&Long! =0) one_point_true =true; } if (gps.date.isValid ()) {día =gps.date.day (); mes =gps.fecha.mes (); año =gps.date.year (); } if (gps.time.isValid ()) {hora =gps.time.hour (); minuto =gps.time.minute (); segundo =gps.time.second (); } smartDelay (500); if (millis ()> 5000 &&gps.charsProcessed () <10) {Serial.println (F ("No se detectó GPS:verifique el cableado.")); mientras (verdadero); }} // ******************************************** ******************************** // Esta versión personalizada de delay () asegura que el objeto gps // está siendo "alimentado" .static void smartDelay (ms largo sin firmar) {inicio largo sin firmar =millis (); hacer {while (Serial2.available ()) gps.encode (Serial2.read ()); } while (millis () - inicio  =3 &&one_point_true ==true) {char sms_OK [160]; sprintf (sms_OK, "La ubicación de Hugo ahora es:Lat:% s, Log:% s.% s% s, +% s \ n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serial.println (sms_OK); error =sms.SendSMS (número, sms_OK); retraso (500); if (error ==0) // Verificar estado {Serial.println (F ("SMS ERROR")); } else {Serial.println (F ("SMS OK")); }} más si (num_sat <3 &&one_point_true ==true) {char sms_NOK [150]; sprintf (sms_NOK, "No puedo ver para encontrar a Hugo. La última vez que lo vi fue en:Lat:% s, Log:% s.% s% s, +% s \ n", lat_print, Long_print , googlePrefix, lat_print, Long_print); Serial.println (sms_NOK); int error =sms.SendSMS (número, sms_NOK); if (error ==0) // Verificar estado {Serial.println (F ("SMS ERROR")); } else {Serial.println (F ("SMS OK")); }} else if (one_point_true ==false) {Serial.println (F ("No hay un punto GPS válido")); } // Guarda todo en el archivo de la tarjeta SD dataFile =SD.open ("datalog.txt", FILE_WRITE); // si el archivo está disponible, escríbalo:if (dataFile) {dataFile.print (Date); dataFile.print (""); dataFile.print (tiempo1); dataFile.print (""); dataFile.print (número); dataFile.print (""); dataFile.print (lat_print); dataFile.print (","); dataFile.print (Long_print); dataFile.print (""); dataFile.print (error); dataFile.println (); dataFile.close (); } // si el archivo no está abierto, aparece un error:else {Serial.println (F ("error al abrir datalog.txt")); }} ////////////////////////////////////////////////// ////////////////////////////////// 

Esquemas


Proceso de manufactura

  1. Robot que usa Raspberry Pi y Bridge Shield
  2. Controlador DMX operado por la web
  3. Arduino Spybot
  4. UnifiedWater v1
  5. Reloj HSV
  6. Robot quitanieves
  7. Cuadro de votación móvil
  8. Whac-A-Mole (Edición Botón)
  9. Jukebox moderno
  10. Arduino Apple Watch
  11. Da las gracias a todos los conductores corteses