2018年10月11日木曜日

ラズベリーパイ奮闘中(1)立ち上げ


初めに
すでに買って遊んでいるArduinoのIDE(開発環境)をWindowsXPにインストールしているが、若干不満があるので、(長いファイルネームが使えないとか、日本語がうまく使えないとか)やっぱり中古でもWindows7機でも買おうかと思っていた矢先、Raspberry PaiでもArduinoのIDEがインストールできるとわかって、買うことにした。安いのと、いろいろいじれる楽しみがあるのと、以前からLinuxには興味があったので、さっそくアマゾンで購入。

買ったのはRaspberry Pai3 ModelB。スピードも速そうだし、WiFi、Bruetoothが使えるのも利点。
公式のACアダプタ(容量が不足するとトラブルの元になるらしいので)とクリアケースも一緒に購入。放熱フィンもついていたが、後でいろいろ見ると、ファン付きを使っている例もあるようなので、夏のことを考えるとファン付きがよかったかな、と若干後悔。(値段もそれほど変わらないようだし)


参考にしたもの
ネット上のいろいろなブログが参考になるが、特に系統立ったものとしては、
Device PLUSの 「IT女子のラズベリーパイ入門奮闘記」
http://deviceplus.jp/hobby/raspberrypi_entry_056/

他にも立ち上げまでの手順はいろいろなところで書かれているが、ネット上の資料で注意が必要なのはそれが書かれた時期。
ネットでの情報は数年前のものもあるので、現在のバージョンと合わないものもあり注意が必要。



OSをマイクロSDに書き込む
この辺はどこで探しても親切丁寧な情報があるので迷うことはないだろう。
「IT女子のラズベリーパイ入門奮闘記」では、第57回が参考になる。

順番に、
1)SDカードのフォーマット
SDFornatterが必要。ダウンロードしたが、どうも画面が違う。マニュアルにある画面とも異なるので、何か設定があるのかと思ったが、見当たらずそのままフォーマットする。
Windowsで単純にフォーマットしたらWin32DiskImagerで認識されなかったので、これを用意する。

2)zipファイルの解凍(展開)
7-Zipで解凍。容量が1GByte以上もあるので、こういったソフトが必要らしい。

3)イメージファイルのコピーをする場合は
Win32DiskImagerでコピーをする。単なるファイルコピーではOSは起動しない。
なおNOOBSをダウンロードした場合はRaspberry Paiでインストールを行なうので、このソフトは不要。


Raspberry Paiでインストールかイメージファイルをダウンロードか
Raspbianを立ち上げるには、NOOBSのダウンロードとイメージファイルのダウンロードと2つのパターンがあるので、どちらにするか迷うところだが、両方やってみた結果では時間的に大差ないようだ。ダウンロードするPCの能力やネットワーク環境にも左右されるが、比較的貧弱なノートPCとWiFiでも、イメージファイルをダウンロードして書き込んだほうが若干早いように思える。
NOOBSからだと、イメージファイルのコピーはないが、Raspberry PaiでのRaspbianのインストールに1時間程度かかるようだ。
イメージファイルをSDカードに書き込む場合は、電源を入れてすぐRaspbianが立ち上がる。

NOOBSか、イメージファイルかの違いは、LANの環境があるかどうかも関係する。
Raspberry Paiの動作には、USBキーボード、USBマウス、HDMIのモニター、有線LANが必要とある。自宅では有線LANが部屋になく、WiFiのみしか使えないので、NOOBSからRaspbian以外のOSをインストールしようとすると、有線LANが必要なので、ルータがあるところで作業しなくてはならない。Raspbianであれば、とりあえずの立ち上げまではどちらのやりかたでもできて、その後にWiFiの設定をすればネットからのダウンロードもできるようになる。

なおRaspbianとしては、どちらのやりかたでも同じようにはなるが、両方を比べると、立ち上げ後の日本語環境の設定や表示には若干違いがあるようなので、注意が必要。


2018年9月27日木曜日

ArduinoでSin波形を出力させる その2

Arduinoを使い、Sin波形を出す方法をネット上で見つけたが、内容が非常に深く、理解するまでにかなりの時間がかかった。(それでも十分理解したとは言い難い)一部備忘録としてまとめる。

