산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

나를 추적

구성품 및 소모품

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Adafruit SD 카드 실드
× 1
Adafruit SD 카드 실드
× 1
Seeedstudio gprs 방패 V2.0
× 1
시드 GPRS Shield V2.0
× 1
점퍼 와이어(일반)
× 1
9V 배터리(일반)
× 1
상자
× 1
상자
× 1

이 프로젝트 정보

얼마 전 저는 자동차/개인 추적기를 만들기로 결정했습니다.

이것은 이 방향에 대한 나의 첫 번째 프로토타입이었습니다.


시스템 자체는 매우 간단합니다. Arduino Mega, GPS, GPRS 실드 및 SD 카드만 있으면 됩니다. 이것은 선택 사항이지만 Facebook에서 친구에게 도전을 시작할 때 시스템에 전화를 걸어 내 위치 또는 마지막으로 알려진 위치가 포함된 SMS를 받을 수 있다고 생각하여 포함했습니다.


시스템은 항상 실제 위치를 검색합니다. 누군가 SIM 카드 번호로 전화를 걸면 시스템에서 실제 위치와 Google 지도 링크가 포함된 SMS를 보냅니다. 예:


Hugo 위치는 현재 위도:54.315010, 로그:10.130997입니다. http://maps.google.com/maps?q=54.315010,+10.130997


GPS가 위치를 수신하지 않으면 시스템은 마지막으로 알려진 위치를 보냅니다. 예:


휴고를 찾을 수 없는 것 같습니다. 그를 마지막으로 본 것은 위도:54.315010, 기록:10.130997이었습니다. http://maps.google.com/maps?q=54.315010,+10.130997


날짜, 시간, 위치 및 SMS 상태는 SD 카드에 저장됩니다.


구성 요소

나는 다음을 사용했다:


1x Arduino MEGA

1x GPRS 실드(시장에서 판매되는 다른 GSM 실드를 사용할 수도 있음)

1x GPS(이베이에서 매우 인기 있는 NEO 6을 사용했습니다)

1x SD 카드 실드

1x 9V 배터리

1x 플라스틱 상자

일부 전선


구성 요소 연결


아두이노 메가는 다른 핀아웃을 사용하기 때문에 약간의 재배선이 필요합니다.

먼저 Arduino Uno용으로 설계된 SD 카드 실드는 SPI용 핀 10~13을 사용하므로 Mega에서 작동하려면 MEGA의 SPI 핀에 "전달"되어야 합니다.

Arduino UNO SPI 핀 - Arduino MEGA SPI 핀

MOSI - 11에서 51

미소 - 12 ~ 50

SCK - 13에서 52

SS - 10에서 53

GPRS Shield에서 먼저 Shield의 J7 점퍼에서 Software Serial에 대한 통신 핀을 설정하는 데 필요합니다.

그런 다음 일부 와이어를 사용하여 GPRS 실드의 핀 7과 8을 직렬 1 포트(Arduino Mega의 핀 18 및 19)에 연결했습니다.

GPRS Shield에서 SIM 카드를 연결하는 방법에 대한 자세한 내용은 Hackster의 다른 프로젝트를 참조하세요.


GPS는 Arduino Mega의 직렬 2 포트(핀 16 및 17)에 연결됩니다.

또한 GPS에 필요한 전원은 SD 카드의 5V 핀과 GND 핀에서 빼냅니다.


9V 배터리는 Vin 핀이나 전원 잭 플러그에 연결할 수 있습니다.

상자를 닫고 현장 테스트를 준비합니다.

코드


여기에 코드에 대한 몇 가지 간단한 메모를 남깁니다.


이 라이브러리를 GPRS Shield에 사용했습니다.

Arduino Mega를 사용하려면 몇 가지 변경이 필요합니다.


1) GSM.h를 열고 아래와 같이 적절한 줄을 주석 처리합니다. Arduino 메가:

//#UNO 정의

#define 메가


2) HWSerial.h에서 Mega 정의 행을 주석 처리합니다. Arduino 메가:

#define 메가


GPS의 경우 이 라이브러리를 사용하고 있습니다.


프로그램 자체는 매우 간단한 방식으로 실행됩니다. 모든 시작 루틴(GPRS, GPS 및 SD 카드 초기화) 후에 GPS는 사용 가능한 위성 수와 유효한 GPS 좌표 지점을 확인하려고 시도합니다.

이 시간 동안 전화를 걸면 자동으로 전화가 거절되고 아무 일도 일어나지 않습니다.

GPS가 유효한 위치를 가지고 있고 3개 이상의 위성을 감지할 때(GPS가 잘 수신되는 곳으로 가정), 전화가 걸려오면 시스템에서 내 위치가 포함된 호출 번호로 SMS를 보냅니다. 이 모든 데이터는 SD 카드에 저장됩니다.

