Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Отследить меня

Компоненты и расходные материалы

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Защита SD-карты Adafruit
× 1
Защита SD-карты Adafruit
× 1
Seeedstudio gprs shield V2.0
× 1
Seeed GPRS Shield V2.0
× 1
Перемычки (общие)
× 1
Батарея 9 В (стандартная)
× 1
Коробка
× 1
Коробка
× 1

Об этом проекте

Некоторое время назад я решил создать автомобильный / личный трекер.

Это был мой первый прототип в этом направлении.


Сама система очень проста. Просто Arduino Mega, GPS, GPRS Shield и SD-карта. Это необязательно, но я добавил, потому что я думал, что, запустив вызов своим друзьям в Facebook, они позвонят в систему и получат SMS с моей позицией или моей последней известной позицией.


Система всегда ищет фактическое положение. Если кто-то позвонит на номер SIM-карты, система пришлет SMS с актуальным местоположением и ссылкой на карты Google. Например:


Местоположение Хьюго сейчас:широта 54.315010, лог:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


Если GPS не получает данные о местоположении, система отправит последнее известное положение. Например:


Кажется, я не могу найти Хьюго. Последний раз я видел его в:Lat:54.315010, Log:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


Дата, время, положение и статус SMS сохраняются на SD-карте.


Компоненты

Я использовал:


1x Arduino MEGA

1x GPRS Shield (также можно использовать другие GSM-экраны, доступные на рынке)

1x GPS (я использовал NEO 6, очень популярный на ebay)

1x экран SD-карты

1x батарея 9 В

1x пластиковая коробка

Некоторые провода


Соедините компоненты


Поскольку Arduino Mega использует другую распиновку, необходимо немного изменить схему подключения.

Сначала SD Card Shield, который был разработан для Arduino Uno, использует контакты с 10 по 13 для SPI, поэтому для того, чтобы это работало на Mega, их необходимо «передать» на контакты SPI на MEGA.

Контакты Arduino UNO SPI - контакты Arduino MEGA SPI

MOSI - с 11 по 51

MISO - от 12 до 50

SCK - от 13 до 52

СС - с 10 до 53

На GPRS Shield сначала необходимо настроить контакты связи на Software Serial в перемычке J7 на щите.

Затем с помощью нескольких проводов я подключил контакты 7 и 8 экрана GPRS к порту Serial 1 (контакты 18 и 19 в Arduino Mega).

Для получения дополнительных сведений о том, как подключить SIM-карту к GPRS Shield, см. Другой мой проект в Hackster.


GPS подключен к последовательному порту 2 (контакты 16 и 17) в Arduino Mega.

Также питание, необходимое для GPS, снимается с контакта 5V SD-карты и контакта GND.


Батарею 9 В можно подключить к контакту Vin или к разъему питания.

Подготовка к закрытию коробки и полевые испытания.

Код


Я оставляю здесь несколько заметок о коде.


Я использовал эту библиотеку для GPRS Shield.

Для использования Arduino Mega необходимо внести некоторые изменения:


1) Откройте GSM.h и закомментируйте соответствующие строки, как показано ниже, например. для Arduino Mega:

// # определяем UNO

#define MEGA


2) В HWSerial.h разложите строку для определения Mega, например. для Arduino Mega:

#define MEGA


Для GPS я использую эту библиотеку.


Сама программа работает очень просто. После всех процедур запуска (GPRS, GPS и инициализация SD-карты) GPS попытается определить количество доступных спутников и действительную точку с координатами GPS.

Если звонок будет сделан в течение этого периода, звонок будет автоматически отклонен и ничего не произойдет.

Когда GPS имеет действительное местоположение и обнаруживает более 3 спутников (я предполагаю, что GPS имеет хороший прием), при вызове система отправит SMS на номер вызова с моим местоположением. Все эти данные будут храниться на SD-карте.

Если у GPS менее 3 спутников, действительное положение не может быть получено, поэтому, если будет сделан звонок, на номер вызова будет отправлено SMS с моим последним известным местоположением. Опять же, все данные хранятся на SD-карте.


Плюсы и минусы


Поскольку это прототип, есть много вещей, которые не работали нормально. Но цель всегда в том, чтобы стать лучше.

Во-первых, батареи хватает всего на один час !! Никаких механизмов энергосбережения в программе я не реализовал. Так что для будущих улучшений просто необходим «спящий режим».

Размер также был пересмотрен, и я разработал совершенно новую плату. Первый взгляд таков:

Пожалуйста, напишите мне, если вы обнаружили какую-либо ошибку или у вас есть предложения / улучшения или вопросы.

Спасибо за чтение.

Уго Гомеш

Код

  • Код
