virt_flyのブログ -30ページ目

virt_flyのブログ

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

 

「チャットボット」だ「生成AI」だなどと世間の喧しいこと。 

 

「チャットボット」と「生成AI」とに違いがあるようですので、ここで話題とするのは「チャットボット」とします。 

 

自分でもChatGPTを時々使うことがあって、少し気になることがあります。 

 

対話はあいまいなまま途切れさせてよいものか

 

以前、駅前周辺にある喫茶店を尋ねたところ、すべて住所も店名もまったく架空のものであったことを紹介しました。ChatGPTは平気で嘘をつきます。会話を楽しむだけなら面白いかもしれませんが、いちいち確認が必要で、しかもすべて嘘となるとたまりません。 

 

それでも、まったく役に立たないかというとそうでもなく、コンピュータープログラミングでは簡単なものなら実際に動くものを書いてくれます。 

 

手直しが必要なこともありますが、プログラミングの勉強になる面もあります。 

 

ただし、少し高度なものになってくると、結構嘘をつかれます。さんざんやりとりして、最後に「応えられない」という場合もありました。 

 

こういう決着はこれでありだと思うのですが、問題は決着に至らないケースです。こちらが勉強不足で、回答が難しくて理解できない一方、その回答ではプログラムが動かないことが多々ありました。 

 

チャットを中途半端なままで終わらせてしまい、そのまま動かないプログラムが正しいものとしてフィードバックされたら、同じような質問の際に回答として示される可能性は否定できません。 

 

スキルの高い人が同じような質問をするケースはまれと思われますから、正される機会がないまま、同様なケースが繰り返され、誤りにもかかわらず実績だけは増えていく。多少正されるケースがあったにしても、圧倒的な数の差に埋もれてしまいかねないのでは、と危惧します。 

 

人類、社会の進歩の停滞をまねかないか

 

世間一般にまで広げて考えてみた場合はどうでしょう。
 

自然科学や歴史学では通説とされるものが覆される事例は、枚挙に遑がありません。そして世間一般に認知されるまでには、時間がかかることもまた然り。 

 

ウォーキングを例にとれば、いまだに巷では歩けば歩くほど健康によいとの勘違いが幅をきかせています。 

 

WHOや厚生労働省も、適度な運動がのぞましいことを推奨しているのが今日的到達点ですが、運動の量と質についてはまだ新しい知見を認めるまでには至っていないように思います(厚労省の身体活動の基準はシステマティックレビューにもとづくものです)。 

 

また、医学的な実験では、人の身体への侵襲を伴うため、実験を登録して同じような実験が不用意に繰り返されることのないよう、UMINのようなシステムがつくられているくらいですから、いかに真実の探求は大事にされるべきことか。 

 

ヒトラーだかゲッペルスだかが「ウソも百回言えば真実となる」なんて言ったとか。誤った見解が拡大再生産されて、どれが真実かを再確認するのに膨大な労力を必要とする事態を招くことはないのでしょうか。人類、社会の進歩が停滞するようなことはなんとして避けたいものです(大げさな^_^?)。 

 

せめて質問の終わらせ方には注意を払いたい

 

杞憂かもしれません。それでも、チャットボットとの対話は途中で曖昧に終わらせず、質問への回答が正しいかどうかわからなくても、最低「正否不明」として終わらせるべきではないか。

 

プログラミングでいえば、理由は不明としつつ、その回答ではうまく動かなかった事実を明白にすべきかと思います。逆に、別な原因があるにもかかわらず、正しいものを誤りとしてしまうリスクもないとはいえませんが。 皆さんいかがでしょう。

 

今回、疑問をただ抱き続けていてもしようがないので、本来ならいろいろ調べ勉強すべきところ、大変なのでChatGPTにそれこそ質問してみました。以下は、その結果です(内容は原文のまま)。 

 

 

 ChatGPTへの質問と回答

 

●チャットボットの回答内容は何にもとづいていますか?

チャットボットが回答する際には、いくつかの要素に基づいて応答が生成されます。以下に一般的な要素をいくつか挙げますが、全てのチャットボットが同じ要素に基づいて応答するわけではありません。 

1.プログラムされたルールやロジック: チャットボットは、事前にプログラムされたルールやロジックに基づいて応答を生成する場合があります。特定のキーワードやパターンに応じて、事前に定義された応答を返します。たとえば、特定の質問に対して用意された答えを返す場合などです。 

