Coffee Space


Listen:

Solar Power

Preview Image

Preview Image

This project is an initial experiment for attempting to figure out how much power can realistically be expected from a modestly sized solar panel.

Parts

Parts are as follows:

Solar Panel

Specifications:

  • 18V (in reality it actually seems to be lower than this - depending on light conditions)
  • 2.5W
  • 19.5 x 12 x 0.3 cm

Implementation:

 ________
|        |     ____
|  SP   +|----| WM |
|       -|----|____|
|________|
  • SP - Solar panel
  • WM - WeMos

Experience:

  • Connects fine with large solder pads.
  • Voltage is high enough in decent levels of sunlight (>10V).

Voltage Regulator

Specifications:

  • 6-20V input
  • 5V output
  • 2A current

Implementation:

 ________
|        |     ____      ____
|  SP   +|----| VR |----| WM |
|       -|----|____|----|____|
|________|
  • SP - Solar panel
  • VR - Voltage regulator
  • WM - WeMos

Experience:

  • Too inefficient to be used on a solar panel of this size.

WeMos D1 R2

Specifications:

  • >15mA current usage
  • 5V (USB) or 9-24V (power jack)

Implementation:

#include <ESP8266WiFi.h>
extern "C"{
  #include "user_interface.h"
}

const char* ssid = "WIFI_NAME_HERE";
const char* password = "PASSWORD_HERE";

unsigned long startTime;
WiFiServer server(80);

#define TRUE 1
#define FALSE 0
#define DEBUG TRUE

void setup(){
  /* Store data about starting conditions */
  startTime = millis();
  /* Begin the serial communications */
  #if DEBUG == TRUE
    Serial.begin(115200);
    Serial.println("There is life");
    delay(10);
  #endif
  /* Turn off WiFi LED */
  wifi_status_led_uninstall();
  /* Stop the WiFi completely dying */
  wifi_set_sleep_type(LIGHT_SLEEP_T);
  /* Start the Wifi connection */
  WiFi.begin(ssid, password);
  /* Wait until the WiFi is up */
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    /* Display attempt to connect */
    #if DEBUG == TRUE
      Serial.println("Connecting...");
    #endif
  }
  /* Begin the server on the WiFi */
  server.begin();
  /* Display local IP address */
  #if DEBUG == TRUE
    Serial.println(WiFi.localIP());
  #endif
}

void loop(){
  /* Wait until we find a client */
  WiFiClient client = server.available();
  /* Make sure we have a valid client */
  if(!client){
    return;
  }
  /* Wait until the client is available */
  while(!client.available()){
    delay(1);
  }
  /* Get all data from client */
  client.flush();
  /* Write the page */
  String s = "";
  s += "HTTP/1.1 200 OK";
  s += "\r\n";
  s += "Content-Type: text/html";
  s += "\r\n";
  s += "\r\n";
  s += "<h1>Data</h1>";
  s += " </br>status: alive";
  s += " </br>up_time_ms: ";
  s += (millis() - startTime);
  s += " </br>os_chip_id: ";
  s += system_get_chip_id();
  s += " </br>os_free_heap_size: ";
  s += system_get_free_heap_size();
  s += " </br>os_time_us: ";
  s += system_get_time();
  s += " </br>os_rtc_us: ";
  s += system_get_rtc_time();
  s += " </br>os_boot_time: ";
  s += system_get_boot_version();
  /* Output to client and then close */
  client.print(s);
  delay(1);
  client.stop();
}

Experience:

  • Lower power operations do not perform very well. The amount advertised do not match achievable values in reality. This could be for multiple reasons, but much more debugging is required.
  • Solar panel was not able to provide enough power to get the WiFi started, despite the surface mount LEDs being activated.

Experiment

Below is a video of a USB fan plugged into the solar panel. It did need a finger nudge in order to initially get going, but was able to sustain a spin at a low speed once going. A small covering of the solar panel was enough to stop the fan.

Conclusion

From the simple experimentation, it seems that either more solar panel surface area is required or that we need an intermediate power storage system to allow higher current draw at given moments.