A fibra óptica é uma tecnologia de transmissão de dados que utiliza cabos compostos por fios de vidro ou plástico extremamente finos para transmitir informações em forma de luz. É uma das formas mais rápidas e eficientes de transmissão de dados disponíveis atualmente, sendo amplamente utilizada em sistemas de telecomunicações, internet de alta velocidade, redes de televisão a cabo e outras aplicações que demandam transmissão de grandes quantidades de dados em altas velocidades e com baixa perda de sinal. Como usaremos essa mecânica de comunicação no Arduino? Como no funcionamento de qualquer comunicação, teremos um emissor e um receptor. O receptor consiste em um componente sensível à luz, ele será responsável por detectar os pulsos luminosos enviados pelo emissor. Já o emissor consiste em uma fonte de luz que será pulsada conforme o dado enviado, como a comunicação do Arduino é feita em bits (ligado ou desligado), aproveitaremos os bits para ligar ou desligar o laser a fim de apenas trocar a eletricidade pela luz. Agora que entendemos a mecânica do funcionamento, podemos ir para a montagem.
Os jumpers M/M são para a conexão na própria protoboard, já os F/F são para conexão dos módulos no Arduino nano. Poderíamos usar qualquer outro Arduino, mas por questões de disponibilidade e custos, preferi o nano. Dependendo da aplicação pode ser necessário de jumpers M/F.
O circuito receptor baseia-se na entrada de dados (bits) no pino RX (1) do Arduino pela incidência do “liga-desliga” (bits) do led serial. Quando o laser for ligado, o Arduino registra 1 e quando for desligado, é registrado 0. O V indica a direção da esfera do led, portanto atenção.
Código para o receptor:
void setup() { pinMode(13, OUTPUT); // Define o pino 13 como saída Serial.begin(9600); // Inicia a comunicação serial com uma taxa de transmissão de 9600 bps } void loop() { char entradaSerial = Serial.read(); // Lê o caractere recebido da entrada serial e armazena na variável 'entradaSerial' if (entradaSerial == '2') { // Se o caractere recebido for '2' digitalWrite(13, HIGH); // Liga o LED conectado ao pino 13 delay(100); // Aguarda 100 milissegundos digitalWrite(13, LOW); // Desliga o LED delay(100); // Aguarda mais 100 milissegundos } if (entradaSerial == '1') { // Se o caractere recebido for '1' digitalWrite(13, HIGH); // Liga o LED } if (entradaSerial == '0') { // Se o caractere recebido for '0' digitalWrite(13, LOW); // Desliga o LED } }
O código apresentado acende o led se for recebido 1, apaga se for recebido 0 e caso seja 2, ele piscará com um intervalo de 100 ms.
Explicação:
void setup() { pinMode(13, OUTPUT); // Define o pino 13 como saída Serial.begin(9600); // Inicia a comunicação serial com uma taxa de transmissão de 9600 bps }
A função “setup()” é executada uma única vez, quando a placa Arduino é ligada ou resetada. Nessa função, é definido que o pino 13 será utilizado como saída para controlar um LED. Também é iniciada a comunicação serial com uma taxa de transmissão de 9600 bits por segundo.
void loop() { char entradaSerial = Serial.read(); // Lê o caractere recebido da entrada serial e armazena na variável 'entradaSerial' if (entradaSerial == '2') { // Se o caractere recebido for '2' digitalWrite(13, HIGH); // Liga o LED conectado ao pino 13 delay(100); // Aguarda 100 milissegundos digitalWrite(13, LOW); // Desliga o LED delay(100); // Aguarda mais 100 milissegundos } if (entradaSerial == '1') { // Se o caractere recebido for '1' digitalWrite(13, HIGH); // Liga o LED } if (entradaSerial == '0') { // Se o caractere recebido for '0' digitalWrite(13, LOW); // Desliga o LED } }
A função “loop()” é executada continuamente após a execução da função “setup()”. Nessa função, é lido o caractere recebido pela entrada serial e armazenado na variável ‘entradaSerial’.
Os condicionais “if” são utilizados para verificar qual caractere foi recebido e, em seguida, acender ou apagar o LED. Se o caractere ‘2’ é recebido, o LED pisca rapidamente, alternando entre ligado e desligado com um intervalo de 100 milissegundos entre cada estado. Se o caractere ‘1’ é recebido, o LED é ligado. Se o caractere ‘0’ é recebido, o LED é desligado.
O ciclo se repete indefinidamente, aguardando a chegada de novos dados pela entrada serial e executando as ações correspondentes a cada caractere recebido.
O circuito emissor baseia-se no envio da leitura serial pelo pino TX (0), onde o led está conectado. Como o envio é digital em bits (ligado ou desligado, 1 e 0), então led ligará no bit 1 e desligará no bit 0.
Código para o emissor:
void setup() { Serial.begin(9600); // Inicia a comunicação serial com uma taxa de transmissão de 9600 bps } void loop() { if (Serial.available()) { // Verifica se há dados disponíveis na entrada serial Serial.write(Serial.read()); // Lê o caractere recebido e envia de volta pela saída serial } else { // Não há dados disponíveis na entrada serial, então a execução passa para essa parte do código // Essa parte do código está vazia, mas poderia ser usada para realizar outras tarefas enquanto o programa aguarda a chegada de dados pela entrada serial. } }
Explicação do código emissor:
void setup() { Serial.begin(9600); // Inicia a comunicação serial com uma taxa de transmissão de 9600 bps }
A função setup() é executada apenas uma vez, no início do programa. Neste caso, ela inicia a comunicação serial com uma taxa de transmissão de 9600 bits por segundo.
void loop() {
if (Serial.available()) { // Verifica se há dados disponíveis na entrada serial
Serial.write(Serial.read()); // Lê o caractere recebido e envia de volta pela saída serial
}
else {
// Não há dados disponíveis na entrada serial, então a execução passa para essa parte do código
// Essa parte do código está vazia, mas poderia ser usada para realizar outras tarefas enquanto o programa aguarda a chegada de dados pela entrada serial.
}
}
A função loop() é executada continuamente enquanto o Arduino estiver ligado. Ela verifica se há dados disponíveis na entrada serial utilizando a função Serial.available(). Se houver, ela lê o caractere recebido utilizando a função Serial.read() e envia de volta pela saída serial utilizando a função Serial.write().
Se não houver dados disponíveis, a execução passa para a próxima parte do código, representada pelos comentários “Não há dados disponíveis na entrada serial, então a execução passa para essa parte do código”.
O sensor de laser geralmente vem desmontado. O receptor se assemelha com um led, mas terá 3 pinos, conecte de forma que a face que contém uma pequena esfera seja voltada para o lado dos terminais. O alto índice de luminosidade no local a ser realizado o experimento pode causar interferências no sensor. (AVISO: não é normal o sensor esquentar muito).
Por que não usar um LDR? Após minhas pesquisas, descobri que o LDR não é a melhor opção para esse projeto, além de dificultar a programação, esse componente tem uma demora para se adaptar à luz, o que torna quase impossível uma boa comunicação serial e aproveitar as altas velocidades de envio da luz.
Se o código for editado, atente-se para a velocidade serial (Baud rate), pois devem estar sincronizados.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!