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
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 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.
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
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
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.
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
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
#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); }