|
El CANSAT es un emocionante desafío educativo que simula el diseño y lanzamiento de un satélite en miniatura del tamaño de una lata de refresco. Durante el vuelo, el CANSAT debe realizar tareas específicas, como recopilar y registrar datos ambientales que permitan analizar las condiciones de su recorrido, desde el lanzamiento hasta el aterrizaje.
Uno de los requisitos fundamentales establecidos por la organización es transmitir los datos de temperatura y presión por telemetría cada segundo. Esto garantiza que la información se reciba en tiempo real durante el vuelo. Sin embargo, para asegurar que los datos no se pierdan en caso de que la telemetría falle, también se programará el sistema para grabar estos valores en una tarjeta SD. Esto permitirá un análisis posterior más detallado y una recuperación segura de toda la información recopilada. 🚀
By SDASM Archives - https://www.flickr.com/photos/sdasmarchives/23096363173/, No restrictions, https://commons.wikimedia.org/w/index.php?curid=150393705.
|
Lista de componentes:
|
- Arduino Uno (o similar).
- Sensor BMP180/BMP280 .
- Módulo lector de tarjetas SD.
- Tarjeta microSD (formateada en FAT32).
- Cables de conexión.
- Cable USB 2.0 tipo A/B
- Protoboard.
- (Opcional) Batería o fuente de alimentación para la misión.
By @miguetecnologia. Creative Commons Attribution-NonCommercial (CC BY-NC).
|
Entradas Relacionadas
Antes de continuar con el montaje de este proyecto CANSAT, te recomendamos revisar estas publicaciones relacionadas que te ayudarán a profundizar en el uso de los componentes clave:
Estas guías complementan perfectamente el contenido de este post y te ayudarán a dominar las bases necesarias para este emocionante proyecto. ¡Échales un vistazo antes de seguir adelante! 🚀
Conexionado
Conexiones del sensor BMP (I2C)
-
VCC → 3.3V del Arduino (según tu modelo de sensor).
-
GND → GND del Arduino.
-
SCL → A5 en placas Arduino Uno (o pin específico SCL en otras placas).
-
SDA → A4 en placas Arduino Uno (o pin específico SDA en otras placas).
-
SDO → al pin 3,3V en el Arduino. **Ojo: al pin GND si vas a utilizar Arunioblocks
|
Conexiones del módulo SD (SPI)
-
VCC → 5V del Arduino.
-
GND → GND del Arduino.
-
CS (Chip Select) → Pin 9 del Arduino.
-
MOSI → Pin 11 del Arduino.
-
MISO → Pin 12 del Arduino.
-
SCK (Clock) → Pin 13 del Arduino.
|
Notas importantes sobre las conexiones:
- Alimentación: Si estás usando un sensor BMP280 de 3.3V, asegúrate de conectarlo al pin de 3.3V del Arduino.
- Conexiones compartidas: Tanto el sensor BMP como el módulo SD pueden compartir los pines de alimentación y GND del Arduino.
- Cuidado con el consumo: Si estás utilizando una batería para alimentar el sistema (como en el caso del CANSAT), verifica que tenga suficiente capacidad para alimentar todos los componentes.
Conexioado BMP180
|
Conexioado módulo de tarjeta MicroSD
|
Imagenes By @miguetecnología editados con Fritizing. Creative Commons Attribution-NonCommercial (CC BY-NC).
Programación con Arduino Blocks
"Programación en ArduinoBlocks para el proyecto de grabación de datos del sensor BMP280 en una tarjeta SD. Imagen editada con GIMP."
Licencias y autoría: Captura de pantalla realizada por @miguetecnologia (autor del blog). // Edición realizada con GIMP bajo licencia GPL.// Contenido bajo licencia Creative Commons BY-NC-SA 4.0: Atribución, uso no comercial, y compartición bajo la misma licencia. // Derechos de la aplicación ArduinoBlocks reservados a sus desarrolladores.
Programación con IDE Arduino
#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <SD.h>
// Declaración de variables de texto
String s_Presion;
String s_Temp_;
String s_Altitud;
Adafruit_BMP280 bmp280;
File logFile; // tarjeta SD
const int chipSelect = 9; // Pines para el módulo SD
unsigned long tiempo = 0;
unsigned long Segundos = 0;
// Funciones para asignar valores a las variables de presión, temperatura y altitud
void Presion() {
s_Presion = String("Presión = ") + String((bmp280.readPressure() / 100.0)) + String("mb; ");
}
void Temperatura() {
s_Temp_ = String("Temperatura = ") + String(bmp280.readTemperature()) + String("ºC; ");
}
void Altitud() {
s_Altitud = String("Altitud = ") + String(bmp280.readAltitude()) + String("m; ");
}
void setup() {
Serial.begin(9600);
bmp280.begin(0x76);
Serial.print(F("Iniciando SD ..."));
if (!SD.begin(9)) {
Serial.println(F("Error al iniciar"));
return;
}
Serial.println(F("Iniciado correctamente"));
}
void loop() {
Presion();
Temperatura();
Altitud();
tiempo = millis();
Segundos = tiempo / 1000;
logFile = SD.open("datalog.txt", FILE_WRITE); // Abrir archivo y escribir valores
if (logFile) {
Serial.print(Segundos);
Serial.print("seg; ");
logFile.print(Segundos);
logFile.print("seg; ");
Serial.print(s_Presion);
logFile.print(s_Presion);
Serial.print(s_Temp_);
logFile.print(s_Temp_);
Serial.println(s_Altitud);
logFile.println(s_Altitud);
Serial.println(String(""));
logFile.println(String(""));
logFile.close();
}
delay(2000);
}
|
|
Puedes descargar el archivo del código desde el siguiente enlace:
Descargar código Arduino