Modifications

Sauter à la navigation Sauter à la recherche
2 071 octets ajoutés ,  30 octobre 2018 à 21:46
Ligne 1 : Ligne 1 :  
{{ENG-CANSAT-NAV}}
 
{{ENG-CANSAT-NAV}}
   −
{{traduction}}
   
== Introduction ==
 
== Introduction ==
 
The following wiring will prepare the "Receiver Station" for the mission 1. From the "RFM69HCW Testing" section, we will use an Arduino UNO and RFM69HCW module to '''redirect the Radio Messages to the serial port'''.
 
The following wiring will prepare the "Receiver Station" for the mission 1. From the "RFM69HCW Testing" section, we will use an Arduino UNO and RFM69HCW module to '''redirect the Radio Messages to the serial port'''.
Ligne 61 : Ligne 60 :     
In the informations:
 
In the informations:
* '''len''': len of the data.
+
* '''data_len''': length of the data stream received.
 
* '''RSSI''': indicated the [https://en.wikipedia.org/wiki/Received_signal_strength_indication strength of the signal] (-15 at best, -90 at worst).
 
* '''RSSI''': indicated the [https://en.wikipedia.org/wiki/Received_signal_strength_indication strength of the signal] (-15 at best, -90 at worst).
 
* '''transmitted_data''': the data as transmitted by the emitter. As designed in the emitter, it starts with ''':''' and ends with ''';\r\n'''
 
* '''transmitted_data''': the data as transmitted by the emitter. As designed in the emitter, it starts with ''':''' and ends with ''';\r\n'''
Ligne 67 : Ligne 66 :  
In the '''transmitted_data''', we can identify:
 
In the '''transmitted_data''', we can identify:
 
* The packet counter
 
* The packet counter
* The time counter (miiliseconds)
+
* The time counter (milliseconds)
 
* The temperature (from tmp36)
 
* The temperature (from tmp36)
 
* The atmospheric pressure (from bmp280)
 
* The atmospheric pressure (from bmp280)
Ligne 88 : Ligne 87 :  
#include <RH_RF69.h>
 
#include <RH_RF69.h>
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Then, it defines the parameters for the radio module and the pinout used to wire the RFM69HCW radio. The code adapt himself to the the board selected in the compiler.
 +
 +
The last line create the object {{fname|rf69}} to control the module.
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 106 : Ligne 109 :  
#endif
 
#endif
   −
#if defined (__AVR_ATmega328P__)  // Feather 328P w/wing
+
#if defined (__AVR_ATmega328P__)  // Feather 328P w/wing (or Arduino UNO)
 
   #define RFM69_INT    3  //  
 
   #define RFM69_INT    3  //  
 
   #define RFM69_CS      4  //
 
   #define RFM69_CS      4  //
Ligne 126 : Ligne 129 :  
   #define LED          13
 
   #define LED          13
 
#endif
 
#endif
  −
/* Teensy 3.x w/wing
  −
#define RFM69_RST    9  // "A"
  −
#define RFM69_CS      10  // "B"
  −
#define RFM69_IRQ    4    // "C"
  −
#define RFM69_IRQN    digitalPinToInterrupt(RFM69_IRQ )
  −
*/
  −
  −
/* WICED Feather w/wing
  −
#define RFM69_RST    PA4    // "A"
  −
#define RFM69_CS      PB4    // "B"
  −
#define RFM69_IRQ    PA15    // "C"
  −
#define RFM69_IRQN    RFM69_IRQ
  −
*/
      
// Singleton instance of the radio driver
 
// Singleton instance of the radio driver
 
RH_RF69 rf69(RFM69_CS, RFM69_INT);
 
RH_RF69 rf69(RFM69_CS, RFM69_INT);
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
The {{fname|setup()}} function:
 +
* initialize the serial connexion @ 115200 bauds
 +
* initialze the radio module
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
int16_t packetnum = 0;  // packet counter, we increment per xmission
+
void setup() {
void setup()  
  −
{
   
   Serial.begin(115200);
 
   Serial.begin(115200);
  //while (!Serial) { delay(1); } // wait until serial console is open, remove if not tethered to computer
      
   pinMode(LED, OUTPUT);     
 
   pinMode(LED, OUTPUT);     
Ligne 176 : Ligne 166 :  
   }
 
   }
   −
   // If you are using a high power RF69 eg RFM69HW, you *must* set a Tx power with the
+
   // When using High Power RF69, RFM69HW then the Tx power ishighpowermodule
   // ishighpowermodule flag set like this:
+
   // flag MUST be with to TRUE
   rf69.setTxPower(20, true);  // range from 14-20 for power, 2nd arg must be true for 69HCW
+
   rf69.setTxPower(20, true);  // Power range 14-20
    
   // The encryption key has to be the same as the one in the server
 
   // The encryption key has to be the same as the one in the server
Ligne 193 : Ligne 183 :  
</syntaxhighlight>
 
</syntaxhighlight>
    +
The main {{fname|loop()}} function just check if a new message arrives.
 +
 +
If so, it read the message and store it into {{fname|buf}} buffer.
 +
 +
Then, several {{fname|Serial.print()}} statement are used to send the data over the serial connexion.
 +
 +
Finally, the sketch sends an '''ACK''' confirmation message.
 +
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
void loop() {
 
void loop() {
Ligne 221 : Ligne 219 :  
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
The {{fname|Blink()}} function is used to signal error code (blink once when a message received, blink 3 times when having a communication error).
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 239 : Ligne 239 :  
Select the proper port in the menu '''Tools -> Port'''
 
Select the proper port in the menu '''Tools -> Port'''
   −
Then press the "compile" button.
+
Then press the "upload" button.
 +
 
 +
== Capturing data to file ==
 +
Having data available in the Arduino Serial Monitor is great... but capturing it without Arduino would be even better.
 +
 
 +
=== Putty ===
 +
The putty software (available on Windows, Mac, Linux) can be also be used to connect to the Arduino Serial Port interface
 +
 
 +
Here how it should be configured to capture the data.
 +
 
 +
[[Fichier:ENG-CANSAT-MISSION1-RECEIVE-30.png|360px]]
 +
 
 +
Putty also offers some logging capability that may be useful.
 +
 
 +
=== Linux command ===
 +
If you are addict to Linux or Raspberry-Pi board then you can easily view and capture the data with the following commnands.
 +
 
 +
cat /dev/ttyACM0 > output.dat
 +
 
 +
This command will redirect the content of the USB port to a file named {{fname|output.dat}} .
 +
 
 +
=== With Python ===
 +
The following Python script will capture a serial port (see {{fname|baud_rate}} variable) and write the content to a file (see {{fname|write_to_file_path}} variable).
 +
 
 +
The content of the file is reset when the script is started.
 +
 
 +
{{ambox-stop|text=Openning the Serial Port will issue the automatic Reset feature of the Arduino board.}}
 +
 +
<syntaxhighlight lang="python">
 +
import serial
 +
 
 +
serial_port = '/dev/ttyACM0';
 +
# depend on Serial.begin(baud_rate) in Arduino
 +
baud_rate = 115200;
 +
write_to_file_path = "output.txt";
 +
 
 +
output_file = open(write_to_file_path, "w+")
 +
ser = serial.Serial(serial_port, baud_rate)
 +
try:
 +
    while True:
 +
        line = ser.readline()
 +
        line = line.encode("utf-8") #ser.readline returns a binary, convert to string
 +
        print(line)
 +
        output_file.write(line)
 +
except KeyboardInterrupt:
 +
    print( 'User abord' )
 +
output_file.close()
 +
ser.close()
 +
</syntaxhighlight>
 +
 
 +
=== Other options ===
 +
You may find many other capture methods from Internet:
 +
* Free Software available on Internet
 +
* Source Code example for your favourite programming language.
    
{{ENG-CANSAT-TRAILER}}
 
{{ENG-CANSAT-TRAILER}}
29 918

modifications

Menu de navigation