Clovis Fritzen, Autor em Blog Ryndack Componentes
Rua Jovelina Claudino Buhrer, 440 - São José dos Pinhais - PR (41) 3383-3034
Conhecimento

No artigo de hoje, usaremos um sensor de nível de luz LDR. LDR significa “light dependent resistor”, que é exatamente o que esse sensor faz. É um resistor cuja resistência (entre dois terminais) depende da quantidade de luz que ele recebe.

Resistor LDR 20mm

Segundo essa fonte, sua resistência aumenta com menos luz e diminui com mais luz. A resposta espectral na imagem abaixo mostra que ele é mais sensível à luz verde do que qualquer outra cor. Isso se deve à sua constituição, feita de CdS (Sulfeto de Cádmio).

Gráfico de resposta do resistor LDR
LDRs são considerados dispositivos lentos, com respostas levando entre 2ms e 50ms. É muito
mais lento do que um fotodiodo ou fototransistor, por exemplo. É por isso que você o vê sendo
aplicado principalmente à detecção crepuscular em iluminação pública.
Você poderia, é claro, aplicá-lo para robótica caseira/hobby, como em construções com
Arduíno

O circuito para testes

Implementamos um circuito de teste simples, com o LDR em série com um resistor de 10k
Ohm. Ele é lido pelo Raspberry Pi Pico 2 por meio de uma entrada analógica, A0. Poderia ser
qualquer outra placa com uma entrada analógica, como o Arduino UNO, ESP32, STM32,
família PIC etc.
Ele é fornecido pelos 3,3 V do próprio Pi Pico 2, já que ele consome apenas alguns
miliamperes. Se você fosse usar um Arduino UNO, poderia fornecer ao sensor 5 V sem
problemas. Em sistemas de 3,3 V como o ESP32, é melhor usar 3,3 V.

Circuito com uso de resistor LDR

Código para Arduíno

Como dito antes, a interface de um LDR com um microcontrolador é tão fácil quanto ler uma
entrada analógica. É basicamente o que eu faço no código abaixo, a cada 500 ms (meio
segundo) eu leio a entrada analógica com analogRead(A0).
Então eu imprimo a variável “ldrvalue” no console serial no software Arduino IDE.

Código arduíno para LDR
Um recurso importante a ser lembrado sobre o Raspberry Pi Pico 2 é a capacidade de alterar a
resolução da entrada analógica. Esta é a razão pela qual eu uso analogReadResolution(12),
para definir a resolução para o máximo (12 bits).
Isso significa que podemos ler valores entre 0 e 3,3 V que serão convertidos em inteiros entre 0
e 4095, no monitor serial. Depois de copiar e colar o código acima no seu software Arduino
IDE, conecte seu microcontrolador ao computador via cabo USB.
Em seguida, clique no botão de upload e aguarde um pouco. Você pode então abrir o monitor
serial do IDE, indo em “Ferramentas > Monitor serial” ou Ctrl + Shift + M.

Testando o circuito

Ao abrir o monitor serial ele começará a receber valores, assim como na imagem abaixo.
Cobrindo a face do LDR ou oferecendo mais luz, você pode ver o valor inteiro mudando.

Testando o circuito para resistor LDR
Fiz um vídeo completo sobre o circuito, o código e os testes.
Vídeo sobre o teste: https://www.youtube.com/watch?v=sWoHgWNHI4E

Considerações finais sobre o LDR

O LDR é um sensor super simples e muito útil, capaz de traduzir nível de luz em nível de
resistência elétrica. Apesar de ser “lento” para sistemas mais críticos, ele serve muito bem para
detecção crepuscular (dia/noite) e de nível de luz em aplicações simples.
É também um sensor barato e muito consolidado, fácil de interfacear e ler. O fato de sua
resposta espectral ser diferente para cada cor também o torna interessante, possibilitando uma
aplicação de detecção de cores bem simples.

Clique e confira em nosso site alguns dos sensores LDR disponíveis: https://www.ryndackcomponentes.com.br/catalogsearch/result/?q=ldr

0

Conhecimento

Uma das grandes dificuldades quando você faz um projeto eletrônico, é ter uma fonte fácil, confiável, que não dê problema, e a fonte HiLink é uma ótima opção, pois você pode soldá-la diretamente na sua placa.

