Índice:

Calendário de parede inteligente: 5 etapas
Calendário de parede inteligente: 5 etapas

Vídeo: Calendário de parede inteligente: 5 etapas

Vídeo: Calendário de parede inteligente: 5 etapas
Vídeo: APAGA A LUZ - MC Davi, MC Ryan SP, MC Don Juan, MC Pedrinho, Gaab, Jottapê, MC G15 e MC Menor Da VG 2024, Julho
Anonim
Smart Wall Calendar
Smart Wall Calendar

Minha esposa e eu tínhamos calendários de parede de papel clássicos, nos quais marcávamos datas importantes. Também usamos o Google Agenda em nossos smartphones para marcar eventos, então isso significava trabalho duplo. Então decidi construir algum tipo de calendário de parede inteligente, que exibirá nossos lembretes, eventos e alguns outros dados. Como tenho várias peças eletrônicas antigas por aí, meu objetivo era reutilizá-las o máximo possível e construir o calendário com o menor custo possível.

Neste tutorial, vou mostrar a você como construir um calendário de parede inteligente, exibindo eventos de várias contas do Google. Ele também exibirá a hora, data, clima, temperatura e algumas informações adicionais. Ele será alimentado por um computador Raspberry Pi com um sensor de movimento PIR (Passive Infrared Sensor) conectado a ele, de modo que a tela ligue quando for detectado movimento na sala, mas desligue após alguns minutos de inatividade. Este tutorial é baseado em vários outros tutoriais que encontrei na internet e irei fornecer os links deles para melhor compreensão. Alguns conhecimentos básicos de programação são necessários (HTML, Python, …).

Etapa 1: O Hardware

Como mencionei antes, tentei reutilizar o máximo de peças eletrônicas antigas para manter os custos baixos. Porém alguns itens eu tive que comprar, então vou listar tudo o que é necessário para a construção.

- Um kit Raspberry Pi. Inicialmente usei meu antigo modelo 2 de algum outro projeto. Funcionou, mas a edição e o recarregamento da página da web levaram muito tempo, então, eventualmente, troquei para o modelo 3, que funciona com mais fluência https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = framboesa + pi + kit & _sacat = 0

- Ecrã LCD. Usei a tela do meu laptop antigo, então só precisei comprar placa de driver LVDS para ela e a fonte de alimentação https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ driver + LVDS + placa & _sacat = 0

- Caixa de armazenamento de plástico para os eletrônicos

- Sensor de movimento infravermelho passivo

- Sensor de temperatura / umidade AM2302

- Fichário deslizante de plástico preto para moldura de LCD

- Vários cabos (HDMI, 5,5 mm para alimentação DC, cabos de jumper da placa de ensaio sem solda, …)

Etapa 2: Criação do display LCD

Criação do display LCD
Criação do display LCD
Criação do display LCD
Criação do display LCD
Criação do display LCD
Criação do display LCD

Usei a tela LCD do meu velho laptop obsoleto. Existem vários tutoriais sobre como fazer isso, eu segui este:

www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/

Desmontei a tampa do meu antigo laptop, tirei o display LCD e encomendei a placa de driver LVDS correta. Forneci ao vendedor o código do produto, que pode ser encontrado no verso do LCD, no meu caso é LP171WE3 (TL) (A2) - veja a etiqueta inferior direita na última foto, e então ele me enviou o LVDS apropriado. Observe que você também precisará da fonte de alimentação para o monitor, portanto, peça ao vendedor para enviá-la também. Eu também comprei uma bela caixa de plástico de 14,5 × 7,5 × 2 cm para caber bem na placa do driver e fixá-la na parte de trás do LCD.

Agora o display LCD tem moldura metálica, o que não parece bonito. Inicialmente, pintei de preto com spray, mas a tinta começou a descascar. Então, peguei quatro fichários de plástico preto, que são normalmente usados para encadernar folhas de papel, aparei-os de acordo e prendi-os para cobrir a moldura. Isso parecia bom, então eu conectei todos os cabos, conectei HDMI no meu velho Raspberry Pi e Voila - funcionou! Havia uma imagem sendo exibida na tela, então eu estava pronto para passar para a próxima etapa - quais informações mostrar na tela e como mostrá-las.

Etapa 3: Configurando o software

