1. O problema e as especificações
Há lugares onde o rádio é um problema: salas de hospital com equipamento sensível, fábricas e minas onde as emissões perturbam equipamentos, ou zonas sem rede. A luz resolve estes casos: não produz interferência de rádio, não atravessa paredes e um LED custa pouco. É a ideia do Li-Fi (Light Fidelity), que o Radar Tecnológico apresenta. O nosso comunicador usa os mesmos princípios: no emissor, a intensidade da luz de um díodo emissor de luz (LED) varia ao ritmo da mensagem; no receptor, um fotodíodo converte a luz de novo num sinal eléctrico.
O objectivo do projecto é enviar voz (modo VOZ, comunicação analógica) e texto (modo TEXTO, comunicação digital) por um feixe de luz, a 1,1 m de distância, com componentes comuns, e perceber de onde vem cada valor do circuito. As especificações da Tabela 5 orientam todas as escolhas que se seguem.
2. O sistema em blocos
A Figura 15 mostra o comunicador inteiro: é o esquema emissor → canal → receptor da Teoria em 10 Minutos (Figura 9), com os blocos reais do projecto. O texto usa sempre os mesmos números ①–⑭.
No emissor, o microfone ① dá alguns milivolts, que o pré-amplificador ② leva a 0,75 V de pico sobre 2,2 V. O Arduino emissor ③ transforma o texto que escreves em bits de 0 V e 5 V. O comutador S1 ④ escolhe o sinal, o driver ⑤ converte-o numa corrente (15 mA ± 7,5 mA na voz; 19 mA ou 0 no texto) e o LED ⑥ em luz. No canal ⑦, a luz enfraquece com o quadrado da distância e junta-se-lhe a luz ambiente. No receptor, a lente e o tubo ⑧ juntam a luz útil, o fotodíodo ⑨ dá alguns microamperes e o amplificador de transimpedância (TIA) ⑩ converte-os numa tensão. Na voz, o filtro ⑪ (300–3400 Hz) e o LM386 ⑫ levam o sinal ao altifalante; no texto, o comparador com histerese ⑬ decide cada bit e o Arduino receptor ⑭ mostra a mensagem num ecrã de cristais líquidos (LCD).
| Parâmetro | Valor | Observações |
|---|---|---|
| Modos | VOZ (analógico) e TEXTO (digital) | escolhidos com o comutador S1 |
| Modulação | VOZ: intensidade da luz; TEXTO: OOK | OOK: luz acesa = 1, luz apagada = 0 |
| Banda de voz | 300 Hz a 3400 Hz | filtro do receptor: 339 Hz a 3386 Hz |
| Débito do texto | 2400 bit/s, trama série de 10 bits (8 de dados) | 240 caracteres por segundo |
| Distância | 1,1 m (ponto de projecto); texto até ≈ 1,6 m | lente de 25 mm à frente do fotodíodo |
| Fonte de luz | LED branco de 5 mm, θ½ ≈ 15° | VOZ: 15 mA ± 7,5 mA; TEXTO: ≈ 19 mA ou 0 |
| Sensor | fotodíodo BPW34 + amplificador de transimpedância de 330 kΩ | ≈ 3 µA de fotocorrente a 1,1 m |
| Saídas | altifalante de 8 Ω; ecrã LCD de 16 × 2 caracteres | volume com P1; limiar do texto com P2 |
| Alimentação | 9 V (circuitos analógicos); 5 V por USB (Arduinos) | uma pilha de 9 V no emissor e outra no receptor |
| Simulação | SimulIDE 1.1.0-SR2, um só ficheiro | Pacote Digital, pasta projecto_capa_simulide |
3. O emissor bloco a bloco
Microfone ① — polarizar o electreto
O esquema do emissor está na Figura 16. O MIC1 é um microfone de electreto, com um pequeno transístor de efeito de campo (JFET) no interior, polarizado por R1 = 10 kΩ a partir dos 9 V. A voz aparece como uma tensão alternada de alguns milivolts entre R1 e o microfone; C1 = 1 µF bloqueia a componente contínua (com os 16,6 kΩ de R2 ∥ R3, o corte fica perto de 9,6 Hz).
Pré-amplificador ② — ganho 101 e repouso a 2,2 V
U1A é metade de um LM358 em montagem não inversora. A entrada + está polarizada pelo divisor R2/R3, ligado aos 9 V (VCC):
Como C3 bloqueia a contínua em R5, a saída repousa também em 2,20 V, que fixa a corrente de repouso do LED. Para a voz, o ganho é:
Os 7,4 mV de pico à entrada dão 0,75 V à saída, o que o driver ⑤ precisa para modular o LED a meio. C3 cria o corte inferior e C2, em paralelo com R4, o superior:
O corte de 3,4 kHz fica para o receptor (bloco ⑪): dois cortes iguais em cascata estreitariam a banda. C2 só limita o ruído e mantém o amplificador estável.
Arduino emissor ③ e comutador S1 ④
No modo TEXTO, o pino 11 envia a trama série da secção 6 (5 V = bit 1); os pinos 0 e 1 ficam ligados ao Monitor Série do computador, a 9600 bit/s. O divisor R14/R15 reduz os 5 V para a base de Q1:
S1, um comutador de duas posições (SPDT), liga a base de Q1 à saída do pré-amplificador através de R6 = 100 Ω (VOZ) ou ao divisor R14/R15 (TEXTO).
Driver ⑤ e LED ⑥ — uma fonte de corrente controlada por tensão
Q1 (BC547B) é um seguidor de emissor: o emissor fica VBE ≈ 0,7 V abaixo da base, e R7 fixa a corrente, que passa no LED:
No modo TEXTO, a corrente de base provoca uma queda em RTh = R14 ∥ R15 = 2,13 kΩ. Com β ≈ 300 e VTh = 2,73 V:
Na voz, essa queda é desprezável. IQ = 15 mA fica a meio da gama útil do LED (0 a 30 mA); os ±0,75 V da voz dão ΔI = ±7,5 mA, e o índice de modulação é:
A corrente varia entre 7,5 mA e 22,5 mA, sem nunca apagar o LED. Controlamos a corrente, e não a tensão, porque a luz de um LED é proporcional à corrente, enquanto a tensão directa muda de exemplar para exemplar. A potência em Q1, com a tensão colector-emissor VCE, é pequena:
O LED branco de 5 mm tem um ângulo a meia intensidade θ½ ≈ 15°. Estimamos que emite Pt ≈ 10 mW de luz com 15 mA, uma eficiência η ≈ 0,667 W/A.
4. O canal óptico ⑦ e a lente ⑧
Que fotocorrente Ifoto chega ao fotodíodo com o LED a uma distância d? Um LED é aproximadamente uma fonte lambertiana. A ordem lambertiana mL = −ln 2 / ln(cos θ½) mede quanto a luz se concentra para a frente: para θ½ = 15°, mL ≈ 20. Com o receptor em frente ao LED, a fracção da luz emitida que chega a uma área A, ajudada por uma lente de ganho GL, é o ganho do canal H = (mL + 1) A GL / (2πd²). O BPW34 tem A = 7,5 mm²; uma lupa de 25 mm de diâmetro aumenta a área de recolha para cerca de 490 mm² e, com as perdas, contamos com GL ≈ 50. O fotodíodo converte a luz em corrente com a responsividade Rλ ≈ 0,3 A/W para a luz branca.
No SimulIDE não existe um «componente luz» entre o LED e o fotodíodo. Como a potência da luz é proporcional à corrente do LED e a fotocorrente é proporcional à potência da luz, toda a cadeia LED → ar → lente → fotodíodo resume-se a um número, k, que diz quantos amperes de fotocorrente resultam de cada ampere no LED:
Repara no d² do denominador: é a lei do inverso do quadrado. Se duplicares a distância, a luz espalha-se por uma área quatro vezes maior e a fotocorrente cai para ¼. Para outra distância, basta corrigir k:
| d (m) | k | Ifoto a 15 mA (µA) | Ifoto a 19,0 mA (µA) |
|---|---|---|---|
| 0,5 | 1,00 × 10⁻³ | 15,0 | 19,0 (TIA saturado) |
| 1,1 | 2,07 × 10⁻⁴ | 3,11 | 3,93 |
| 1,6 | 9,80 × 10⁻⁵ | 1,47 | 1,86 |
O tubo ⑧, um cilindro de cartão preto à frente do fotodíodo, tapa a luz ambiente que vem de lado. Nas contas assumimos 2 µA de luz ambiente, com 20 % de ondulação a 100 Hz (as lâmpadas da rede de 50 Hz piscam 100 vezes por segundo).
5. O receptor bloco a bloco
A Figura 18 mostra a parte analógica do receptor, com o fotodíodo real à entrada (no SimulIDE é uma fonte controlada), e a Figura 19 o ramo de texto.
A tensão de referência VREF
Com uma só pilha de 9 V, os amplificadores precisam de uma «massa virtual», o divisor R8/R9 filtrado por C4:
Fotodíodo ⑨ e TIA ⑩ — luz em corrente, corrente em tensão
O BPW34 é um fotodíodo PIN de área grande, em polarização inversa. O amplificador de transimpedância U2A obriga essa corrente, mais a da luz ambiente Iamb, a passar por R10, e a saída fica:
Com 9 V, a saída do LM358 só sobe até cerca de 7,5 V (VOH). Acima desta corrente total o TIA satura:
C5, em paralelo com R10, estabiliza o TIA e limita a banda:
Filtro de voz ⑪ — 300 a 3400 Hz
O passa-alto C6/R11 (com R11 ligada a VREF) tira a componente contínua e parte dos 100 Hz; o seguidor U2B isola-o do passa-baixo R12/C7:
LM386 e altifalante ⑫
C8 leva o sinal ao volume P1 = 100 kΩ e ao pino 3 do LM386 (U3), de ganho 20. Para 0,5 W em RL = 8 Ω:
Comparador com histerese ⑬ — decidir se é 0 ou 1
No modo TEXTO, o TIA dá ≈ 2,24 V com o LED apagado e ≈ 3,54 V com o LED aceso a 1,1 m. U4 compara-o com o limiar Vth ≈ 2,9 V, ajustado com P2. Para que a ondulação de 100 Hz não provoque comutações a mais, o comparador tem histerese (montagem de Schmitt):
Até onde chega o texto?
O texto deixa de passar quando a diferença entre os níveis do TIA, descontada a ondulação da luz ambiente (2 × 0,132 V), fica menor do que a janela de histerese:
6. A parte digital — trama UART, OOK e código
Os Arduinos falam por uma porta série assíncrona (UART). Cada carácter viaja numa trama de 10 bits (Figura 20): com a linha em repouso a 1 (luz acesa), um bit de início a 0, os 8 bits de dados, de D0 para D7, e um bit de paragem a 1, o formato «8N1».
O código do emissor (Listagem 1)
O emissor cria com a biblioteca SoftwareSerial uma porta série no pino 11, a da luz, e deixa os pinos 0 e 1 para o Monitor Série.
// Li-Fi Comunicador - EMISSOR: texto -> luz
#include <SoftwareSerial.h>
const byte PINO_LUZ = 11; // -> R14 -> S1 -> Q1
const long TAXA = 2400; // 1 bit = 417 us
SoftwareSerial luz(10, PINO_LUZ); // RX nao usado
char linha[64]; // frase escrita no PC
byte n = 0;
unsigned long ultimo = 0;
void setup() {
Serial.begin(9600); // Monitor Serie (PC)
luz.begin(TAXA); // repouso = 1: LED aceso
Serial.println(F("Emissor Li-Fi: escreve"));
}
void loop() {
// 1) guarda o que escreves ate ao Enter
while (Serial.available()) {
char c = Serial.read();
if (c == '\n' || c == '\r' ||
n == sizeof(linha) - 1) {
if (n > 0) {
linha[n] = '\0';
luz.print(linha); // a frase sai pela luz
luz.print('\n'); // \n = fim
Serial.print(F("> "));
Serial.println(linha);
n = 0;
}
ultimo = millis();
} else {
linha[n++] = c;
}
}
// 2) sem texto: mensagem de demonstracao
if (n == 0 && millis() - ultimo > 5000) {
luz.print(F("11 DE NOVEMBRO\n"));
Serial.println(F("> 11 DE NOVEMBRO"));
ultimo = millis();
}
}
O código do receptor (Listagem 2)
O receptor lê a porta série do microcontrolador, no pino 0, a 2400 bit/s, e mostra até 32 caracteres no LCD quando chega o fim de linha.
// Li-Fi Comunicador - RECEPTOR: luz -> LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
char txt[33]; // 2 linhas x 16 caracteres
byte n = 0;
void mostrar() {
lcd.clear();
for (byte i = 0; i < n; i++) {
if (i == 16) lcd.setCursor(0, 1);
lcd.print(txt[i]);
}
}
void setup() {
Serial.begin(2400); // a taxa do emissor
lcd.begin(16, 2);
lcd.print(F("Li-Fi: a espera"));
}
void loop() {
while (Serial.available()) {
char c = Serial.read();
if (c == '\n' || c == '\r') { // fim
if (n > 0) mostrar();
n = 0;
} else if (c >= 32 && c < 127 && n < 32) {
txt[n++] = c; // so imprimiveis
}
}
}
7. O circuito completo no SimulIDE
Todo o comunicador está num só ficheiro, lifi_comunicador.sim1, na pasta projecto_capa_simulide do Pacote Digital. Abre-se no SimulIDE 1.1.0-SR2, a versão estável deste simulador gratuito, que executa os programas reais dos Arduinos (.hex) e calcula o circuito analógico. As Figuras 21 e 22 mostram o emissor com o canal e o receptor.
8. Estudos de simulação
8.1 Modo VOZ a 1,1 m
Com S1 fechado, o gerador do microfone injecta um tom de 1 kHz com 12 mV de pico, e P1 está a 30 % do curso. À entrada do pré-amplificador:
| Grandeza | Ponto de medida | Previsto (cálculo) | Observado (captura) | Desvio (%) |
|---|---|---|---|---|
| Tensão média (V) | ② U1A, pino 1 | 2,20 (C.1) | 2,20 | 0,0 |
| Semi-amplitude (V) | ② U1A, pino 1 | 0,746 (C.24) | 0,74 | −0,8 |
| Índice de modulação m | ② e R7 | 0,497 (C.8) | 0,483 | −2,8 |
| Tensão média (V) | TIA ⑩, U2A pino 1 | 3,264 (C.13) | 3,285 | +0,6 |
| Corrente do LED em repouso (mA) | deduzida da média do TIA por (C.13) | 15,0 (C.6) | 15,3 | +2,1 |
| Semi-amplitude, voz + 100 Hz (V) | TIA ⑩, U2A pino 1 | 0,642 | 0,625 | −2,6 |
| Semi-amplitude (V) | ⑫ altifalante 8 Ω | 1,72 (C.25) | 1,665 | −3,3 |
| Potência no altifalante (W) | ⑫ altifalante | 0,185 (C.26) | 0,173 | −6,4 |
8.2 Modo TEXTO a 1,1 m
Com S1 aberto, o Arduino emissor envia a mensagem de demonstração. A Figura 24, a 2 ms/div, mostra o início de «11 DE NOVEMBRO»: a saída do comparador ⑬ é igual aos dados ③, bit a bit.
8.3 A mensagem no LCD e no Monitor Série
Na Figura 25, escrevemos «11 DE NOVEMBRO» no terminal e carregámos em Enter. O emissor respondeu no Monitor Série com «> 11 DE NOVEMBRO»; a porta série do receptor mostra o mesmo texto, recebido pela luz, e o LCD escreveu-o.
8.4 Modo TEXTO a 1,6 m — o limite
Para simular 1,6 m, o ganho do canal passa para k = 9,80 × 10⁻⁵ (C.11). Baixando o limiar com P2 para centrar a janela de histerese entre os dois níveis:
| Grandeza | Ponto de medida | Previsto (cálculo) | Observado (captura) | Desvio (%) |
|---|---|---|---|---|
| d = 1,1 m: nível alto (V) | ③ pino 11 | 5,00 | 4,98 | −0,4 |
| d = 1,1 m: corrente do LED no bit 1 (mA) | ⑤ emissor de Q1, V / 100 Ω | 19,0 (C.7) | 19,1 | +0,6 |
| d = 1,1 m: nível alto máximo (V) | TIA ⑩, U2A pino 1 | 3,67 (C.13) | 3,68 | +0,3 |
| d = 1,1 m: nível baixo mínimo (V) | TIA ⑩, U2A pino 1 | 2,11 (C.13) | 2,10 | −0,3 |
| d = 1,1 m: duração de um bit (µs) | ③ e ⑬ | 417 (C.23) | 411 a 423 | ≤ 1,4 |
| d = 1,1 m e 1,6 m: níveis de saída (V) | ⑬ pino 0 | 0 / 5,00 | 0,03 / 5,00 | 0,0 (nível alto) |
| d = 1,1 m e 1,6 m: texto recebido | LCD ⑭ | «11 DE NOVEMBRO» | «11 DE NOVEMBRO» | sem erros |
| d = 1,6 m: nível alto máximo (V) | TIA ⑩, U2A pino 1 | 2,98 (C.13) | 2,99 | +0,2 |
| d = 1,6 m: nível baixo mínimo (V) | TIA ⑩, U2A pino 1 | 2,11 (C.13) | 2,10 | −0,3 |
9. Análise de resultados
Modo VOZ. Todos os desvios da Tabela 7 ficam abaixo de 7 % e acumulam-se ao longo da cadeia. O LED nunca se apaga e nenhum amplificador satura.
Modo TEXTO a 1,1 m e a 1,6 m. A 1,1 m os desvios da Tabela 8 são inferiores a 1 % e as margens são folgadas. A 1,6 m há comunicação, mas só com o limiar reajustado para 2,54 V: 1,6 m é o limite do texto, e 1,1 m a distância de projecto.
10. Lista de material
| Referência | Componente | Valor / designação comercial | Qtd. | Substituto |
|---|---|---|---|---|
| R1, R9, R11, R12, R16, R18 · R6, R7 | resistência | 10 kΩ · 100 Ω | 6 · 2 | — |
| R2 · R3 · R4 · R5 · R8 | resistência | 68 kΩ · 22 kΩ · 100 kΩ · 1 kΩ · 47 kΩ | 1 de cada | — |
| R10 · R17 · R13 · R14 · R15 | resistência | 330 kΩ · 150 kΩ · 10 Ω · 3,9 kΩ · 4,7 kΩ | 1 de cada | R10: 270 kΩ com muita luz ambiente |
| — (pino 15 do LCD) | resistência da retroiluminação | 220 Ω | 1 | 330 Ω (menos brilho) |
| P1 · P2, P3 | potenciómetro de volume · trimmers (limiar, contraste) | 100 kΩ logarítmico · 10 kΩ | 1 · 2 | P1: 100 kΩ linear |
| C1, C3, C8 · C6, C10 · C7 | condensador de poliéster | 1 µF, 63 V · 47 nF · 4,7 nF | 3 · 2 · 1 | C1, C3, C8: electrolítico de 1 µF |
| C2 · C5 | condensador cerâmico NP0 | 100 pF · 22 pF | 1 de cada | — |
| C4, C11 · C9 · C12 | condensador electrolítico, 16 V | 10 µF · 220 µF · 100 µF | 2 · 1 · 1 | 25 V |
| MIC1 | microfone de electreto, 2 terminais | cápsula de 6 mm | 1 | cápsula de 9,7 mm |
| U1, U2 · U3 · U4 | amp. operacional duplo · amp. de áudio · comparador duplo | LM358N · LM386N-1 · LM393N | 2 · 1 · 1 | LM2904N · LM386N-3 · LM2903N |
| Q1 | transístor NPN | BC547B | 1 | BC548B (mesma pinagem) |
| D1 · D2 | LED branco de 5 mm, θ½ ≈ 15° · fotodíodo PIN | alto brilho · BPW34 | 1 · 1 | outro LED branco · BPW34S |
| S1 · LS1 | comutador SPDT · altifalante | — · 8 Ω, 0,5 W | 1 · 1 | LS1: 8 Ω, 1 W |
| LCD1 | módulo LCD 16 × 2 | controlador HD44780 | 1 | qualquer 16 × 2 HD44780 |
| — | placa Arduino | Arduino Uno R3 | 2 | Arduino Nano (mesmos pinos) |
| — | lente e tubo · alimentação | lupa de 25 mm; tubo de cartão preto · pilha de 9 V com ficha; cabo USB | 1 · 2 + 2 | fonte de 9 V com limitação de corrente |
11. Montagem, testes e resolução de problemas
- Emissor em repouso (S1 em VOZ): U1A a 2,2 V; emissor de Q1 a 1,5 V (15 mA).
- Receptor em repouso: VREF = 1,58 V; TIA perto de 1,58 V com o fotodíodo tapado e de 3,3 V com o LED a 1,1 m.
- Voz: segue um tom de 1 kHz pelos pontos da Figura 23; depois fala e ouve.
- Inverso do quadrado: a amplitude no TIA a 0,55 m, 1,1 m e 2,2 m cai para ¼ de cada vez.
- Texto e limiar (S1 em TEXTO): mede o TIA com o LED aceso e apagado e põe Vth a meio com P2; o LCD mostra «11 DE NOVEMBRO» a cada 5 s.
| Sintoma | Causa provável | Verificação | Correcção |
|---|---|---|---|
| LED apagado nos dois modos | Q1 trocado (pinagem) ou R7 aberta | tensão no emissor de Q1 (1,5 V em VOZ) | confirmar a pinagem C-B-E do BC547B |
| LED aceso mas sem som | P1 no mínimo, C9 invertido ou U3 sem 9 V | sinal nos pinos 3 e 5 de U3 | rodar P1; rever C9 e o pino 6 |
| Zumbido forte no altifalante | luz de lâmpadas da rede a entrar no fotodíodo | 100 Hz na saída do TIA | pôr ou alongar o tubo ⑧; apagar a lâmpada |
| Saída do TIA encostada a ≈ 7,5 V | demasiada luz ambiente: TIA saturado (C.14) | tapar o fotodíodo: a saída deve descer para 1,58 V | usar o tubo; reduzir R10 para 270 kΩ |
| Voz distorcida | sobremodulação: o LED apaga nos vales | emissor de Q1 abaixo de 0,5 V nos vales | falar mais longe ou trocar R5 por 2,2 kΩ |
| LCD sem caracteres (só blocos) | contraste mal ajustado | tensão no pino 3 do LCD (≈ 0,5 V) | rodar P3 |
| LCD com «Li-Fi: a espera» e nada mais | limiar fora da janela ou S1 em VOZ | níveis do TIA e THR | S1 em TEXTO; reajustar P2 a meio dos níveis |
| Caracteres errados no LCD | distância no limite; margem de histerese esgotada | níveis do TIA em relação a Vliga e Vdesliga | aproximar para 1,1 m ou alinhar melhor a lente |
| Erro ao carregar o programa do receptor | fio do comparador ligado ao pino 0 | o USB usa o pino 0 para programar | desligar o fio do pino 0 durante o carregamento |
- Não olhes fixamente para o LED de perto, sobretudo com a lente;
- Não faças curto-circuito numa pilha de 9 V: aquece muito;
- Começa com o volume P1 no mínimo, sobretudo com auscultadores;
- Nunca ponhas mais de 5 V num pino do Arduino.
- O Li-Fi Comunicador envia voz (15 mA ± 7,5 mA, m = 0,5) e texto (OOK, UART 8N1 a 2400 bit/s) por um LED branco.
- O driver Q1 + R7 controla a corrente do LED, e não a tensão: ILED = (VB − 0,7 V) / R7.
- No SimulIDE a luz é uma conta: Ifoto = k · ILED, com k = 2,07 × 10⁻⁴ a 1,1 m, e k cai com d².
- O TIA de 330 kΩ converte ≈ 3 µA em 1 V; o comparador com 0,333 V de histerese recupera os bits.
- As capturas confirmam o cálculo com desvios inferiores a 7 % (voz) e a 1 % (texto); a 1,6 m o texto passa, mas com margens de poucos milivolts.