さて、Arduinoの動作周波数から、以前のやり方では、どうしても高い周波数のSin波を出力することが難しかった。(最高でも910Hz)このサイトの記事を見ると、16kHzまで出せるという。これはやりかたを勉強しなくてはならない。

お手本は 大輔 岡氏の
https://qiita.com/daisukeokaoss/items/787dab2371d29a82308f
元ネタが
http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-dds-sinewave-generator/
である。

いくつかのポイントがあり、
(1)Sin波形データを用意してそれを順次取り出して出力する考え方は同じ。
(2)Sin波形の周波数を極めて正確にすることが一つのポイント。(Direct Digital Synthesis (DDS) )
(3)そのために、内部のタイマーによる割り込みを使っている。
(4)出力はPWM(Pulese Width Modulation)で、基本的にLPF(Low Pass Filter)を介してSin波形を出力させる。
(5)最高16kHzを出力させるため、ライブラリーを使うことなく、直接にマイコンを制御している。コマンドも工夫されている。

それぞれ補足すると、
(1)前は普通に配列を用意してSinデータを保存していたが、この例では、少ない(UNOでは1kbyteしかない)SRAM領域を使わずに、プログラム領域にデータを保存している。



(スケッチ冒頭に#include "avr/pgmspace.h"とあるが、以下のArduino Referenceにある通り、IDEバージョンが1.0以下だと必要なのであって、それ以降であれば不要。
PROGMEM is part of the pgmspace.h library. It is included automatically in modern versions of the IDE, however if you are using an IDE version below 1.0 (2011), you’ll first need to include the library at the top your sketch, like this:)

(2)(3)周波数精度を決めるのは16MHzのクリスタル発振器である。
(4)D/A変換は使用していない。
(5)Arduinoではなく、AVRマイコンのことを書いていたりするので、端子名称など、混同しないようにしないといけない。

大輔 岡氏のスケッチのうち、
dfreq=1.0; // initial output frequency = 1000.o Hz
の部分を
dfreq=1000.0; // initial output frequency = 1000.o Hz
として出力を見る。
LCフィルターがないので、図のようなCRフィルターで見ると、一応1kHzのようなSin波が出ているのが確認できた。(CRフィルターなので、出力レベルは低い)


横軸は1目盛り100μs
上がPD11の出力、下のSin波がCRフィルターの出力である。Sin波のギザギザはフィルターの特性が悪いことによる。後述の写真とやや似ている波形になっている。

まずは少しずつプログラムを解析していくことにする。
正確なタイミングでSin波を出すための割り込みについて、内臓のタイマーカウンターも含め以下の「うしこ」さんのサイトが詳しい。
http://usicolog.nomaki.jp/engineering/avr/avrInterrupt.html
http://usicolog.nomaki.jp/engineering/avr/avrPWM.html

タイマーカウンターと割り込みの動作
タイマーカウンターは、とても複雑で(機能豊富で)なかなか理解ができない。
ともかく今回はTimer2をつかっているので、そこだけを注目して見ていく。
Timer2はTimer0と同じく8bitのカウンターである。これをクロックでカウントアップしていくので、0〜255までカウントする。Arduino UNOのクロックは16MHzだが、カウンターのクロックは16MHzではないようだ。
以下のスケッチで確認すると、


内容をざっと説明する。
setup()でタイマーカウンターの動作を設定する。10,11行にある、TCCR2A,TCCR2Bレジスタの各ビットが意味を持ち、(内容の詳細は前述の「うしこ」さんのサイト参照)タイマーカウンターのクロックは分周なしに、直接カウンターを駆動(スピードが最も早い)、カウンターの値がレジスタのOCR2Aと同じになったら、PD11の出力をLにするように設定した。この例では0〜0xFF(255)までカウントアップしていく途中の中間値をレジスタOCR2Aにセット、PD11をオシロスコープで見ると、HとLが半分ずつ(duty50%)になるはずである。

Timer2がオーバーフローしたら(すなわち0xFFになったら)割り込みが発生し、この関数(23行)を動かす。今回はPD7をON,OFFさせている。通常であれば
 digitalWrite(7, HIGH);
 digitalWrite(7, LOW);
