# Trabalho 02
## Universidade de Brasília - FCTE
## Embarcados

### Equipe:

| Nome Completo                | Matrícula |
|-----------------------------|-----------|
| CARLOS EDUARDO MOTA ALVES   | 221022248  |
| IAGO ROCHA SANTOS MARQUES | 211039484  |
| LUCAS GOBBI BERGHOLZ        | 211029441  |
| 	RENAN VIEIRA GUEDES  | 221031363  |

# Introdução

Este trabalho tem como objetivo realizar um estudo teórico-exploratório sobre um teclado embarcado existente, analisando suas funcionalidades, arquitetura eletrônica e tecnologias de comunicação. A partir desse estudo, buscamos compreender como suas principais funções podem ser total ou parcialmente reproduzidas utilizando o ecossistema da ESP32, incluindo botões, varredura de matriz, comunicação Bluetooth e personalização de firmware. O estudo envolve levantamento bibliográfico, análise técnica e a elaboração de um modelo conceitual que poderá servir de base para uma futura implementação prática em laboratório.

# 1 - Descrição do produto

## 1.1 - Definição de Teclado

O teclado é um dispositivo de entrada utilizado para enviar dados e comandos a um sistema computacional através da ativação de teclas. Cada tecla pressionada é convertida em um código (como códigos de varredura, ASCII ou Unicode), que é então interpretado pela CPU ou pelo sistema operacional.

Segundo Stallings (2017):

> "O teclado é um dispositivo de entrada baseado em um conjunto de teclas que, quando pressionadas, enviam ao sistema códigos que representam caracteres ou instruções."  
> — *Stallings, William. **Computer Organization and Architecture: Designing for Performance**. 10ª ed. Pearson, 2017.*

De forma complementar, Tanenbaum e Austin (2013) explicam que dispositivos de entrada como o teclado funcionam como interfaces essenciais entre o usuário e a máquina, convertendo ações físicas em sinais processáveis:

> "Dispositivos como teclados convertem ações físicas em sinais elétricos que podem ser processados pelo computador, funcionando como interface essencial entre o usuário e a máquina."  
> — *Tanenbaum, Andrew S.; Austin, Todd. **Structured Computer Organization**. 6ª ed. Pearson, 2013.*

### Perspectiva Histórica

O artigo **“The History of the Computer Keyboard”** refere que o teclado moderno evoluiu das máquinas de escrever patenteadas por *Christopher Latham Sholes* em 1868 e de suas versões comerciais subsequentes. Além disso, dispositivos como **teletipos** (teletypes/TTY) atuaram como importantes predecessores dos teclados digitais.  
Essa evolução histórica evidencia que, mesmo nos sistemas computacionais contemporâneos, o teclado mantém a função de **interface humano-máquina** para entrada de texto e execução de comandos.

### Funcionalidades

Podemos descrever o teclado como um dispositivo de entrada cuja função principal é permitir que o usuário interaja com um sistema computacional por meio do acionamento de teclas. Herdando sua origem das máquinas de escrever e evoluindo por dispositivos como os teletipos, o teclado moderno tornou-se a principal interface humano-máquina para inserção de texto e execução de comandos. 

Atualmente, para facilitar e ampliar sua funcionalidade principal, os teclados podem incluir recursos adicionais, como teclas programáveis para atalhos, iluminação por LEDs, softwares de configuração, e diferentes layouts físicos e lógicos (como ABNT2 em português ou QWERTY em inglês). Esses fatores permitem que o teclado seja adaptado a diferentes contextos de uso, idiomas, ergonomias e necessidades de produtividade, mantendo sua função essencial de comunicação entre o usuário e o sistema digital.

Descrição detalhada das funcionalidades:

- **Entrada de Dados:** Inserção de texto, símbolos e comandos no sistema.
- **Atalhos e Teclas Programáveis:** Permitem automatizar funções e aumentar produtividade.
- **Iluminação e Feedback Visual:** LEDs RGB ou monocromáticos para indicação, estética ou uso em ambientes escuros.
- **Conectividade:** Pode se comunicar via **USB**, **Bluetooth** ou **Wi-Fi**, permitindo uso com computadores, tablets e até smartphones.


### Público-Alvo e Contexto de Uso

