Energia solar é um assunto muito atual, especialmente depois de 2012 quando o governo
Brasileiro regulamentou a injeção de energia na rede elétrica (resolução normativa nº
482/2012). Isto fez surgirem milhares de empresas especializadas em projeto e execução de
parques solares residenciais, comerciais e até em grandes indústrias.
Hoje estima-se que 13,1% da nossa matriz vem da fonte solar (
https://www.portalsolar.com.br/energia-solar-no-brasil.html), o que representa a segunda maior fonte (atrás apenas da hídrica). Vamos entender um pouco mais sobre painéis solares, a base desta indústria?
Um painel solar é composto por módulos fotovoltaicos, que por sua vez é composto por células
fotovoltaicas. Estes conjuntos podem estar arranjados em série ou paralelo, ou ainda dos dois
jeitos conforme a especificação comercial necessária. Cada célula de silício é capaz de
fornecer até 0,7V, tensão característica deste tipo de material.
Fonte:
https://www.energiatotal.com.br/como-funciona-o-painel-solar-fotovoltaico-e-do-que-sao-feitosJá a corrente fornecida vai depender da construção física do módulo e também do nível de
irradiação solar. Cada célula é por sua vez um conjunto de junções PN de Silício dopado com
alguma impureza.
Fonte:
https://www.neosolar.com.br/aprenda/saiba-mais/placa-solar-fotovoltaica
Perfil e curva de irradiação solar
Cada posição/localização do planeta possui um diferente perfil de irradiação solar médio anual,
uma curva similar à esta obtida abaixo. Observe que esta curva é para um dia praticamente
sem nuvens, com incidência solar contínua.
Fonte:
https://www.researchgate.net/figure/Grafico-da-aproximacao-da-irradiacao-solar-no-dia-13-01-2Observe também que a máxima irradiação ocorreu próximo das 13h30, o que depende do fuso
horário local. Diferentes longitudes tem diferentes horários de máxima irradiação. A irradiação
solar é medida em Watts por metro quadrado, valor que é proveniente do sol e na nossa
atmosfera é de 1361 W/m2, fonte:
https://www.gov.br/pt-br/servicos/obter-o-irradiancia-solar-total-inpetsi#:~:text=Essa%20radia%C3%A7%C3%A3o%20afeta%20o%20clima,aproximadamente%20%E2%88%BC%201.361%20W%2Fm%C2%B2
Energia luminosa proveniente do sol é formada por fótons, cujo contato com a junção PN da célula solar os transforma em elétrons. E elétrons em movimento geram a corrente elétrica, que pode então ser utilizada para os mais diversos fins.
Fonte:
https://eletronicadepotencia.com/celula-fotovoltaica/Outro conceito importante na área solar é a curva I-V do painel, ela representa a maior tensão
(circuito aberto Voc), maior corrente (curto-circuito Isc) e máxima potência (tensão e corrente
intermediária) de cada painel. É nesta curva que os inversores trabalham a fim de extrair a
máxima potência de cada painel solar.
Fonte:
https://energia3s.com.br/curva-caracteristica-corrente-versus-tensao/
Energia solar no nosso hobby
Nós que temos como hobby (ou somos estudantes de) eletrônica, Arduíno e sistemas
embarcados também podemos utilizar energia solar. Existem no mercado diversos mini painéis
solares com potência de alguns poucos Watts, tensões e correntes variadas.
Fonte:
https://www.biobasedpress.eu/2018/04/small-solar-panels-are-an-affordable-way-to-try-solar-power/
Podemos criar pequenas automações com baixo consumo que fiquem constantemente
energizadas, com ajuda de baterias recarregáveis. Inclusive esta é a base da internet das
coisas (ioT)), dispositivos de processamento descentralizado com baixo consumo de energia,
sendo alimentados por fontes alternativas.
Vamos testar um painel solar?
O painel que vamos testar hoje é este da foto abaixo, dimensional 90x60mm com tensão de
circuito aberto de 6V e corrente de curto-circuito de 150mA. Tranquilo de encontrar no mercado
nacional por um preço baixo (em torno de R$17 no momento da escrita deste artigo).
Fonte: o autor
Observe que ele tem apenas duas conexões, (+) e (-). Um fator importante é que mesmo
mexendo com ele na bancada, com a iluminação disponível já vai haver tensão entre seus
terminais, então cuidado onde você encosta. Ele pode queimar alguns componentes
eletrônicos.
O teste
A ideia do teste é obter o perfil ou curva de irradiância demonstrado acima. Para isso, vamos
conectar o painel à dois resistores de 1k Ohm em série. O terminal entre os resistores vai à
uma entrada analógica de uma placa de ESP32.
Enviaremos os dados obtidos na entrada analógica à nuvem da Adafruit, via protocolo MQTT. O
objetivo do artigo não é focar no MQTT, então não ensinarei como configurar a nuvem da
Adafruit. Porém o código para o ESP32 está logo abaixo. Observe o diagrama esquemático do
sistema, contemplando também um sensor de temperatura BMP180.
Fonte: o autor
O objetivo de usar dois resistores em série com o painel solar é baixar a tensão do mesmo, que
de outro modo poderia passar de 6V. Assim ela pode chegar a 6,6V sem saturar a entrada
analógica do ESP32, que trabalha até 3,3V.
Veja que deste modo nós não vamos estar gerando energia útil, apenas vamos demonstrar que
uma tensão se forma nos terminais do painel solar com a incidência de luz.
O código
O código completo do experimento está abaixo. Você precisa inserir quatro valores: SSID com
o nome do seu WiFi, Pass com a senha do Seu WiFi, Username e Key com os seus dados da
nuvem MQTT Adafruit.
Serão criados dois feeds no site da Adafruit (na sua conta): “temperaturebmp” e “solapanel”.
Nestes feeds será alimentada informação de temperatura atual e tensão do painel solar, a cada
20 segundos.
#include
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/************************* WiFi Access Point *********************************/
#define WLAN_SSID ""
#define WLAN_PASS ""
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
// Using port 8883 for MQTTS
#define AIO_SERVERPORT 8883
// Adafruit IO Account Configuration
// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
#define AIO_USERNAME ""
#define AIO_KEY ""
/************ Global State (you don't need to change this!) ******************/
#include
Adafruit_BMP085 bmp;
// WiFiFlientSecure for SSL/TLS support
WiFiClientSecure client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// io.adafruit.com root CA
const char* adafruitio_root_ca = \
"-----BEGIN CERTIFICATE-----\n"
"MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
"MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
"b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
"DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
"yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
"gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
"DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
"fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
"6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
"PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
"IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
"AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
"BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
"HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
"b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
"HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
"AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
"c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
"ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
"jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
"TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
"7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
"-----END CERTIFICATE-----\n";
/****************************** Feeds ***************************************/
long oldtime;
long oldtimeled;
// Setup afeed called 'test' for publishing.
// Notice MQTT paths for AIO follow the form: /feeds/
Adafruit_MQTT_Publish temperaturebmp = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperaturebmp");
Adafruit_MQTT_Publish solarpanel = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/solarpanel");
/*************************** Sketch Code ************************************/
void setup() {
Serial.begin(115200);
pinMode(15, OUTPUT);
delay(10);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));
// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
delay(1000);
WiFi.begin(WLAN_SSID, WLAN_PASS);
delay(2000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: "); Serial.println(WiFi.localIP());
// Set Adafruit IO's root CA
client.setCACert(adafruitio_root_ca);
}
uint32_t x=0;
void loop() {
if(millis() - oldtimeled > 200){
oldtimeled= millis();
digitalWrite(15, !digitalRead(15));
}
if(millis() - oldtime >= 20000){
oldtime= millis();
// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected). See the MQTT_connect
// function definition further below.
MQTT_connect();
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
// Calculate altitude assuming 'standard' barometric
// pressure of 1013.25 millibar = 101325 Pascal
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
Serial.print("Pressure at sealevel (calculated) = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");
// you can get a more precise measurement of altitude
// if you know the current sea level pressure which will
// vary with weather and such. If it is 1015 millibars
// that is equal to 101500 Pascals.
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(102000));
Serial.println(" meters");
float solarvalue= analogRead(A1) / 1000.00 * 2.00;
Serial.println(solarvalue);
if (! temperaturebmp.publish(bmp.readTemperature())) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
if (! solarpanel.publish(solarvalue)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
Serial.println();
}
}
// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");
}
Fonte:
Baseado no exemplo que a própria Adafruit disponibiliza https://github.com/adafruit/Adafruit_MQTT_Library/tree/master/examples/adafruitio_secure_esp32
O resultado
Veja como montei o protótipo, em uma protoboard simples. Atende bem se não houver movimentos nem muito vento, além do fato de não envolver alta frequência nem alta corrente.
Fonte: o autor
A imagem abaixo ilustra o que obtive ao longo de um pouco mais de três dias de
monitoramento do painel solar. O eixo Y representa tensão em Volts, o X é tempo em dias.
Observe que interessante a tensão passando de 6,5V durante o horário de pico de sol (meio do
dia) e baixando quase que bruscamente no fim do dia.
Próximo aos picos existem também alguns vales, que representam a passagem de nuvens.Isso
é normal, é desta forma mesmo que o painel solar reage às nuvens.
Fonte: o autor
Veja também que esta tensão (passando de 6V) é devido ao painel estar “sem carga”, somente
com 2k Ohm (1k + 1k). Caso estivéssemos consumindo corrente do mesmo, esta tensão
estaria bem mais baixa.
Para finalizar
Painéis solares podem ser muito úteis até mesmo para nós hobbistas e estudantes. Circuitos
de baixo consumo e à bateria podem funcionar continuamente se bem dimensionados (isso fica
para um artigo futuro).
Nosso experimento tirou a curva de irradiância de um pequeno painel solar 90x60mm. Porém
ficou muito parecida à curva de qualquer outro painel, de qualquer tamanho, validando sua
capacidade de produzir energia.
Agora deixo com você, adquira alguns pequenos painéis solares e circuitos conversores
(buk/boost) e faça seus experimentos. Veja até onde você consegue chegar.