virt_flyのブログ -31ページ目

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

↑Arduino化したATtiny85がLEDの点滅用スケッチを実行

 

「書き込み装置を使って書き込む」

ATtiny85にブートローダーを書き込みArduino化ができましたので、次はスケッチ(プログラム)の書き込みと実行です。

 

 

 スケッチの書き込みと実行

 

●要点

 

要点は、ATtiny85はArduinoと違ってUSBポートがなく直接パソコンに接続ができないので、ブートローダーの書き込み同様スケッチも書き込み装置を使うことになる点です。ちなみに、私の場合はArduinoを書き込み装置として使う方法ではブートローダーの書き込みに失敗していますので、スケッチも書き込み専用のUSBaspを使うこととします。

 

ちなみに、スケッチの書き込みはArduinoの通常のスケッチの書き込みと異なり、[スケッチ]から「書き込み装置を使って書き込む」を実行することとなります。USBaspという書き込み装置を使うわけですが、ブートローダーの書き込みでは[ツール]から[書き込み装置]を指定し、[ブートローダを書き込む]をクリックだったので、少々紛らわしいことに注意を要します。

 

話は以上に尽きるのですが、一応スクリーンショットも伏して手順をメモします。

 

●USBaspを使ったスケッチの書き込み

 

USBaspとパソコン、ATtiny85との接続はブートローダーの書き込み時と全くかわりません。そのまま使うことを前提に話を進めます。必要な場合は前号を参照ください。

 

書き込むスケッチは、ATtiny85がArduinoのとして動くかどうかを確かめるためですから、当然ながらLチカになります。参考にしたサイトにならい、Arduino IDEに参考例として含まれるBlinkを流用し外部LEDの点灯用に修正します。ATtiny85にはArduinoのようにLEDを内蔵していませんから。

 

LEDは、後でATtiny85の3ピンにつなぎ、適当な抵抗を付けることにします。

 

それでは、スケッチの参考例から目的のスケッチを開くことにします。

 

 

Arduino IDEのウインドウ画面上部のメニューから[ファイル]をクリック、開いたドロップダウンメニューの中の[スケッチ例]をクリックし、次に開いた「付属のスケッチ例」のリストにある[01.Basics]をクリックして、あらたなリストから[Blink]を選びます。

 

 

開いた「Blink」のエディット画面で、スケッチに修正を加えます。28行目の「pinmode(LED_BUILTIN、OUTPUT);」と33行目の「digitalWrite(LED_BUILTIN, HIGH);」、35行目の「digitalWrite(LED_BUILTIN, LOW);」のいずれも「LED_BUILTIN」の部分を「4」に書き換えます。

 

 

スケッチが修正できたら、上部のメニューの[スケッチ]をクリックし、次いで「書き込み装置を使って書き込む」を選択します(通常、Arduinoでスケッチを書き込む方法とは異なっていることに注意!)。

 

 

すると、コンパイルと書き込みが行われ、問題がなければ「完了」が表示されます。

上はWindows、下にUbuntuの場合のスクリーンショットも参考に掲載します。Arduino IDEのバージョンの違いでしょうか、少し違いがあります。

 

 

●LEDの点灯

 

スケッチを書き込んだATtiny85を取り出し、その3ピンにLEDをつないで適当な抵抗も付けて給電できるようにしてやります。

 

 

電気が流れると、無事LEDが点滅しだしました。

 

点滅のパターンを変えたスケッチに修正して改めてATtiny85に書き込み直したところ、新たな点滅パターンで点滅しだしましたからフロックではありません。Windows11、Ubuntu22.04LTSのいずれで書き込んだものでも光ってくれました。

 

Attiny85 を使って何を作ろうか、楽しみになってきました。

 

●ブートローダーがなくてもスケッチが実行できる!

 

さて、前回冒頭でふれたブートローダーがなくてもスケッチが実行できるかについて、ATtiny85で試してみました。

 

ATtiny85にブートローダーがインストールされていなくても、スケッチを書き込み実行することは可能です。LEDの点滅を実行させてみて確認できました。

 