とするところだが、高速化するために、こういった書き方をしている。
PD7の出力をオシロスコープで見ることで、Timer2がどれくらいの周期で動いているのかがわかるはずである。
オシロスコープの波形は以下の通りである。

上がPD7、下がPD11である。やはりPD11出力はduty50%になっている。
横軸は1メモリ10μSなので、Timer2が0〜0xFF(255)までカウントアップするのに、約32μSかかっていることが分かる。
1つカウントアップするのに、32/256(μS)かかっているので、カウンターのクロック周波数は
256/32(MHz)=8(MHz)となり、クリスタルの16MHzの半分であることが分かる。

どうやったらアナログ値を出力できるのか
PWMなので、Hの時間が長いと(H=5Vとして)平均値は5Vに近くなり、短いと0Vに近くなる。先のスケッチで言えば、OCR2Aに0xFF(255)をセットすれば5Vになり、0をセットすれば0Vになる。半分の0x7F(127)をセットすれば、2.5Vになる。
Sin波形データは0〜255の範囲にあるので、このデータを順にOCR2AにセットしていくことでSin波形が出力されることがわかる。

その時の周波数は
Sin波形のデータは全部で256個ある。これを32μSごとにOCR2Aにセットしていくと、1周期は32×256(μS)となり、その周波数は1/(32×256)(MHz)すなわち約122Hzにしかならない。どうやったら1kHzや16kHzが出るのか。

ここでサイト上にある、波形の写真をよく見てみよう。

⊿t=33.3μs  f=33.3kHzと表示されているが、おそらく上のPWM波形の周期を測っているのではないか。(2つの小さなクロス)先のテストでもPWMの周期が32μsなので、たぶん間違いない。
では、下のSin波の周期はというと、先の33.3μsからすると1目盛り100μsのようなので、半サイクルで約5目盛り。(つまり500μs)1サイクルで1msすなわち1kHzとなる。
スケッチのsetup()の部分に
dfreq=1000.0; // initial output frequency = 1000.o Hz
とあるので、1kHzは出るのだろう。

(ただ、スケッチを追っていくと、出力周波数は
 dfreq=analogRead(0);             // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz
というloop()にある一文によって自由に(0〜1,023Hz)変えることができるようである。
大輔 岡氏はこの部分を使わず、setup()で
 dfreq=1.0; // initial output frequency = 1000.o Hz
と変更して、1HzのSin波を出力させている。そのことはコメントで記載している。)


DDSの動作を含め、冒頭のスケッチの解析については改めて。

2018年9月10日月曜日

hp Pavilion にSSDを取り付け(2)SSDの取り付け

SSD購入
2.5インチSSDが物理的に使えることがわかったので、購入することにする。
HDDの容量が500Gbyteではあるが、実際の使用容量は、リカバリーを含めても50G以下のようなので、費用節約のため120GのSSDを購入する。officeが使えて、ネットが見られれば十分なので、あれこれソフトをインストールする予定もないし、この容量でまずはOK。




リカバリーディスクの作成
Windows updateもしたことなので、この後のいろいろな作業を前にリカバリーをUSBメモリに作る。容量は16Gbyte。作業方法はネットで検索すると出てくるのでそれを参考にする。

HDDクローンの作成
いよいよSSDにデータを移していくことになるが、ネット上にはSSD交換の記事を多く見つけることができる。今回はノートPCでの交換なので、データはUSBを介して転送することになる。データ移行ソフトもフリーソフトがあるので、使い方を含めよく見ておく。今回はEaseUS Todo Backup Free 10.6を使用、ダウンロードする。

このソフトでクローンを作成するが、HDDはCドライブとリカバリーの入ったDドライブに別れている。Cドライブは400Gbyte以上あり、SSDが120Gbyteなので、容量差を解決しないとクローン作成ができない。HDDのパーティションを切り直し、Cドライブを小さくする必要がある。

Cドライブの縮小
Windows8.1ではパーティションの変更が機能としてついているので、それを利用する。
エクスプローラーを立ち上げ、「PC」を右クリックすると「管理」メニューがあるので、そこから「ディスク管理」を選択して作業をすすめる。
「コントロールパネル」>「システムとセキュリティ」>「管理ツール」でも同様。

今回は知らずにフリーのソフト(EaseUS Partition Master 12.9)をインストールしてパーティションを切った。
Cドライブをかなり小さくしたので、Dドライブとの合計がSSDより小さくなる。SSDに交換後、SSDをフルに使えるのか心配したが、差分はDドライブが拡大して、未使用部分が生じないようにしているようだ。

縮小が完了したらクローンの作成に入る。購入したSSDを以前買っていたHDDケースに装着し、USB接続する。


SSDをHDDケースにセットしたところ


実は今回、新しいSSDをHDDケースに入れてUSB接続した際、SSDを認識しないと思ってしまった。新しいSSDは「未割り当て」状態なので、、エクスプローラーでは表示されない。しかし管理ツールを立ち上げると、「未割り当て」として120Gbyteくらいが認識される。このとき、表示枠の下に隠れていて、見えなかったので、認識していないのでは、と思ってしまった。
スライダーを移動させると、ちゃんと「ドライブ1」として出てくる。(現用ドライブは”0”)

クローンの作成
フリーソフトのEaseUS Todo Backup Free 10.6を使って、容量を小さくしたHDDドライブのクローンをSSDに作成する。
今回誤ってCドライブのみのクローンを作ってしまったところ、SSDに交換後、ブートできないというメッセージが出て立ち上がらなかった。そこで再度C、D含むHDD全体のクローンを作ってOKとなった。

120GbyteのSSDではあるが、作業時間は1時間以上かかるので、完了まで放っておく。
出来上がるとSSDにCドライブ、Dドライブのクローンができ、リカバリーの入ったDドライブが容量拡大になっていることがわかった。(差分がDに追加された)

HDDとSSDを交換
以前に書いた手順に従って本体をバラし、HDDとSSDを入れ替える。交換後の動作は非常に快適。
ここでDドライブの増加分をCドライブに移すが、これは簡単にいかなかった。
まずは管理ツールでDドライブを縮小する。この結果、「未割り当て」部分ができるが、そのままでCドライブの拡張をしようとしてもできない。「未割り当て」部分をCドライブのすぐ後に持ってこないと結合・拡張ができないようだ。(パーティションの名前の通り、縮小はパーティションを新たに切ることでできるが、拡張はパーティションを取り去ることで実現するのだから、当然といえば当然。)

管理ツールではこの移動ができないので、フリーソフトのEaseUS Partition Master 12.9を使って「未割り当て」部をCドライブの後に移動させる。移動が完了すれば、管理ツールでCドライブの拡張が可能になる。

2019/3/25追記
EaseUSについては下記サイトを参照してください。

https://jp.easeus.com/backup-software/free.html

また、EaseUS Partition Masterの公式ページはこちら

https://jp.easeus.com/partition-manager-software/free.html

hp Pavilion にSSDを取り付け(1)構造

中古で買ったhp Pavilion。Windows8.1で10.1インチのネットブック。
Wifi、Bluetooth OK。メモリは2Gbyteで交換増設不可。HDDは250Gbyteという。(実際装着されていたのは500Gbyte)
スピードは期待していなかったが、HDDが「黄信号」と書いてあって、いずれ交換が必要な物件であるため、SSDに交換する前提で購入。


動作テスト
買った直後に電源を入れたが、HDDもメモリもフル稼働でほとんど応答せず。とても使用に耐えるとは思えなかったが、Windowsのupdateも終えると、HDD、メモリともにおちついて、稼働率もそれなりに下がり、Windows8.1のためか、立ち上がりも早くて動作としてはまずまず使える範囲となる。

バラす
裏を見ても、簡単にHDDを交換できるような代物ではない。ネットで情報を仕入れ、これはキーボード面を外すタイプと思われる。
バッテリーを取り外し、裏面のネジを全て外し、ゴム足を取ると更にその下にもネジがある。



ゴム足を取ると、その下にネジがある。
ゴム足は両面テープで付けられている。



そのネジを外した後で、ディスプレーのヒンジカバーを外し、その下のネジも外す。
これで、キーボードが外れるが、縁のどこかからパリパリと外していく。マイナスドライバーでこじって開けると、プラスチックに跡が残るので、ネットの記事ではギターのピックを使っていた。

