コーヒーとチョコレート

好きなことをつらつらと書きます。下手でもやりたいことやってみるよ!

天体観測お勧め本

天体観測が楽しくなるであろう本のご紹介となります

 筆者は時々天体観測をしていますが星座が見つけない又はあそこにある星の群れは何座なのかわからないことが多々あります。そんなとき、現在向いている方向にある星座を一発で示すアプリに頼ってしまいます。しかし、なぜか敗北感がする。アプリに頼らず、「あの星の並び方があるからこの線を伸ばして…」なんてカッコつけて自分で星座を追えてうんちくをだらだらと述べたいのなら、取り敢えず抑えておけ書籍を3冊紹介します。

 

 

 

 

 

一冊目: 新版 よくわかる星空案内

新版 よくわかる星空案内: プラネタリウム名解説者が教えてくれる
 

副題にもある通りこの本の筆者はプラネタリウム解説員であり、本を読んでいるとプラネタリウムの解説を聞いているかのように星空の見つけ方を教えてくれます。星座の見つけ方を覚えて、実際の星空で星座を見つけると感動しますよ。

 

2冊目:星座の神話

星座の神話―星座史と星名の意味

星座の神話―星座史と星名の意味

 

 この本は星座にまつわる神話の解説が主となります。絵は少ないですが神話の情報量が多く、この星座とあの星座は中が悪いとか、星座同士の関係性が分かるので面白いです。ちょくちょくゼウスが変身して女に言い寄るのが分かりました。ゼウスに少し幻滅しました。

三冊目:星座の辞典

星座の事典

星座の事典

  この本は季節ごとの星座を紹介しています。上記の本と違うところは写真が多く、星座に分布する星雲や銀河などの天体が記載されているところ。星座の説明や星座のエリア内にある恒星や星団、星雲などを紹介されています。

 

まとめ

 流れ的には星座を見つける。星座にまつわる話を知る。どんな星雲や銀河などの天体がその辺に分布しているかを知る。といったラインナップになっています。これで天体観測が楽しくなりますよ!

立体折り紙

三角パターン

折り紙のパターンを検索していたら面白そうなものを見つけました。自分が折りやすいようにPDFを作ってみました。

プリントをする際にはフチなし全面印刷などの画面調節をお願いします。

実線が山折り破線が谷折りとなります。

drive.google.com

この折り紙の正式名称ってあるんですかね?

詰みメモ

 わからなくなったのでメモです。センサーの前に手をかざし最初の5秒で初期位置を設定します。設定位置から近づけば正回転、離れれば逆回転する。さらに設定位置から遠ざかれば回転速度が高くなるような制御を目指しましたがどうも安定しません。特に設定位置から離れた時の速度変化が安定しないので悩んどります。PWM信号が正しく算出されていない?プログラム上での問題だと思われますがよくわからずじまい…何かアドバイスが聞ければ幸いです。

 とりあえず設定位置で正回転、逆回転の判断できるプログラムはできたので後回しにしようかとおもいます。


int LED =4;
const int voutPin = 26;
const int volt = 3.3;
const int ANALOG_MAX = 4096;
const int Threshold = 1500;

const int Amotr1 = 17 ;
const int Amotr2 = 16 ;
const int stby = 32 ;

float posi = 0 ;
float n = 0 ;
int x = 0 ;
float voltage=0 ;

 
void setup() {
  // put your setup code here, to run once:
Serial.begin (115200);
int reading =0;
pinMode(LED,OUTPUT);
ledcSetup (0,10000,8);
ledcAttachPin(33,0);

  pinMode(Amotr1,OUTPUT);
pinMode(Amotr2,OUTPUT);
pinMode(stby,OUTPUT);

ledcWrite (0,0) ;
int voltage = 0 ;
delay (1000);
position();

}

void loop() {
 int reading = analogRead(voutPin) ;
  float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;
  Serial.print(voltage);
  Serial.println("mV");
  
  if(voltage>posi){
   front();

    }
 if(voltage<posi){
    back();
    }  
  }


void position() {
  int n = 0;
for(int i = 0; i < 100 ; i++){
  int reading = analogRead(voutPin) ;
  float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;
  n = n+ voltage ;
  delay (50);
}
  Serial.println(n);
posi = n/100;
Serial.println(posi);

  }
void front(){

digitalWrite (Amotr1,HIGH);
digitalWrite (Amotr2,LOW);
digitalWrite (stby,HIGH);
 int reading = analogRead(voutPin) ;
  float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;*/
   float x = (255*(voltage-posi)/posi);
Serial.print(voltage);
  Serial.println("mV");
Serial.print(posi);
  Serial.println("mV");
Serial.print(voltage-posi);
  Serial.println("mV");
Serial.print(x);
  Serial.println("Hz");
Serial.println("_________");
ledcWrite(0,x);
  delay (100);

  }
void back(){

digitalWrite (Amotr1,LOW);
digitalWrite (Amotr2,HIGH);
digitalWrite (stby,HIGH);
  int reading = analogRead(voutPin) ;
  float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;*/
    x = (255*(posi-voltage)/posi);
Serial.print(voltage);
  Serial.println("mV");
Serial.print(posi);
  Serial.println("mV");
Serial.print(voltage-posi);
  Serial.println("mV");
Serial.print(x);
  Serial.println("Hz");
Serial.println("_________");
ledcWrite(0,x);
  delay (100);
  }
  

アナログ信号からモータをPWM制御する

f:id:kesikasuapple:20200331013747j:plain

 こんにちわ。今回は前回に使用した測距センサ(GP2Y0A21YK)にモーターをくっつけて回転数の制御をしてみました。この記事はメモ書きの意味が強くなります。というか前に購入したESP32が燃えてしまって買い直したら別のモジュールを買ってしまったみたいで仕様が若干違って手間取っていたり、回転数上げるとプログラムが謎に止まってわけわかめ状態に陥り、数日放置したら普通にうごくとかなんなんだ…ということで本題行きましょうね。

  1. 目標
  2. 使用部品
  3. 回路図及びプログラム
  4. 動作結果
  5. 今後
  6. 参考資料

1. 目標

 測距センサに物体が近づいたときのみに、プロペラの回転数が上がるおもちゃを作ります 。今回、モーターの回転数を制御するためにモータードライバを使用します。

2. 使用部品

 前回に引き続いてesp32(NodeMCU-32)と測距センサ(GP2Y0A21YK0F)さらにモーターとモータードライバーモジュール(TB6612FNG)を使用します。プロペラは部品屋さんにあったものを買いました。

www.switch-science.com

3. 回路図及びプログラム

 今回からKicadを使用して回路図を書きました。TB6612FNGモータードライバモジュール(以下モータードライバ)は初めての型を使用します。AI1とAI2、STBYはデジタル信号でそれぞれP17,P16、P32に接続します。PWM制御はP33に接続します。 AO1,AO2にモーターを接続します。VM,Vccにはesp32から3.3Vの給電を行います。

 GP2Y0A21YK0F(以下測距センサ)の信号ピンである3ピンには10Kの抵抗を入れてプルダウンさせます。これをすることで低い値がしっかり出力されたので効果はあると実感しました。

f:id:kesikasuapple:20200330223710p:plain

図1. 回路図

 プログラムは測距センサから出た値が1500以上だとPWM信号が250出力1500以下だと100を出力します。測距センサに障害物が近づけばプロペラの回転数が高くなり遠ざかれば回転数が低くなります。また、測距センサが取得した値をわかりやすくするために、シリアル通信で表示しました。

ソースコード


int LED =4;
const int voutPin = 26;
const int volt = 3.3;
const int ANALOG_MAX = 4096;
const int Threshold = 1500;

const int Amotr1 = 17 ;
const int Amotr2 = 16 ;
const int stby = 32 ;

void setup() {
  // put your setup code here, to run once:
Serial.begin (115200);
int reading =0;
pinMode(LED,OUTPUT);
ledcSetup (0,10000,8);
ledcAttachPin(33,0);
pinMode(Amotr1,OUTPUT);
pinMode(Amotr2,OUTPUT);
pinMode(stby,OUTPUT);
digitalWrite (Amotr1,HIGH);
digitalWrite (Amotr2,LOW);
digitalWrite (stby,HIGH);
ledcWrite (0,0) ;
int voltage = 0 ;
}

void loop() {
  
  int reading = analogRead(voutPin) ;
  float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;
  Serial.print(voltage);
  Serial.println("mV");
if(voltage>Threshold){
 ledcWrite(0,250);
  delay (100);
  } else if(voltage<Threshold) 
  { ledcWrite(0,100);
delay (100);
    }
}

4.動作結果

 Twitterに乗せた動画では測距センサに手を近づけるとプロペラの回転数が上がりテッシュペーパーがなびいてる様子がわかります。(わかってくれ…)

f:id:kesikasuapple:20200330225851p:plain

写真1.シリアルモニター

 写真1は測距センサから出力された値をシリアルモニタで表示しています。写真からだけだと低いところで325mmV高いところで2917mmVが出力されています。設定した1500mmVでプロペラの回転数が変化しているのが確認できました。

5.今後

 今回1500mmVで回転数が変化するようにしましたが、センサー値に比例して回転数を制御してみたいとおもっています。

追記

比例制御?的なことができるコードを書きましたので追記します。


int LED =4;
const int voutPin = 26;
const int volt = 3.3;
const int ANALOG_MAX = 4096;
const int Threshold = 1500;

const int Amotr1 = 17 ;
const int Amotr2 = 16 ;
const int stby = 32 ;

void setup() {
  // put your setup code here, to run once:
Serial.begin (115200);
int reading =0;
pinMode(LED,OUTPUT);
ledcSetup (0,10000,8);
ledcAttachPin(33,0);
pinMode(Amotr1,OUTPUT);
pinMode(Amotr2,OUTPUT);
pinMode(stby,OUTPUT);
digitalWrite (Amotr1,HIGH);
digitalWrite (Amotr2,LOW);
digitalWrite (stby,HIGH);
ledcWrite (0,0) ;
int voltage = 0 ;

}

void loop() {
  
  int reading = analogRead(voutPin) ;
  float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;
  Serial.print(voltage);
  Serial.println("mV");

int x = ((255*voltage)/3000) ;
Serial.println(x);
ledcWrite(0,x);
  delay (100);
 

6.参考資料

測距センサ(GP2Y0A21YK0F)

https://docs.rs-online.com/91b2/0900766b80d1bdcb.pdf

モータードライバTB6612FNG

https://www.switch-science.com/catalog/385/

モーターRE-280RA

https://product.mabuchi-motor.co.jp/detail.html?id=66

プルダウン、プルアップ

https://voltechno.com/blog/pullup-pulldown/

測距センサ(GP2Y0A21YK)をESP32で使う

こんにちは、今回は距離測定センサーで遊んでみました。センサーを地面に向けることで地面とセンサーの間の距離が短くなりLEDが点灯している様子です。はい。

  1. 目標
  2. 測距センサ概要
  3. 回路図及びプログラム
  4. 動作結果

 

1.目標

 まず測距センサを使用してELDを点灯させたり消灯させたりします。距離が短くなれば点灯、遠くなれば消灯するといったセンサー制御を目指します。最終的にはローバーの前に障害物があった場合に停止して方向転換を行うような動きをさせようと考えています。可能なら障害物までの距離を表示するところまでやりたいですが、最悪動けばいいや精神でいきます。

2.測距センサ概要

 測距センサは測距方式片方から赤外線を発します。障害物に反射した赤外線を受光部で取得して発射から受光までかかった時間から距離を出します。

 データシートによるとGP2Y0A21YKの測定可能距離は10cm〜80cm動作電圧は5V読み取りはアナログ信号出力です。センサーの動作電圧が5Vとの事ですがesp32は0V〜3.3Vまでを4096等分で値を読み込むことができます。データシートを見ると障害物との距離が5cmの時に3.3V近くを出力する様子。実際にarduino unoで試用した時に出力される電圧も最大で3.3Vまで位しか出ないから使うには使えそうと判断しました。 

 

表.1 動作条件
パラメータ 数値 単位
測定可能距離 10~80 cm
Vcc 4.5~5.5 V
Vo 0.4~3.3 V

 

 

表.2 ピンアサイ
配線色 ピン ピンNo
Vo 1
オレンジ GND 2
Vcc 3

 

f:id:kesikasuapple:20200112231535j:plain

写真.1 センサー外観

購入ページ

http://akizukidenshi.com/catalog/g/gI-02551/

シャープ測距モジュール GP2Y0A21YK 2個セット

シャープ測距モジュール GP2Y0A21YK 2個セット

 

 

3.回路及びプログラム

 

f:id:kesikasuapple:20200109233029j:plain

図.1 結線図

 

 esp32でアナログ信号を読み取るにはピンアサインでADCと記述されているピンで読み取る事が可能です。読み取り値は4096で0V~3.3Vの電圧を読み取ります。今回はP25で読み取ります。測距センサーと物体との距離が近いときにLEDを点灯させますのでLEDを付けました。抵抗は1KΩです。


int LED =4;
const int voutPin = 25;
const int volt = 3.3;
const int ANALOG_MAX = 4096;
const int Threshold = 1300; //点灯する電圧値[mV]

void setup() {
 
Serial.begin (115200);
pinMode(LED,OUTPUT);
}

void loop() {
 
  int reading = analogRead(voutPin) ; //25pinを読み取る
  float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;//読み取りした値を電圧に計算する
  Serial.print(voltage); //シリアル通信で表示
  Serial.println("mV");

if(voltage>Threshold){
  digitalWrite (LED,HIGH);
  delay (500);//電圧値が1300mV以上はLED点灯
  } else if(voltage<Threshold)
  {digitalWrite (LED,LOW);
delay (500);//電圧値が1300mV以上はLED消灯
    }
}

 

ざっくりなプログラムの流れは、analogReadで読み取り電圧に計算します。算出した電圧が閾値である1300[mV]を超えたらLEDが点灯して1300以下になると消灯する。つぅ感じでさぁ。

4.動作結果

シリアル通信で表示された電圧値です。

f:id:kesikasuapple:20200112231620j:plain

図.2 シリアル通信

 このページのトップに記載したtweetのように動作してしてくれました。おけまるです。esp32で距離測定センサーを使用して距離検知することができました。また、esp32のanalogreadの使い方を習得でしました。今後距離を算出できるようにプログラムを考えたいです。

参考資料

http://rikoubou.hatenablog.com/entry/2017/06/29/135819

近況報告

 どうもまさむねです。お久しぶりの投稿です。最近何も投稿できてなかったので近況報告でもしようかと思います。

 

 まずは9/8に入籍しまして一応旦那となりました事をご報告させて頂きます。今後一層仕事やプライベート、家庭の事やらなんやら適当に、適度に程々に頑張ります。気が早いですが、子供なんて出来たらどんな風に育つのか楽しみ。

 

 お仕事の方はまぁまぁボチボチ。失敗しつつ少しづつできる事を増やしている感じです。今現在旋盤工として頑張っていますが、事務所で図面を描いている方から、いずれは図面を描かせたいとお言葉を頂きました。私自身、絵や図面を描くのは好きでCADを使う仕事も出来ればと考えていたのでばっち来いって感じですね。それがモチベーションの1つとなっています。旋盤扱えられれば加工のしやすい図面も描きやすくなるし、重宝されるかもです。有り難い話ですよね。

 

 趣味の方はといいますと、最近資格勉強を始めまして、大学の時に取りそこねた機械設計技術者3級に再チャレンジする事にしました。設計できるようになりたくて工業大学入学したのに、このままだと大学で勉強した事を無駄にしているみたいだし、同級生と比べて劣ってしまっているみたいに思えたりだとかコンプレックスからくる理由だったり、将来設計もしてみたいとか淡い期待もあったり。力試しをしようと思った訳です。

 電子工作は完全にストップしてしまいましたね。これはまずい。折角arducam買ったのに一度も使えていない…距離測定するセンサーだとかもあまりさわれていない…ローバーも進まず…Fusion360もさわらず…うーむ…しばらくは資格勉強に時間を充てようと思っているのでまだ復帰できないかもです。技術系の同人誌なんかもこのブログのまとめみたいなものを作る事を考えているのでまだまだ先になりそう。もっと精力的になりたいですわ。

 

密かな野望、宇宙機の設計できるようになれたらなー(鼻ホジ)

 

そんなこんなで近況報告でした。

タミヤギアボックスで無理矢理再設計してみる

 こんにちわ。最近、旋盤加工にジョブチェンしてビクビクしながら旋盤回しているまさむねです。

 

 今回はタミヤギアボックス4速タイプをもっと単純に出来ないだろうかと考え、モーターのギアと受動側のギアの二枚のみで設計したらどうなるかをまとめてみました。

 受動側のギアにタイヤをくっつけて、ギア付きタイヤを製作します。モータギア(駆動ギア)とギア付きタイヤ(受動ギア)の一段歯車機構を作ることができるか検討します。

目的

 タミヤギアボックス(4速)を一段歯車機構として設計し、シンプルな設計ができるかどうか検討する。

ギアボックス概要

タミヤ 楽しい工作シリーズ No.167 シングルギヤボックス 4速タイプ (70167)

タミヤ 楽しい工作シリーズ No.167 シングルギヤボックス 4速タイプ (70167)

 

タミヤギアボックス(4速)

 ギアの組合せにより四段階の速度に変速可能。多段歯車機構により大幅な速度変化を行います。速度比は以下の4種類。今回は2276gf・cmと同等のトルクを出せるようにギアの直径(歯先円直径及びピッチ円直径)を計算します。

ギア比 回転数 回転トルク
12.7:1 1039rpm 94gf・cm
38.2:1 345rpm 275gf・cm
114.7:1 115rpm 809gf・cm
344.2:1 38rpm 2276gf・cm

  タミヤギアボックス詳細

https://www.tamiya.com/japan/products/70167/index.html

設計計算

速度比の計算式

 2276gf・cmのトルクを出すにはギア比を同じ344.2:1にする必要があります。

 ギア比とは駆動ギアが1回転する間に受動ギアが何回転するかを比率で表したものです。例えばギア比1:2は駆動ギアが1回転すると受動ギアが二回転することとなります。この344.2:1は駆動ギアが344.2回転しないと受動ギアは1回転しないということになります。

 ピッチ円直径は速度比から計算します。駆動ギアのピッチ円直径をD_1回転数をN_1歯数をz_1受動ギアのピッチ円直径をD_2回転数をN_2歯数をz_2モジュール(歯車の歯の寸法)をmとすると

 displaystyle{rac{N_2}{N_1}=rac{D_1}{D_2}=rac{mz_1}{mz_2}=rac{z_1}{z_2}}    (1)

 

 となり、歯数の比からピッチ円直径を計算することができます。

 ちなみに、モジュールはギアの歯の寸法の事で、ギアの歯の寸法を揃えないとギアが噛み合わないため動力を伝えてくれません。

 今回モジュールとピッチ円直径が分からないので速度比と歯数の比を使いピッチ円直径及び歯円直径先を算出します。

計算

 タミヤのモーターにあらかじめついている駆動ギアの回転数はN_1=344.2歯数は8枚なので8受動ギアの歯数はz_xとして回転数はN_2=1で計算します。ギア比で駆動ギアが344.2回転すると受動ギアが1回転しているのでそのままN_1=344.2回転N_2=1回転としました。(1)の計算式を変換させて受動ギアの歯数z_xを計算します。

 displaystyle{z_x=z_1rac{N_1}{N_2}}=8{rac{344.2}{1}=2753.6}枚

 

 よって2276gf・cmのトルクを出すために必要なギアの歯数は2753.6枚となりました。コンマ6の歯数ってなんやねん・・・

 

 直径を算出するためにモジュールの寸法をピッチ円直径Dと歯数を使用して以下の式から算出します。

 

 displaystyle{m=rac{D_p}{z}}

 

 ですがピッチ円直径は計測しにくいので計測しやすい歯先円直径D_aから算出します。メートルギアの歯先円直径で計算する場合は歯数に2を足して計算します。以下の計算式で使用した歯先円直径(19mm)と歯数(36)は付属品の実測値です。

 displaystyle{m=rac{D_a}{z+2}}=rac{19}{36+2}=0.5

 

モジュールが算出できたのでピッチ円直径及び歯先円直径を算出します。

 ピッチ円直径

 displaystyle{D=mz}=0.5 imes2753.6=1376.5[mm]

 歯先円直径

 displaystyle{D_a=m(z+2)}=0.5 imes2753.6+2=1377.8[mm]

 

直径が1m30cmってやばくない?

結果

 タミヤギアボックス4速タイプを一段歯車機構として2276gf・cmのトルクが出るようにピッチ円直径及び歯先円直径を計算しました。ピッチ円直径1376.5[mm]歯先円直径1377.8[mm]となりました。超現実的ではありませんね。