在使用超声测距模块时,需要给超声模块一个方波信号。于是可以用树莓派的的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(’,’)进行分隔

串口绘图