Project

Concept of the project and how I adapted my small system to it.

A Cubesat is a type of satellite called NANOSATELLITE due to its size(10cmx10cmx10cm) and its weight (1-1.3kg).It has as basic Components:


The EPS(ELectrical Powering System) that is composed by rechargeable batteries and solar panels that power them,for my system this part was covered by 4 batteries that will provide 6V while connected in series powered by a 7V solar pannel series connection

Batteries connected providing 6V

Solar Panels used


The Communication System that is composed by different modules that will allow the satellite to communicate with the ground station to transfer the detected data,so for my system the communication system is used by two radio frequency communication one on the Cubesat sending data detected by sensors and the other in the receiver receiving the data sent by the Radio frequency device on the cubesat.I am using the NRF2401

The Radio frequency device used for communication


The OBC(On Board Computer) that forwards information between different subsystems and makes sure that they perform their task.So for the current system I am using an arduino circuit I made.

Arduino circuit made

PAYLOAD:is the reason why the satellite is built,it contains sensors of various sorts thar will detect/measure physical properties and records them.For the sensors I used GPS module a

GYNEO6MV2-GPS-Module-NEO-6M-GY-NEO6MV2 GPS tracker module used

Various Designs and sketches

Structural design

Designed and cut in Laser cutter using MDF material!At first I wanted to cover it with paint to make it look like Titanium or aluminium because I thought wood would be highly damaged due to space environment but when I consulted an experienced person I found out that as far as researchers know it would survive so I removed the paint and went for a wooden cubesat.This will also allow to meet the standard weight of 1.3kg or less

Here is a preview of the sketch in Coral draw and the same job was sent to laser cutter

Electrical design

The cubesat when in space is powered by solar energy so to power the whole system I used 4 parallely connected Solar pannels of 7.7V,50mAh 75x60mm of size connected to 4 recheargeable batteries of 1.5V that are connected in series giving us a total power consumpton of 6V,and to assure that the power flows in one direction from Solar panels to recheargeable batteries and not the vice versa I added a diode on the positive connection.

I tried to sketch my electrical connections

The back as solar panels

This combination leads to powering the microcontroller receiving the sensor signals and by RF communication sending it to another receiver on the ground giving us the data

Electronics design

For the electronic design I have to circuits One that serves as the signal sender and another one that serves as the receiver connected to a computer to read the data

I decided to use the GPS sensor along with a temperature sensor.

The two circuits both contain an ATMEGA328 as Microcontroller and both have the Radio Frequency communication (The NRF24l01),the sender is powered by rechargeable batteries also powered by the solar panels and the receiver is optionally powered by batteries or by USB Port

When doing the electronic design in eagle I've had a really hard time finding the right components libraries,for example for the ATMEGA328 we don't have them in the fab library I had to find an equivalent on google and found out it was the ATMEGA168 but when I cut it in the roland mill it ddn't cut well so I switched to the ATMEGA88 which switched better.

Schematics of the sender that is going to be on the cubesat

Board of the sender that is going to be on the cubesat

Schematics of the sender that is going to be on the ground station

Board of the sender that is going to be on the Groundstation

Sender'ss PCB

Sensor connected to sender circuit

Receiver board

Receiver box printed from laser cutter

Receiver already in a maker box connected to the computer being programmed

