在使用超声测距模块时,需要给超声模块一个方波信号。于是可以用树莓派的的PWM功能产生一个低频的方波信号。
产生方波信号后,如果手边没有示波器,还可以使用Arduino的ADC采样功能,做一个简单的示波器。
树莓派产生方波
树莓派的pin12、pin33(GPIO_18、GPIO_13)是树莓派提供的PWM硬件接口,可以产生高频的PWM信号。 由于我只需要产生一个大约50Hz的方波信号。用最简单的GPIO库就可以产生可用的方波。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setwarnings(False)
p=GPIO.PWM(12,50) # 12是pin12,50是频率
p.start(30) # 30表示占空比30%
input("Press Enter key to Stop 50Hz PWM @ 30% duty cycle")
p.stop()
GPIO.cleanup()
运行该脚本,就可以在树莓派pin12上产生方波信号。
Arduino和树莓派连线
连线图如下所示:
注意: 要将树莓派和Arduino的地线连接在一起,使它们共地。
Arduino 进行ADC采样
Arduino 有A0-A5共6个模拟输入口,每个模拟口可以进行12位的采样,可以接受0-5V的电压输入,对应着0-1023的采样输出。
使用A0口进行采样:
void setup() {
Serial.begin(9600); // Starting Serial Terminal
}
void loop() {
int value = analogRead(A0);
Serial.println(value);
}
打开Arduino官方的IDE的【工具】-> 【串口绘图器】
设置波特率为9600,可以观察到:
注:树莓派GPIO引脚输出电压为3.3V,而Arduino采样范围是0-5V
还可以使用SerialPlot这个功能更丰富的串口绘图器,当做简易的示波器。 显示的波形如下:
Arduino串口绘图器
Arduino串口绘图器可以绘制多个连续图形,如下程序就是在串口绘图器中画出sin和cos函数图像。
double i = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
double temp = i*3.1415926/10.0;
Serial.print(sin(temp));
Serial.print(',');
Serial.println(cos(temp));
i+=0.1;
delay(5);
}
注:
- 若只绘制一个图像,使用Serial.println()函数即可
- 若绘制多个图像,在每个串口值间使用Serial.print(’,’)进行分隔