



Não é nenhuma varinha mágica ou encantamento como "Wingardium Leviosa" que você vai precisar para esse projeto. Com um Arduino, um driver de motor ponte H e um sensor de distância ultrassônico HC-SR04 você consegue criar uma máquina capaz de fazer objetos levitarem.
Para este projeto, serão utilizados:
Para montar o circuito desse projeto, precisamos desmontar o sensor ultrassônico. Para isso, iremos remover o emissor e o receptor, como na imagem:
Observações:
1 - Atente-se à polaridade dos sensores, em alguns casos, há um circulo preto envolvendo o terminal negativo.
2 - Dependendo do módulo ponte H, é necessário fechar os contatos referentes à habilitação do chip controlador (enable). Para montar nossa máquina de levitação, estou usando uns suportes impressos em 3D disponíveis nesse link. Se você não tem impressoras 3D, pode usar outros tipos de montagens como, por exemplo, garras jacaré ou parafusos.
Exemplo de montagem com parafuso e placa perfurada:
A montagem é simples, mas vale ficar atento ao alinhamento dos sensores. Eles devem estar próximos, com uma distancia de, no máximo, 4 cm e bem alinhados entre si. Caso contrário, sua máquina não vai funcionar. Outro ponto é que, ao testar sua máquina, evite a circulação de corrente de ar forte no local, para não tirar a bolinha do lugar.
/**
* @file Levitador_ultrasonico.ino
* Modificado por: Saulo Aislan
* @brief Firmware responsável por gerar uma onda de 80kHz no sensor ultrassonico.
* @version 0.1
*
* @copyright Copyright (c) 2022
*
*/
#if defined(__arm__) // Familia Arduino
#elif defined(__AVR__) // Familia Arduino e outras placas AVR
#else
#error A Placa selecionada nao e suportada, selecione placas da familia Arduino.
#endif
byte TP = 0b10101010; // Alterna os valores entre 0 e 1, para setar nas portas
/**
* @brief Interrupcao por comparacao de igualdade no TIMER1
* Onde inverte o valor da porta a cada ciclo
*/
ISR(TIMER1_COMPA_vect)
{
// PORTC contem os bits das portas 0 a 7 analogicas ou as portas PC
PORTC = TP; // Envie o valor de TP para as portas PORTC
TP = ~TP; // Inverter TP para a proxima execucao
}
void setup()
{
// Registrador DDRC (Data Direction Register) das portas PC (PC1,PC2,PC3..)
DDRC = 0b11111111; // Define todas as portas PC (PC1,PC2,PC3..) analogicas como saida (OUTPUT)
noInterrupts(); // Desabilita a interrupcao
// Configuracao do TIMER1
TCCR1A = 0; // Registrador TCCR1A configurado para o timer1
TCCR1B = 0; // Registrador TCCR1B configurado para o timer1
TCNT1 = 0; // Zera o contador TCNT1 de 16bits
OCR1A = 200; // Define o registrador de comparacao OCR1A (16MHz / 200 = onda quadrada de 80kHz -> onda completa de 40kHz)
TCCR1B |= (1 << WGM12); // Modo CTC (WGM12 bit para o modo de geracao de onda)
TCCR1B |= (1 << CS10); // Define prescaler para 1 = sem prescaling (CS10 bit para o clock interno - prescaler)
// TIMSK1 máscara do registrador de interrupção do temporizador/contador
TIMSK1 |= (1 << OCIE1A); // Habilita a interrupcao por comparação pela igualdade (OCIE1A bit que ativar interrupção de comparação pela igualdade do temporizador/contador1)
interrupts(); // Ativa interrupcao
}
void loop() {} Nesse trecho, temos um IF e ELSE por diretiva de compilador para garantir que o código seja executado na arquitetura correta.
#if defined(__arm__) // Familia Arduino #elif defined(__AVR__) // Familia Arduino e outras placas AVR #else #error A Placa selecionada nao e suportada, selecione placas da familia Arduino. #endifJá neste, temos uma interrupção por comparação de igualdade no TIMER1, em que são invertidos os valores (TP) das portas (PORTC) a cada chamada.
ISR(TIMER1_COMPA_vect)
{
// PORTC contem os bits das portas 0 a 7 analogicas ou as portas PC
PORTC = TP; // Envie o valor de TP para as portas PORTC
TP = ~TP; // Inverter TP para a proxima execucao
}
Então, são definidas as portas PC como OUTPUT e é desabilitada a interrupção.
// Registrador DDRC (Data Direction Register) das portas PC (PC1,PC2,PC3..) DDRC = 0b11111111; // Define todas as portas PC (PC1,PC2,PC3..) analogicas como saida (OUTPUT) noInterrupts(); // Desabilita a interrupcaoAbaixo, são feitas as configurações do TIMER1.
TCCR1A = 0; // Registrador TCCR1A configurado para o timer1 TCCR1B = 0; // Registrador TCCR1B configurado para o timer1 TCNT1 = 0; // Zera o contador TCNT1 de 16bits OCR1A = 200; // Define o registrador de comparacao OCR1A (16MHz / 200 = onda quadrada de 80kHz -> onda completa de 40kHz) TCCR1B |= (1 << WGM12); // Modo CTC (WGM12 bit para o modo de geracao de onda) TCCR1B |= (1 << CS10); // Define prescaler para 1 = sem prescaling (CS10 bit para o clock interno - prescaler) // TIMSK1 máscara do registrador de interrupção do temporizador/contador TIMSK1 |= (1 << OCIE1A); // Habilita a interrupcao por comparação pela igualdade (OCIE1A bit que ativar interrupção de comparação pela igualdade do temporizador/contador1)