キーボードをそっと開けると、接続用のフィルム状のケーブルが2本あるので、基板側のコネクタを外す。外し方は、黒のプラスチックのロックパーツを垂直に起こすことでフィルムケーブルがすっと抜ける。これでキーボードは外れる。
キーボードを持ち上げたところ
HDDが見えるが、交換できそうなメモリは見当たらない。


キーボードをつないでいるコネクタ(外しているところ)

基板を見ると、HDDがあるので、交換はできそう。HDD本体が金属フレームに取り付けられた上で本体に取り付けられている。
取り外したHDD

HDDは金属のフレームに取り付けられている

メモリーは見たところ交換できるようではない。基板に直にメモリーがついたタイプのようだ。これはメモリ増設でスピードアップは望めないので、ますますSSD交換が必要。
ここで一旦もとに戻して正常に動作することを確認。

ラズベリーパイ奮闘中(5)LibreOfficeを日本語表示にする

Raspbianには最初からOfficeソフトとして、LibreOfficeが入っているが、メニューなどは英語のままである。やはりこれでは使いにくいので日本語表示の方法を探すと、以下のような回答を見つけた。

https://ask.libreoffice.org/ja/question/78824/ri-ben-yu-hua-surufang-fa-wojiao-etekudasai/

そこには

「Linuxであれば、langpackのインストールし忘れが考えられるので日本語のlangpackパッケージをインストールしてください。」

とあった。
そこでLibreOfficeのいずれかを開いた状態でメニューバーのTools -> Optionsからオプション画面を開く。
Language Settings -> Languages に移動。

そこで、
Language Of
   User interface;
がJapaneseになっていないといけないようだ。


日本語の設定画面User interfaceがJapaneseになっていないといけないが、
langpackがインストールされていないと、ここにJapaneseを設定できない。

実際日本語化されていない状態だと、ここにJapaneseを選択できないので、(Japaneseが出てこない)日本語のlangpackをインストールすることにする。

アプリケーション メニューの「設定」から「Add/Remove Software」を選択、LibreOfficeで検索すると、たくさん出てくるが、順に探すとlangpackが確かにあり、インストールされていなかった。



Japanese helpと Japanese language packageをインストールした後。
(Japaneseで検索)

これをインストール(チェックマークを入れてApply)するとRebootすることなく、LibreOfficeを立ち上げた時点で日本語の表記になった。(すべてのOfficeに適用)

もしならなければ、前述の
Language Of
   User interface;
がJapaneseになっているかを確認。


メニューバーが日本語化された(LibreOffice Writer)


2018年5月3日木曜日

ArduinoでSin波形を出力させる

アナログ出力のために
Arduino UNOにはアナログ出力がないので、デジタル出力をアナログに変換する。
外部にDAコンバータを用意する方法もあるが、簡易にはデジタル出力を利用して抵抗でDA変換をしてみる。
この辺は以下のサイトが詳しい。
http://mitt.la.coocan.jp/pic/pic7_16.html

8ビットのDA変換をするために、D2〜D9を使って図のような回路を組んだ。


予めSinの計算をして、配列に格納しておいたデータを使ったが、周期は13ms(約77Hz)となった。その都度Sinの計算をしたときには67ms(約15Hz)であった。



スケッチの一部を書くと、


予め計算していたSinData[kakudo]の8bitデータ(0x0000〜0x00ff)を、1ビットずつデジタル出力にHIGH,またはLOWで書き出す方法である。

スケッチを工夫して速度を上げる
デジタル出力にパラレルに出力できたらいいのに、と思っていたら、ちゃんとあった。
上と同じ内容を次のように変更。


PORTDはデジタル出力の0から7だが、0と1はシリアル通信に使われているので、2bitシフトして使っている。その分PORTBで2ビットを出力している。

このプログラムでSin波を出力させると、Sin波形の途中に異なった値のデータが、ヒゲのように出てしまう。原因はPORTDとPORTBの出力に時間差があるためで、アナログ値がその間本来と異なった値となってしまったため。
途中にヒゲが出ている
PORTDとPORTBの出力時間差を極力減らすため、次のように変更する。