ただし、ブートローダーをインストールしてある場合と較べて点滅の間隔は長く、あるサイトで見かけたように「ブートローダーを書き込んでいない場合は不安定」なのかもしれません。

 

 

《主な参考サイト》

 

 

 

 

《物品購入先》

 

 

 

↑ATtiny85は1円玉より小さいけれど低消費電力で動作電圧が2.7〜5.5Vと、扱いやすく低価格ですぐれたマイコンチップ

ATtiny85へUSBaspでブートローダー書き込み

 

Arduino Nano互換機にはブートローダーが書き込まれていないことが多いと知り、手持ちの互換機はどちらだろうかと悩んだものでした。

 

ブートローダーというと、OSとハードとの間を取り持つBIOSを読み込みOSを起動させるパソコンでのイメージが強く、プログラムから直接ハードを操作するマイコンのような場合とは自ずと違いのあることになかなか思い至らず、ArduinoではパソコンのUSBポートから送られてくるスケッチの情報を、シリアルインターフェースで取り込み、ブートローダーがフラッシュメモリにスケッチを転送してから実行するという意味がすぐには理解ができなかったのです。頭の悪いことです。

 

スケッチ(プログラム)が書き込めて実行できたということは、すなわち互換機にあらかじめブートローダーがインストール済だったとみなされます。

 

となれば、ブートローダーが書き込まれていなければどうなるかが知りたいところです。ブートローダーがなくてもスケッチが実行できるとも聞きますから。

 

そこで、ブートローダーの書き込みに挑戦することにしたのが、今回のテーマです。

 

 

 ATtiny85のArduino化

 

●低消費電力量で動作電圧が2.7〜5.5Vと広いのがうれしいATtiny85

 

使うのは、ATtiny85という8ビットのマイコンチップです。

Arduinoでも使われているAtmel社のAVRシリーズのマイコンチップ。ピンが8本しかない小さなものですが、スケッチを書き込んでArduinoとして動かせると知り、購入したものです。

 

スペックは、購入したATtiny85−20PUではFLASH 8KB、SRAM512B、EEPROM512B 、動作速度20MHzで、消費電力は300μAと少なく、動作電圧が2.7〜5.5Vと、扱いやすく低価格で優れています。

 

 

●Arduino IDEにATtinyボードパッケージのインストール

 

ATtiny85にスケッチを実行させるには、やはりArduino IDEを使ってスケッチを書き込むことになりますが、その前にArduino IDEにATtinyボードパッケージのインストールをしておく必要があります。

 

 

Arduino IDEを起動したら、画面上部のメニューにある[File]をクリック、開いたドロップダウンメニューの中から[Prefereces]を選択すると「Preferences」画面が表示されます。

 

 

その画面をスクロールアップすると下部に「Additional boards manager URLs:」と書かれたボックスが現れるので、これをクリック

 

 

あらためて「Additional boards manager URLs」の画面が開くので、今度はその中に「http://drazzy.com/package_drazzy.com_index.json」と入力します。[OK]をクリックし画面を閉じ、その下の画面の[OK]もクリックして閉じます。

※先の画面では言語の指定ができ、日本語を選択して[OK]するとArduino IDEは日本語表示となります。以降は日本語表記にもとづいた記述に改めます。

 

 

次に、今度は上部のメニューにある[ツール]をクリック、開いたドロップダウンメニューから[ボード]を選び、[ボードマネージャー]が表示させ、これをクリックします。

 

 

Arduino IDEのウインドウが左右分割されて、左側に「ボードマネージャー」の枠が現れます。[検索フィルタ]に「ATtiny」と入力して検索します。

 

 

表示された検索結果の中から、「ATTinyCore by Spence …」を探し[インストール]を実行します。これでボードパッケージのインストールは終了です。

 

なお、[ツール]から[ボード]をたどれば、インストールができたか確認ができます。先程にはなかった「ATtinyCore」という項目が付け加わっているはずです。

 

 

