2026年9月2日水曜日

3Dプリンタ造形時のデータ出力による造形物の違い

 3Dプリンタで次のような傾斜のある設計を行い、造形をしました。その結果、フラットな面であるのに、造形した結果は、模様が出ていました。(2枚目の造形物の写真)









 BambuStudioでも、確かにプレビューすると、フラット面に模様があるのが確認できました。

 フラット面は、ボールが転がることを想定しているので、フラットにしたいということです。


Fusion360の出力方法を変える

 何とかならないかと試行錯誤しました。

 3DCAD(Fusion360)上で、傾斜を一旦無くして、出力します。


 次に、BambuStudioで読み込み、スライシングし、プレビューを見ると、フラット面が設計通りになっていました。

(造形してもフラットでした)


 CAD設計のデータの出力方法で、造形結果が変わることが分かりました。


結果として、傾斜のあるものは、できるだけフラットにして出力する必要がありそうです。










2026年8月23日日曜日

ものづくりキットの工夫1

 サッカーボール型立体迷路を設計し、組み立てをしているときに、何度か間違えたのが、「辺」となる部分(右図の表面の迷路の間にある白い部分)です。
 形状が2種類あり、特に五角形と六角形の迷路間のパーツには取り付ける向きがあります。
 これを間違えると、歪を起こし、うまくパーツが合わなくなってしまいます。

パーツの改良1

 ものづくりキットとして、誰でもが組み立てられるようにするための設計の工夫をしています。
 まず、行ったのが、向きを示す「目印」を付けるものです。右図のように、五角形の迷路になる面に、「丸い凹み」を付けました。組立するときに、この目印を目安にして取り付けることができます。

パーツ改良2

 「パーツ改良1」でも、製作していくと間違えることがあります。これを抑えるための改良をしました。

 「パーツ改良1」での差し込みをする枘(ほぞ)の凹凸は、長方形でした。これを右図のように「台形」にすることで、逆向きに入れることができなくなります。

 この改良でパーツの向きの入れ間違えをしないように工夫することができます。


2026年8月21日金曜日

サッカーボール型迷路の設計

 サッカーボール型立体

 サッカーボール型の立体は、切頂二十面体(半正多面体)と呼ばれる立体です。

 五角形の面が12面、六角形の面が20面あります。


立体迷路の設計1

 切頂二十面体で検索すると、いろいろな情報を得ることができます。設計する上で、大切なのが、「面のなす角度」です。

 五角形と六角形の面のなす角度は「142.62°」、六角形同士のなす角度は「139.62°」ということが分かります。これを基にして、迷路を押さえる辺となる枠、「接続枠」を設計します。
 この設計は、以前にアップしてある「正12面体の迷路(2) 迷路枠の設計」を参考にしてください。
 注意することは、面のなす角度が「五角形と六角形」、「六角形同士」で違うということは、辺となる枠の形状も違いますので、それぞれ設計していく必要があります。
 これで辺の設計が出来上がります。

立体迷路の設計2

 「頂点パーツ」の設計なのですが、「切頂二十面体」には頂点が60個あります。また、辺枠の形状が2つあるため、「頂点パーツ」には向きが生じます。
 

 そこで、組み立てやすくするために、「頂点パーツ」を図のように五角形の迷路の周りの「頂点パーツ」同士連結して、1つのパーツにしました。 

 これで、60個のパーツが12個に削減することができます。

 


 

 横側(少し下側)からみると右図のようになります。ただ連結すると3Dプリンタで造形しにくい(サポートが必要)ため、下の面を平らになるようにカットしています。
 また、横側からみると右図のようになります。V字型になっているのは、3Dプリンタの造形の性質から45度以上であれば、サポートが不要であることを利用して、材料を減らすためにカットしています。


 これを利用すると、右図のように

・「頂点パーツ」の中央に五角形迷路が入る
・「五角形と六角形」の辺枠が五角形迷路の周りに入る。
・「頂点パーツ」同士をつなぐ「接続枠」は「六角形同士」の迷路間に入る「接続枠」となる。
・「頂点パーツ」同士をつないでいくと、六角形の迷路が入る場所ができる。

という組み立てるときのルールが出来上がります。これで組み立てもやり易くなります。


2026年7月26日日曜日

ものづくりキットマニュアル

 ものづくりキットのマニュアルをダウンロードできます。



ものづくり工作キット No.1   ビー玉ガチャマシン
ものづくり工作キット No.2   立体迷路
ものづくり工作キット No.3   カプセルトイマシン(45mmカプセル)
ものづくり工作キット No.4   開店(回転)花輪 (知的所有権の関係で非公開)
ものづくり工作キット No.5   合格(五角)迷路 正12面体迷路
ものづくり工作キット No.6   立体迷路ミニ(75mmカプセルイン)
ものづくり工作キット No.7   マーブルマシン
ものづくり工作キット No.8   正12面体迷路ミニ(75mmカプセルイン)
ものづくり工作キット No.9   サッカーボール迷路
ものづくり工作キット No.10    フィッシング


2026年7月7日火曜日

回転軸をスムーズに動かす工夫


回転軸をスムーズに動かしたいことがあります。右の図は把手です。つまみを持って回転させる機構です。

 この時に必要なのはつまみがスムーズに動くことです。