PORTDとPORTBの出力の時間差が原因であることを確認するために、②を挿入してみた。
②がないと、ヒゲはほとんどなく、②を入れると、その時間だけ異なったデータが出る。
ヒゲがなくきれいな波形となる
 これによるSin波の周期は1.1ms、周波数は約910Hzである。forループ1回あたり(1度あたり)約3μsであるので、このくらいが限界かもしれない。周波数を上げるためには、5度おきに間引いて計算するなどが考えられるが、当然波形としては段差が目立ってきたなくなる。
5度おきに計算。階段状になる。

外部のDAコンバータ、MCP4726(12bit)を使用した場合


インターフェースはI2Cで、速さが100kHz、400kHz、3.4MHzと3段階あるようだが、その設定の仕方がよくわからない。しかし実際にSCL波形をオシロスコープで見ると、10μs周期なので、100kHzでの通信と考えられる。
予めSinθの計算をしたうえで出力させたが、12ビットで転送時間もかかるのか、出力の周期は115ms(約8.7Hz)となり、とても遅い。(単純計算では1度あたり320μsかかったことになる。通信量からするとこんなものか。)ただ、波形としてはヒゲもなく大変きれいである。0.5度ごとに計算して出力させるともっときれいになるだろう。

12ビットのDACなので、1度につき2バイト使って360度計算すると、RAMの54%を使ってしまった。
波形はヒゲもなくきれい。しかし遅い。




インターフェースをSPIにしてみる
I2Cは100kHzに対し、SPIは数十Mbpsも可能というので、次のような回路を組んでみた。

シフトレジスタは別基板に作った
シフトレジスタ74HC595を使ってデータを転送し、その出力を抵抗でDA変換するものである。ラッチで一斉にデータが変わるので、ヒゲは出ない。
このICは秋月電商で販売している7セグメントLED用に使われているもので、SPI.transfer()のコマンドでデータを転送する。
スピードアップのため、予めSinθを計算させておいてSinData[]に保存、その後順に出力する。

この結果、Sin波形の周期は約4.5ms(222Hz)となった。ラッチの周期は12μsだが、8ビットのデータ転送自体は2μsで終了している。digitalWriteの時間が結構かかっているようだ。

そこで、digitalWriteの代わりにPORTBコマンドを使ってみたのが以下のプログラムである。


ラッチにD10を使用しているので、直接制御している。

この結果、Sin波の周期は1.1msと、Arduinoのデジタル出力に直接抵抗をつけた場合(PORTコマンド使用)とほとんど変わらなくなった。ラッチの周期は3μsである。波形としては当然ヒゲもなくきれいなSin波になっている。

信号のタイミングを見ると、上がラッチ出力で、下がシリアルデータである。ラッチをLにした後、シリアルデータを出力。8ビットのデータを約2μsで送出し、その後ラッチをHにすることで、シフトレジスタの出力が変化する。

Raspberry-Pai と Arduinoで簡易オシロスコープを作る

九州工業大学から、Arduinoを使った簡易オシロスコープが公表されており、実際に試した人が多かったのでトライしてみた。しかし、なかなかすんなりとは行かなかったので、メモとして記録しておく。

九州工業大学から公表されているページは次の通り。
http://www.iizuka.kyutech.ac.jp/faculty/physicalcomputing/pc_kitscope/


これに従って作業を進めれば良いだけのことだが、PCとArduinoを組み合わせてオシロスコープにするので、PC側の表示画面も用意しないといけない。これはProcessingを使って作られているとのこと。
Arduinoは今Raspberry-Paiで動いているので問題ないが、ProcessingをRaspberry-Paiで動かす必要がある。
まずはProcessingのインストールから。

ダウンロードは
https://processing.org/download/
から行う。
ラズパイなので、LinuxARMv6hf を選択するが、すぐ寄付のページになってしまう。寄付をせずにダウンロードもできるようだが、どこからどう進むのかが全くわからない。「寄付をせずにダウンロード」といったチェックマークも見当たらない。ネット上で探してみると、すんなりダウンロードできた例もあり(ほとんどがそうだろうが)、ブラウザによって違いがあるのかもしれない。ちなみに手元のスマホでやってみたら、同じように寄付のページは出るものの、並行してダウンロードが行われていた。もしかしてと思って見たが、Daunloadsのホルダーには、それらしきファイルは見当たらなかった。