●USBaspを使ったブートローダーの書き込み

 

ATtinyシリーズのマイコンチップに、コンパイルしてスケッチを書き込めるようになりましたので、次はマイコンチップへのArduinoブートローダーの書き込みです。販売されているATtiny85は、まず殆どが生のチップでブートローダーは書き込まれていないとみてよいようです

 

Arduino IDEによりATtiny85にブートローダーを書き込むには、ライターやプログラマーと呼ばれる書き込み装置が必要となります。Arduinoを書き込み機として使うか専用の書き込み機を使うかの2つの方法があります。

 

残念ながら、今回はArduino Nanoの互換機を書き込み機としてブートローダーをインストールするのには成功しませんでしたので、ここでは専用の書き込み機であるUSBaspを使う例のメモとなります。

 

なお、USBaspのドライバーの関係で、Windowsのケースとなります。

 

【USBaspの接続】

 

↑AVRプログラマーUSBaspとブレッドボード上はATtiny85

 

ブートローダー書き込み機のUSBaspとパソコン、ATtiny85マイコンチップとの接続は以下のとおりです。

 

USBaspのUSBコネクタをパソコンに挿入、もう片方のコネクタにはフラットケーブルをつなぎます。フラットケーブルのもう一方の端には10ピン↔6ピン変換コネクタを装着し、これとATtiny85をジャンパー線でつなぎます。ピン同士の接続は下の表に示します。

 

USBasp ATtiny85 同  左
ピン番号
RESET RESET
GND GND
MOSI MOSI
MISO MISO
SCK SCK
VCC VCC

 

 

 

 

 

 

 

 

 

 

ATtiny85のピン番号は、チップの切欠きのある方の横、〇印のついたピンが1番ピンで、反時計回りに2,3,4、…、と8番ピンまで。

 

なお、USBasp上にはジャンパー接続端子が3箇所あります。購入したUSBaspには、JP1とJP2、JP3と表記されていて、JP1とJP2にはすでにピンがハンダ付けされていました。JP2の3本のピンは電圧の設定ピンとなっていて5Vと3.3Vのどちらかに設定するようになっています。

 

今回の例では、5V側を短絡させています。ジャンパーピンがなかったのでジャンパー線(写真では茶色)で代用しています。

 

【USBaspのドライバー】

 

Windows10以降では、このUSBaspを接続しただけでは使えないそうです。デバイスマネージャーを開いてみるとUSBaspとありますがcautionマークがついていて、ドライバーのインストールの必要を示しています。

 

Zadigを使い汎用USBドライバーをインストールすれば、パソコンに正しく認識されるようになるそうなので、これに倣うことにします。

 

 

Zadigは、https://zadig.akeo.ie/からダウンロードし、インストールすることなく直ちに起動できます。

 

 

Zadigを開いたら、対象デバイスが「USBasp」であることを確認し、ドライバーは[winUSB]または[libusbK]を選択して[Install Driver]をクリックしてインストールします。

 

「winUSB」、「libusbK」のどちらでも、Windowsに正しく認識されました(デバイスマネージャーでも確認)。

 

 

【ブートローダーの書き込みの実際】

 

USBapsの準備が整いましたので、いよいよブートローダーの書き込みです。もちろん最初の1回だけ。

 

 

Arduino IDEのウインドウ画面上部のメニューにある[ツールを]クリック、開いたドロップダウンメニューのなかの[ボード]を選択すると、ボードパッケージのリストに[ATTinyCore]が追加されていることが確認できます。

 

 

[ATTinyCore]をクリックすると、ATtinyシリーズのマイコンチップ名のリストが表示されますので、その中から[ATtiny45/85(Optiboot)]を選択します。

 

 

次に、[ツール]を開きます。

 

 

略しますが、[ポート:]を指定し、[書き込み装置:]に「USBasp(ATTinyCore)」を選びます。クロック他はデフォルトのままにしました。クロックは、外部発振器を付けていないので「8MHz(internal)」。

 

