CARGADOR GIRASOL

Miembros del grupo:

-Pablo Cristina Jiménez

-Álvaro González González

– Rodrigo Wiznez Valiente

1.DESCRIPCIÓN

Nuestro proyecto consiste en una placa solar que tiene alrededor suya en cada una de sus esquinas un LDR, que se encargan de detectar por donde llega más luz. Dependiendo de dónde venga la luz la placa rota para situarse en la posición idónea para recolectar esa energía, esto es gracias a los dos servomotores que están conectados a la estructura los cuales tienen cada uno asignado un eje de movimiento para así cubrir perfectamente un rango de 360 grados.

La placa solar recolecta esta energía y va directa a una batería donde se almacena. A esa batería tenemos conectado un elevador de voltaje con un puerto USB, gracias a él podemos cargar todo tipo de dispositivos con la energía almacenada.

Aparte nuestro proyecto dispone de una pantalla OLED y un sensor DHT. La pantalla muestra los datos del sensor mencionado dándote información que puede ayudarte a saber si es buen momento para recolectar energía solar o no.

2.MATERIALES Y COSTE

 

La imagen tiene un atributo ALT vacío; su nombre de archivo es image-52.png

Arduino UNO : Proporcionada por el docente

2x Mini Servo sg90: 4,98

Módulo cargador batería de litio TP5046: 1,02

Batería litio 3,7V: 6,76

Pantalla OLED SSD1306: 6,60

4x LDRs: 0,76

Sensor de temperatura y humedad DHT11: 1,65

Potenciador de voltaje 3,7V a 5V: 4,78

Cable para soldar: 4,5

Resistencias 10K ohmios: Proporcionadas por el docente

 

3.CIRCUITO

Aunque no hemos podido crear el circuito en tinkercad por la falta de la pantalla OLED y el DHT, explicaremos a donde hemos conectado cada cable para que se entienda mejor.

Primero nos centraremos en el circuito que tenemos en la protoboard y la arduino:

-DHT11: VCC a 5V, GND a GND y data al pin digital 2.

-Pantalla OLED: VCC a 5V, GND a GND, D0 al digital 10, D1 al digital 9, Reset al digital 13, DC al digital 11 y CS al digital 12.

-Servos (aunque no se vean en la imagen sus cables están conectados a la protoboard y a la arduino): cable marrón a GND, cable rojo a 5V y cable amarillo al pin digital 6 y 5 respectivamente.

-LDRs: conectados a una resistencia de 10K ohmios que va a GND, también conectados a 5V y cada uno a un pin análogico en este caso son A1, A2, A3 y A4

El circuito de la placa solar está hecho mediante cables soldados. Como se puede observar del positivo se conecta un diodo, en nuestro caso un led que impide que la corriente pase en ambos sentidos, el cargador de batería micro USB. Este último se conecta a la pila y aunque en este diagrama no se aprecie también se conecta directamente al elevador de voltaje. En el elevador de voltaje también se pueden cargar dispositivos por USB.

 4.CÓDIGO

#include <Servo.h>

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_SSD1306.h>

#include <Adafruit_Sensor.h>

#include <DHT.h>

#define OLED_MOSI 9

#define OLED_CLK 10

#define OLED_DC 11

#define OLED_CS 12

#define OLED_RESET 13

#define DHTPIN 2    

#define DHTTYPE    DHT11    

DHT dht(DHTPIN, DHTTYPE);

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

unsigned long lastDisplayTime = 0;

int displayState = 0;  

const unsigned long displayInterval = 5000;

#define LDR_TL A1

#define LDR_TR A4

#define LDR_BL A3

#define LDR_BR A2

#define error 15

Servo servoX;  

Servo servoY;  

int posX = 90;  

int posY = 90;  

void setup() {

  servoX.attach(6);

  servoY.attach(5);

  servoX.write(posX);

  servoY.write(posY);

  Serial.begin(9600);

  dht.begin();

  display.begin(SSD1306_SWITCHCAPVCC);

  display.clearDisplay();

  display.setTextColor(WHITE);

  delay(1000);

}

