Timer Intranet para Controle de Forno com Raspberry Pi

Postado em Atualizado em

Versão DRAFTíssima - em escrita

Este é um timer para controlar o forno elétrico da minha casa. Ele pode ser controlado tanto localmente, com botões de controle de tempo de início e de desligamento usando Rotary Sensors como também via Intranet.

Componentes

  1. Raspberry Pi2 (não é necessário um Pi3 novo – aproveite um Pi velho jogado por aí…)
  2. Fonte de alimentação 5V para RPi (a simples, de 2A está de excelente tamanho)
  3. Display LCD 16×2 para mostrar IP e status do timer e mostrar o ajuste do tempo – http://lista.mercadolivre.com.br/display-lcd-16×2#D%5BA:display-lcd-16×2%5D
    lcd
  4. Relê simples de 1 canal – http://lista.mercadolivre.com.br/rel%C3%AA-1-canal#D%5BA:rel%C3%AA-1-canal%5D
  5. 2 Módulos Encoders Rotativos para ajustar o tempo de ligação e o tempo de assar – http://lista.mercadolivre.com.br/rotary-sensor#D%5BA:rotary-sensor%5D
    modulo-encoder-rotativo-rotary-sensor-arduino-pic-d_nq_np_227701-mlb20385254672_082015-f
  6. Contator bipolar simples ou 2na+2nf para ligar em cascata com o relê simples e ligar/desligar de fato o forno
    1. http://lista.mercadolivre.com.br/contator-bipolar#D%5BA:contator-bipolar%5D
    2. http://www.jng.com.br/produtos-detalhes.asp?idprod=40
    3. http://www.jng.com.br/upload/download/%7B4F49757C-72F9-4385-B15E-7D0784FA1D6C%7D_39%20-%20Catalogo%202016%20Contatores%20-%20BR.pdf
    4. http://lista.mercadolivre.com.br/contator-2na-2nf#D%5BA:contator-2na-2nf%5D
      contator-bipolar-hx20-32-32a-220v-jng-d_nq_np_397011-mlb20465733210_102015-f

Alternativa: Um terceiro rotary encoder para ajustar o tempo de espera pelo aquecimento do forno para emitir um sinal sonoro/sinal via web para indicar que aqueceu e chamar o cozinheiro para colocar a comida no forno.

Background

Rotary Encoders

Uma excelente explicação de como funcionam há aqui: https://www.modmypi.com/blog/how-to-use-a-rotary-encoder-with-the-raspberry-pi

1-click

Os exemplos dessa página não mostram o modelo que nós usamo sna nossa construção, mas os princípios são os mesmos.

Configuração do Pi

Desabilitando a UART

Se você está usando um RPi2 velho com um cabeçote de 26 pinos apenas, dependendo do que for pendurar nele, vai necessitar de todos os GPIOs, inclusive os GPIOs da UART: GPIO 14 (TxD) (pino 8 do cabeçote) e GPIO 15 (RxD) (pino 10 do cabeçote). No Raspbian eles estão por default configurados para, ao bootar, imediatamente abrir uma interface serial para acesso ao Pi. Isso significa que TxD vai ter sinal logo após o boot e bagunçar tudo, principalmente se você ligou um relê ali. Para evitar que isso aconteça, você tem de desabilitar o módulo de comunicação serial do Kernel.

Faça isso chamando raspi-config como superusuário:

sudo raspi-config

e seguindo as telas abaixo, indo para Interfacing Options -> P6 Serial:

1. Vá para Interfacing Options:

raspiconfig1

2. Vá para P6 Serial:

raspiconfig2

Ali, desabilite toda a comunicação serial. As outras interfaces (SPI, I2C e 1-Wire) que vão usar a GPIOs 2, 3, 7, 8, 9, 10, 11) estão desabilitadas por padrão e você não necessita mexer.

Wiring/Conexões

Pinagem

Existem quatro padrões de pinagem. Abaixo a tabela de equivalência para o cabeçote do RPi2:

gpio1

LCD Display

Para poder instalar o display no forno, mas deixar o RPi longe do calor, usei um fio CAT6 de 1,5m (pinagem em BCM GPIO):

  • 5V: Laranja (pintado de vermelho na figura)
  • GND: Marrom
  • Enable: Azul – Pi pin 22
  • RS: Verde – Pi pin 27 (or 21 on older revision Pi’s)
  • D4: Laranja claro – Pi pin 25
  • D5: Verde claro – Pi pin 24
  • D6: Azul claro – Pi pin 23
  • D7: Marrom claro – Pi pin 18

Detalhes:

  • V0 (contraste do display) está ligado a GND com um resistor de 2,2 k. Se ficar ruim, substitua por 1 k ou 4,7 k. Ninguém vai mexer nisso depois que um valor bom for encontrado, não faz sentido colocar um trimpot aqui, como sugerem a maioria das instruções.
  • RW está ligado a GND (modo de escrita apenas)
  • GND e K estão conectados (o fio GND sai de K)
  • VDD (+5V alimentação do LCD) está ligado a A (+5V luz de fundo) que está ligado a +5V no RPi

temp-forno-inf

Ligando os Rotary Encoders

A coloração do CAT6 que eu usei foi a seguinte (pinagem em BCM e Wiring Pi):

Rotary 0 (Timer para Ligar) – Botão verde

  • GND: Marrom escuro (comum com Display)
  • 5V: Laranja (comum com Display)
  • SW: Azul escuro – Pi pin 17 (wiring Pi pin 0)
  • DT: Azul claro – Pi pin7 (wiringPi 10) (CE1 = SPI chip select 1)
  • CLK: Laranja claro – Pi pin8 (wiringPi 11) (CE0 = SPI chip select 0)

Rotary 1 (Tempo de Cozimento) – Botão laranja

  • GND: Marrom escuro (comum com Display)
  • 5V: Laranja (comum com Display)
  • SW: Verde escuro – Pi pin 4 (wiring Pi pin 7)
  • DT: Verde claro – Pi pin 9 (wiring Pi pin 13) (MISO)
  • CLK: Marrom claro – Pi pin 11 (wiring Pi pin 14) (SCLK)

O que não ligar?

Pi pin 2 (wiring Pi pin 8) (SDA) and Pi pin 3 (wiring Pi pin 9) (SCL) pins have external 1k8 pull-up resistors connected. This is indeed because they are intended for I²C usage (which requires them). Unfortunately, since they are external, they can’t be disabled in software.

Having pull-up resistors means that default state of the pin in HIGH, unless they are pulled to ground. And this is exactly the problem you described.

This may be seen as a disadvantage but for buttons, this can be actually useful. This means that you don’t have to use any additional pull-up/pull-down resistors with those pins (but you will have to use inverse logic – 1 when button is not pushed and 0 whet it is).

Poderia ter ligado SW dos rotaries ali, mas não testei.

Ligando o Relê de Cascateamento do Contator

Para controlar o contator vamos necessitar de uma corrente de 220V. Para isso vamos cascatear um relê de 5V, ligado a um GPIO para que ele controle 220V que vão ligar/desligar o contator.

  • GND: Azul (ligado no GND do pino físico 14 do RPi)
  • 5V: Roxo (ligado no pino físico 2 do RPi)
  • Signal: Verde escuro – Pi pin 10 (wiring Pi 12) (MOSI)

Como ligar o CAT6 nos terminais?

Para colocar terminais no CAT6 usei um alicate de crimpagem para conectores e terminais 1×1 avulsos com protetor plástico:

temp-forno-alicate

Snippets de Código para Construir

Display 16×2 com RPi

Servidor Python para o RPi com a automação usando WiringPi

  • Ver piscina-server.py

Letras Grandes para Display 16×2 em Python

Preparando o Raspberry Pi

Para instalar o WiringPi e WiringPi-Python veja aqui: https://github.com/WiringPi/WiringPi-Python

sudo apt-get update
sudo apt-get upgrade

#Instalar python-dev para poder recomplar o Python se necessário
sudo apt-get install python-dev

#Instalar git e coisas do Python
sudo apt-get install build-essential python-smbus python-pip git

#Instal GPIO nativo do Python
sudo pip install RPi.GPIO

#Instalar Adafruit CharLCD e GPIO
cd ~
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
cd Adafruit_Python_CharLCD
sudo python setup.py install

#Instalar Gaugette para rotary encoders e switches
cd ~
git clone https://github.com/guyc/py-gaugette.git
cd py-gaugette/
python setup.py build
python setup.py install

#Instalar WiringPi e WiringPi-Python
sudo apt-get install python-dev python-setuptools swig
cd
git clone --recursive https://github.com/WiringPi/WiringPi-Python.git
cd WiringPi-Python
git submodule update --init
cd WiringPi
sudo ./build
cd ..
swig2.0 -python wiringpi.i
sudo python setup.py install

#Instalar LCDProc 
cd ~ 
wget http://sourceforge.net/projects/lcdproc/files/lcdproc/0.5.7/lcdproc-0.5.7.tar.gz/download -O lcdproc.tar.gz 
tar xzf lcdproc.tar.gz 
cd lcdproc-0.5.7 
./configure --help 
#hd44780 eh o display 16x2 ligado em GPIO 
./configure --enable-seamless-hbars --enable-drivers=hd44780 make 
sudo make install 
#Arrume a arquivo de configuracao para suportar o hd44780 
sudo nano /usr/local/etc/LCDd.conf 
#Iniciar o servidor LCDProc 
sudo LCDd 
#Instalar as libs Python 
sudo apt-get install python-setuptools 
cd ~ 
git clone https://github.com/jinglemansweep/lcdproc.git 
sudo easy_install lcdproc

Veja em  https://www.raspberrypi.org/forums/viewtopic.php?t=109321&p=751602  como ligar o HD44780 LCD display usando GPIO. A pinagem que você usou deve ser listada em LCDd.conf: arrume o arquivo, lá tem uma pinagem padrão que não é necessariamente a que nós usamos e que está no desenho acima.

Potência Máxima na Saída USB

Para ligar as caixas de som alimentadas por USB é aconselhável configurar o RPi para poder usar até um Ampére de corrente na saída USB. Veja aqui:

 

 

 

Deixe um comentário