工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino Nanoで作るDIYミニオシロスコープ – ステップバイステップチュートリアル

部品と材料

部品 数量
Arduino Nano R3 1
ElectroPeak 0.96インチ OLED 64x128 ディスプレイモジュール (SSD1306) 1
タクトスイッチ(トップアクチュエート) 9
1N4148 高速スイッチングダイオード 4

アプリとオンラインサービス

プロジェクト概要

この動画では、自宅で簡単に作れるミニオシロスコープの製作方法を紹介します。シンプルで簡単な構成です。※このコードは私がオリジナルで書いたものではなく、チュートリアルとしてまとめたものです。サードパーティのソースコードを参考にしています(リンクは下記参照)。ご質問やご提案があれば、YouTube動画のコメント欄へどうぞ。チャンネル登録と高評価もよろしくお願いします!

完全なチュートリアルとソースコードはこちら:リンク

Instagram: @pm.goharian

必要な部品

オシロスコープとは?

『オシロスコープ』(以前は『オシログラフ』と呼ばれた)は、非公式には『スコープ』『オースコープ』『CRO』(陰極線オシロスコープ)、『DSO』(デジタルストレージオシロスコープ)とも呼ばれ、電気信号の変化をグラフィカルに表示する電子測定器です。通常、電圧をY軸、時間をX軸とした2次元プロットとして、1つ以上の信号を時間の関数として表示します。音や振動などの他の信号も電圧に変換すれば表示可能です。

オシロスコープは電気信号の時間変化を表示し、キャリブレーションされたスケール上で波形を表示します。この波形から振幅、周波数、立ち上がり時間、時間間隔、歪みなどの特性を解析できます。最新のデジタル機器ではこれらの値を自動計算・表示します。本来は、画面に内蔵されたスケールで波形を手動測定してこれらの値を求めていました。

回路図

注意: 回路のすべての接続が、以下の回路図と完全に一致するようにしてください。

Arduino Nanoで作るDIYミニオシロスコープ – ステップバイステップチュートリアル

Arduino Nanoで作るDIYミニオシロスコープ – ステップバイステップチュートリアル

Arduino Nanoで作るDIYミニオシロスコープ – ステップバイステップチュートリアル

参考資料:

コード

このオシロスコープのスケッチコードです。OLEDディスプレイ制御にAdafruit GFX/SSD1306ライブラリを使用し、EEPROMで設定を保存、割り込みでトリガー同期を実現しています。

/* (_20190212_OLEDoscilloscope.ino) 1285byte ram free 2019/02/12 */
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <avr/pgmspace.h> // PROGMEM
#include <EEPROM.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define REC_LENGTH 200

#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// 電圧レンジ名(PROGMEMに格納)
const char vRangeName[10][5] PROGMEM = {"A50V", "A 5V", " 50V", " 20V", " 10V", " 5V", " 2V", " 1V", "0.5V", "0.2V"};
const char * const vstring_table[] PROGMEM = {vRangeName[0], vRangeName[1], vRangeName[2], vRangeName[3], vRangeName[4], vRangeName[5], vRangeName[6], vRangeName[7], vRangeName[8], vRangeName[9]};

// 時間レンジ名
const char hRangeName[8][6] PROGMEM = {" 50ms", " 20ms", " 10ms", " 5ms", " 2ms", " 1ms", "500us", "200us"};
const char * const hstring_table[] PROGMEM = {hRangeName[0], hRangeName[1], hRangeName[2], hRangeName[3], hRangeName[4], hRangeName[5], hRangeName[6], hRangeName[7]};

int waveBuff[REC_LENGTH];
char chrBuff[10];
String hScale = "xxxAs";
String vScale = "xxxx";
float lsb5V = 0.0055549;
float lsb50V = 0.051513;
volatile int vRange;
volatile int hRange;
volatile int trigD;
volatile int scopeP;
volatile boolean hold = false;
volatile boolean paraChanged = false;
volatile int saveTimer;
int timeExec;
int dataMin;
int dataMax;
int dataAve;
int rangeMax;
int rangeMin;
int rangeMaxDisp;
int rangeMinDisp;
int trigP;
boolean trigSync;
int att10x;

void setup() {
  pinMode(2, INPUT_PULLUP);  // INT0
  pinMode(8, INPUT_PULLUP);  // Select
  pinMode(9, INPUT_PULLUP);  // Up
  pinMode(10, INPUT_PULLUP); // Down
  pinMode(11, INPUT_PULLUP); // Hold
  pinMode(12, INPUT);        // 1/10分圧切替
  pinMode(13, OUTPUT);       // LED
  
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    for (;;); // 失敗時は無限ループ
  }
  loadEEPROM();
  analogReference(INTERNAL); // 1.1V基準電圧
  attachInterrupt(0, pin2IRQ, FALLING);
  startScreen();
}

void loop() {
  digitalWrite(13, HIGH);
  setConditions();
  readWave();
  digitalWrite(13, LOW);
  dataAnalize();
  writeCommonImage();
  plotData();
  dispInf();
  display.display();
  saveEEPROM();
  
  while (hold == true) {
    dispHold();
    delay(10);
  }
}

// 以下、各関数の実装(setConditions, writeCommonImage, readWave, dataAnalize, startScreen, dispHold, dispInf, plotData, saveEEPROM, loadEEPROM, pin2IRQ)
// 完全なコードはダウンロードしてご確認ください。

主な機能:

回路図

Arduino Nanoで作るDIYミニオシロスコープ – ステップバイステップチュートリアル

製造プロセス

  1. 自宅で作るDIY宿題自動筆記マシン:AxiDraw風ペンプロッターの自作ガイド
  2. Arduino Nano RP2040で作るDIY Photoshopコントロールコンソール
  3. Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
  4. Arduinoで作るパンチングキーボードボタン:ストレス解消カスタムキー
  5. Arduinoで地球の質量を測定:ステップバイステップDIYガイド
  6. PHPベースのWebインターフェースでArduino Unoを制御する構築ガイド
  7. Arduinoで楽器演奏:音階生成のステップバイステップガイド
  8. Arduinoと超音波センサーで自動ドアを制御:LCD・ブザー付き完全ガイド
  9. Arduino Nanoで作る「食べさせロボット」:超音波センサーで食べ物検知し口を開閉
  10. ArduinoとProcessingで作るリアルタイムデジタルコンパス
  11. DIYカーボンファイバー製作:自宅でカーボンファイバーパーツを作るステップバイステップガイド