GPS에 3개 미만의 위성이 있는 경우 유효한 위치를 검색할 수 없으므로 전화를 걸면 마지막으로 알려진 위치가 포함된 SMS가 해당 전화번호로 전송됩니다. 다시 모든 데이터는 SD 카드에 저장됩니다.


장단점


프로토타입이라 잘 안 되는 부분이 많았습니다. 그러나 목표는 항상 개선하는 것입니다.

먼저 배터리는 1시간 동안만 지속됩니다!! 소프트웨어에서 에너지 절약 메커니즘을 구현하지 않았습니다. 따라서 향후 개선을 위해 "절전 모드"가 필수입니다.

크기도 검토했고 완전히 새로운 보드를 디자인했습니다. 첫 번째 모습은 다음과 같습니다.

오류를 발견했거나 제안/개선 사항 또는 질문이 있는 경우 저에게 편지를 보내주십시오.

읽어주셔서 감사합니다.

휴고 고메스

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 코드
  • 코드Arduino
    #include "SIM900.h#include #include "sms.h#include "call.h#include //소프트웨어/하드웨어 직렬의 핀을 변경하려면 다음을 사용하십시오. 27, 28 라인 GSM.cpp.//Arduino Mega를 사용하려면 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 Variable// TinyGPS++ objectTinyGPSPlus gps;const char *googlePrefix ="http://maps.google.com/maps?q=";double Lat;double Long;int 일, 월, 년;int 시, 분, 초;int num_sat;boolean one_point_true =false;void setup(){ //직렬 연결. Serial.begin(9600); //GPRS 연결 Serial.print(F("Starting GSM...")); // baudrate로 쉴드 구성을 시작합니다. if (gsm.begin(9600)) Serial.println(F("준비")); else Serial.println(F("유휴")); //GPS 연결 Serial.println(F("GPS 시작")); //GPS 통신 포트 Serial2.begin(9600); //SD 카드 시작 Serial.print(F("SD 카드 초기화 중...")); // 사용하지 않더라도 기본 칩 선택 핀이 // 출력으로 설정되어 있는지 확인합니다. pinMode(53, OUTPUT); // 카드가 있고 초기화할 수 있는지 확인합니다. if (!SD.begin(chipSelect)) { Serial.println(F("Card failed, or not present")); // 더 이상 아무것도 하지 않음: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); if (gps.location.isValid() ==1) { 위도 =gps.location.lat(); 긴 =gps.location.lng(); if (위도 !=0 &&경도 !=0) one_point_true =true; } if (gps.date.isValid()) { 일 =gps.date.day(); 월 =gps.date.month(); 연도 =gps.date.year(); } if (gps.time.isValid()) { 시간 =gps.time.hour(); 분 =gps.time.minute(); 초 =gps.time.second(); } 스마트 지연(500); if (millis()> 5000 &&gps.charsProcessed() <10) { Serial.println(F("GPS가 감지되지 않음:배선을 확인하십시오.")); 동안(사실); }}//************************************************ ********************************// 이 사용자 정의 버전의 delay()는 gps 객체가 // "fed".static 무효 smartDelay(unsigned long ms){ unsigned long start =millis(); do { 동안 (Serial2.available()) gps.encode(Serial2.read()); } 동안 (밀리() - 시작 =3 &&one_point_true ==true) { char sms_OK[160]; sprintf(sms_OK, "Hugo 위치는 현재:위도:%s, 로그:%s. %s%s,+%s\n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serial.println(sms_OK); 오류 =sms.SendSMS(번호, sms_OK); 지연(500); if (error ==0) //상태 확인 { Serial.println(F("SMS ERROR")); } else { Serial.println(F("SMS OK")); } } else if (num_sat <3 &&one_point_true ==true) { char sms_NOK[150]; sprintf(sms_NOK, "나는 Hugo를 찾을 수 없습니다. 내가 그를 마지막으로 본 것은 위도:%s, 로그:%s. %s%s,+%s\n", lat_print, Long_print , googlePrefix, lat_print, Long_print); Serial.println(sms_NOK); int 오류 =sms.SendSMS(숫자, sms_NOK); if (error ==0) //상태 확인 { Serial.println(F("SMS ERROR")); } else { Serial.println(F("SMS OK")); } } 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(Long_print); dataFile.print(" "); dataFile.print(오류); dataFile.println(); dataFile.close(); } // 파일이 열려 있지 않으면 오류 팝업:else { Serial.println(F("error opening datalog.txt")); }}/////////////////////////////////////////////////// //////////////////////////////////

    회로도


    제조공정

    1. Raspberry Pi 및 Bridge Shield를 사용하는 로봇
    2. 웹 운영 DMX 컨트롤러
    3. Arduino 스파이봇
    4. UnifiedWater v1
    5. HSVC시계
    6. 제설 로봇
    7. 모바일 투표함
    8. Whac-A-Mole(버튼 에디션)
    9. 최신 주크박스
    10. Arduino Apple Watch