Então hoje vamos falar mais sobre o funcionamento dela e seus benefícios. Ela é um pequeno módulo de fonte de alimentação isolado. Alimentado diretamente na rede elétrica ele é capaz de fornecer 3,3V em 1A (~3W) para seus projetos com Arduino e ESP32.

As fontes de alimentação Hi-Link surgiram alguns anos atrás, vindas certamente da China. O site oficial do fabricante é https://www.hlktech.net/ . Estas fontes tomaram grande parte do mercado de fornecimento de energia para projetos maker e DIY (do Inglês “faça você mesmo”). Isso devido à sua disponibilidade (majoritariamente Aliexpress), mas também encontradas no Brasil na loja Ryndack.


No presente artigo faremos testes da fonte sob algumas cargas, sempre medindo tensões e correntes com um multímetro. 


Mecanicamente


A fonte é totalmente encapsulada em plástico, nada do seu circuito eletrônico fica visível. Apenas estão disponíveis quatro terminais: dois para rede elétrica 100-240V e dois para saída (+) e (-). Seu dimensional é um comprimento: 34mm, largura: 30mm e altura: 15mm.


Teste sem carga, medição de ripple


O setup para iniciarmos nossos testes é visto abaixo. Conectaremos a fonte à tomada elétrica 220V diretamente, então sua saída a um multímetro. 



A tensão medida sem carga (somente o multímetro na saída da fonte HiLink) é de 3,94V. Isso é normal pois grande parte da regulação de tensão de fontes chaveadas é proporcionada pelo consumo de corrente. Isto se deve ao fato que a maioria dos circuitos integrados controladores funcionam por corrente, a estabilidade do controle fica melhor. Como o multímetro não é uma carga grande o suficiente, a tensão fica um pouco alta mesmo.



Medindo a saída da fonte HiLink em escala de tensão AC (alternada) observamos um ripple (oscilação) de 2mV, bem baixo e quase imperceptível. O ideal seria observar a forma de onda com osciloscópio, porém não tenho um disponível no momento.


Testes sob carga


Começaremos com um resistor de 470 Ohm/1W como carga, isso daria uma corrente de 7mA. A tensão do HiLink começou em 3,90V e foi caindo até 3,41v após alguns minutos. Agora usaremos como carga um projeto que estou desenvolvendo com ESP8266MOD (ESP12), um velocímetro para bicicleta com display de LEDs.



Observe que na esquerda em cima do diagrama esquemático há um conector de três pinos para um regulador de tensão. É ali que entraremos com os 3,3V da fonte HiLink. O consumo médio deste projeto é de 70mA.

Ao conectar e ligar a fonte HiLink, a tensão foi a 3,5V; estabilizou em 3,39V após uns dois minutos.

Finalmente testamos a fonte 3,3V HiLink com uma carga um pouco maior, um motor destes utilizamos em robótica com Arduino.




Vamos conectá-lo diretamente aos terminais de saída da fonte, + e -. Sua corrente foi medida com um multímetro e chegou a 85mA, enquanto a tensão ficou em 3,36V. Segurando um pouco seu eixo (forçando) a corrente foi a 160mA mas a tensão ficou em 3,36V.

Isto prova que quanto mais corrente você consumir da HiLink, mais regulada e próxima de 3,3V ela vai estar. Lembrando que esta fonte HiLink é capaz de fornecer 1A para a carga, então se ela se regula bem a partir dos 85mA, ótimo sinal.


Mais testes de performance foram realizados por este blog, se você tiver interesse em acompanhar.


Palavras finais


As fontes Hilink podem ser encontradas em várias tensões diferentes, mas todas com as mesmas características de serem alimentadas pela rede elétrica e terem saídas galvanicamente isoladas da mesma.

Nos meus testes a regulação de tensão funcionou melhor com correntes a partir de 70-80mA, indicando que para cargas menores a tensão fica um pouco mais alta do que os prometidos 3,3V. Isso pode ser ruim para alguns microcontroladores de projetos embarcados mais sensíveis.

Não observei aquecimento do encapsulamento nem geração de ruído audível, pontos positivos. Sendo assim, considero essa uma boa opção para utilização em seus projetos.

0

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-feitos

Já 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-2

Observe 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-po
wer/

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.

0