ARC SENTINEL
Autonomous Remote CubeSAT - Sentinel Platform v1.0
System Architecture
ARC SENTINEL (Flight Computer) <---- LoRa 433 MHz ----> Ground Station
Flight Computer stack:
- ESP32 flight computer
- MPU6050 IMU
- DHT11 sensor
- LoRa SX1276
- ESP32-CAM over UART
Ground stack:
- Arduino/ESP32 + LoRa receiver
- USB serial to PC
- ground_station_bridge.py (WebSocket :8765)
- Next.js dashboard (:3000)
OTA uplink path:
PC -> Ground Receiver (USB) -> LoRa RF -> Flight Computer -> FC or CAMDownlink flow:
- Flight computer reads sensors every 2 seconds and transmits JSON over LoRa.
- Ground receiver injects RSSI/SNR and forwards via USB serial.
- Python bridge detects packet loss and broadcasts to WebSocket clients.
- Next.js dashboard renders telemetry panels in real time.
Wiring - Flight Computer
LoRa SX1276 / Ra-02:
- VCC -> 3.3V
- GND -> GND
- SCK -> GPIO 18
- MISO -> GPIO 19
- MOSI -> GPIO 23
- NSS -> GPIO 5 (CS)
- RST -> GPIO 14
- DIO0 -> GPIO 2
MPU6050:
- VCC -> 3.3V
- GND -> GND
- SDA -> GPIO 21
- SCL -> GPIO 22
DHT11:
- VCC -> 3.3V
- GND -> GND
- DATA -> GPIO 4 with 10k pull-up to 3.3V
ESP32-CAM via UART:
- 5V -> 5V
- GND -> GND
- TX -> GPIO 16 (ESP32 RX2)
- RX -> GPIO 17 (ESP32 TX2)
Wiring - Ground Receiver
Use a second LoRa SX1276 with an Arduino/ESP32 connected to your PC:
- VCC -> 3.3V
- GND -> GND
- SCK -> GPIO 18
- MISO -> GPIO 19
- MOSI -> GPIO 23
- NSS -> GPIO 5
- RST -> GPIO 14
- DIO0 -> GPIO 2
Ground receiver firmware injects rssi_gs and snr into each packet before forwarding at 115200 baud.
Core Firmware Files
firmware/flight_computer_ota/flight_computer_ota.inofirmware/esp32cam_ota/esp32cam_ota.inofirmware/lora_ground_receiver/lora_ground_receiver.inoground-station/ground_station_bridge.pytools/arc_uplink.py
Key flight firmware constants:
#define LORA_FREQ 433E6
#define TELEMETRY_INTERVAL 2000
#define OTA_CHUNK_SIZE 128
#define APP_VERSION "1.0.0"
#define SATELLITE_ID "ARC-SENTINEL-01"Increment APP_VERSION before OTA updates to verify remote flash success in telemetry.
ESP32-CAM Commands
| Command | Action |
|---|---|
CAPTURE | Capture JPEG, base64 encode, and send between IMG_START and IMG_END |
STATUS | Reply with camera state and firmware version |
OTA_BEGIN \<size\> \<chunks\> | Prepare OTA |
OTA_CHUNK \<seq\> \<len\> | Write OTA chunk |
OTA_END \<md5\> | Validate firmware and reboot |
OTA_ABORT | Cancel OTA session |
Ground Bridge
Install and run:
pip install pyserial websockets
python ground_station_bridge.py --port /dev/ttyUSB0
python ground_station_bridge.py --port COM3Bridge responsibilities:
- Parse serial telemetry JSON
- Detect sequence gaps and packet loss
- Broadcast over WebSocket
:8765 - Forward UI uplink commands back to serial
Ground Station UI
cd ground-station
npm install
npm run devOpen http://localhost:3000.
If the bridge is offline, demo mode starts after about 4 seconds.
OTA Uplink Tool
pip install pyserial tqdm
python arc_uplink.py ping
python arc_uplink.py status
python arc_uplink.py flash-fc firmware/flight_computer_ota/flight_computer_ota.ino
python arc_uplink.py flash-cam firmware/esp32cam_ota/esp32cam_ota.ino
python arc_uplink.py flash-bin my_firmware.bin FC
python arc_uplink.py set interval 5000
python arc_uplink.py abortSet SERIAL_PORT in arc_uplink.py to your ground receiver USB port.
LoRa Radio Configuration
Both radios must match exactly.
| Parameter | Value |
|---|---|
| Frequency | 433 MHz (or 915E6 for US/Canada) |
| Spreading Factor | SF10 |
| Bandwidth | 125 kHz |
| Coding Rate | 4/5 |
| TX Power | 20 dBm |
| Sync Word | 0xF3 |
| Telemetry Interval | 2000 ms |
| Expected Range | 5-15 km line of sight |
Telemetry Packet Format
{
"id": "ARC-SENTINEL-01",
"pkt": 42,
"t": 84.0,
"ver": "1.0.0",
"accel": { "x": 0.010, "y": 0.050, "z": 0.980 },
"gyro": { "x": 1.23, "y": -0.45, "z": 0.78 },
"roll": 3.2,
"pitch": -1.1,
"mpu_temp": 27.4,
"env": { "temp": 22.5, "hum": 55.0, "hi": 24.1 },
"rssi": -72,
"rssi_gs": -75,
"snr": 8.5
}Setup Summary
- Install ESP32 board support in Arduino IDE.
- Install libraries: LoRa, MPU6050, DHT, ArduinoJson, Base64.
- Set partition scheme:
Minimal SPIFFS (1.9MB APP with OTA). - Flash
flight_computer_ota,esp32cam_ota, andlora_ground_receiveronce over USB. - Install Python tools:
pyserial,tqdm,websockets. - Run bridge and dashboard, then perform OTA via
arc_uplink.py.
License
MIT License.
ARC SENTINEL v1.0 - 433 MHz - SF10 - BW125 - CR4/5 - OTA enabled.