基于Arduino的超声波悬浮装置
超声波悬浮原理
项目图片
概述
实验需要使用Arduino驱动换能器产生一个40KHz的方波,可以使用换能器组,也可以使用Arduino的超声波模块。但是仅仅使用Arduino输出的方波信号的功率,并不足以使得小物体悬浮,所以需要使用一个模块(L298N)进行放大,将输出的振幅放大到12V,一般来说L298N用来驱动电机的,不过在本实验中算是借用了其功率放大功能。
超声波模块
注意超声波模块和换能器的原理是一样的,唯一的不同就是换能头的数量不同
接口描述:VCC和GND为电源和地,TRI是触发引脚,ECHO是接收引脚
想要触发超声波的时候,需要发送一个特殊的信号序列,通过参考资料得,持续时间至少为10 µS(10微秒)的脉冲,发送脉冲可以使用PWM功能,使用定时器实现,当接收到超声波的时候,ECHO引脚会产生一个回馈信号,通过参考资料得出是高电平信号,接收到高电平信号之后,MCU就可以进行下一步的操作了。
代码描述见下
byte TP = 0b10101010;
void setup() { //初始化函数,只执行一次
DDRC = 0b11111111; //DDRC是一个端口寄存器,用于配置引脚的输入和输出,1为输出,0为输入
noInterrupts(); //系统函数,关闭中断
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 200;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TIMSK1 |= (1 << OCIE1A); //寄存器配置产生
interrupts();
}
ISR(TIMER1_COMPA_vect) {
PORTC = TP;
TP = ~TP;
}
void loop() {
}
L298N(数据手册点此访问)
上图可以看出L298N芯片内部是三极管和逻辑门的组合,主要对信号进行一个放大的作用
组装
Arduino-L298N-超声波模块
我得到了什么
- 在做项目的时候,不免要参考一些资料,有些资料是外文的,所以锻炼了英文阅读能力,需要从海量的资料里面提取有用的信息,锻炼了信息筛选能力
- 重新走了一边定时器设定的流程,由于Atmega是AVR单片机,所以又了解了下不同架构的单片机的定时器配置,尤其是寄存器配置
- arduino输出的信号不能直接用,所以需要找到合适的放大模块,在产品筛选这一块也下了一点功夫。