2.データベースや情報ソースの参照: チャットボットは、事前に用意されたデータベースや情報ソースから情報を引き出し、それに基づいて回答を生成することがあります。例えば、商品やサービスに関する情報や、最新のニュースなどを参照して回答を提供する場合です。 

3.機械学習や自然言語処理のモデル:のチャットボットでは、機械学習や自然言語処理の技術を使用して学習したモデルに基づいて回答を生成することがあります。されたモデルは、自然言語の理解や応答生成の能力を向上させることができます。 

4.対話履歴の参照: チャットボットは、過去の対話履歴を参照することで、ユーザーとの連続性を選択しながら回答を生成することがあります。これにより、前回の対話内容やユーザーの要求に基づいて、より適切な応答を提供することができます。 

チャットボットの回答は、上記の要素の組み合わせや、特定のコンテキストに基づいて行われることが多いです。また、最新の技術やモデルを使用することで、より自然な対話や高度な応答を提供することも可能です。 

 

●チャットボットは、多数の人々との対話内容をフィードバックし、データベースや参照する情報ソースに追加しますか?

一部のチャットボットは、多数の人々との対話内容をフィードバックし、データベースに追加したり、参照する情報ソースを更新することがあります。これにより、チャットボットはユーザーからの対話学習し、より正確で正しい回答を提供することができます。 

このような学習機能を持つチャットボットは、機械学習や自然言語処理の技術を用いて実現されます。ユーザーとの対話データを収集し、それを元にモデルをトレーニングして、応答生成の精度を向上させることが目指されます。 

具体的な方法としては、以下のような手順が一般的です: 

1.ユーザーとの対話データの収集: チャットボットは、ユーザーとの対話内容を記録し、データベースに保存します。これにはユーザーの質問、チャットボットの応答、対話のコンテキストなどが含まれます。 

2.データの前処理: 収集した対話データを必要に応じて前処理し、形式を準備します。これには、テキストのクリーニング、人権化、単語の正規化などが含まれます。 

3.モデルのトレーニング: 前処理されたデータを使用して、機械学習や自然言語処理のモデルをトレーニングします。トレーニングには、教師学習や教師なし学習の手法が使用されます。 

4.モデルの評価と改善: トレーニングされたモデルを評価し、性能や精度を評価します。必要に応じてモデルを改善するために、ハイパーパラメータの調整や追加のトレーニングが行われることがあります。 

5.データベースや情報ソースへの反映: モデルのトレーニング改善やが行われた後、対話データや新しい情報がデータベースに反映されることがあります。これにより、将来の対話になりますより正確な情報や回答を提供することができます。 

ただし、ユーザーのプライバシーとデータ保護には注意が必要です 

 

●チャットボットには、誤りを正す機能がありますか

一部のチャットボットは、誤りを正す機能を備えている場合がありますが、全てのチャットボットがその機能を持っているわけではありません。依存します。 

誤りを正す機能は、以下のような方法で実現されることがあります: 

1.エラー検出: ユーザーの入力が間違っていた文法やスペルミスを含んでいる場合、チャットボットはそれを検出し、正しい形式やスペルでもう一度提案することがあります。 「」というユーザーの入力があった場合、「こんにちは、私はOpenAIで学びます」という正しい形式を提案することができます。 

2.追加情報の要求: ユーザーの入力が不明瞭で中断、必要な情報が欠落している場合、チャットボットは追加情報をユーザーに尋ねることがあります。これにより、正確な回答やサポートを提供するために必要な情報を得ることができます。 

3・フィードバックの利用: チャットボットが誤った回答を提供した場合、ユーザーからのフィードバックを活用して改善することがございます。ユーザーが提供した情報を元に、チャットボットのトレーニングデータやモデルを更新することがございますできます。 

ただし、チャットボットが100%の正確性を持つことは困難であり、全ての誤りを正確に検出・修正することも保証されません。チャットボットは、機械学習や自然言語処理の技術を使用しユーザーは、チャットボットの回答を確認し、必要に応じて受け付ける情報を提供することが重要です。 

 

●チャットボットの利用で、心がけたいことは?

チャットボットの利用に関して、以下の点に留意することが重要です: 

1.ユーザー エクスペリエンスの向上: ユーザー エクスペリエンスを向上させるために、わかりやすく、丁寧な言葉遣いや表現を使い、わかりやすい回答を提供するように心がけましょう。なサポートや情報提供を行うことも重要です。 

2.クリアなコミュニケーション: チャットボットは、機械的な応答を提供することがありますが、最低限人間のような自然なコミュニケーションを心がけましょう。対話の流れをスムーズに進めることが重要です。 

3.ユーザーフィードバックの活用: ユーザーからのフィードバックを収集し、チャットボットの改善に相談しましょう。ユーザーが不満や問題を報告した場合は、迅速に対応し、適切な解決策を提供することが重要です。また、ユーザーの意見や要望に耳を傾け、サービスの改善に反映させることも大切です。 

4.セキュリティとプライバシーの確保: ユーザーの個人情報や機密情報を適切に保護するために、適切なセキュリティ対策をしばらくしましょう。 データの保管や送信に暗号化を使用し、ユーザーの個人情報を適切に管理しますすることが重要です。 

5.人間の介入の提供: チャットボットは多くの質問や要求に対応できますが、複雑な問題や特殊な要望に対しては、人間のサポートが必要になる場合があります。適切なタイミングで人間のオペレーターやサポート担当者への切り替えを提供し、ユーザーが必要なサポートを受けられますように。 

以上のポイントを心がけることで、良質なユーザーエ 

 

●チャットボットを利用する際に質問者が心がけたいことは?

チャットボットを利用する際に質問者が留意すべきことは以下の通りです: 

1.明確な質問の投稿: チャットボットに対して質問をする際は、最も明確かつ具体的な質問を 投稿しましょう。質問内容が明確であれば、チャットボットが適切な回答を提供しやすくなります。 

2.正しい言葉遣いと形式: チャットボットとの対話では、正しい言葉遣いを心がけましょう。 丁寧な挨拶や礼儀正しい表現を使い、フォーマルな状況に応じて正しい敬語を使うことも重要です。 

3.質問の再検討と追加の情 報の提供: チャットボットが提供する回答が不明確な場合や要求に対応できない場合は、質問を再検討し、追加の情報を提供する場合があります。必要な背景情報や具体的な要素を追加することで、チャットボットがより正確な回答を提供する可能性がございます。 

4.フィードバックの提供: チャットボットの回答が慎重だったり、正確でなかった場合は、フィードバックを提供しましょう。 具体的なエラーや不明瞭な回答について指摘することで、チャットボットの改善に役立つ情報を提供することができます。 

5.チャットボットの保留を理解する: チャットボットには限界があり、全ての質問や要求に対応できるわけではありません。 

↑ブレッドボードで作ったTinyJoypad インベーダーゲームに不要な上下移動キーは未完成状態。

 

人気のTinyJoypadをつくる

 

 今まで通りではつくれないTinyJoypad

 

以前、光るアクリル板にかえて透過ディスプレイにすれば、いっそのことカラー化もできていいんじゃないかと、まじでネット検索したことがありました。その際に出会ったのが「Mira&Luna’s nursery lab」という姉妹によるサイト。そこで初めてATtiny85自体とATtiny85を使ったミニゲーム機TinyJoyPadのことを知ったものでした。

 

今回、ATtiny85を使って今すぐにでもできそうなものは何かと考えたとき、思い浮かんだのは電子オルゴールの他にミニゲーム機がありました。

 

これが、少々甘かった。

 

 

本家がダメでも別サイトのゲームプログラムをDLすればよい

 

↑TinyJoypadののサイト いくつものゲームがあるのだが、簡単には楽しめなくなった

 

ゲーム機づくりを、いざ試してみようと思ったところでびっくり。あろうことか開発者のDaniel ChampagneさんのサイトTinyjoypad.comを訪れると、ゲーム機のディスプレイに必要なライブラリがソースコードには含まれず、自分でhファイルをつくれ、と書かれているではありませんか。

 

そんなの聞いてなかったよ、と泣き言を口にしつつ、とても自分ではhファイルは書けないので、ネットでTinyJoypadを扱った新しい記事に解決法を求めることにしました。

 

何とうれしや、この間ATtiny85のArduino化で勉強させてもらっていた東京バードさんのサイト「ぶらりweb走り書き」に解決法が書かれていました。

 

↑すぐ使えるTinyJoypad用のゲームが公開されていてありがたいGitHubの「gametiny」

 

TinyJoypad用にうまく修正されたゲームデータがGitHubに公開されているというのです。GitHubの「gametiny」には、すべてではないにしても、おおくのゲームのファイルが掲載されています。ラッキー!

 

 

●指定の抵抗器がなくても代用ができる

 

喜びもつかの間、問題はそれだけではありませんでした。次に判明したのがTinyJoypadづくりに指定された抵抗器が、10KΩ以外は手元に揃っていないことでした。OLEDディスプレイや圧電ブザー、タクトスイッチも5個以上手持ちがあるというのに…。

 

TinyJoypadの作製に必要なパーツ一覧

・ATtiny85

・0.96インチOLEDディスプレイ(124×64 I2Cタイプ SSD1306)

・タクトスイッチ 5個

・圧電ブザー

・抵抗 10KΩ1個、22KΩ2個、33KΩ2個、88KΩ(または91KΩ)2個

・他 電源スイッチやジャンパー線

 

 

↑TinyJoypadの回路図 10KΩ、22KΩ、33KΩ 、88KΩ(または91KΩ)の抵抗を使い分圧

 

DanielさんのTinyJoipadでは、8ピンしかないATtiny85のピンの不足を補うために、抵抗を使って電圧を違えてどのタクトスイッチが使われたかがわかるようにされています。「抵抗分圧」(電源の電圧が、直列接続された 各抵抗の大きさに比例して分圧される)という現象の応用だそうです。

 

ぞれだけ重要な抵抗ですから、揃っていた方が良いに決まっていますが、異なる値の抵抗で代用する方法があることもわかりました。Kazuさんの「Kazuの模型部屋」の記事によれば、その際プログラムの条件分岐部分の変数の値をあらたな電圧に対応したものに変えてやればいいということになります。

 

Kazuさんの回路図では、抵抗は88KΩを20KΩに、他はすべて10KΩに置き換え、20KΩも10KΩを直列につなぐことでまかなわれていますから、これなら無駄な抵抗のパック買いをいくつもせずとも回路が組めます。

 

やったね!ということで、さっそくブレッドボード上に回路を組み立てたのが冒頭の写真です。この写真では、目標とするインベーダーゲームを動かすのに不要な上下移動キー部分についてはキーのみで抵抗は付けておらず未完成な状態です。

 

なお、違う抵抗値で代用することは、先にふれたようにプログラムの書き換えがゲームごとに必要になりますから、指定の抵抗を揃えた方が無難でしょう。

 

 

 ATtiny85にゲームプログラムを書き込むまでの手順

 

それでは、マイコンチップATtiny85にゲームプログラムを書き込むまでの手順を記します。ATtiny85への書き込みも慣れてきましたので、簡略化します。

 

 

●前提

 

①パソコンへのArduino IDEのインストール

 

②WindowsへのAVRプログラマーUSBaspのドライバーのインストール(ATtiny85への書き込みにUSBaspの使用を前提)

 

③Arduino IDEへのATtiny85用のボードパッケージのインストール

 

以上の3点は、すでにインストールされているものとします。

 

詳しくは、ATtiny85(1)ーArduino化ATtiny85(2)―スケッチの書き込みと実行 を参照。

 

 

●手順の実際

 

①ゲームプログラムのダウンロード

ブラウザでGitHubの「gametiny」を開き、[Code]をクリック

→[Local]タブのなかの[Download Zip]をクリックすれば、一括してゲームプログラムがダウンロードできます。

 

②解凍したファイルからArduino IDFを起動

ダウンロードしたgametiny-master.zipを解凍

→あたらしくできたgametiny-masterの中から、目的のゲームプログラムフォルダ(ここではTiny_space_invaders)を開き、inoファイル(Tiny_space_invaders.ino)をダブルクリック

→目的のゲームファイルを開いたArduino IDEが起動します。

 

③ボード、ポート、Chip、Clock source、書き込み装置の選択

 

 

Arduino IDEのメニューにある[ツール]を選択し、ドロップダウンメニューを開きます。

→[ボード]は[Attiny25/45/85(No bootloader)]を指定

→[ポート]を指定

→[Chip]は[ATtiny85]

→[Clock Source]には[16MHz(PLL)]

→[書き込み装置]を[USBasp(ATTinyCore]と指定します。

 

④ブートローダーのインストール

Arduino IDEのメニューにある[ツール]を選択し、ドロップダウンメニューを開きます。

→[ブートローダを書き込む]をクリックしてブートローダーをATtiny85に書き込みます。

 

⑤グラフィックライブラリーのダウンロード

 

 

0.96インチOLEDディスプレイ(Ī2Cタイプ SDD1306)用のライブライリーは、GitHub - Defragster/ssd1306xledからダウンロードします。

 

⑥Arduino IDEへのグラフィックライブラリーのインストール

 

 

ライブラリーのインストールには、ダウンロードしてきたファイルからArduino IDEへインストールすることができます。

Arduino IDEのメニューにある[スケッチ]をクリック

→次いで[ライブラリをインクルード]を選択

→[.ZIP形式のライブラリをインストール]をクリック

→ダウンロードしたzipファイルを選択してインストールします。

 

⑦ゲームプログラムの修正

前述のと おり、TinyJoypad回路に使用する抵抗が変更されていますから、それに合わせてプログラムの次に示す箇所の修正をしないと、移動キーがうまく働きません。書き換えは、電圧を読み取り0~1023の変数で表す「analogRead」を使った条件分岐の部分の閾値です。

 

if ((analogRead(A0)>=750)&&(analogRead(A0)<950)) {Sprite[0].DirectionV=0;}

else if ((analogRead(A0)>500)&&(analogRead(A0)<750)) {Sprite[0].DirectionV=1;}

if ((analogRead(A3)>=750)&&(analogRead(A3)<950)) {Sprite[0].DirectionH=1;}

else if ((analogRead(A3)>500)&&(analogRead(A3)<750)) {Sprite[0].DirectionH=0;}

 

エディターで表示箇所を、Kazuさんにならいあらたな抵抗分圧を反映して750→600、500→400と書き改めます。

 

⑧ゲームプログラムの書き込み

プログラムが修正できたら、ATtiny85にへの書き込みです。

Arduino IDEのをメニューにある[スケッチ]をクリック

→次いで「書き込み装置を使って書き込む」をクリックすれば、コンパイルの後、完了が表示されます。

 

●動作確認

 

TinyJoypadがおおよそ完成したところで、試験的にインベーダーゲームを動かしてみることにしました。

 

 

ゲームは無事に起動し、キーで操作もでき、音も鳴り、TinyJoypadの動作確認は成功です。

ATtiny85というこんな小さなマイコンチップにプログラムを書き込み、ゲームで遊べるようにできるなんてすごいですね。

 

随分昔のこと、同じく8ビットであるCPUのZ80にEPROMやRAM、PIOなどを加え、たいそうにマイコンボードを組み上げときには、LEDを点灯させるのがやっとだったことを思い出し、ついつい対比してしまいます。

 

何よりも、ゲーム画面は、単色ながら他の方もおっしゃるとおりすごくきれいです。

今回はブレッドボード上で作製したための制約があって、どうしてもキー操作が不自由になります。本格的にゲームを楽しむには、やはりユニバーサル基板上に移すのがよさそうです。望むらくは、もう少し大きな画面で楽しめたらと思います。

 

 

≪参考サイト≫

 

 

 

 

 

↑ミニブレッドボード上がオルゴール 左はバッテリー

 

音色が美しい!

 

Attiny85へブートローダーやスケッチが書き込めるようになり、Arduino化ができたので、さっそくこれを使って何かやってみたいと思います。

 

パーツを買い足さなくてもできそうなことはとはないかと考え、見つけた一つがオルゴールでした。

 

電子工作の定番でもあるようですね。自分でも、日本橋がまだ電気屋街だった頃に買ってきた光が当たると鳴るメロディーICが、朝になると毎日鳴っていたと娘が言っていたのを思い出します。

 

 

 電子オルゴールの奥深さー3つの方式

 

バネで回る突起が金属板をはじいてメロディーを奏でるという割とわかりやすい仕組みのオルゴールも、電子式になるとなにやら難しいものです。

 

電子オルゴールには3種類の方式があるんだとか。減衰矩形波、減衰正弦波にWaveTableだそうです。

 

目も悪けりゃ、耳も悪く、ついでに頭も悪いとくれば、芸術的なことは大の苦手になります。そのせいで、映像やサウンドからは遠いところに身をおくようにしてきましたから。

 

和音や正弦波とか言われてもさっぱり理解ができませんが、聞きくらべれば、和音が豊で、矩形波より正弦波の方がより美しいことくらいはわかります。サンプリング音源を使うWaveTableもすごいですね。

 

電子オルゴールの奥深さをはじめて知りました。

 

ただし、電子工作としてはいたって簡素。マイコンチップのATtiny85と圧電ブザーもしくはスピーカー、電源となる電池があればできるということで、作ってみる気になったのです。

 

今回は、弘前大学の小山智史先生の減衰矩形波、減衰正弦波方式による電子オルゴールソフト「MyMelo2」を試してみることにしました。

 

「テキスト音楽サクラ」または「メモ帳」などのテキストエディターで、「ドドソソララソー」のように楽譜ファイル(〇〇.mml)を作成し、このmmlファイルをmymelo2.wsfにドラッグ&ドロップすることで、ATtiny85で利用できる形に変換できるのが特徴です。

 

ど素人にも書けそうな気がしませんか。3和音までトラックを使って実現できるそうですから、わかる人にはありがたいことでしょう。試していませんが、音声を録音しメッセージとして添付できる「MyMelo2 PLUS」というものもあります。オルゴールに音声が入るなんて、さすがマイコンですね。

 

最終的に変換されたファイルをArduino IDEで開き、AVRプログラマーを使ってATtiny85に書き込みます。下に手順を載せます。

 

なお、ChanさんのWaveTable方式も捨てがたいのですが、如何せんAVRマイコンに特徴的なヒューズの設定方法が不勉強でまだわからず、使用チップもATtiny45であったため、今回は見送っています。小山さんの方式では、手順通りにすすめればヒューズ設定が書き込まれるようです。

 

 

 MyMelo2を使う

 

それでは、「MyMelo2」を使って電子オルゴールを作ってみましょう。

 

①「MyMelo2」のダウンロード

 

 

まず、小山さんのサイト「私だけの電子オルゴール」から、zipファイルをダウンロードし、解凍します。生成したMyMelo2フォルダ中の「mymelo2.wsf.txt」ファイル名称を「mymelo2.wsf」に変更します。

 

②楽譜ファイルの用意

 

↑楽譜ファイル作成中のブラウザ版「ピコサクラ」。スクリーンショット中の3和音の例は、「和音のできる電子オルゴール」から拝借しました。

 

楽譜のmmlファイルは、「メモ帳」や「テキスト音楽サクラ」で作成することができますが、サクラで演奏できる楽譜のすべてがオルゴールにで使えるわけではありません。MyMelo2では使用できる命令に制限があります。

 

五線譜が読めず、楽譜を入力する自信はありませんから、今回は手抜きしてMyMelo2に入っていた「kira2.mml」を使います。

 

③楽譜データへの変換、追加

 

 

mymelo2.wsfをダブルクリックすると、楽譜データが初期化されます。

 

 

その際画像のようなダイアログボックスが開きますので、矩形波、正弦波、正弦波(伴奏は3角波)のいずれかを選択します。選択ボタンは、「はい(Y)」、「いいえ(N)」、「キャンセル」がそれぞれに対応しています。

 

 

次いで、楽譜ファイル(〇〇.mml)をmymelo2.wsfの上にドラッグ&ドロップします。

 

私のように間違える人はないと思いますが、ダイアログボックスの上ではなく、当該フォルダ内のファイルの上です。やり直しの際に、すっかり忘れて書き込めないとまごついたものです。

 

 

これで、変換された楽譜データーが楽譜データーファイルに記録されます。

 

引き続き別の楽譜ファイル(〇〇.mml)をmymelo2.wsf上にドラッグ&ドロップすれば、2曲目、3局目と楽譜データーファイルに追加されます。

 

 

 ATtiny85への書き込み

 

①mymelo.inoを読み込む

 

 

起動したAeduino IDEのウインドウ画面上部のメニューにある[ファイル]をクリック、開いたドロップダウンメニューの中の[開く]をクリックし、mymelo.inoを探して開きます(解凍してできたmymelo2フォルダー下のmymelo2ファルダー内にあります)

 

 

②「ボード」と「チップ」、「Clock Source」を選択

 

次は、上部のメニューから[ツール]を開き、「ボード」と「Chip」、「Clock Source」を選びます。

 

 

ボードを[ATTinyCore]、ついで[ATtiny25/45/85(No bootloader)]とし、「Chip」を[ATtiny85]とします。次に「Clock Source」は、減衰矩形波の場合は[8MHz(internal)]、減衰正弦波の場合は[16MHz(PLL)]とし、減衰正弦波(伴奏は三角波)の場合ではさらに「Timer 1 Clock」を64MHzとします。

 

③書き込み装置の接続

 

 

次に、書き込み装置(ここではAVRプログラマーとしてUSBaspを使用)を介してパソコンとマイコンをつなぎます。USBポートをパソコンに、ケーブルをマイコンに接続します。

ピン同士の接続は、下記の表のとおり。

 

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

 

 

 

 

 

 

 

 

 

 

 

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

 

なお、USBaspではジャンパー接続端子が3箇所あり、うちハンダ付けされた5本のピンは電圧の設定ピンで、画像の茶色のジャンパー線部分の2本を短絡(5Vに設定)させておく必要があります。

 

④「ポート」の選択、[書き込み装置]の指定

 

 

書き込み装置を接続したら、Arduino IDE上部のメニューから[ツール]を開き、[ポート]をクリックして適切なポートを選び、さらに[ツール]から[書き込み装置]をクリックして書き込み装置を指定します(今回の例では[USBasp(ATTinyCore] )。

 

④プログラムの書き込み

 

 

ブートローダーを一度も焼いたことがない生のマイコンチップの場合は、[ツール]から[ブートローダを書き込む]を実行します(これにより②の設定がマイコンのヒューズビットに書き込まれるそうです)。

 

 

最後は、先にArduino IDEに読み込んであったプログラム(mymelo.ino)の書き込みです。上部のメニューにある[スケッチ]から[書き込み装置を使って書き込む]を実行します。通常のスケッチの書き込み方法とは異なるので注意!

 

 

 完成

 

後は、実際にATtiny85にスピーカー(あるいは圧電ブザー)と電池をつなぎ、音を鳴らしてみるだけです。

 

ATtiny85の3番ピンと6番ピンをスピーカーにつなぎ、電池は8番ピンに「+」、4番ピンに「-」をつなぎます。

 

私の場合は、スムースにはいきませんでした。1度目は音がでたのに、矩形波、正弦波の違いを試そうとしたら、書き込みに失敗したり、書き込めても音が出ず、何か誤ってチップを壊してしまったかと思うくらいでした。

 

原因は、ICソケットを使わずに直にATtiny85をブレッドボードに挿していたせいか、接触不良で信号が流れていなかったようです。しっかり押し込んでいたつもりでしたが、見た目ではわからないほどほんのわずかに浮いていて、押せばチップが沈み、手を離せば浮くのです。

 

微妙なもので、ブレッドボード上の位置を変えれば大丈夫なところもあり、これにはまいりました。今後の教訓にしたいと思います。

 

なお、小さな圧電ブザーでは音が小さくよく聞こえませんでした。ガラクタの中から見つけてきた小型のスピーカーにつないでみたところ、クリアな音でよく聞こえました。もともと音が小さく使い物にならなかったスピーカーから大きく聞こえたのは驚きです。

 

↑正弦波です

 

動画では、スピーカーからの音をパソコンのマイクで拾ったものなので、せっかくの音色も音質が悪いのが残念です。

 

今回は、お試しということでとりあえずブレッドボード上につくって済ませ、スイッチも設けませんでしたが、長押しすれば曲が順次変わるプログラムになっているようです。小さいのに思いの外良い音色なので、手抜きせずにつくればそれなりの電池で動く可愛いオルゴールができそうです。

 

《参考サイト》

 

私だけの電子オルゴール (koyama.verse.jp)

「和音のできる電子オルゴール」 (hidapio.jp)

3種類の方式の電子オルゴール -- その音の違いは|人生に出会う7WAYS+α (fc2.com)

ELM - WaveTable電子オルゴール (elm-chan.org)
テキスト音楽「サクラ」 (sakuramml.com)

 

《追記》

 

自分では楽譜が書けないもので、公開されている方のmmlファイルをコピーさせていただいてます。下記のサイトでは、6曲分の楽譜ファイルが掲載されています。

そわそわ_うきうき:作品20 電子オルゴール_小さな世界~その1.音譜作成~ (fc2.com)