void loop() {

  float t = dht.readTemperature();

  float h = dht.readHumidity();    

  int tl = analogRead(LDR_TL);

  int tr = analogRead(LDR_TR);

  int bl = analogRead(LDR_BL);

  int br = analogRead(LDR_BR);

  int topAvg = (tl + tr) / 2;

  int bottomAvg = (bl + br) / 2;

  int leftAvg = (tl + bl) / 2;

  int rightAvg = (tr + br) / 2;

  int verticalDiff = topAvg – bottomAvg;

  int horizontalDiff = leftAvg – rightAvg;

  Serial.print(«TL: «); Serial.print(tl);

  Serial.print(» TR: «); Serial.print(tr);

  Serial.print(» BL: «); Serial.print(bl);

  Serial.print(» BR: «); Serial.print(br);

  Serial.print(» | posX: «); Serial.print(posX);

  Serial.print(» posY: «); Serial.println(posY);

  if (abs(verticalDiff) > error) {

    int stepY = constrain(map(abs(verticalDiff), 0, 1023, 1, 3), 1, 3);

    if (verticalDiff > 0 && posY < 180) posY += stepY;

    if (verticalDiff < 0 && posY > 0) posY -= stepY;

  }

  if (abs(horizontalDiff) > error) {

    int stepX = constrain(map(abs(horizontalDiff), 0, 1023, 1, 3), 1, 3);

    if (horizontalDiff > 0 && posX > 0) posX -= stepX;

    if (horizontalDiff < 0 && posX < 180) posX += stepX;

  }

  servoX.write(posX);

  servoY.write(posY);

  delay(15);

  static unsigned long lastSensorRead = 0;

  if (millis() – lastSensorRead > 2000) {

    lastSensorRead = millis();

    h = dht.readHumidity();

    t = dht.readTemperature();

  }

  if (millis() – lastDisplayTime >= displayInterval) {

    lastDisplayTime = millis();

    display.clearDisplay();

    display.setTextSize(1);

    display.setCursor(0, 0);

    if (isnan(h) || isnan(t)) {

      display.print(«DHT error!»);

    } else if (displayState == 0) {

      display.print(«Temperatura: «);

      display.setTextSize(2);

      display.setCursor(0, 10);

      display.print(t);

      display.print(» «);

      display.setTextSize(1);

      display.cp437(true);

      display.write(167);  

      display.setTextSize(2);

      display.print(«C»);

    } else {

      display.print(«Humedad: «);

      display.setTextSize(2);

      display.setCursor(0, 10);

      display.print(h);

      display.print(» %»);

    }

    display.display();

    displayState = !displayState;  

  }  

}


6.DIFICULTADES

  • Pantalla demasiado pequeña para imprimir dos valores: nuestra pantalla OLED tiene un tamaño de 0,96 pulgadas, por lo que se nos hacía excesivamente pequeña para que mostrara a la vez la temperatura y la humedad. Como solución implementamos que se fueran intercambiando entre un valor y otro cada 5 segundos.
  • Problemas de estabilidad de la estructura: el problema más recurrente que hemos tenido durante el desarrollo de la práctica ha sido este. Los servos que tenemos no están preparados para soportar mucho peso y nuestro primer intento de construir la estructura controlada por estos que sostenía la placa solar fue hecho con pletinas metálicas. Esto provocó que los servos se movieran a tirones o a penas ni se movieran. Finalmente decidimos cambiar las pletinas por una estructura de madera pegada con silicona que pesa mucho menos, aún así si los servos realizan movimientos bruscos a veces no soportan el peso.
  • Cableado insuficiente: fuimos conectando nuestros componentes gradualmente, entonces llegados a cierto punto nos dimos cuenta de que no teníamos suficientes cables para realizar todas las conexiones y tuvimos que comprar más.
  • Voltaje insuficiente para cargar dispositivos móviles: al estar utilizando una pila de 3,7V y que los módulos para cargarlos dispositivos sean de 5V al conectar el móvil no daba señal, así que optamos por añadir un potenciador de voltaje que también nos ha servido al final como otro puerto para cargar dispositivos ya que tiene un USB hembra en él.
  • Problemas con la declaración de módulos: a la hora de comprar los componentes no sabíamos muy bien cuáles eran mejores o peores y compramos una pantalla OLED de 7 pines, la cual no sabíamos como conectar ni declararla en el código, ya que normalmente las pantallas OLED son de 4 pines. Tuvimos que vernos multitud de vídeos en Youtube hasta que encontramos uno que se ajustaba a nuestras necesidades.
  • Resistencias erróneas: probablemente el error más tonto y es que al soldar las resistencias no nos fijamos en su valor entonces cuando conectamos ya todo la placa solar no se movía correctamente. Al mirar por el serial monitor que valores daban los LDR nos dimos cuenta de que daban valores altísimos sin que les diera la luz. Así que tuvimos que desoldar las resistencias y poner las de 10K ohmios.
  • Delay de los servos muy alto​: nuestro programa podríamos decir que está dividido en partes, la parte de los servos y la parte de la pantalla y el DHT. Primero programamos esta última y como he mencionado anteriormente tiene un delay de 5 segundos para cambiar entre temperatura y humedad. Al probar ya el programa completo con la parte de los servos hecha estos se movían muy poco y muy lentamente, la solución fue quitar ese delay de 5 segundos que era lo que impedía que los servos se movieran fluidamente y lo cambiamos por un miliseg.

7.UTILIDAD

Consideramos que si en algo destaca nuestro proyecto es en ser muy práctico, la semana pasada tuvimos justamente un apagón, con nuestro cargador solar podríamos haber cargador el móvil sin necesidad de conectarlo a ningún enchufe. Hay que tener en cuenta también toda la transición ecológica que se está llevando a cabo en nuestros tiempos, por lo que es fundamental empezar a diseñar baterías como estas para que la gente se adapte a las energías renovables. También si el dispositivo redujera su tamaño y quitáramos la parte de la pantalla podríamos estar hablando de las baterías portátiles del fututo, porque si un inconveniente tienen las baterías portátiles actuales es que tardan mucho en cargarse, mientras nuestra idea puede irse cargando incluso mientras se utiliza en la calle.

8.VIDEO FINAL

A continuación, mostramos el video final explicativo de nuestro proyecto, esperamos que les guste 🙂

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *