Escudo de LCD inteligente para Arduino

Estou familiarizado com a opinião de muitos especialistas técnicos sobre o Arduino e, em certa medida, compartilham sua opinião. No entanto, por exemplo, para automação rápida, essa plataforma é muito útil: ela, como o designer de uma criança, permite montar e programar um dispositivo em algumas horas sem perder tempo em várias "referências indefinidas a __bss_start__" e "Dispositivo não detectado".
Uma vez, para automatizar outra rotina, eu precisava de uma exibição. Folheei o Aliexpress e ainda não consegui encontrar um escudo adequado para Arduno.


Gato para atrair a atenção

Problemas para baixo e para fora iniciados


Então, eu precisava de uma interface de usuário de diálogo e, além disso, rapidamente. (O gato era para atrair atenção, notou-se - funciona.) Como se de propósito, todos os fabricantes sugerissem desenhar manualmente campos de entrada e barras de progresso, programar manipuladores de botões e, em uma palavra, fazer tudo o que eu simplesmente não queria. Surpreendentemente, por que não fornecer uma biblioteca de alto nível que cuide dessas preocupações? Provavelmente em 80% dos casos, todas as tarefas se resumem a uma sequência simples:
  1. Exiba um formulário com campos de entrada.
  2. Aguarde o usuário editar o campo Foo.
  3. Obtenha o novo valor do campo Foo.
  4. Faça algo em troca.

Mas a falta de uma biblioteca não era o único obstáculo. As escassas reservas de ROM do meu Arduino Uno (e a mesma situação com Leonardo, Ethernet, Pro) foram suficientes para armazenar uma imagem na resolução de 128x128 pixels. E não havia mais lugar para o código.
Tendo percorrido uma ampla frente através do Aliexpress, DX e lojas similares, finalmente encontrei, na linguagem dos desenvolvedores de rede, escudos " burros" ou "muito gordos" . Os primeiros não resolvem o problema, mas são baratos. Estes últimos são como um sistema de mísseis antiaéreos, e por essa redundância terá que pagar uma quantia justa. Se eu pudesse colocar os lábios de Nikanor Ivanovich no nariz de Ivan Kuzmich ... Depois de alguma hesitação, decidi preencher essa lacuna de marketing irritante.

O que devemos construir um escudo


Espalhei o tabuleiro, pedi as primeiras amostras para experimentos e tentei.

A ideia gradualmente tomou forma. Portanto, a solução deve ser fácil de usar e sempre barata (sobre o que abaixo):
  • A bordo, a blindagem deve ser um microcontrolador com uma margem de memória para pelo menos duas telas.
  • Para garantir que não haja problemas com a memória, você pode adicionar um slot microSD.
  • Além disso, bem no escudo, você precisa colocar alguns botões.
  • O microcontrolador deve fazer o "trabalho em preto", renderizando os campos do formulário e processando o botão pressionado de forma que, apenas fornecendo energia ao escudo costurado, seja possível folhear os formulários, editar os campos de entrada, colocar um pássaro na caixa de seleção e assim por diante.
  • Arduino : I2C, SPI UART. Arduino; (, ).
  • Arduino GPIO, .
  • , , « Vim, !», , , GTK Glade .




O componente mais básico da blindagem é o módulo de exibição. Tanto o preço quanto as características técnicas do produto dependem da maior extensão possível. Ao procurar um módulo adequado, eu queria comer peixe e andar a cavalo: por um lado, procedi do critério de disponibilidade; por outro lado, o custo do módulo deveria ser mínimo. Basicamente, esses critérios se contradizem: lojas como Terraelectronics, com escritórios em todo o país, ofereciam um certo conjunto de displays coloridos para modelos comuns, mas seus preços eram de 2000 rublos ou mais; por outro lado, havia muitas boas opções no mesmo Aliexpress, mas todos tinham a mesma desvantagem: havia um abismo entre eles e nossos infelizes usuários, em que mais de mil caixas de papelão morreram e cujo comportamento era facilmente previsível,como o comportamento das cotações do petróleo ou do clima.Todos, é claro, entendiam do que se tratava. Então, minha ideia ainda era apenas uma ideia.
Como costuma acontecer, conversas noturnas na cozinha com uma xícara de chá são fatais. Um amigo compartilhou de passagem como ele mudou uma tela quebrada em seu HTC. Descobriu-se que os displays de smartphones, com características indiscutivelmente melhores que os produtos dos catálogos da Terraelectronics, custam duas a três vezes mais barato! Isso foi uma revelação. Depois disso, uma tela foi encontrada com rapidez suficiente, que na Rússia pode ser comprada em quase todas as etapas por um centavo; Foi instalado nos telefones Nokia 2600/2650/3100/3200/5100/5140/6100/6220/6610/7210/7250. (Como se viu mais tarde, redescobri a América, pois essa tela é usada em muitos escudos para o Arduino.) Sua resolução - 128 × 128 pixels - é suficiente para exibir um formulário com três ou quatro campos de entrada.


Envidraçado é melhor do que elogiado


Muitos, provavelmente, ainda não entendem como usar o gadget descrito. Talvez a maneira mais fácil de ilustrar isso seja com duas situações padrão:
  • Temos um termômetro digital, é necessário exibir suas leituras no visor.
  • Existe um servoconversor, você precisa definir os parâmetros de sua operação. Por exemplo, sua posição.

Termômetro

#include <intelcd.h>
#include <OneWire.h>
#include <DallasTemperature.h>
 
//     2 Arduino   1-Wire
#define ONE_WIRE_BUS 2
 
/*************************************************************
*     ,                      * 
*      :                      *
*************************************************************/
//  ,   . 
#define FORM_TERMO 0
//  ,    
#define FIELD_TERMO 0
 
 
//   oneWire     oneWire
OneWire oneWire(ONE_WIRE_BUS); 
//   sensor    
DallasTemperature sensor(&oneWire);
//   lcd   LCD 
InteLCD lcd;
 
void setup(void)
{
    lcd.init(); 
    sensor.begin(); 
}
 
void loop(void)
{
    //   
    sensor.requestTemperatures();
 
    //     
    lcd.update(FORM_TERMO, FIELD_TERMO, sensor.getTempCByIndex(0));
    delay(1000);
}


Servo

#include <InteLCD.h>
#include <Servo.h>
 
#define FORM_SERVO 0
#define FIELD_SERVO 0
 
InteLCD lcd; //   lcd   LCD 
Servo myservo; //   servo   
void lcdEvent(void); //    

void setup(void)
{
    myservo.attach(9); // ,    9 
    lcd.init(); //  lcd
}
 
void loop(void)
{
}
 
void lcdEvent(void)
{
    switch (lcd.event.code) {
        case InteLCD::FIELD_UPDATED:
		//    0  1
		if (lcd.event.formid == FORM_SERVO && lcd.event.fieldid == FIELD_SERVO) 
               {
    	            //      
        	    //      
            	    myservo.write(lcd.event.arg[0]); 
 
    	            //       
        	    delay(15); 
	    	}
 
            break;
    }
}


No final


Na minha opinião, a eletrônica DIY deve se desenvolver para a maior modularidade, onde cada módulo é extremamente simples e completo. Então, quando a criança ergue seu castelo de brinquedos a partir das várias peças de Lego, o usuário deve montar seu dispositivo em tijolos, mas sem usar um martelo e uma lima. Meu escudo é um pequeno passo nessa direção.
Ficarei feliz em ouvir conselhos valiosos e entender quem mais além de mim está sentindo falta de algo tão útil.

Source: https://habr.com/ru/post/pt384363/


All Articles