and for the USB port I had used one from normal libraries but when i cut it ddn't go as planed then I switched to specify with one from the fab library And for the CH340G I had to find a special library that I found

  • Click here to download it
  • Error made while choosing USB ports,which I realised after finishing the board

    Error when printing the ATMEGA328

    Sender'ss PCB

    And for the codes for the sender I uploaded these ones

    
    #include < TinyGPS++.h>
    #include < SoftwareSerial.h>
    #include< Wire.h>
    
    
    const byte address[6] = "00001";
     
    void setup()
    {
     
      // Sets baud rate of your terminal program
      Serial.begin(9600);
       radio.begin();
     radio.openWritingPipe(address);
     radio.setPALevel(RF24_PA_MIN); 
     radio.stopListening();
      // Sets baud rate of your GPS
      uart_gps.begin(9600);
     
      Serial.println("");
      Serial.println("GPS Shield QuickStart Example Sketch v12");
      Serial.println("       ...waiting for lock...           ");
      Serial.println("");
    }
    void loop()
    {
      while(uart_gps.available())     // While there is data on the RX pin...
      {
          int c = uart_gps.read();    // load the data into a variable...
          if(gps.encode(c))      // if there is a new valid sentence...
          {
            getgps(gps);         // then grab the data.
          }
      }
    
      delay(10);
    }
     
    
    static const int RXPin = 4, TXPin = 3;
    static const uint32_t GPSBaud = 9600;
    TinyGPSPlus gps;
    SoftwareSerial ss(RXPin, TXPin);
    unsigned long last = 0UL;
    
    void  setup()
    {
        Serial.begin(9600);
        ss.begin(GPSBaud);
    }
    void loop()
    {
    GPS();
    }
    
    void GPS()
    {
    
    // Dispatch incoming characters
      while (ss.available() > 0)
        gps.encode(ss.read());
    
        if (gps.location.isUpdated())
      {
        Serial.print(F("LOCATION   Lat="));
        Serial.print(gps.location.lat(), 6);
        Serial.print(F(" Long="));
        Serial.println(gps.location.lng(), 6);
      }
    
      else if (gps.altitude.isUpdated())
      {
        Serial.print(F("ALTITUDE  "));
        Serial.print(F(" Meters="));
        Serial.println(gps.altitude.meters());
       }
    
       else if (gps.date.isUpdated())
      {
        Serial.print(F("DATE       "));
        Serial.print(F(""));
        Serial.print(gps.date.day());
        Serial.print(F("/"));
        Serial.print(gps.date.month());
        Serial.print(F("/"));
        Serial.println(gps.date.year());
      }
    
    else if (gps.time.isUpdated())
      {
        Serial.print(F("TIME       "));
        Serial.print((gps.time.hour())+2);
        Serial.print(F("h "));
        Serial.print(gps.time.minute());
        Serial.print(F("Min "));
        Serial.print(gps.time.second());
        Serial.println(F("sec "));
      }
    
       else if (gps.speed.isUpdated())
      {
        Serial.print(F("SPEED      "));
        Serial.print(gps.speed.kmph());
        Serial.println(F(" km/h"));
      }
    
    else if (gps.satellites.isUpdated())
      {
        Serial.print(F("SATELLITES "));
        Serial.print(F("connected="));
        Serial.println(gps.satellites.value());
    
        Serial.println();
       }
       
    
         else if (millis() - last > 5000)
      {
        Serial.println();
        
    
      if (gps.charsProcessed() < 10)
          Serial.println(F("WARNING: No GPS data.  Check wiring."));
    
        last = millis();
        Serial.println();
      }
    
    } 
      
    
    and It worked
    for the receiver I uploaded these
     	#include < SPI.h>
    #include < nRF24L01.h>
    #include < RF24.h>
    #include "DigitalIO.h"
    
    int values[3];
    byte pip;
    RF24 radio(9, 10);
    
     const byte address[6] = "00001";
    
     void setup() 
     {
      
     Serial.begin(9600);
     radio.begin();
     radio.openReadingPipe(0, address);
     radio.setPALevel(RF24_PA_MIN);
     radio.startListening();
     }
    
     void loop()
     {
     if (radio.available()) 
     {
      
    radio.read(values, sizeof(values));
    
     Serial.print("latitude =");
     Serial.print(values[0]);
     Serial.println();
     Serial.print("longitude =");
     Serial.print(values[1]);
     Serial.println();
     Serial.print("temperature =");
     Serial.print(values[2]);
     Serial.println();
     
     Serial.println();
    delay(1000);
     }