Ao analisar teclados como dispositivos de entrada, é importante considerar que diferentes públicos possuem necessidades distintas, o que influencia diretamente aspectos como ergonomia, layout, durabilidade, sensibilidade das teclas e recursos adicionais. A seguir, relacionamos os principais perfis de uso com seus respectivos contextos:

| Público-Alvo | Contexto de Uso | Características Importantes no Teclado |
|--------------|----------------|----------------------------------------|
| **Usuários Gerais** | Escritório, estudo, navegação diária | Conforto, layout padrão (ABNT2 ou ANSI), teclas silenciosas, durabilidade média. |
| **Programadores e Profissionais Técnicos** | Longas sessões de digitação, trabalho contínuo com texto e comandos | Durabilidade, switch adequado (mecânico ou silent), teclas programáveis, ergonomia para uso intensivo. |
| **Gamers** | Jogos de resposta rápida e ações contínuas | Teclados mecânicos com switches rápidos, *N-Key Rollover*, anti-ghosting, firmware dedicado e possivelmente iluminação RGB configurável. |
| **Profissionais Criativos (Designers, Vídeo, Áudio)** | Uso intenso de atalhos para produtividade | Teclados programáveis ou *macro pads*, disposição personalizável de teclas e camadas (*layers*). |
| **Usuários Móveis ou de Trabalho Remoto** | Portabilidade e praticidade | Teclados compactos (60%, 65% ou TKL), conexão sem fio estável, bateria duradoura. |
| **Pessoas com Necessidades Especiais de Acessibilidade** | Inclusão e adaptação física ou cognitiva | Teclados ampliados, teclas com perfil elevado, suporte a softwares assistivos, layouts simplificados. |


## 1.2 - Componentes e Sensores utilizados:

### Principais Componentes de um Teclado

- **Matriz de Teclas:**  
  Conjunto de linhas e colunas onde cada tecla funciona como um interruptor.

- **Microcontrolador:**  
  Responsável por detectar o acionamento das teclas, processar o sinal e enviar o código correspondente ao sistema.

- **Switches:**  
  Podem ser mecânicos, ópticos, ou membrana — determinam o tipo de sensação ao pressionar.

- **Keycaps:**  
  Parte física pressionada pelo usuário, podendo variar em material e formato.

- **Circuito de Debounce (Hardware/Software):**  
  Evita múltiplos sinais de uma mesma tecla em um único toque.

- **Placa Controladora:**  
  Base onde os componentes são montados e conectados.

- **Iluminação (Opcional):**  
  LEDs individuais ou matriz de LEDs para retroiluminação e efeitos visuais.


### Tecnologias de Comunicação e Controle Embarcadas

- **USB:**  
  Forma mais comum de comunicação com computadores, envia códigos padronizados sem necessidade de driver adicional.

- **Bluetooth:**  
  Permite uso sem fio em desktops, notebooks, tablets e smartphones.

- **Wi-Fi:**  
  Usado para configurações remotas e integração com automação.

- **Firmware Embarcado:**  
  Software interno responsável pelo:
  - Mapeamento das teclas (keymap)
  - *Scan* da matriz de teclas
  - Debounce
  - Macros e camadas de teclas
  - Gerenciamento de energia e comunicação

- **Protocolos HID:**  
  Padrão que define como o dispositivo envia dados ao sistema operacional, garantindo compatibilidade.


# 2 - Análise técnica do funcionamento:

