Descripción del proyecto
Los alumnos de 4º de ESO han participado en la elaboración de un proyecto para la Semana de la Ciencia, consistente en un Satélite artificial, en el que han puesto en práctica algunos de los conocimientos adquiridos sobre Programación, Robótica y Comunicaciones inalámbricas.
El Satélite consta de una serie de sensores conectados a una placa de Arduino UNO, que miden temperatura, humedad, radiación ultravioleta y presión atmosférica. Esta placa está conectada a una Raspberry Pi 4, con la que se comunica por puerto serie y que transmite los datos mediante protocolo SSH vía WiFi. La Raspberry lleva conectada también una cámara que emite en directo en directo y a la que se puede acceder por IP desde cualquier dispositivo conectado a la misma red.
El conjunto se alimenta por medio de una batería y tiene con un consumo medio de 0,8 ah, por lo que tiene autonomía para varias horas de funcionamiento.
Un una futura ampliación del proyecto está previsto incorporar paneles solares para recargar las baterías, de manera que se vuelva completamente independiente.
También está previsto incorporar más sensores al Arduino, como un localizador GPS.
Esquema eléctrico
En la siguiente imagen se muestra el esquema de conexión de los sensores al Arduino, y la conexión de este a la Raspberry.
Programación
La programación del Arduino se realizó mediante código en el IDE de Arduino, y en la Raspberry se instaló el SO Raspbian y se programó el control de la cámara mediante Python.
#include <Wire.h> // incluye libreria de bus I2C
#include <Adafruit_Sensor.h> // incluye librerias para sensor BMP280
#include <Adafruit_BMP280.h>
#include "DHT.h"
Adafruit_BMP280 bmp;
#define DHTTYPE DHT11 // DHT 11
const int DHTPin = 5; // what digital pin we're connected to
DHT dht(DHTPin, DHTTYPE);
void setup() {
Serial.begin(9600); // inicializa comunicacion serie a 9600 bps
Serial.println("Iniciando:"); // texto de inicio
if ( !bmp.begin() ) { // si falla la comunicacion con el sensor mostrar
Serial.println("BMP280 no encontrado !"); // texto y detener flujo del programa
while (1); // mediante bucle infinito
}
dht.begin();
}
void loop() {
dht_11();
bmp_280();
uv_index();
Serial.println(" ");
delay(5000);
}
void dht_11() {
// Reading temperature or humidity takes about 250 milliseconds!
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Hum.: ");
Serial.print(h);
Serial.print(" % .");
/*Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");*/
}
void bmp_280() {
float TEMPERATURA; // variable para almacenar valor de temperatura
float PRESION; // variables para almacenar valor de presion atmosferica
float P0 = 1018.7; // presion a nivel del mar como referencia para la altitud
TEMPERATURA = bmp.readTemperature(); // almacena en variable el valor de temperatura
PRESION = bmp.readPressure() / 100; // almacena en variable el valor de presion divido
// por 100 para covertirlo a hectopascales
Serial.print(" Temp.: "); // muestra texto
Serial.print(TEMPERATURA); // muestra valor de la variable
Serial.print(" C ."); // muestra letra C indicando grados centigrados
Serial.print(" Pres.: "); // muestra texto
Serial.print(PRESION); // muestra valor de la variable
Serial.print(" hPa ."); // muestra texto hPa indicando hectopascales
Serial.print(" Alt. aprox: "); // muestra texto
Serial.print(bmp.readAltitude(1018.7)); // muestra valor de altitud con referencia a P0
Serial.print(" m ."); // muestra letra m indicando metros
//delay(1000); // demora de 5 segundos entre lecturas
}
void uv_index() {
float sensorVoltage;
float sensorValue;
int UV_index;
String quality = "";
sensorValue = analogRead(A0);
sensorVoltage = sensorValue / 1024 * 5.0;
UV_index = sensorVoltage / 0.1;
//condition for UV state
if (UV_index <= 2) {
quality = " LOW ";
}
else if (UV_index > 2 && UV_index <= 5) {
quality = " MOD ";
}
else if (UV_index > 5 && UV_index <= 7) {
quality = " HIGH ";
}
else if (UV_index > 7 && UV_index <= 10) {
quality = " VERY HIGH";
}
else {
quality = " EXTREME ";
}
Serial.print(" Índice UV ");
Serial.print(UV_index);
Serial.println(quality);
/// delay(1000);
}
En la siguientes imágenes se ve el satélite durante la exposición en la Semana de la Ciencia.
Para completar el proyecto, con los alumnos de TIC de 4º se elaboró una página web con información relacionada con la expedición de Magallanes y Elcano, y con algunas de las tecnologías e instrumentos empleados en la navegación de la época y actual.
Se puede consultar en el siguiente enlace o escaneando el código QR, también elaborado por los alumnos.