TCNT1 = 0; // Zera o contador TCNT1 de 16bits
OCR1A = 200; // Define o registrador de comparacao OCR1A (16MHz / 200 = onda quadrada de 80kHz -> onda completa de 40kHz)
TIMSK1 |= (1 << OCIE1A); // Habilita a interrupcao por comparação pela igualdade (OCIE1A bit que ativar interrupção de comparação pela igualdade do temporizador/contador1)
interrupts(); // Ativa interrupcaoPara mais informações sobre os registradores, acesse o datasheet nesse link.
Um levitador acústico básico tem duas partes principais: um transdutor, que é uma superfície vibratória que emite som, e um refletor. Muitas vezes, o transdutor e o refletor têm superfícies côncavas para ajudar a focar o som. Uma onda sonora é gerada no transdutor e ricocheteia no refletor. Ao colocar um refletor longe de um transdutor por um múltiplo de meio comprimento de onda, o levitador acústico cria uma onda estacionária. Ondas sonoras estacionárias têm nós definidos (áreas de pressão mínima) e antinodos (áreas de pressão máxima). Os nós de uma onda estacionária estão no centro da levitação acústica. Embora o som seja uma onda longitudinal, a maioria das ilustrações descreve o som como uma onda transversal. Isso ocorre simplesmente porque as ondas transversais são mais fáceis de visualizar do que as ondas longitudinais.

Nesse tutorial, aprendemos mais sobre o sensor ultrassônico HC-SR04 e as ondas sonoras e estacionárias. Com isso, essa máquina é perfeita para feiras e demonstrações cientificas na escola. Para mais materiais como esse, continue acompanhando as postagens semanais do blog e não deixe de visitar nossa loja. Lá, você encontra todos os componentes necessários para desenvolver esse e muitos outros projetos! Que a força estejam com vocês e até mais!
Alguns referências utilizadas no artigo:
|
Não é nenhuma varinha mágica ou encantamento como “Wingardium Leviosa” que você vai precisar para esse projeto. Com um Arduino, um driver de motor ponte H e um sensor de distância ultrassônico HC-SR04 você consegue criar uma máquina capaz de fazer objetos levitarem.
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200