Por o termo teclado ser muito genérico, para este trabalho usaremos como caso de estudo a marca Biba Keyboards, por disponibilizar projeto e firmware em formato open-source e por oferecer produtos com funcionalidades modernas. Mais especificamente, escolhemos o modelo Biba40 (Split, ortolinear 40%), por ser um teclado completo, com comunicação sem fio (Bluetooth LE), configuração via firmware ZMK, e documentação pública com arquivos de projeto (KiCad) e guia de montagem.[Link para comprar produto](https://www.tindie.com/products/danbiba/biba40-split-mechanical-keyboard-bluetooth-zmk/#:~:text=Specs%20and%20Docs)

![biba40](./assets/biba40.jpg)

## 	Principais módulos do sistema 

[documentação do teclado](https://github.com/danbiba/zmk-config-biba40/tree/master)

O Biba40 é um teclado ortolinear split onde cada metade monta uma matriz de switches MX (linhas × colunas) com diodos para evitar ghosting. Um microcontrolador nRF52840 varre a matriz, aplica debounce por software e traduz os pressionamentos em keycodes. O firmware ZMK gerencia layers, combos e macros, monta os relatórios HID e envia-os ao host via Bluetooth LE; também há modo cabeado/TRRS para sincronizar ou operar com fio. A alimentação vem de baterias Li-ion/Li-Po com circuito de carga (via USB-C) e a placa (KiCad) integra footprints para switches, diodos, conector de bateria e o módulo wireless; a carcaça costuma ser impressa em 3D. Em suma: tecla → scan matrix → MCU (debounce + keymap/ZMK) → relatório HID → transporte (BLE/USB) → host.

### 1. Matriz de Teclas (Switches)
- As teclas são implementadas com **switches mecânicos padrão MX**.
- As teclas são organizadas em **matriz (linhas × colunas)**, reduzindo a quantidade de pinos necessários no MCU.

### 2. Controlador / MCU (Comunicação e Controle)
- Utiliza um módulo baseado no **nRF52840**.

### 3. Firmware
- Firmware utilizado: **ZMK** (baseado no Zephyr RTOS).

### 4. Alimentação / Bateria e Carregamento
- Alimentado por **bateria Li-ion / Li-Po** de 3.7V.
- Pode incluir circuito de carga via **USB-C** ou módulo externo.

### 5. Interconexão Entre Metades
- Pode operar de dois modos:
  - **Wireless completo** (cada metade conecta ao computador por BLE);
  - **Conexão cabeada TRRS/USB** para sincronização ou firmware.
- O firmware define qual metade atua como “controladora principal”.

### 6. PCB (Placa de Circuito Impresso)
- Arquivos do projeto disponíveis em **KiCad**.
- Contém:
  - Footprints dos switches;
  - Posições dos diodos;
  - Conectores para bateria, carregador e TRRS/USB;
  - Espaço de montagem para o módulo Nice!Nano.

### 7. Carcaça / Case
- Geralmente **impressa em 3D**.
- Pode ser modificada para ergonomia ou estética pessoal.

### 8. Periféricos Opcionais
- Keycaps personalizáveis;
- Estabilizadores (para teclas longas);
- LEDs indicadores;

### Identificação de Tecnologias Críticas

No funcionamento do teclado Biba40 (e de teclados sem fio modernos), algumas tecnologias são essenciais para garantir baixo consumo, confiabilidade de comunicação e flexibilidade de configuração:

| Tecnologia | Papel no Sistema | Observações Relevantes |
|-----------|-----------------|------------------------|
| **Bluetooth Low Energy (BLE)** | Responsável pela comunicação sem fio com o computador ou dispositivos móveis. | Prioriza baixo consumo. O firmware usado implementa o perfil **HID (Human Interface Device)** para que o teclado seja reconhecido automaticamente pelo sistema operacional sem drivers extras. |
| **ZMK Firmware (baseado no Zephyr RTOS)** | Controla o teclado (leitura da matriz, debouncing, layers, macros) e gerencia a pilha de comunicação Bluetooth. | Por ser baseado no **Zephyr**, herda gerenciamento de energia, drivers padronizados e arquitetura modular. Totalmente configurado em texto, permitindo customização sem recompilar kernel. |
| **MCU nRF52840 (ARM Cortex-M4 + Rádio BLE)** | Microcontrolador que realiza a varredura da matriz e transmite os dados via BLE. | Possui modos avançados de *sleep*, rádio integrado de baixo consumo e suporte nativo para HID BLE. É um componente chave para autonomia da bateria. |
| **Debouncing por Software** | Evita leituras incorretas devido ao ruído mecânico das teclas. | Implementado no firmware (ZMK), permite teclas mecânicas estáveis sem hardware adicional. |
| **Técnicas de Gerenciamento de Energia (Low Power)** | Reduz o consumo em operação contínua. | MCU entra em modo **deep sleep**, acordando apenas quando uma tecla é pressionada. A comunicação BLE utiliza intervalos longos de *advertising* quando o teclado está ocioso. |
| **Perfil HID (Human Interface Device)** | Permite que o teclado seja plug-and-play, sem driver proprietário. | Compatível com Windows, Linux, macOS, Android e iOS automaticamente. |

# 3 - Reprodução na ESP32

A seguir, apresentamos uma proposta conceitual de como reproduzir parte das funcionalidades de um teclado como o Biba40 utilizando uma ESP32 e componentes compatíveis com o ecossistema ESP-IDF. O objetivo é obter um protótipo funcional com teclas personalizáveis, comunicação Bluetooth, e interface simples de configuração via Access Point.

## Descrição conceitual

Como descrito acima, nossa ideia é montar um teclado com menos teclas devido à complexidade de criar a matriz e ao número de botões. Por isso, vamos permitir a personalização das funções das teclas. A versão inicial terá 4 teclas e, se obtivermos sucesso, poderemos adaptar para uma versão *split* com duas metades de 4 teclas cada.

### Implementação e adpatações de hardawre

| Módulo                         | Componente (proposto)                                         | Função Principal                                         |
| ------------------------------ | ------------------------------------------------------------- | -------------------------------------------------------- |
| MCU / Controlador              | ESP32                                          | Varredura da matriz, execução do firmware |
| Matriz de teclas               | Botões tácteis e protoboard  | Detectar teclas pressionadas                             |
| Comunicação sem fio            | Bluetooth (nativo ESP-IDF)                             | Comunicação direta com o computador sem dongle           |
| Configuração do teclado        | Modo Access Point + Webserver embutido                        | Página para remapear teclas e salvar flash     |
| Interface adicional (opcional) | Display OLED (SSD1306) via I2C                                | Visualizar layer ativo, status da bateria, modo BLE      |

### Implementação e adpatações de software

| Funcionalidade                  | API / Biblioteca sugerida                             |
| ------------------------------- | ----------------------------------------------------- |
| Bluetooth           | `esp_hid_device` ou `nimble_hid` (ESP-IDF)       |
| Varredura da Matriz             | GPIO + Timer + Task (FreeRTOS)                        |
| Debouncing                      | Filtro por tempo + estado                             |
| Config Web                      | `esp_http_server` + modo SoftAP (`esp_wifi_set_mode`) |
| Armazenamento das configurações | `nvs_flash`                                           |

## Diagrama conceitual do sistema.

## Versão 01 
![Diagrama de blocos](/teclado/assets/diagrama01.jpg)

A versão 01 é um protótipo compacto com **4 botões físicos** controlados por um único ESP32. Objetivos: permitir personalização via Wi-Fi, mostrar estado em um **display OLED I2C** e enviar eventos de tecla para o computador via **Bluetooth**.

### Descrição do funcionamento
#### Hardware / conexões físicas
- **Botões → ESP32 (GPIO)**  
  - Cada botão conectado a um pino digital do ESP32 (GPIO).  
- **Display OLED → ESP32 (I²C)**  
  - Usado para feedback (layer, keymap atual, status de conexão).  
- **ESP32 → Host (Bluetooth)**  
  - O ESP32 monitora os botões e manda via Bluetooth pro computador.  
- **Configuração → Wi-Fi (Access Point)**  
  - ESP32 sobe um AP temporário e um servidor web simples (páginas estáticas) para o usuário configurar o keymap.  

#### Fluxos de comunicação
1. Usuário pressiona botão → sinal elétrico no GPIO.  
2. ESP32 aplica *debounce* (filtro) e valida evento (press/release).  
3. Evento mapeado para um código lógico via keymap (mapa configurado pela web).  
4. ESP32 monta **HID report** e envia via BLE para o host (computador).  
5. OLED I2C opcional mostra feedback,

## Limitações e desafios esperados.

- **Número de botões:** O teclado original possui uma matriz grande; na nossa réplica inicial teremos menos teclas.
- **Switches mecânicos:** Reproduzir o mecanismo dos switches é complexo; usaremos botões comuns como alternativa simplificada.
- **Debouncing eficiente:** É necessário garantir filtragem de ruído elétrica e lógica estável para evitar múltiplos acionamentos indesejados.
- **Comunicação BLE:** A comunicação Bluetooth pode sofrer instabilidades, atraso ou falhas de emparelhamento, exigindo fila de eventos e controle de tempo.
- **Comunicação entre metades (Split):** Caso a versão com duas metades seja implementada.
- **Personalização das teclas:** A configuração via interface web/AP exige software adicional para salvar e carregar mapeamentos.
- **Bateria e alimentação:** Será necessário usar uma bateria externa e implementar carregamento seguro (proteção, regulador, medição de nível).
- **Plug and Play real:** Para o dispositivo ser reconhecido como teclado imediatamente, é necessário implementar corretamente o perfil HID sem exigir drivers adicionais.

# 4 - Pesquisa bibliográfica e tecnológica

## Artigos de pesquisa

- [“Wireless keyboard and mouse device based on Bluetooth”](https://www.spiedigitallibrary.org/conference-proceedings-of-spie/4911/0000/Wireless-keyboard-and-mouse-device-based-on-Bluetooth/10.1117/12.480522.short) – Este artigo (SPIE, 2002/2003) apresenta um dispositivo de teclado e mouse sem fio baseado em Bluetooth, demonstrando as primeiras implementações de periféricos sem fio usando o protocolo Bluetooth.  

- [“Abstract/document/9061500”](https://ieeexplore.ieee.org/abstract/document/9061500) – Artigo da IEEE que investiga aspectos técnicos recentes (autenticação, latência ou consumo) de dispositivos de entrada sem fio.  

- [“Device Class Definition for Human Interface Devices (HID), v1.11”](https://www.usb.org/sites/default/files/documents/hid1_11.pdf#:~:text=The%20HID%20class%20consists%20primarily,steering%20wheels%2C%20and%20rudder%20pedals) – Documento oficial da USB-IF (2001) que define a classe de dispositivo HID (Human Interface Device), a qual inclui teclados, mouses e outros periféricos, padronizando a comunicação destes dispositivos com os hosts via USB.  

- ["Investigating the Resilience of Unstructured Supernode Networks"](https://ieeexplore.ieee.org/document/6515207) - Este artigo revisa sistemas de sensoriamento móvel e descreve como tecnologias de comunicação de baixo consumo  especialmente Bluetooth Low Energy (BLE) permitem a coleta contínua de dados sem esgotar rapidamente a bateria, destacando sua importância em dispositivos vestíveis, teclados sem fio e IoT.


## Artigos de aplicação

- ["Postural Dynamism During Computer Mouse and Keyboard Use"](https://www.sciencedirect.com/science/article/pii/S0003687015000423) - Este estudo analisou como o corpo se movimenta durante o uso de teclado e mouse.  
A pesquisa mostrou que digitar no teclado gera mais variação postural natural, enquanto o uso prolongado do mouse mantém o corpo mais estático, o que pode aumentar o risco de dor no pescoço e costas.  

- ["Assisting People with Multiple Disabilities to Improve Computer Typing Efficiency"](https://www.sciencedirect.com/science/article/pii/S0891422214001954) - O artigo apresenta um método alternativo de digitação para pessoas com deficiências motoras usando teclado virtual + controle via roda do mouse, reduzindo necessidade de precisão manual. Participantes com paralisia cerebral mostraram melhora significativa na velocidade e precisão da digitação.  

- ["Mechanical and Membrane Keyboard Typing Assessment Using sEMG"](https://www.researchgate.net/publication/283538787_Mechanical_and_Membrane_Keyboard_Typing_Assessment_Using_Surface_Electromyography_sEMG) - O estudo comparou digitação em teclados mecânicos e teclados de membrana usando sensores musculares (sEMG). Resultados mostraram que teclados mecânicos exigem menos esforço muscular para digitar, enquanto membrana pode gerar mais fadiga no antebraço.  

- [“An Analysis on the Effects of Different Types of Keyboards on Users’ Productivity and Hand Muscle Strain”](https://www.researchgate.net/profile/Yoshiki-Kurata/publication/361245965_An-Analysis-on-the-Effects-of-Different-Types-of-Keyboards-on-Users-Productivity-and-Hand-Muscle-Strain.pdf) – Estudo comparativo de diferentes tipos de teclados (mecânico vs membrana, layout tradicional vs alternativo) avaliando produtividade (velocidade de digitação, precisão) e esforço muscular (EMG). Os autores mostram que o tipo de teclado influencia significativamente o conforto e a eficiência do usuário.  

# 5 Comparativo com produtos similares

| Tipo de produto | Nº típico de teclas | Feedback tátil | Eficiência de digitação (vel./precisão) | Como se compara ao Biba40 |
|---|---:|---|---:|---|
| Teclado full-size com cabo (100%) | 101–104 | Mecânico ou membrana (varia) | Alta velocidade e precisão (layout familiar) | Mais rápido no início; porém menos personalizável; Biba40 ganha em compactação e layout configurável. |
| Teclado wireless padrão (não personalizável) | 87–104 | Geralmente membrana ou low-profile mecânico | Boa velocidade; leve latência possível | Função similar ao Biba40, porém sem layers, macros e personalização profunda. |
| Teclado virtual (touchscreen em smartphone/tablet) | Sem teclas físicas | Sem feedback físico | Velocidade menor e mais erros | Significativamente inferior para digitação prolongada; o Biba40 é superior devido ao feedback físico. |
| Macro-pad / Shortcut pad (8–16 teclas) | 8–16 | Mecânicos (em geral) | Alta eficiência para atalhos, baixa para texto | Macro-pad é complementar; Biba40 pode atuar como teclado principal após aprendizagem de layers. |
| Remote / control pad (controles multimídia) | 4–20 | Membrana ou teclas simples | Baixa para digitação | Usado para controle e navegação, não para texto; não substitui um teclado como o Biba40. |

# Referências

- Stallings, William. *Computer Organization and Architecture: Designing for Performance*. 10ª ed., Pearson, 2017.  
- Tanenbaum, Andrew S.; Austin, Todd. *Structured Computer Organization*. 6ª ed., Pearson, 2013.  
- Khan, W. Z.; Xiang, Y.; Aalsalem, M. Y.; Arshad, Q. (2014). *Mobile phone sensing systems: A survey*. IEEE Communications Surveys & Tutorials, 15(4), 1819–1857. Acesso: https://ieeexplore.ieee.org/document/6515207

- “Wireless keyboard and mouse device based on Bluetooth” (SPIE conference). Acesso: https://www.spiedigitallibrary.org/conference-proceedings-of-spie/4911/0000/Wireless-keyboard-and-mouse-device-based-on-Bluetooth/10.1117/12.480522.short

- Device Class Definition for Human Interface Devices (HID), v1.11 — USB-IF (2001). Acesso: https://www.usb.org/sites/default/files/documents/hid1_11.pdf

- (IEEE) *Abstract / document 9061500*. Acesso: https://ieeexplore.ieee.org/abstract/document/9061500

- *Postural Dynamism During Computer Mouse and Keyboard Use*. (ScienceDirect). Acesso: https://www.sciencedirect.com/science/article/pii/S0003687015000423

- *Assisting People with Multiple Disabilities to Improve Computer Typing Efficiency*. (ScienceDirect). Acesso: https://www.sciencedirect.com/science/article/pii/S0891422214001954

- *Mechanical and Membrane Keyboard Typing Assessment Using sEMG* — Tri Pham, Nicholas Kelling (HFES 2015 / ResearchGate). Acesso: https://www.researchgate.net/publication/283538787_Mechanical_and_Membrane_Keyboard_Typing_Assessment_Using_Surface_Electromyography_sEMG

- Yamada, Hisao. *A Historical Study of Typewriters and the Keyboard Layout.* Human Factors, v. 22, n. 6, p. 643–651, 1980.  
  Acesso: https://journals.sagepub.com/doi/abs/10.1177/001872088002200602

- Repositório GitHub do projeto (firmware / configs / arquivos): **danbiba / zmk-config-biba40**  
  https://github.com/danbiba/zmk-config-biba40  
  _Contém configs ZMK, exemplos de keymaps, instruções de build e UF2 gerados para as placas Nice!Nano._

- Página de venda / descrição do produto — Tindie (Biba40 Split Mechanical Keyboard — Bluetooth, ZMK):  
  https://www.tindie.com/products/danbiba/biba40-split-mechanical-keyboard-bluetooth-zmk/#:~:text=Specs%20and%20Docs

- Artigo/overview na comunidade (KBD.news) com resumo e especificações:  
  https://kbd.news/Biba40-2497.html

 
