Manual
do
Maker
.
com
Devido ao frenesi que o assunto tem causado, resolvi fazer um comparativo de temperatura do Raspberry 1, 3 e 4. O Raspberry Pi 1 utilizo como meu servidor DNS, sem dissipadores. O Raspberry Pi 3 utilizei ele primeiramente sem dissipador, posteriormente adicionei e fiz um novo teste. O Raspberry Pi 4 eu liguei apenas uma vez sem dissipador. E acho que você ficará satisfeito com minhas considerações. Mas já adianto que a imagem de destaque é pra chamar a atenção, os valores foram colocados de propósito apenas para o screenshot. Os valores reais estão dispostos mais adiante.
Ok, não é um programa para fazer benchmark, a não ser se for para ver o "desempenho" de aquecimento. Não seria tão legal se fosse apenas abrir terminais por SSH e ficar comparando a temperatura, certo? Por essa razão, dediquei um punhado de horas para desenvolver esse programa, disponível no github do blog.
Nele, utilizo diversos recursos já mostrados em outros artigos relacionados a Qt; MQTT, QML, Quick, uma classe C++ para interagir com o sistema.
O delegate é utilizado para encapsular um objeto, o que me faz lembrar muito uma classe. O problema é quando o objeto é encapsulado, suas propriedades não podem mais ser manipuladas externamente por funções. Daí eu criei esse termômetro analógico, instanciei e quando fui interagir, me deparei com esse problema:
listElement: cannot use script for property value qml
Ao procurar no Google, encontrei apenas algumas referências semelhantes na primeira página. Foi bastante preocupante, principalmente porque em um dos lugares havia uma citação de que seria uma falha no comportamento e que seria corrigido em versões futuras. As soluções paliativas (chamadas "workaround" ou em português, "gambiarra") era demasiado feio. Preferi usar a lógica do dito popular: "Se a montanha não vai a Maomé...". Invés de tentar acessar o conteúdo do encapsulamento, fiz o próprio elemento buscar suas referências externamente. Essa foi a ideia desde o começo, mas precisava ser provada.
Dentro do objeto (chamado de "Clock.qml") tem um timer. Nesse timer fiz os testes:
function timeChanged() {
//Consigo identificar qual das instâncias é esse objeto? - SIM
//cityLabel.text = shift == 0.02 ? "RPi 3 Joia" : city
//consigo acessar o componente do objeto raiz? - SIM
//console.log(rpi1val.text)
//Consigo modificar o componente do objeto raiz? - SIM
//rpi1val.text = "batata"
//console.log(rpi1val.text)
//Então atribuo o valor do respectivo componente externo ao label...
rawValue = cityLabel.text == "RPi 1" ? rpi1val.text + grausCelsius : (cityLabel.text == "RPi 3" ? rpi3val.text + grausCelsius : rpi4val.text + grausCelsius)
//...e agora converto pra unidade de medida proporcional ao grau.
//console.log(rawValue.split(" ")[0])
measurement.text = rawValue
actualPressure = tara+parseInt(rawValue.split(" ")[0]) * 3.375
}
Precisei fazer testes para comprovar a ideia. Essa é minha recomendação; não tenha medo ou preguiça de experimentar, basta ter backup.
Apenas para esclarecer o final do código acima, 3.375 é a proporção de 1 grau de temperatura em grau radiano. Para ficar mais claro, cada 1 grau, o ponteiro deve se movimentar 3.375 graus. Para chegar nesse valor, dividi o raio que defini como área util pelo número de pontos desejados. No caso, 270 graus dividido por 80 pontos. O desenho eu fiz no QCAD (free ou pago), senão seria impossível acertar os pontos utilizando programas como Gimp e afins.
Também você vai encontrar diversas loucuras no código, porque estou implementando um projeto de pressão em uma cópia bastante diferente desse código, mas deixei algumas referências. Além disso, extraí o código que monta o mostrador de um exemplo com relógio da própria IDE do QtCreator, por isso o arquivo do mostrador de temperatura se chama Clock.qml e o arquivo possui variáveis como actualPressure e tara, além de InternationalTime e hours. Nada que em meia hora não limpasse, mas não quero passar meia hora limpando código.
Feito isso, criei os objectName para cada um dos 3 componentes de texto criados para interagir com o gráfico, de modo que ele pode ser lido a partir do encapsulamento e pode ser alimentado a partir do C++, como descrito nesse artigo.
Por fim, coloquei o broker MQTT no meu notebook e envio os valores a partir dos Raspberry, utilizando o cliente Mosquitto.
Na documentação oficial está disposta a temperatura de operação, sendo que cada componente tem uma range diferente. O LAN9514 tem uma faixa de operação de 0 à 70 graus, enquanto o processador trabalha de -40 à 85 graus. Também da documentação, "não é necessário utilizar dissipadores dentro dessa faixa de operação, pois o chip usado é equivalente a um utilizado em smartphones e não deve esquentar a ponto de requerer refrigeração". Talvez não seja necessário lá na Inglaterra, mas aqui é Brasil, hum?
Defini alguns poucos testes, mas suficientes para que você tire suas conclusões. Nos Raspberry instalei o cliente Mosquitto para publicar por linha de comando, então usei as credenciais padrão de laboratório que disponho nos artigos:
while true; do
mosquitto_pub -h 192.168.1.200 -t /raspberry/rpi1 -u dobitaobyte -P fsjmr112 -m $(vcgencmd measure_temp|cut -f2 -d=|cut -f1 -d\') -i rpi1;
sleep 1;
done
No broker MQTT criei o tópico /raspberry/# para leitura e escrita. lembre-se de trocar as credenciais, se não estiver montando um ambiente idêntico ao meu. Além disso, mude o client id de cada um deles.
No momento do comparativo de temperatura, a temperatura ambiente estava em 22 graus. Isso é importante, pois a dissipação do componente depende do meio para ter eficiência. Se estivermos em um ambiente de 40 graus, jamais o processador estará rodando à 40 graus.
No primeiro cenário, faço o comparativo de temperatura em stand by dos 3 Raspberry. Também levo em consideração a temperatura ambiente, que obviamente influencia como um todo. A temperatura ambiente nesse momento é de 22 graus.
Nesse cenário o Raspberry Pi 3 está sem dissipação. O Raspberry Pi 4 já está sendo dissipado. O Raspberry Pi 1 não tem e nem terá dissipação, mas não que não fosse necessário.
Repare agora na temperatura do Raspberry Pi 3 sem dissipador.
O Raspberry Pi 1 já está fora da jogada nesse ponto. Ele é meu DNS, está sem dissipador e não vale o gasto.
Nesse cenário, faço uma compilação grande utilizando os 4 núcleos de uma vez no Raspberry Pi 3, já com dissipadores. Como não tenho o ambiente para compilação pronto no Raspberry Pi 4, fiz a instalação de um bocado de pacotes, que implica em IO e processamento.
O Raspberry Pi 3 processando ficou com a temperatura bem menor do que em stand by, e é dissipação passiva! Já o Raspberry 4 ficou bem próximo, variando entre 39 e 40 graus. Enfatizo que o Raspberry Pi 4 está utilizando dissipadores e cooler.
Não vou fazer o terceiro cenário por preguiça, mas futuramente mostro como ficou a temperatura utilizando a GPU de ambas. Esse teste eu realmente acho que vai dar uma diferença significativa na temperatura, mas não quero fazer machine learning agora, seria trabalho demais para um artigo (considerando que já utilizei várias coisas e fiz vários testes pra chegar nisso).
Na Raspberry Pi 1, a temperatura de operação está na média, rodando apenas o servidor DNS, portanto não deverá ser algo a se preocupar (como não foi desde o surgimento do Raspberry). Já para a Raspberry Pi 3, passei a me preocupar com a dissipação porque reparei o quanto a temperatura estava subindo em um dia quente e quando utilizo para visão computacional e machine learning, aí a temperatura "deve" ir às alturas. Outra coisa importante a considerar é que o dissipador não é um frigobar. Ele serve para ajudar a dissipar a temperatura para o ambiente; a temperatura cairá consideravelmente, mas é importante que ele seja eficiente a ponto de retomar o mais rápido possível um nível padrào de temperatura.
A Raspberry Pi 4, que vem sendo motivo de "desmaios" não é tão mal quanto pintam. Sua temperatura se eleva sim, mas temos um poder muito maior em relação às versões anteriores, principalmente em relação à GPU. Usar dissipadores é uma boa prática, deixa a placa mais bonita e podemos utilizá-la com mais tranquilidade. Resumidamente, o Raspberry Pi 4 trabalha em temperatura padrão em relação às outras versões, tendo uma boa dissipação.
Essa versão é a mais barata da série 3, tendo algumas diferenças da versão 3B+. Visite o site da Curto Circuito.
Essa versão é a última da série 3, contando com recursos como PoE, ethernet Gigabit, blindagem do rádio e preço um pouco superior. Visite o site da Saravati.
O Raspberry Pi 4B está à venda na MASUGUX. Essa é a versão top, 4GB de RAM (para nunca mais ter que pensar em swap) e já vem com um kit de dissipação.
Esse case serve para a versão 2 e 3 do Raspberry. Ele é um case dissipador e realmente bastante efetivo, como pôde ser visto. Esse case está disponível em nosso novo parceiro, Kleber, que disponibiliza um link com frete gratis e um link com frete pago .
Não tem como fazer um artigo desse sem vídeo, não é mesmo?
O vídeo estará disponível em nosso canal. Se já é inscrito, pode ter recebido notificação (ou ainda eu posso não ter publicado, difícil sincronizar isso). Se não é inscrito, aproveite para se inscrever e clique no sininho para receber notificações!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.