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 are as follows:
[$6.98 NZD]
Solar panel[$4.25 NZD]
Voltage regulator[~£5]
WeMos D1 R2Specifications:
18V
(in reality it actually seems to be lower than this - depending on light conditions)2.5W
Implementation:
0001 ________ 0002 | | ____ 0003 | SP +|----| WM | 0004 | -|----|____| 0005 |________|
SP
- Solar panelWM
- WeMosExperience:
Specifications:
6-20V
input5V
output2A
currentImplementation:
0006 ________ 0007 | | ____ ____ 0008 | SP +|----| VR |----| WM | 0009 | -|----|____|----|____| 0010 |________|
SP
- Solar panelVR
- Voltage regulatorWM
- WeMosExperience:
Specifications:
>15mA
current usage5V
(USB) or 9-24V
(power jack)Implementation:
0011 #include <ESP8266WiFi.h> 0012 extern "C"{ 0013 #include "user_interface.h" 0014 } 0015 0016 const char* ssid = "WIFI_NAME_HERE"; 0017 const char* password = "PASSWORD_HERE"; 0018 0019 unsigned long startTime; 0020 WiFiServer server(80); 0021 0022 #define TRUE 1 0023 #define FALSE 0 0024 #define DEBUG TRUE 0025 0026 void setup(){ 0027 /* Store data about starting conditions */ 0028 startTime = millis(); 0029 /* Begin the serial communications */ 0030 #if DEBUG == TRUE 0031 Serial.begin(115200); 0032 Serial.println("There is life"); 0033 delay(10); 0034 #endif 0035 /* Turn off WiFi LED */ 0036 wifi_status_led_uninstall(); 0037 /* Stop the WiFi completely dying */ 0038 wifi_set_sleep_type(LIGHT_SLEEP_T); 0039 /* Start the Wifi connection */ 0040 WiFi.begin(ssid, password); 0041 /* Wait until the WiFi is up */ 0042 while(WiFi.status() != WL_CONNECTED){ 0043 delay(500); 0044 /* Display attempt to connect */ 0045 #if DEBUG == TRUE 0046 Serial.println("Connecting..."); 0047 #endif 0048 } 0049 /* Begin the server on the WiFi */ 0050 server.begin(); 0051 /* Display local IP address */ 0052 #if DEBUG == TRUE 0053 Serial.println(WiFi.localIP()); 0054 #endif 0055 } 0056 0057 void loop(){ 0058 /* Wait until we find a client */ 0059 WiFiClient client = server.available(); 0060 /* Make sure we have a valid client */ 0061 if(!client){ 0062 return; 0063 } 0064 /* Wait until the client is available */ 0065 while(!client.available()){ 0066 delay(1); 0067 } 0068 /* Get all data from client */ 0069 client.flush(); 0070 /* Write the page */ 0071 String s = ""; 0072 s += "HTTP/1.1 200 OK"; 0073 s += "\r\n"; 0074 s += "Content-Type: text/html"; 0075 s += "\r\n"; 0076 s += "\r\n"; 0077 s += "<h1>Data</h1>"; 0078 s += " </br>status: alive"; 0079 s += " </br>up_time_ms: "; 0080 s += (millis() - startTime); 0081 s += " </br>os_chip_id: "; 0082 s += system_get_chip_id(); 0083 s += " </br>os_free_heap_size: "; 0084 s += system_get_free_heap_size(); 0085 s += " </br>os_time_us: "; 0086 s += system_get_time(); 0087 s += " </br>os_rtc_us: "; 0088 s += system_get_rtc_time(); 0089 s += " </br>os_boot_time: "; 0090 s += system_get_boot_version(); 0091 /* Output to client and then close */ 0092 client.print(s); 0093 delay(1); 0094 client.stop(); 0095 }
Experience:
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.
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.