Код Arduino
 #include "SIM900.h" #include  #include "sms.h" #include "call.h" #include  // Чтобы изменить контакты для программного / аппаратного последовательного порта, используйте 27, 28 строк в GSM.cpp. // Чтобы использовать Arduino Mega, определите MEGA в строке 5 в GSM.h. # include  #include  // Mega CS pinconst int chipSelect =53; // Нам нужно создать классы для SMS и звонков. CallGSM call; SMSGSM sms; char number [20]; byte stat =0; int value =0; char value_str [5]; // Переменная GPS // Объект TinyGPS ++ TinyGPSPlus gps; const char * googlePrefix ="http://maps.google.com/maps?q=";double Lat; double Long; int день, месяц, год; int час, минута, секунда; int num_sat; логическое one_point_true =false; void setup () {// Последовательное соединение. Serial.begin (9600); // GPRS соединение Serial.print (F ("Запуск GSM ...")); // Начинаем настройку щита со скоростью передачи. if (gsm.begin (9600)) Serial.println (F ("ГОТОВ")); иначе Serial.println (F ("IDLE")); // Подключение GPS Serial.println (F ("Запуск GPS")); // COM-порт GPS Serial2.begin (9600); // SD-карта запускает Serial.print (F ("Инициализация SD-карты ...")); // убедитесь, что вывод выбора микросхемы по умолчанию установлен на // вывод, даже если вы его не используете:pinMode (53, OUTPUT); // посмотрим, присутствует ли карта и может ли она быть инициализирована:if (! SD.begin (chipSelect)) {Serial.println (F («Карта вышла из строя или отсутствует»)); // больше ничего не делать:return; } Serial.println (F ("карта инициализирована."));} // ******************************* ******************************************** // Главный петлевой пропуск цикл () {Get_GPS (); // Получить позицию Check_call (); // Узнаем, звонит ли кто-нибудь}; ///////////////////////////////////////// ///////////////////////////////////////// ********* ************************************************* ******************* // Получить позицию из GPSvoid Get_GPS () {while (Serial2.available ()> 0) if (gps.encode (Serial2.read ())) num_sat =gps.satellites.value (); //Serial.println(num_sat); если (gps.location.isValid () ==1) {Широта =gps.location.lat (); Long =gps.location.lng (); если (Широта! =0 &&Долгота! =0) one_point_true =true; } если (gps.date.isValid ()) {день =gps.date.day (); месяц =​​gps.date.month (); год =gps.date.year (); } если (gps.time.isValid ()) {час =gps.time.hour (); минута =gps.time.minute (); второй =gps.time.second (); } smartDelay (500); if (millis ()> 5000 &&gps.charsProcessed () <10) {Serial.println (F («GPS не обнаружен:проверьте проводку.»)); в то время как (правда); }} // ******************************************** ******************************* // Эта настраиваемая версия delay () гарантирует, что // объект GPS "подано" .static void smartDelay (unsigned long ms) {unsigned long start =millis (); do {while (Serial2.available ()) gps.encode (Serial2.read ()); } while (millis () - start  =3 &&one_point_true ==true) {char sms_OK [160]; sprintf (sms_OK, "Теперь местоположение Hugo:Lat:% s, Log:% s.% s% s, +% s \ n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serial.println (sms_OK); error =sms.SendSMS (номер, sms_OK); задержка (500); if (error ==0) // Проверяем статус {Serial.println (F ("SMS ERROR")); } else {Serial.println (F ("SMS ОК")); }} иначе, если (num_sat <3 &&one_point_true ==true) {char sms_NOK [150]; sprintf (sms_NOK, "Я не вижу, чтобы найти Хьюго. Последний раз, когда я видел его, было:Широта:% s, Журнал:% s.% s% s, +% s \ n", lat_print, Long_print , googlePrefix, lat_print, Long_print); Serial.println (sms_NOK); int error =sms.SendSMS (номер, sms_NOK); if (error ==0) // Проверяем статус {Serial.println (F ("SMS ERROR")); } else {Serial.println (F ("SMS ОК")); }} else if (one_point_true ==false) {Serial.println (F («Нет действительной точки GPS»)); } // Сохраняем все в файле SD-карты dataFile =SD.open ("datalog.txt", FILE_WRITE); // если файл доступен, записываем в него:if (dataFile) {dataFile.print (Date); dataFile.print (""); dataFile.print (время1); dataFile.print (""); dataFile.print (число); dataFile.print (""); dataFile.print (lat_print); dataFile.print (","); dataFile.print (Длинный_принт); dataFile.print (""); dataFile.print (ошибка); dataFile.println (); dataFile.close (); } // если файл не открыт, выдается сообщение об ошибке:else {Serial.println (F ("ошибка открытия файла datalog.txt")); }} //////////////////////////////////////////////// //////////////////////////////// 

Схема


Производственный процесс

  1. Робот, использующий Raspberry Pi и Bridge Shield
  2. Веб-контроллер DMX
  3. Arduino Spybot
  4. UnifiedWater v1
  5. HSVClock
  6. Робот-снегоочиститель
  7. Мобильный ящик для голосования
  8. Whac-A-Mole (Button Edition)
  9. Современный музыкальный автомат
  10. Arduino Apple Watch