ボードの設定がOKなら、あとは[ブートローダーを書き込む]をクリックするだけ。

 

 

書き込みに成功すれば、「ブートローダーの書き込みが完了しました」と表示が出ます。

 

ATtiny85のArduino化が完成したのなら、実際にスケッチの書き込み、実行ができるのかを確かめなければなりません。

今回はもう結構長々と書いてきましたので、この件は次回とします。

 

 

《参考サイトについて》

 

Arduinoについては情報が豊富ででありがたい一方、的確な情報を見つけ出すのは少々大変です。場合によっては必要となる情報が含まれていなかったり、あまりに詳しすぎてついていけなくても困ります。言っている本人が、メモなどと言ってかなり不十分なものを書いている反省が必要ですが。

 

あちこちのサイトを訪問して、多々有益な情報をいただきましたが、多すぎてどこのサイトで得た情報だったかを特定するのは少々困難になっています。

 

そうした中でも、ATtiny85へのArduinoブートローダーの書き込み、USBaspについて、もっぱら参考にさせていただいたのが、「ぶらり@web走り書き!」の東京バードさんの次の2つの記事でした。

 

 

 

 

↑文字の横スクロールがいいね! レンズの効果で文字が大きく見えるHPDL-1414ディスプレイ

 

したいことは色々あるのに…

 

■指定金額以上ですべて一括、配送が早まる Aliexpress

 

無駄遣いはやめると言いながら、円安が進みそうになると焦ってポチる悲しい性。

 

Aliexpressに注文していたものが届きました。5月24日夜に注文し6月2日に到着したので、配送期間はほぼ1週間。

 

今回は、「10日配送」という一定金額以上の注文をすると配送が早まる扱いに該当するものが2つ、非該当で7月末到着予定の1つの計3つの注文をしたところ、「一括配送」というアナウンスはなかったものの、同日に2回の配達で3つすべてが届きました。

 

梱包が2つ別々に届いたので「一括配送」ではないということなのかもしれませんが、事実上の「一括配送」です。これで2回立て続けに「一括配送」を経験したたわけで、指定された一定金額以上の購入によりすべての商品の配送時期が早まると確信に近く感じています。合理的なサービスアップで顧客の支持を取り付けようとする姿勢に、中国企業の成熟を垣間見る気がします。どこぞの国の企業のように腐敗、堕落しないよう願います。

 

届いたのはATtiny85、他。

 

まだArduino Nanoをさわり始めたばかりで何もわかっていないし、先に購入したRaspberry Pi Picoの互換機も試せていないものが残っているというのに、もう次が届いたわけです。

 

したいこと、しなければならないことなど色々あるなかで、処理が追いついていません。もとい、集中力も衰え、処理能力はガタ落ち。老化の影響が否めません。

 

老化には抗うにしても、したいことを取捨選択することなしに解消はのぞめません。

 

遠大な目標はさておき、浅薄な関心事から見直しを始めるべきなのでしょう。

 

■時計のDIYに需要などあろうはずがない

 

可愛いHPDL-1414はどうする

 

前回のブログで、Arduino IDEでライブラリーをインストールする例として紹介した可愛らしいHPDL-1414ディスプレイの使い方を考えてみます。

 

高価なニキシー管に替えて購入したHPDL-1414ですが、このディスプレイを時計の時刻表示に使うなんて、周りに時計がゴロゴロあり時間を知る手立てはいくらでもある今日、いかにも馬鹿げています。

 

とりわけ、RTC(リアルタイムクロック)を購入してまで時計にする必要があるとは思えません。今どき、時計のDIYに需要なんてあろうはずがなく、RTCの勉強は必要が生じたときやればよい。

 

しかも、HPDL−1414はアルファベットや記号を表示できるのですから、なおさらそれを活かす方向で考えるのがよさそうです。良い案が浮かぶまでは、ミニ電光掲示板にしてお茶を濁すことにしておきます。

 

 

