A CanSat is a miniature satellite with the size and shape of a soda can ("Can" in English). It is used to conduct scientific and technological experiments in the atmosphere or space.
Once launched from a rocket or drone, the CanSat deploys and begins transmitting data and measurements to Earth via radios and other communication systems.
A CanSat typically includes the following essential components:
- 🔬 Sensors (pressure, temperature, humidity, acceleration, GPS)
- 📊 Measurement devices to collect environmental data
- 📡 Communication systems to transmit real-time telemetry
- ⚙️ Other electronic equipment depending on the experiment design
This project utilizes the following Arduino libraries to interface with the sensors:
| 📚 Library | 📌 Description | 🧑💻 Author |
|---|---|---|
| BMP280_DEV | Controls the BMP280 pressure and temperature sensor | Martin Lindupp |
| TinyGPSPlus | Processes GPS data from the VK16E module | Mikal Hart |
| DTH22 | Controls the DTH22 Humidity and temparature sensor | Adafruit |
| INA129 | Measure battery voltage and current consumption | Adafruit |
- 2x XBee Series 2 (XB24-B) modules
- 1x XBee USB adapter (for the Coordinator)
- 1x XBee adapter or shield (for the Router + Microcontroller)
- 1x Microcontroler (Atmega328P)
- Digi XCTU software (Linux, macOS, or Windows)
- USB cables
- Open XCTU.
- Click the “Add radio module (+)” icon.
Image 1. Add module
- Select the COM port of your XBee and click Finish.
Image 2. Select port
- Repeat for both modules (Coordinator and Router).
- Verify both appear in the Radio Modules list.
- Click the “Discover radio module (browse)” icon.
Image 3. Select ports to found XBee modules
Image 4. Select port parameters
Image 5. Select the Xbee module
Image 6. Xbee modules
In the Radio Configuration tab, check:
- Product family: XB24-ZB, XB24-B, or similar.
- Function set: choose according to your firmware version:
- ZigBee Coordinator AT
- ZigBee Router AT
- (or ZNet 2.5 variants if available)
Image 7. Radio Configuration
Select the Coordinator module and set the following parameters:
| Parameter | Command | Value | Description |
|---|---|---|---|
| PAN ID | ID |
1234 |
Same network ID for all devices |
| Channel | CH |
C |
Common channel |
| Coordinator Enable | CE |
1 |
Set as Coordinator |
| Destination Address High | DH |
0 |
— |
| Destination Address Low | DL |
0 or FFFF |
Receive from all routers |
| API Enable | AP |
0 |
Transparent (text) mode |
| Baud Rate | BD |
3 (= 9600 bps) |
Must match Arduino |
| Node Identifier | NI |
COORD |
Optional name |
Click Write (pencil icon) to save configuration.
Select the Router module and set the following parameters:
| Parameter | Command | Value | Description |
|---|---|---|---|
| PAN ID | ID |
1234 |
Must match Coordinator |
| Channel | CH |
C |
Must match Coordinator |
| Coordinator Enable | CE |
0 |
Router mode |
| Destination Address High | DH |
0 |
— |
| Destination Address Low | DL |
0 or FFFF |
Broadcast |
| API Enable | AP |
0 |
Transparent mode |
| Baud Rate | BD |
3 (= 9600) |
Must match Arduino |
| Node Identifier | NI |
ROUTER1 |
Optional name |
| Sleep Mode | SM |
0 |
Always on |
| Join Verification | JV |
1 |
Auto rejoin on power-up |
Click Write to save.
- Disconnect and reconnect both XBee modules.
- In XCTU, click the Network Working Mode icon (mesh symbol).
- Click Discover radio network.
- You should see:
- The Coordinator in the center.
- The Router connected to it.
- The ASSOC LED on the Router should blink once per second (associated successfully).
- Select the Coordinator → open Console → click Open.
- Select the Router → open Console → click Open.
- Type in one console window — the message should appear in the other.
If you can send and receive messages both ways, your XBee network is configured correctly.
Image 8. Data Test
| XBee pin | Microcontroller pin | Description |
|---|---|---|
| VCC (3.3 V) | 3.3 V | Power supply |
| GND | GND | Common ground |
| TX (pin 2) | D2 | RX of Microcontroller |
| RX (pin 3) | D3 | TX of Microcontroller |
#include <SoftwareSerial.h>
SoftwareSerial xbee(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
xbee.begin(9600);
Serial.println("XBee Router Ready...");
}
void loop() {
xbee.println("Hello from Arduino Router!");
delay(1000);
}- You can save and reuse your configuration:
- Click the gear icon → Save profile (Coordinator and Router separately).
- Load it later with Import profile for new modules.