3D設計

 この機構を次のように設計しました。


 左図のように、ハンドルにはφ6.0mmの穴が空いています。押さえの差し込まれる部分はφ5.5mmで、少しだけ小さくなっています。また右図のように、厚みではハンドルの穴が1mm、押さえが1.2mmと押さえの厚みが少しだけ熱くなっています。

 これにより押さえをつまみにネジ留めすると、つまみと押さえがしっかりと固定され、わずかな隙間があるため、ハンドルとはスムーズに動かすことができます。


 この機構は、ネジ留めで固定するときに、スムーズに動かす必要がある場合に活用することができます。




2026年6月12日金曜日

マイコンゲームの乱数初期化方法(2)

  マイコンによっては、EEPROMが使えない場合があります。その時の一例です。

スイッチ回路

 右はスイッチ回路を接続した図です。
左のボードはESP32マイコンをGroveコネクタで接続できるようにした拡張ボードです。

 ブレッドボードにスイッチを配置して、GroveケーブルでIO13ーGND間に接続しています。

スイッチから乱数列を初期化する

 ゲームをするときに、ほぼスタートスイッチで始める場合が多いかと思います。このスイッチを利用します。スイッチを押してから離すまでの時間を使って乱数の初期化をします。

 プログラム例です。

#define SW  13
long cnt=0;
void setup() {
  pinMode(SW,INPUT_PULLUP);
  Serial.begin(115200);
  delay(100);
  Serial.printf("Plese press the SW.\n");
  // 押されるまで待つ
  while(digitalRead(SW)!=0);
  Serial.printf("Plese release the SW.\n");
  cnt=micros();
  // 離すまで待つ
  while(digitalRead(SW)==0);
  cnt=micros()-cnt;  
  Serial.printf("cnt: %5ld\n", cnt);
  // 乱数の初期化
  srand(cnt);
  for(int i=0;i<10;i++){
    int r=random();
    Serial.printf("%5d\n",r);
  }
}
 
void loop() {
} 
 Arduinoでは内部時間を持ってします。millis()関数やmicros()関数を使うと、リセットされてからの時間を取得できます。
 これを利用して、スイッチを押したときの内部時間と話したときの内部時間の差を取ると、スイッチを押していた時間が取得できます。この時間は個人差があり、毎回異なります。この時間をmicros()関数で計算すると、マイクロ秒で時間を取得できます。マイクロ秒単位であれば、ほとんど同じになることはありません。
 実行結果を示します。

 先頭のcntがスイッチを押していた時間[μS]です。これを乱数の初期化に使うと、毎回異なる乱数列となります。

 Arduinoマイコンでない場合でも、押しているときに数値をカウントするだけで、同じ働きが作ることができます。

2026年6月11日木曜日

マイコンゲームの乱数初期化方法(1)

  マイコンでゲームをプログラミングする場合、生成される乱数列が固定されてしまいます。つまり、常に同じ乱数でゲームをすることになり、記憶すれば攻略することができてしまいます。


random関数の動作を確認する

 まず、random関数の動作確認をします。次のプログラムを実行します。

void setup() {
  Serial.begin(115200);
  delay(100);
  for(int i=0;i<10;i++){
    int r=random();
    Serial.printf("%5d\n",r);
  }
}
void loop() {
}
 乱数を10個表示させるプログラムです。
 実行させると、右図のように乱数が表示されます。
何度もリセットボタンを押して、再起動しても同じ乱数が表示されます。

EEPROMを使う

 ゲームのプログラミングを行うときに、パソコンのように内部時計が動作していると、起動時の時間から乱数列の初期化を行うことができます。
 しかし、マイコンで、WiFi機能があるとインターネットに接続することもできますが、一般的には割高になってしまいます。
 初期化する方法として、EEPROMにプログラムが実行された回数を記憶しておき、その数値で乱数の初期化をすることができます。

#include "EEPROM.h"
int addr = 0;
#define EEPROM_SIZE 64
void setup() {
  Serial.begin(115200);
  EEPROM.begin(EEPROM_SIZE);
  delay(100);
  byte cnt=EEPROM.read(addr);
  Serial.printf("cnt: %2d\n", cnt);
  // 乱数の初期化
  srand(cnt);
  // EEPROMのカウントアップ
  cnt++;
  EEPROM.write(addr, cnt);
  EEPROM.commit();

  for(int i=0;i<10;i++){
    int r=random();
    Serial.printf("%5d\n",r);
  }
}

void loop() {
}
 プログラムでは、EEPROMから読み出し、プラス1してEEPROMに書き込み直します。読みだした数値で乱数の初期化を行い、その後、10個の乱数を発生、表示しています。

 実行結果が右図です。
 先頭でEEPROMの数値cntを表示後、10個の乱数を表示させた結果です。
 cntの値が変わると、乱数列が変わっていることが確認できます。



EEPROMを使った乱数の初期化(アレンジ)

 プログラムの起動回数cntを使った乱数の初期化ですが、起動回数が同じであれば、同じ乱数になってしまいます。
 これを回避する一例として、ハイスコアを別のEEPROMのアドレスに記憶しておき、起動回数cntと組み合わせて、乱数の初期化を行うことや、スイッチの押された回数を記憶して、起動回数cntと組み合わせるなどのアレンジをすると、同じ起動回数でも乱数列を変えることができます。





3Dプリンタ造形時のデータ出力による造形物の違い

 3Dプリンタで次のような傾斜のある設計を行い、造形をしました。その結果、フラットな面であるのに、造形した結果は、模様が出ていました。(2枚目の造形物の写真)  BambuStudioでも、確かにプレビューすると、フラット面に模様があるのが確認できました。  フラット面は、ボール...