画像は、Arduino Nanoを使いHPDL-1414に”HELLO WORLD!”をスクロール表示させたものです。前回のテーマであったライブラリーは、今回は使っていません。”Time signal at ○○:○○”と時には時報を流すのはありかも。

 

スケッチは、Harryrose / hpdl-1414-testより借用しました。はじめ、Arduinoのピン番号が何かわからず困りましたが、よく説明文書を見ると括弧してデジタルと書いてあることに気づき氷解、動かすことができました。

 

 

RTCなしで時刻表示

 

ちなみに、RTCなしでどこまで時計ができるか試してみました。

 

↑ChatGPTにプログラムを書かせたアナログ時計(一部手直し)

 

Raspberry Pi Picoを使い、OLEDディスプレイにRTCなしでアナログ時計を表示させるプログラム(Micropython)を、ChatGPTに書かせました。針の描画位置が長針、短針、秒針とも45度遅れる点を修正、円が描けないので文字盤を四角にするなどの手直しは加えました。

 

Raspberry PI Picoをインターネットに接続中のパソコンにつなげたままであれば時刻を取得できますが、問題は無線もなくFRTCも持たないRaspberry Pi Pico単独でいかに時を刻ませるかです。

 

おおすすめできる方法ではありませんが、インターネットから時刻を取得したRaspberry Pi Picoの電源を落とさずにパソコンから取り外せば、その後も時を刻むはず。具体的には乾電池の「+」「ー」極とPicoのVsysピン、GNDピンを接続して給電したた状態で、USB接続したパソコンからPicoを取り外します。電流の逆流による焼損の恐れがあり、すすめられたものでないわけです。なお、乾電池は消耗しますので、パソコンからとりはずしたPicoには、直ぐにUSB充電器を接続し給電したほうがのぞましいでしょう。もちろん、直ちに乾電池は取り外します。

 

パソコンから切り離されたRaspberry PI Picoの刻むときは、ずれが顕著です。また、短針の動きはアナログ的じゃなくて11時、12時、1時という具合にとびとびで、慣れないと毎正時近くになるほど例えば正午なのか11時なのか迷います。時刻の見誤り、勘違いのもとであり、プログラムは改善の余地ありです。

 

〈追記〉画像は、プログラム修正後の時計の画像です。時刻を見誤ることのないよう、目盛りを4つから12にふやし、短針も突然一気に進むのではなく、次の目盛りまで少しづつ動かすようにしました。

 

↑長針が30分まで進めば、短針も次の目盛りの真中まで進むのが当たり前。ChatGPTの書いた時計プログラムを修正しました。

 

GPS受信機も微妙

 

GPS受信機を電子工作に使うのもかなり微妙です。なにせ、その位置情報は誤差が常に数mあり、極端に悪い場合は100m以上あるそうで、それならスマホの方がまだ精確だからです。

 

↑スクリーンショットの図によればGPS受信機の示す現在地は東西80m、南北85mの中を移動していることになる

 

このブログではふれてなかったのですが、半年前GPS受信機(GPS受信機キット 1PPS出力付き「みちびき」2機受信対応)を使いGPS衛星から受け取った現在地の緯度経度を調べた際には、確かに実際には場所は動いていないにも関わらず緯度経度が刻々と変化していました(スクリーンショット参照)。他方、スマホが地図上に落とす歩行経路を見ても、ときどき他人の庭先を歩いているようになっていることがあります。

 

しかし、スマホが割と精確なのは、GPS衛星からの信号の受信だけでなく、基地局やWi-Fiアクセスポイントからの電波を利用して補足がされているからだそうです。

 

ただし、GPS衛星からの信号を受けてわかるのは位置だけではありません。地表位置を求めるのに電波の到達時間を利用しており、GPS衛星には原子時計が搭載されていて、精確な時刻がわかるのだそうです。

 

センサーを使った電子工作で、測定データと現在時刻を同時に記録したいときなどには役立ちそうです。電源をソーラーセルに依存するようなケースではありそうではないですか。

 

何のことはない、今度はソーラーセルに色目使ってるてか?!