Modifications

Sauter à la navigation Sauter à la recherche
1 321 octets ajoutés ,  6 mars 2022 à 17:20
Ligne 2 : Ligne 2 :     
== Introduction ==  
 
== Introduction ==  
{{ambox|text=Before starting this point, we recommand to follow all the sensors testing steps (BMP280 sensor, TMP36 Sensor, RFM69HCW radio and RFM69HCW Testing).  
+
{{ambox|text=Before starting this point, we recommand to follow all the sensors testing steps (BMP280 sensor, TMP36 Sensor, RFM69HCW radio, RFM69HCW Testing and onboard NeoPixel).  
    
It contains all the details about the wiring, install needed libraries and conduct basic testing.}}
 
It contains all the details about the wiring, install needed libraries and conduct basic testing.}}
Ligne 9 : Ligne 9 :  
* Air temperature
 
* Air temperature
 
* Air pressure
 
* Air pressure
and transmissing the information via the RFM69HCW radio module.
+
and transmitting the information via the RFM69HCW radio module.
    
== Wiring ==
 
== Wiring ==
Ligne 71 : Ligne 71 :  
# Going autonomous (removing Serial Connexion waiting) + add the Lipo
 
# Going autonomous (removing Serial Connexion waiting) + add the Lipo
   −
The code proposed here under has been tested up to 22620128 (22.6 millions) iterations without issue, time when we decided to ends the test :-) .
+
The code proposed here under has been tested up to 23197 iterations without issue, time when we decided to ends the test :-) .
 +
 
 +
Once uploaded to your Feather, open the Serial Monitor and set it to 9600 bauds. '''The sketch would wait until you open the Serial Monitor to start transmitting the data'''.
 +
 
 +
You should see the following messages appears on the Serial Monitor.
 +
 
 +
[[Fichier:ENG-CANSAT-MISSION1-CAPTURE-20.png]]
 +
 
 +
Where we could see the transmitted messages with the packetnum packet index, timing and data.
 +
 
 +
The screen also displays the '''ACK''' acknowledgement send back by the receiver.
    
== Structuring the data ==
 
== Structuring the data ==
Ligne 78 : Ligne 88 :  
So to transport the data to the receiver, we need to transform the values (float, integer) into their string representation.
 
So to transport the data to the receiver, we need to transform the values (float, integer) into their string representation.
   −
But having multiple data in string representation is not enough, they must be organized. '''They final format must be easy to parse and very compact''' (smaller is the radio message and higher is the chance for him to get to the ground without error).  
+
When having multiple data in their string representation is not enough, they must also been organized.
 +
 
 +
'''The final format must be easy to parse and very compact''' (smaller is the radio message and higher is the chance for him to get to the ground without error).  
    
We propose the following format:
 
We propose the following format:
Ligne 146 : Ligne 158 :     
== The code explained ==
 
== The code explained ==
Here some explanation about the {fname|mission1-serial-radio-capture.ino}} sketch used in the CanSat.
+
Here some explanation about the {{fname|mission1-serial-radio-capture.ino}} sketch used in the CanSat.
    
This Arduino sketch would:
 
This Arduino sketch would:
Ligne 297 : Ligne 309 :  
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
The {{fname|init_radio_module()}} function is called from the {{fname|setup()}}.
 +
 +
This function does all the stuff to initialize the RFM69HCW modules. Set the transmission power, the frequency and the '''encryption key'''.
    
<syntaxhighlight lang="c">  
 
<syntaxhighlight lang="c">  
Ligne 339 : Ligne 355 :  
   Serial.println(" MHz");
 
   Serial.println(" MHz");
 
}
 
}
 +
</syntaxhighlight>
 +
 +
This function send the header information to the Serial monitor.
 +
 +
Ideally, this function should also send it via the radio.
    +
<syntaxhighlight lang="c">
 
void send_header() {
 
void send_header() {
  // Send header about the data  Serial.println(F("***START***"));
   
   String s1 = String( F("***HEADER***\r\n") );
 
   String s1 = String( F("***HEADER***\r\n") );
 
   Serial.print( s1 );
 
   Serial.print( s1 );
  // use : as begin of data and ; as end of data
   
   String s2 = String( F(":counter|time_ms|temperature|pressure_hpa|temp2;\r\n") );
 
   String s2 = String( F(":counter|time_ms|temperature|pressure_hpa|temp2;\r\n") );
 
   Serial.print(s2);
 
   Serial.print(s2);
Ligne 351 : Ligne 371 :  
    
 
    
 
}
 
}
 +
</syntaxhighlight>
    +
Helper function used to blink a LED. Note that a pause of 3 time the blinking time. This will ease the identification of blink code into other blinking patterns.
 +
 +
<syntaxhighlight lang="c">
 
void Blink(byte PIN, byte DELAY_MS, byte loops) {
 
void Blink(byte PIN, byte DELAY_MS, byte loops) {
 
   for (byte i=0; i<loops; i++)  {
 
   for (byte i=0; i<loops; i++)  {
Ligne 362 : Ligne 386 :  
   delay( 3* DELAY_MS );
 
   delay( 3* DELAY_MS );
 
}
 
}
 +
</syntaxhighlight>
 +
 +
This function returns the voltage for the analog Pin.
   −
/*
+
It converts a digital value between 0 & 1024 (from ADC) to voltage between 0 & 3.3 volts.
* getVoltage() - return the voltage of an analog pin
+
 
*/
+
<syntaxhighlight lang="c">
 
float getVoltage(int pin){
 
float getVoltage(int pin){
   // AS the sketch does not call the analogReadResolution()
+
   // each unit equal 3.3 / 1024 = 3.2 millivolts
  //    function to change the analog reading resolution
  −
  // THEN Arduino use the defaut 12 bits resolution!
  −
  // Under 12 bits resolution, the analogRead() returns
  −
  //    a value between 0 & 1024.
  −
  //
  −
  // Convert digital value between 0 & 1024 to
  −
  //    voltage between 0 & 3.3 volts.
  −
  //    (each unit equal 3.3 / 1024 = 3.2 millivolts)
   
   return (analogRead(pin) * .0032);
 
   return (analogRead(pin) * .0032);
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== Fault tolerant design ==
 +
The goal is to transmit the data to the ground station.<br />The code of the Emitter (this section) and Receiver (next section) are doing the job.
 +
 +
However, what would happens to your data if the antenna did break? All the data are lots!
 +
 +
This is where the "Extra Flash" would be a great help!
 +
 +
As showed earlier, it is also possible to store/save the data into the Flash.
 +
 +
A good approach would be:
 +
# to save the data in the Flash
 +
# then send it over Radio.
 +
 +
In this way, the data stays available inside the CanSat and could be extracted as suited.
    
{{ENG-CANSAT-TRAILER}}
 
{{ENG-CANSAT-TRAILER}}
29 910

modifications

Menu de navigation