Close
0%
0%

Zero A9G GPS tracker

Makerfabs Maduino Zero A9G GPRS/GSM/GPS tracker.

Similar projects worth following
Maduino Zero A9G GPRS/GSM/GPS tracker. The ai-think A9G is the upgrade version of A7, smaller , and power lower.. based on the ATSAMD21G18, more powerful for real applications.

still in developing...

i have designed  a lot IOT moudules based on Arduino +AIThink or SIMcomm modules such as SIM900, SIM808, but i think this would be the latest version. the ATSAMD21G18 Arduino zero platform get more attractive, the same price as 328+UART, or 32U4,  but much powerful. 

 the Zero A9G GPS tracker features:

1. 3.3V power system~~ very important for mobile/outdoor using, as the lipo batterys can power it directly now, 

2. chargeable,  on board charge circuits to make the lipo can be charged by USB connector , or Solar panels

3. on boards SD cards, for data logging...

Maduino Zero A9G v1.0.brd

version 1.0, not completed yet....

brd - 415.09 kB - 05/21/2018 at 10:02

Download

Maduino Zero A9G v1.0.sch

version 1.0, not completed yet....

sch - 294.32 kB - 05/21/2018 at 10:02

See BOM
Download

  • GSM Testing

    Makerfabs06/07/2018 at 11:10 0 comments

    Ok, i admire that my coding poor, a simple code , that the Maduino zero receiving the SMS from a phone , and then control the connected LED on and off..... the LED turns on when receiving my message:"onr":

    #include<stdio.h>
    #include<string.h>
    #define DEBUG true
      int pon=9;
      int poff=6;
      int lowp=5;
     int LED_R= 2;
     int LED_G = 3;
     int LED_B=4;
     String msg = String("");
     int SmsContentFlag = 0;
    void setup()
    {
      pinMode(pon, OUTPUT);
      pinMode(poff, OUTPUT);
      pinMode(lowp, OUTPUT);
      digitalWrite(poff, LOW);
      digitalWrite(lowp, HIGH);   
      digitalWrite(pon, HIGH);
      String msg = String("");
      int SmsContentFlag = 0;
      pinMode( LED_R, OUTPUT ); 
      pinMode(LED_G, OUTPUT );
      pinMode(LED_B, OUTPUT );
      digitalWrite(LED_R, HIGH ); 
      digitalWrite(LED_G, HIGH );
      digitalWrite(LED_B, HIGH );  
      SerialUSB.begin(115200);
       while (!SerialUSB) {
        ; // wait for serial port to connect
      }
      Serial1.begin(115200); 
       poweron();
      GprsTextModeSMS();
    }
    
    void loop()
    {
        char SerialInByte;
        if( SerialUSB.available())
        {
            Serial1.print((unsigned char) SerialUSB.read());
        }  
        else if( Serial1.available())
        {
            char SerialInByte;
            SerialInByte = (unsigned char) Serial1.read();
            if( SerialInByte == 13 )
            {
              ProcessGprsMsg();
             }
             if( SerialInByte == 10 ){
             }
             else {
               // EN: store the current character in the message string buffer
               msg += String(SerialInByte);
             }
         }   
    }
     
    void poweron()
    {
         int i=0;
         boolean result = false;
         digitalWrite(pon, LOW);    
        delay(3000); 
        digitalWrite(pon, HIGH);
        delay(15000); 
    
         result =  Serial1.find("OK");
         if(result)
        SerialUSB.println( "Please send sms to control your device!" );
        else
      {
                   for(i=0;i<10;i++)
                  {
                          Serial1.println("AT");delay(500);
                         result =  Serial1.find("OK");
                         if(result)
                         {
                            SerialUSB.println( "Please send sms to control your device!" );
                           return;
                         }
             }
             }
    }
    void ProcessSms( String sms )
    {
       SerialUSB.print( "ProcessSms for [" );
       SerialUSB.print( sms );
       SerialUSB.println( "]" ); 
      if( sms.indexOf("onr") >= 0 ){
        digitalWrite(LED_R, LOW);
         SerialUSB.println( "LED Red ON" );
    //    return;
      }
      if( sms.indexOf("ong") >= 0 ){
        digitalWrite( LED_G, LOW);
         SerialUSB.println( "LED Green ON" );
    //    return;
      }
        if( sms.indexOf("onb") >= 0 ){
        digitalWrite(LED_B, LOW);
         SerialUSB.println( "LED Blue ON" );
    //    return;
      }
        if( sms.indexOf("offr") >= 0 ){
            digitalWrite( LED_R,HIGH);
         SerialUSB.println( "LED Red OFF" );
    //    return;
      }
      if( sms.indexOf("offg") >= 0 ){
        digitalWrite(LED_G, HIGH );
         SerialUSB.println( "LED Green OFF" );
    //    return;
      }
        if( sms.indexOf("offb") >= 0 ){
        digitalWrite(LED_B, HIGH );
         SerialUSB.println( "LED Blue OFF" );
    //    return;
      }
    }
    
    // EN: Request Text Mode for SMS messaging
    
    void GprsTextModeSMS(){
       Serial1.println( "AT+CMGF=1" );
    }
     
    void GprsReadSmsStore( String SmsStorePos ){
      // Serial.print( "GprsReadSmsStore for storePos " );
      // Serial.println( SmsStorePos ); 
       Serial1.print( "AT+CMGR=" );
       Serial1.println( SmsStorePos );
    }
     
    // EN: Clear the GPRS shield message buffer
    
    void ClearGprsMsg(){
      msg = "";
    }
     
    // EN: interpret the GPRS shield message and act appropiately
    
    void ProcessGprsMsg() 
    {
         SerialUSB.println("");
      //  Serial.print( "GPRS Message: [" );
        SerialUSB.print( msg );
    //    Serial.println( "]" );
        if( msg.indexOf( "Call Ready" ) >= 0 )
       {
            SerialUSB.println( "*** GPRS Shield registered on Mobile Network ***" );
           GprsTextModeSMS();
       }
     
      // EN: unsolicited message received when getting a SMS message
      // FR: Message non sollicit茅 quand un SMS arrive
      if( msg.indexOf( "+CIEV" ) >= 0 )
      {
          SerialUSB.println( "*** SMS Received ***" );
      }
     
      // EN: SMS store readed through UART (result of GprsReadSmsStore request)  
      if( msg.indexOf( "+CMT:" ) >= 0 )
      {
        // EN: Next message will contains the BODY of SMS
        SmsContentFlag = 1;
        // EN: Following lines are essentiel to not clear the flag!
        ClearGprsMsg();
        return;
      }
     
      // EN: +CMGR message just before indicate that the following GRPS Shield message 
      //     (this message) will contains the SMS body
    
      if( SmsContentFlag == 1 )
      {
         SerialUSB.println( "*** SMS MESSAGE CONTENT...
    Read more »

  • Firmware Testing

    Makerfabs06/07/2018 at 11:00 0 comments

    today i write some small firmware to test the module if it works as intended. firstly i just make it get the GPS signal and display my location on my PC:

    #include<stdio.h>
    #include<string.h>
    #define DEBUG true
      int pon=9;
      int poff=6;
      int lowp=5;
    #include<stdio.h>
    #include<string.h>
    #define DEBUG true
      int pon=9;
      int poff=6;
      int lowp=5;
    
    void setup()
    {
      pinMode(pon, OUTPUT);
      pinMode(poff, OUTPUT);
      pinMode(lowp, OUTPUT);
      digitalWrite(poff, LOW);
      digitalWrite(lowp, HIGH);   
      digitalWrite(pon, HIGH);
      SerialUSB.begin(115200);
       while (!SerialUSB) {
        ; // wait for serial port to connect
      }
      Serial1.begin(115200); 
      digitalWrite(pon, LOW);    
      delay(3000); 
       digitalWrite(pon, HIGH);
       delay(5000); 
       sendData("AT+GPS=1 ",1000,DEBUG);
    }
    
    void loop()
    {
    
        sendData("AT+GPSRD=1",1000,DEBUG);
       delay(1000);
    
    }
    
    String sendData(String command, const int timeout, boolean debug)
    {
        String response = "";    
        Serial1.println(command); 
        long int time = millis();   
        while( (time+timeout) > millis())
        {
          while(Serial1.available())
          {       
            char c = Serial1.read(); 
            response+=c;
          }  
        }    
        if(debug)
        {
          SerialUSB.print(response);
        }    
        return response;
    }

    in 30 seconds, it output as:

    it means: 
    The UTC time: 035442;

    The valid location: A,means yes

    And my location: 2235.5484, Northern Hemisphere and 11351.4722, East longitude;
    and follows some charators, i do not quite understand, and care;

    and date: 070618(date/month/year)

  • manual soldering

    Makerfabs05/31/2018 at 09:12 0 comments

    only 10 minutes for a sample soldering.... do not know why the picture rotates manually when upload to here....

    will program for testing tonight...

  • First sample Ready

    Makerfabs05/31/2018 at 08:51 0 comments

    PCB completed .  and one sample board in manual soldering.... 10 minutes....

  • Ready for the first prototyping

    Makerfabs05/26/2018 at 02:19 0 comments

    the first prototyping version,  ready for production .

View all 5 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates