LoginSignup
3
2

SPRESENSE で超音波フロータを作ってみた

Last updated at Posted at 2023-12-21

たまにはクリスマスっぽいネタということで、SPRESENSE で超音波フロータを作ってみました。超音波フロータは、海外 Arduino 界隈で一時期流行ったので、作り方はたくさん転がっています。

SPRESENSEなら、もっと簡単にできるんじゃね?と思い立ち、早速やってみました。めちゃくちゃ簡単でした。試してみた様子がこちらです。

準備するもの

(1)超音波のトランスデューサとレシーバ
超音波変換器 TCT40-16R/T

image.png


(2)モータードライバ「DRV8835」
DRV8835使用ステッピング&DCモータドライバモジュール

image.png


(3)SPRESENSEメインボード+拡張ボード
SPRESENSEメインボード
SPRESENSE拡張ボード

image.png

作り方

まず超音波トランスデューサとレシーバをバラします。

DSC02553.JPG


超音波トランスデューサとレシーバにワイヤをはんだ付けして、次のように配線します。簡単ですね。PWM0は6ピンに、イネーブル信号は4ピンに接続してください。

image.png


接続した状態がこちらです。

DSC02556.JPG

プログラム

Arduino IDE で作ったスケッチがこちら。短い!

#include <sys/ioctl.h>
#include <stdio.h>
#include <fcntl.h>   
#include <nuttx/timers/pwm.h>
#include <MP.h>

static uint32_t frequency =  40000;
static uint16_t duty = 0x7fff; 

char pwm_devpath[] = "/dev/pwm0";
int fd;
struct pwm_info_s info;

void setup() {
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);

  printf("setup /dev/pwm0\n");
  /* Open the PWM device for reading */
  fd = open(pwm_devpath, O_RDONLY);
  if (fd < 0) {
    printf("error: failed to open pwm0 device\n");
    return;
  }

  /* Configure the characteristics of the pulse train */
  info.frequency = frequency;
  info.duty      = duty;
  ioctl(fd, PWMIOC_SETCHARACTERISTICS, (unsigned long)((uintptr_t)&info));

  printf("pwm0 start\n");
  ioctl(fd, PWMIOC_START, 0);
}

void loop() { }

遊び方

超音波トランスデューサとレシーバの端が終端するように距離を調整しましょう。温度で音速もかわるのであくまで目安ですが。だいたい3cm弱くらいにしておけばうまくいくと思います。トランスデューサは下にないと浮かないので注意してください。

image.png


波長に応じて圧力のスポットが発生するので、そこに発泡スチロールのかけらを近づけるとすいつくように浮き始めます。

簡単に試せるのでぜひやってみてください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2