結局「LinuxARMv6hf」にマウスのカーソルを持っていって右クリック、メニューから「リンクのアドレスをコピー」を選択して、新しいタブでアドレスを指定してダウンロードを行った。
ダウンロードしようとすると、この寄付の画面が出て、寄付をしないと進めない?
カーソルを「LinuxARMv6hfに合わせたら、右クリックでメニューを表示させ、
「リンクのアドレスをコピー」を選択。新しいタブに貼り付けてダウンロードを行う。

ラズパイへのインストールは不慣れで苦労したが、単に勉強不足というだけのこと。結局問題なくインストールが完了し、デスクトップ上にアイコンもできた。立ち上げてみると、ArduinoのIDEのような感じでスケッチの書き込みウィンドウが立ち上がる。

続いてProcessing、Arduinoのスケッチをダウンロードする。九州工業大学のページにはダウンロードのアイコンがあるので、そこをクリックする。しかし・・・。
「サーバーへのリクエストは拡張機能によってブロックされています。」
という表示が出てダウンロードできない。
このメッセージで検索をして解決法を探した。その結果ブラウザの「Chromiumの設定」メニューから、「その他のツール」→「拡張機能」を選択すると、いくつかのアイコンが並んでいて、その一つ「uBlock Origin 1.15.2」の「有効」についているチェックを外すことでダウンロードができるようになった。

ダウンロードできない

uBlock Origin 1.15.2」の「有効」についているチェックを外す








後はダウンロードしたProcessing、Arduinoのそれぞれのスケッチを動かすだけだが、Processingでオシロスコープのスケッチを立ち上げた状態では、Arduinoのボード書き込みがエラーとなった。止めたらOKだったので、余計なプログラムは止めてボードの書き込みをする必要があるようだ。
arduinoを動作させていないと、この画面が出る

オシロスコープとして使うためには、Arduinoに若干の配線が必要のようだが、とりあえずPCの表示も含めて動きそうかどうかはボードを繋いだだけで確認できる。

使用環境
Raspberry Pai3 ModelB V1.2(Raspbian
Arduino UNO(互換品KumanUNO)、nano(互換品Elegoo) ボードバージョン1.6.20で使用。(1.6.21ではnanoへの書き込みがエラーになるため)

オシロスコープらしくする
Arduino Nanoをケースに入れ、BNCのコネクタをつけてみたのが下の写真。ケースは100円ショップにあったカードケース。測定用ケーブルはアマゾンから2本347円で購入した、先端がミノムシクリップになっているもの。(クリップは付替え)

ケースは105X75X30mmのカードケース
Arduinoで発生させたSin波形を測定中。
これは外部にDAコンバータをつけたもの。


実際に波形を表示させてみる
やはりArduinoでスケッチを作り、サイン波形を出力させたものを表示してみた。
Digital OUTを8ビット使い、抵抗で簡易にDAコンバートしたものである。
(詳細は別途)
1度ごとに計算しているので波形が階段状になっているのがわかる。
波形出力は0〜5Vだが、抵抗で1/2にして入力している。
デジタルオシロなので、波形がチラチラすることもない。アナログのオシロで同じ波形を見ると、周期が長いので画面がチラチラする。

スケッチの作りがよくないので、Sin波形の所々にヒゲが出ている。アナログのオシロだとヒゲはほとんど見えない。(出ていても輝度が薄くなってわからない)
サイン波形の周期は約67msとなっていて(10ms/div)、周波数にすると、約15Hzである。スケッチでいちいちSinθの計算をしつつ、D2〜D9に1ビットずつ順番に出力しているので、こんなに遅くなっている。
ArduinoでSin波形や三角波を出力させる方法は、外部にDAコンバータをつけるなど、もっといいやり方があると思う。(別途実験をしている)
ただ、実際に出力波形を測定に使うのであれば、プログラマブルオシレータなどの専用の発振器を使用するのが現実的。

INA219にはまる

 INA219電流センサーの互換品を買う。 互換品 オリジナル Adafruit Industries(エイダフルート) 商品レビューで評判が良くない。不良品が多すぎるという。 とはいえ全体の購入者数からすれば一部の人の評価だろうから、まあ大丈夫だろうと買う。 オリジナルの値段の...