Quando estava procurando na internet por algumas pistas de como construir um calendário, me inspirei nesta página https://dakboard.com/site. Eles fornecem o produto acabado (o monitor, o computador e o software de trabalho), mas também têm um excelente tutorial para solução DIY (https://blog.dakboard.com/diy-wall-display/). Recomendo que você siga este tutorial, pelo menos na primeira parte com as instruções de preparação e configuração do sistema no Raspberry, para que o navegador carregue automaticamente a página desejada na inicialização.

Funcionou bem, porém eu estava procurando alguma solução, que pudesse ser mais customizada de acordo com meus desejos. Decidi configurar meu próprio servidor web e criar uma página web, que mostrará informações adicionais além do calendário. Eu escolhi o Wordpress.org, porque é bem documentado e tem um bom suporte e uma grande comunidade para ajudá-lo. Aqui está o tutorial sobre como instalar o Wordpress no Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Com o Wordpress instalado, era hora de projetar minha página inicial. Você pode usar um dos muitos temas fornecidos ou criar do zero. De qualquer forma, algum conhecimento de programação HTML é necessário para isso.

Projetei minha página, de modo que no lado esquerdo a agenda seja mostrada (https://sl.wordpress.org/plugins/google-calendar-events/), enquanto no lado direito a hora e a data são mostradas (https://www.timeanddate.com/clocks/free.html e https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). A previsão do tempo está nesta página (https://www.1a-vreme.si/vremensko-okno/), que fornece widget de previsão para cidades eslovenas, mas acho que widgets para outros países também podem ser encontrados na internet. A temperatura é coletada usando o sensor AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), conforme explicado no final deste capítulo. Na parte inferior está um cronômetro simples de contagem regressiva diária, que mostra quantos dias faltam para algum evento (interessante para meus filhos saber, quantos dias eles terão que esperar por algo). No canto superior direito está o plug-in MetaSlider (https://wordpress.org/plugins/ml-slider/), que desliza aleatoriamente para fotos selecionadas da minha família. Além disso, usei o plugin Background Slider (https://sl.wordpress.org/plugins/background-slider-master/) para me mostrar algumas imagens aleatórias para um plano de fundo mais bonito.

Como mencionado antes, a temperatura interna é coletada usando o sensor AM2302. Existem muitos tutoriais sobre como obter temperatura, eu segui este: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Posteriormente, movi este sensor para outro Raspberry Pi com Home Assistant em execução, porque é mais fácil ler e publicar valores usando seu componente DHT Sensor (https://www.home-assistant.io/components/sensor.dht/). O Home Assistant também pode coletar a temperatura externa usando vários componentes climáticos, usei o componente YR.no (https://www.home-assistant.io/components/sensor.yr/). Com isso, escrevi um script de automação para coletar a temperatura interna / externa desses componentes e gravá-los em um arquivo de texto, que é então exibido no meu calendário de parede. Para obter mais informações sobre o Home Assistant, consulte a página inicial (https://www.home-assistant.io/).

Etapa 4: opcional - desligando a tela

Agora temos nosso calendário configurado e funcionando, do jeito que gostamos. Mas não queremos que a tela fique ligada 24 horas por dia, 7 dias por semana. Só queremos que continue quando alguém estiver em casa. Além disso, não queremos que ele seja ligado no meio da noite, quando vamos ao banheiro, está muito claro! Então, vamos anexar um sensor infravermelho para notar quando alguém está parado na frente dele e adicionar alguns limites de tempo, quando ele deve ligar.

Por favor, note que minhas habilidades de programação são bastante limitadas, então o seguinte não poderia ser o ideal, já que eu escolhi de vários fóruns e tutoriais online, mas essencialmente funciona. Ainda assim, qualquer recomendação ainda é bem-vinda. Primeiro, começaremos com o teste para ligar / desligar o monitor manualmente. Para isso, vamos criar dois arquivos (por exemplo monitor_on.sh e monitor_off.sh) e escrever algum código nele. A maneira mais fácil de fazer isso é fazer login no Raspberry usando SSH e digitar

sudo nano monitor_on.sh

e digite o seguinte código

tvservice --preferred;

startx / usr / bin / graphical_launcher `fgconsole`

Pressione CTRL + X para salvar e sair, em seguida, crie o segundo arquivo

sudo nano monitor_off.sh

e digite o seguinte código

tvservice --off;

Novamente, pressione CTRL + X para salvar e sair. Torne esses arquivos recém-criados executáveis:

sudo chmod + x monitor_on.sh

sudo chmod + x monitor_off.sh

Agora, para testar se esses comandos estão funcionando, digite

sudo./monitor_off.sh

sudo./monitor_on.sh

O monitor deve agora desligar e ligar de acordo. Eu percebi que no Raspberry Pi 2 demorou quase 10 segundos para o monitor ligar. No Raspberry Pi 3, leva de 1 a 2 segundos. Em seguida, conectaremos um sensor infravermelho, que acionará esses scripts. Novamente, existem muitos tutoriais sobre como configurar Raspberry Pi e PIR, eu segui este: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Basicamente, crie um arquivo usando o editor nano (por exemplo motion_sensor.py) e digite o código Python apropriado nele. Abaixo está o exemplo do meu arquivo:

import RPi. GPIO as GPIOimport timeimport sysimport subprocessimport datetime as dtimport osGPIO.setwarnings (False) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIO. IN) #PIRturned_off = Falselast_ time.time () SHUTOFF_DELAY = 180 # secondswhile True: i = GPIO.input (17) if i == 0: #Quando a saída do sensor de movimento é BAIXA, desligue o monitor se não estiver desligado e time.time ()> (last_motion_time + SHUTOFF_DELAY): print "Sem intrusos", iturned_off = Truetime.sleep (1) subprocess.call (['/ home / pi / monitor_off.sh'], shell = True) elif i == 1: #Quando saída do sensor de movimento estiver ALTO, ligue o monitor ONprint "Intruso detectado", itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () se turn_off e dt.datetime.now (). hour> 5 e dt.datetime. now (). hour <23: Turn_off = Falsesubprocess.call (['/ home / pi / monitor_on.sh'], shell = True) if _name_ == '_main _': try: main () except KeyboardInterrupt: GPIO.cleanup ()

Observe que “GPIO.setup (17, GPIO. IN)“indica que o pino de saída do PIR está conectado ao pino 17 no Raspberry Pi. Qual pino depende se você definir GPIO.setmode (GPIO. BOARD) ou GPIO.setmode (GPIO. BCM). A diferença é explicada aqui: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Eu tenho # na frente de GPIO. BOARD, então ele é ignorado e GPIO. BCM é usado.

Observe a linha

SHUTOFF_DELAY = 180 #segundos

Aqui é declarado quanto tempo o monitor ficou ligado desde que o último movimento foi detectado, antes de ser desligado. Isso é útil porque não quero que o monitor desligue / ligue constantemente quando eu passar por ele, mas quero mantê-lo ligado por algum tempo, antes de desligar. Eu escolhi o intervalo de 180 segundos, para que o monitor desligue cerca de 3 minutos após o último movimento ser detectado.

Finalmente, esta linha

se desligado e dt.datetime.now (). hora> 6 e dt.datetime.now (). hora <23:

afirma que o monitor só liga entre 6h e 23h, por isso não me perturba durante a noite. As linhas

imprimir "Sem intrusos", i

e

imprimir "Intruso detectado", i

são apenas para testar o script, você pode excluí-los mais tarde, quando o tiver funcionando. Agora teste o script:

sudo python motion_sensor.py

Você deve ver as mensagens “Intruder Detectado”, se você acenar acima do sensor, caso contrário, será “Sem intrusos”. Quando este script for testado e estiver funcionando, configure-o para iniciar na inicialização:

sudo nano ~ /.config / lxsession / LXDE-pi / autostart

e adicione a seguinte linha

@sudo / usr / bin / python /home/pi/motion_sensor.py

Claro, você deve especificar o nome de arquivo correto do script Python que você criou.

Etapa 5: pendure o calendário

Com tudo configurado, é hora de pendurar o calendário na parede!

Inicialmente, estava pensando em esconder Raspberry Pi atrás do display LCD, para que apenas um cabo (alimentação DC) fosse necessário. Mas como o Raspberry funciona com 5V e o display LCD com 12V, eu precisaria de um transformador adicional. Além disso, a caixa do Raspberry é bastante grossa, o que significa que o LCD ficaria cerca de 3 centímetros da parede. Então, abandonei isso e deixei apenas os componentes eletrônicos do LCD atrás do LCD, de modo que agora está a menos de 1 centímetro de distância da parede. Adquiri dois cabos de 5 metros de comprimento, um HDMI e outro de 5,5 mm para fonte de alimentação DC. Ambos os cabos são brancos, como a parede, o que significa que eles não se destacam muito. Eu coloquei o LCD na parede e coloquei o Raspberry em cima da geladeira na parede oposta, então ele está basicamente escondido, mas ainda facilmente acessível.

Recomendado: