CHAT GPTに技術的なことについて聞いてみた。
2023.02.11
最近評判のCHAT GPTですが、技術的な話を問いかけたらどうなるのか検証してみました。
回答が正確であるかを判断するために分かっていることをあえて質問しています。

正直なところすごい。作ってくれたプログラムはそのまま修正しなくても動く(;´Д`)
今回はわざと意地悪にDelphiとArduinoの連携で質問してみましたが、
両方の文法やライブラリをしっかり理解しているようで、間違いの無いコードが返されました。

某掲示板に質問するくらいならCHAT GPTに投げかけた方が
絶対適切な回答が得られます(;´Д`)

では質問と回答は以下の通り。

Q FDM式の3Dプリンターでノズル詰まりが良く起きる原因を教えて。
A 3Dプリンターのノズル詰まりは、いくつかの原因が考えられます。以下は一般的な原因です:

 フィラメントの硬化:
  長時間使用しない場合、フィラメントは硬化し、ノズルから通りにくくなります。

 ノズルの汚れ:
  フィラメントの硬化物や残留物がノズル内に溜まることがあります。
  これはノズル詰まりの原因となります。

 ノズルの温度が低い:
  ノズルの温度が低い場合、フィラメントが正常に溶けないため、ノズルが詰まります。

 フィラメントが不適切な直径を持っている:
  フィラメントの直径が大きすぎると、ノズルから通りにくくなります。
  また、直径が小さすぎると、フィラメントが正常に溶けない可能性があります。

 これらの問題を解決するためには、定期的にノズルをクリーニングし、
 フィラメントを正常な状態に保つことが重要です。また、ノズルの温度を適切に調整し、
 フィラメントの直径を適切に選択することも大切です。

Q 3DプリンターでABS素材を使って印刷する場合、反りをなくす方法は?
A ABS素材で印刷すると、反りが発生することがあります。
 この問題を解決するためには、以下の方法があります:

ベッド温度:
  ABSは高温で印刷する必要がありますが、
  ベッド温度が高すぎると反りが発生します。
  ベッド温度を適切に調整することが重要です。

 ベッドアドハーズメント:
  ABSはベッドとの接触面積を最小限にすることが重要です。
  ベッドアドハーズメントを使用することで、
  ABSとベッドとの接触面積を最小限にすることができます。

 印刷速度:
  ABSは印刷速度が遅いと反りが発生します。印刷速度を適切に調整することが重要です。

 上層の設計:
  ABSを印刷する際には、上層の設計が反りに影響することがあります。
  上層の設計を見直し、反りを最小限にするよう調整することが重要です。

 これらの方法を試して、ABS素材で印刷する際の反り問題を解決することができます。

Q 3Dプリンターでデルタ型と直行型、どちらが精度がいい?
A 3Dプリンターには、デルタ型と直行型があります。
 どちらが精度がよいかは、使用目的や製造物によって異なります。

 デルタ型3Dプリンターは、三角形のアーム構造を採用しており、
 印刷中に構造のバランスを維持することができます。
 このため、デルタ型3Dプリンターはより高い精度を実現することができます。
 また、デルタ型3Dプリンターは小さな部品の作成や精密な構造の印刷に適しています。

 一方、直行型3Dプリンターは、直線的なアーム構造を採用しており、
 シンプルで安価なため、広い範囲に普及しています。
 直行型3Dプリンターは印刷速度が速いため、大量生産に適していますが、
 デルタ型3Dプリンターに比べて精度は劣ります。

 結論として、精度においてはデルタ型3Dプリンターが優れていますが、
 使用目的や製造物によって直行型3Dプリンターが適している場合もあります。
 使用目的や製造物に合わせて、適切な3Dプリンターを選択することが重要です。

Q Arduinoのコーディングでledを10個使い、1秒ごとに順番に光らせる方法を教えてください
A 以下のコードは、Arduinoで10個のLEDを使用し、1秒ごとに順番に光らせる方法を示します。



 このコードでは、LEDのピン番号を配列で定義しています。
 また、setup関数では、全てのLEDのピンを出力に設定します。
 loop関数では、for文を使用して順番にLEDを点灯・消灯するように設定しています。
 各LEDの点灯・消灯には、digitalWrite関数を使用しています。
 また、delay関数を使用して1秒待つように設定しています。

Q Windows上で動かすDelphiで作ったプログラムとArduinoとでデータのやり取りをするには、
 ArduinoとDelphiにそれぞれどのようなコードを書けばいい?


A


Q Windows上のDelphiプログラムからArduinoと繋がっているサーボモーターを動かすようなプログラムはできますか? 動かす角度を自由に指示したいです。

A
3Dマウス⑤ 外装の設計・造形
2023.01.29
前回の3Dマウスの記事はこちら
https://randol-news.net/art/00577.html



ファームウェアがだいぶ進展したので
外装をテスト用ではなく実用に向けて設計してみます。



まずUSBケーブルはL字型を採用。これで煩わしいケーブル問題は大幅に軽減。
上蓋との連結はM3ネジ2本で行うことにした。
本音を言えば3本でやりたかったけど、
いろいろと干渉することが分かったから仕方なく(;´Д`)
まぁ、問題ないっしょ。



L字コネクタに合わせて干渉しないように上蓋にカットをいれます。
カットしたところのフタも用意。上蓋と一体化させて造形させます。



ジョイスティックのデュポンコネクタが邪魔になっていた件。
下に折り曲げれば上蓋が干渉せず入ることが分かったので、
1本ずつラジオペンチで曲げて対処。



ボタンはつけなくていいかな~~なんて思っていた時がありました。
でも、ムリ(;´Д`)
ジョイスティックのテストでぐりぐり動かしているとボタンの必要性が沸々と湧いてきます。
まず、ジョイスティックを押しながら方向を操作するのは厳しい。
つまりパンを操作するときは別のボタンを用意するべきかなと思い至りました。
あと、ポイントを複数選択するときにシフトキーを押しながら行いますが、
いちいちキーボードに手を移動してたら面倒で仕方ない。
そのボタンも無いと不便かなと。
つまり最低でも2個は追加しないと実用に乏しいと判断。
ではどんなボタンをどんなふうにつけるのかと考えるに
ORBIONで採用されてるボタンも考えたけど、ちょっと大きすぎてスペースが無い。
あと、やっぱりクリック感がほしいと思いました。
そこでリミットスイッチを採用することに。安いし入手性もいい。
場所は、ロータリーエンコーダーとジョイスティックの間に並べて装備。
リミットスイッチのレバーは上蓋から露出させて直に押すようにします。
使いづらかったらレバーに何か装着しますかね。



ロータリーエンコーダーは上蓋で支えることに。
リミットスイッチも上蓋で。
造形が複雑になるのでFDMだとちょっと苦しいけど、
印刷さえできてしまえば、説明書なしでもすぐに組み立てられるくらい
シンプルなデザインじゃないかなと思う。



印刷は本気モード(;´Д`)
0.2mmノズル装着でベッドの高さもしっかり調整。
強度と長期実用を踏まえABSで印刷。
反り防止のための対策はきっちり。
本来ならば、メッシュベッドを使うべきところだけど、
メッシュベッドはラフトが前提になってしまいます。
ラフトって反りは軽減するけど底面が乱れまくるのよね。
今回は精度重視の印刷なので、ガラスベッドを使いました。
印刷位置が左奥寄りになってますが、
Cetusのようにフレーム片持ちの3Dプリンターは
フレームから遠く離れたところの振動が大きくなりがちです。
印刷物が荒れるので、それを回避するため
なるべく左奥にまとめて印刷を行います。
これも少しでも精度を高めるための工夫です。



完璧です。
7時間のロングランだけども反りはゼロ。
糸引きもなし、底面上面の塗り残しなし。
0.2mmノズルはいいね。仕上がりが美しい。
ただし、詰まり安く、印刷に時間が掛かり、
設定も煮詰めるのにめちゃくちゃ時間が掛かるけど(;´Д`)



バシっと設定が決まっているうちに細かいのも全部印刷してしまいます。



いいね、射出成型みたい(*'▽')



一番の問題は上蓋。
FDMの限界に挑戦といわんばかりの形。サポートは必須になってしまいます。
何回か試したけど、逆さまで印刷したほうがサポートの処理がしやすく
倒壊の心配がなかった。
内側にはロータリーエンコーダーの部分がちょっと制度が必要なので、
サポートがごちゃごちゃつくと整えるのは困難だなと・・。
どうせ磨くのなら外周の方が楽でいいので、
今回は逆さまに印刷したほうがいいと考えた。



でもFDMでこの印刷はやっぱり厳しい。
積層痕が強烈に見えてくる。
球状は0.1mm積層をやめて0.05mm積層ができるならその方が良いと思う。
確実に印刷できるようにするには、パーツを分割して接着剤で連結する形の方がいいかもしれない。
つまりFDM専用のデータを考えるべきと思った。



サポート面が荒れていたので軽く研磨。
ABSなので簡単に削れる。PLAとは違うのだよ、PLAとは(;´Д`)
研磨すると白く変色してしまう。すると積層がより目立って印刷の荒れが目立つ。
でも予定通り。



光硬化パテで積層の隙間を埋めていく。
ついでに積層割れが原因で起きた印刷ミスをプラモ用接着剤やパテで修正。
1日太陽にあてておけばカチカチです(*'▽')



待っている間に光造形で印刷。こちらもサポート跡がすごい(;´Д`)
見た感じはミスはなさそうだ。



裏面もきれいに印刷できているように見えるが、
角が丸くなったり膨らんだりする現象が起きている。
光造形といえども完璧ではないね。



FDM式、SLA式両方で印刷したものを研磨した様子。
FDM式は400番の耐水ペーパー、
SLAは削れやすいので600番の耐水ペーパーで磨きました。
硬さはレジンの方がある感じ、ABSは柔軟さを感じる。
だけど、1mm厚のパーツなので、
力をいれるとABSは積層割れが起きそうな感じ、
レジンの方は力入れて磨くと割れそうな感じ。
もう少し厚みを付けるべきだったかな(;´Д`)



後々積層割れが起きたらイヤなので内側から対策をば。
3Dプリンター用の電熱ヘラで表面をなぞります。
一度溶けて再溶着するので積層割れの恐れが軽減します。
これを施した後は、驚くくらいフニャフニャ感が消えました。



サーフェイサーを吹いてみた。
左が光造形(レジン)、右がFDM(ABS)
双方、もう少しやすり掛けが必要なことが分かる。
ABSの方は穴の縁をもう少し修正できるかも。



ある程度整ったので塗装。



左が光造形(レジン)、右がFDM(ABS)。
ABSは磨きが足りなかったかな・・少しデコボコが残ってる。
200番で整えてから400番すればよかったかな。
球面だから加減がよくわからん(;´Д`)
まぁ、実用十分だけど。



パーツがそろった(;´Д`) ↑はABS用に用意したパーツ類。
今回ABSとレジンの2種類で印刷したけど、精度的に割と正確なのはABSの方。
上蓋は曲面が多かったので荒まくったけど、
ほかの部品は±0.1mm程度誤差を容認できるなら何も問題はない仕上がり。
0.2mmノズルを使っている効果が絶大、



それに比べレジンはミクロの世界ではかなり美しいけど、
1mmとかいう大きいレベルでゆがみが出ることがある。
ひどいときには3mmも長さが合わないことも。
底板のパーツは綺麗な円になりませんでした。光硬化パテで修正しました。
塗装したから今じゃわからないけどね。
一長一短だなぁ(;´Д`)

次の3Dマウスの記事はこちら
https://randol-news.net/art/00582.html
3Dマウス④ ジョイスティックの制御
2023.01.20
前回の3Dマウスの記事はこちら
https://randol-news.net/art/00576.html


前回は配線のミスが無いこと、ソースの書き換えが正常に行えたこと、
キーボードとマウスの制御が問題なくできることを確認しました。
今回はある程度3Dマウスに近い動作ができるまで
実験を進めていきたいと思います。

if (Joy_Switch_POS == LOW) {
  Keyboard.press(KEY_LEFT_SHIFT);
  Mouse.press(MOUSE_MIDDLE);
  delay(2);
  Mouse.move(1,1,0);

  Keyboard.releaseAll();
  Mouse.release(MOUSE_MIDDLE);
  delay(2);
  Mouse.move(-1,-1 ,0);
}else{
  Keyboard.releaseAll();
  Mouse.release(MOUSE_MIDDLE);
}
delay(10);

この処理が怪しい(;´Д`)
マウスカーソルの移動が10pxならうまく処理されるが、
1pxにすると、まったく動かなくなる。
なぜだ(;´Д`)
マウスカーソルをもとの位置に戻さなければ1pxでも正常に動く。
なぜだ(;´Д`)
解せぬ・・

厳密には6pxでも動くが、マウスホイールが動いたと錯覚したのか、
拡大縮小現象もおきる(笑)
安定して動くのが10px
意味不明。

拡大縮小が突然おきる原因は時間がかかったけど判明(;´Д`)
犯人はマウスのホイールボタンのダブルクリックに
「モデルを画面に合わせる」が組み込まれているため、
これが反応している模様。こんなん使ったことない。初めて知ったわ(;´Д`)
隠れたショートカットがまだまだあるんだなーと。
6px未満はドライバーによってダブルクリック認定されるかされないか
際どいラインなんだと思う。
これはPCの性能とマウスドライバーの良しあしでだいぶバラツキが出そうだ。
やばい、詰んだか?(;´Д`)

10pxを最小として組んでいけば?となるが
でもこれだと最小なのに目で追えないほど回転速度が速くて実用的じゃない。
じゃdelayを変化させて速度をコントロールするか?
そうなるとなめらかさを失うしな・・・ 困った。
しかもX、Yの両方向を同時に動かすのにdelayだけで管理するのは無理がある。
ORBIONがなぜマウスカーソルの動きに補正を入れないのか疑問だったが、
ようやく理解した(;´Д`)

3日間悩みに悩んだが、1pxレベルのオービットは必要。これは避けられないと思った。
7pxや10px刻みだと、複雑なものを作っているときに、
狙った角度を正面にできないことが多いからだ。
そこでどのように解決するかというと、1px~7pxまでの動きはカーソルが動くのを許容した。
8~10pxの場合は移動量が多すぎてすぐ画面端に激突したり、
FUSION360のウインドウからはみ出たりするので
元の座標にとどまるように位置修正を施す。
これでお茶を濁す。



ジョイスティックと移動量の関係は計算式ではなく、
表管理することにした。
思いついた当初は、配列で管理するつもりだったけど、
微調整するとき見づらく面倒だったので、
とりあえずIF文の羅列で実験してみたが、処理落ちもしないし、
可読性も高いしこのままでいいかもしれない(;´Д`)



マウスの中央ボタンがダブルクリックになってしまう問題。
これを解決するために、「カーソルは移動させるがボタンは押さない」
という処理を中間に挟んで回避する策を採用。
マウスはクリックとクリックの間に大きいカーソル移動があれば
いくら連射速度が速くともダブルクリックにならないという性質を利用してます。



動作を動画にとって見ました。
なめらかさと速度のバランスを取るのに苦労したけど
これからループ内に他の処理が加わっていくので動きは若干速めに調整。
まぁいいところに落ち着いたんではないかと思う。
ジョイスティックの傾斜が緩いときはカーソルも動き、
急なときはカーソルは止める。割と違和感ない。
回転を遅くしたい時というのはは微調整の為がほとんどなので、
よほど狭いモニターを使っていない限り端に激突することは珍しい。
問題点があるとすれば高速回転をさせたとき、
マウスカーソルがチカチカするくらいか。
高速で行ったり来たりしてるからね、仕方ないね。
ま、これは妥協(;´Д`)


ロータリーエンコーダーは特に工夫もなく、
前回コーディングしたものを入れ込むだけで動いた。
拡大縮小とオービットが実装されたことで、
だいぶ3Dマウスっぽくなってきた。

ファームウェアで残す部分は
パン操作と、ボタンを追加した時の処理、
あとFusion360に合わせて作っているけど、
2,3種は別ソフトでも動くようにしておきたいな。
とは言っても液晶を付けてないので、ソースファイル内で選択させる形だけど。

次は外装のデザインを進めるかな。

次の3Dマウスの記事はこちら
https://randol-news.net/art/00581.html

- CafeNote -