第3回 JARL さいたまフィールドミーティング

JARL埼玉支部のイベントに行ってきました。

第3回さいたまフィールドミーティング - JARL埼玉県支部

どうでもいいことですが、「さいたま」と書くと「さいたま市」を指すような感じがします。埼玉県支部の催しなので「埼玉」でいいような。

いい天気です。1回目のときにパドルを衝動買いした SUR工房さんは今年は来ていませんでした。

特に目的は無かったのですが、ジャンクを見ていて、無線機の修理に必要なミリバルが1000円なので購入。それから、使用感の少ないディスコーンアンテナが2500円なので購入。建てる場所が無いのですが、安さに惹かれました。ステンレス製なのでピカピカです。

午後2時過ぎてから抽選会が始まりました。ジャンク目当てで早めにきた人は、さすがに待っていられなくて帰ってしまう人も多いので、当選率は割と高いです。私の番号の前後の人も当たっていました。

ICOM のキャップが当たりました!

目の病気になって以来、眩しくて家の中でも帽子をかぶっているワタシにキャップが当たるとは、、やっぱりそういうこともあるんですね。ラッキーです。思いがけずミリバルとアンテナも入手できて良い日でした。これから無線のイベントはこれをかぶって行きまーす。

アンテナ用コイルボビン

以前 7MHz VCH アンテナを作るときに、コイルを巻くためのちょうどいい筒(ボビン)がなく困った経験があり、それからは使えそうなボトルがあると収集していました。ボビンの要件は、

1. 直径 65~75mm ぐらい

2. 高さ 100mm 以上

3. 寸胴であること

4. 強度があること。

5. 断面が円

飲料系ペットボトルで 3, 4, 5 を満たすボトルはほとんどありません。たまたま家族が使っているものにちょうどいいものがあり、私はひっそり溜め込んでいました。そして、気がつくと箱に入りきれなくなっていました。

VCH アンテナを大量生産する予定は無く、こんなにあってもしょうがないので一旦、処分することにしました。処分前に紹介しておきます。

左から、

1) クリアデュー ハイドロ:ワンステップ 360ml

コンタクトレンズの洗浄液。現行商品なのでドラッグストアで売っています。

2) クリアデュー ハイドロ:ワンステップ 385ml

同上ですが、ちょっと前のタイプ。寸胴部分が長いためボビン向きです。

3) ハトムギ保湿ジェル 450ml

化粧水(美容液)。現行商品でサイズが少し大きめ。

4) ボタニスト ボタニカルトリートメント 490ml

なで肩ですが、寸胴部分の長さは 3 と同じくらい。最も固くて強度がありますが、現行商品かどうかわかりません。

1 と 2 はちょっと細身なので、必要なインダクタンスが得られるまで巻ききれない可能性があります。細めの電線を巻くなら大丈夫です。今作るのであれば 3 が選択肢でしょう。 

VCH アンテナについては私は CQ 出版の「特選ハムのアンテナ製作集(HAM TECHNICAL SERIES) 」を参考にしていましたが絶版のようです。が、ネットでググると色々出てきます。

これは移動用 VCH に使っているコイルです。先に記したように、製作時に適したボビンが無かったため、ホームセンターで売っていた 500円ぐらいのボトルを買って作りました。

話は変わって、AH-4(直下型チューナー)のエレメントに直列にコイルを付けると 1.9MHz にも同調するそうなので、そのためのボビンも探していました。7MHz VCH 用コイルよりも二まわりぐらい大きいサイズが必要です。Amazon の塩ビパイプを検討しました。

しかし、3個もいらないし、私の自治体では塩ビは産廃なので引き取ってもらえず、捨てる際に困るため、他に色々物色していました。

(右) は以前ダイソーで買ったプラスチックケースです。とりあえず買ってみたものの、サイズと作りがイマイチでした。前面がヒンジで開くようになっているため、強度がありません。

先日、再びダイソーを物色していて、ちょうど良さそうなタッパウェア(左)を見つけました。これはぴったりです。これで 1.9MHz コイルの実験をしようと思っています。

フードドライヤーの太陽光追尾その5 完成の巻

フードドライヤーの太陽光追尾その4 - cruzioのブログ の続きです。

試作だった回路を基板に起こし、部品等の実装を進めていきます。

バッテリーは単3x 2で 5V への昇圧器内蔵充電器(ガラケー時代のもの、以前1個50円で投げ売りされていたときに大量購入した)を使うことにしました。

足が入らなくなっていた Arduino Nano は、一部のピンのみピンヘッダーに挿すことにしました。これは完成後の写真で、基板側は 7ピン分の長さのソケット2列になっています。

ケースは 6mm 厚の板材のため、スイッチ類をどうやって付けるか悩みました。結局、裏側にアクリル阪を付けて、そこに取り付けました。電源スイッチは木の厚みがあって、シーソーやトグルは付けられないためロータリースイッチにしています。

下部ケース裏面。地面に建てたポールに取り付けるため、底面はこのように細工しています。

こちらがポール側です。ドライヤー箱+追尾機は軽いのでこの程度でOK。

塩ビパイプを地面に埋めておき、ドライヤー使用時はアルミパイプを刺します。たまたま塩ビの内径がアルミパイプにぴったりだったのでこのようにしました。

追尾機の組み立て完了。このくらい余裕があると楽です。

CDS センサー部がとても邪魔で、ぶつけて壊しそうです。黒い仕切りを板ではなく厚紙にすれば良いかも。

さっそく試運転。奥さんがローズマリーを乾かしたいというので、私はイチゴを入れることにしました。

パイプに取り付けて自立します。このように設置したのはネコ除けのためですが、小さい虫も入らなそうでマル。

動作の様子をアップロードしました。動きはとてもゆっくりです。ひとつ難点は電源投入時にサーボモーターを初期位置に設定するのですが、そのときに現在位置から初期位置にサーボモーターがデフォルト速度で動いてしまいます。これがとても早い!ので中身の入った箱をセットした状態で電源を入れると大変なことになります。これは、サーボモーターは現在位置を読み出すことができない仕様のためです。電源遮断時の最後の位置をEPROMに保持しておく方法もありますが。。今回は対策として、電源を切る前に手動で初期位置付近に位置合わせしておく、ということで回避しました。VRとプッシュSWはそのためのものです。

youtu.be

夕方、取り込みました。乾き具合は如何に?

薄く切ったイチゴはペラペラに乾きました。厚みがあるのはまだ水気があります。あまり薄いのは食べた気がしないので、ちょっと厚めに切って、2日間乾かすのが良さそうでした。ローズマリーはかなり茶色っぽくなってしまいました。熱のせいかな?

夕方、おつまみになりました。

今回は回転台の実装方法を考えるのと木工の工作が思ったより大変でしたが、動作も期待通りで楽しく作れました。何と言っても実用的です。晴れの予報の日は何かしら干したくなります(笑)。すべて段ボールでも作れると思うので中高生の夏休みの工作にちょうどいいかも知れません。

回路図とプログラムです。

#include <Servo.h>
#define BUTTON_PIN 2 //位置設定ボタン
#define SERVO_PIN 3 //サーボ制御 ex.9
#define DEBUG_LOG 0 //Serial output control
#include <Bounce2.h>
Bounce2::Button button = Bounce2::Button();

Servo myservo;  // create servo object to control a servo
const int vrPin = A2; //位置設定VR
const int sensPin1 = A3;   // CDS1 input ex.A0
const int sensPin2 = A4;   // CDS2 input ex.A1
const int maxArr = 5; //移動平均配列サイズ
int sensVal1[maxArr], sensVal2[maxArr];
int currentDeg=1500; //サーボ初期値 中央 South
int arrPos=0; //移動平均
uint8_t u8state=0;
unsigned long u32wait;
const long intervalS=100;
const long intervalL=5000;//3000;
long intervalMillis=intervalS; //interval to execute
int delta; //delta of 2 CDS
const int deltaThreshold=20; //in-focuse if wihtin deltaThreshold
int totalSensVal1, totalSensVal2;
//int ledPin = LED_BUILTIN;

void initcode() {//init servo position;
  myservo.attach(SERVO_PIN, 500, 2500); //limit within 180 deg
  button.attach( BUTTON_PIN, INPUT_PULLUP );
  button.interval(5);
  button.setPressedState(LOW);
  for (int i=0;i<maxArr;i++) {
    sensVal1[i]=sensVal2[i]=0;
  }
  myservo.write(currentDeg);
  delay(1000);
  //pinMode(ledPin, OUTPUT);
  //digitalWrite(ledPin, LOW);
}

void moveToVR() {
  int vrValue=analogRead(vrPin);
  int deg = map(vrValue, 0, 1023, 500, 2500);
  int i;
  if (currentDeg>deg) {
    for (i=currentDeg;i>deg;i--) {
      myservo.write(i);
      delay(5);
    }
  } else
  if (currentDeg<deg) {
    for (int i=currentDeg;i<deg;i++) {
      myservo.write(i);
      delay(5);
    }
  }
  currentDeg=i;
}

void setup() {
  //Initialize serial and wait for port to open:
  if (DEBUG_LOG) {
     Serial.begin(9600);
    while (!Serial) {
    ;  // wait for serial port to connect. Needed for native USB port only
    }
  }
  initcode();
  u32wait = millis() + intervalMillis;
  //digitalWrite(ledPin, HIGH);
}

void loop() {
  button.update();

  switch( u8state ) {
  case 0:
    if ( button.pressed() ) {
      moveToVR();
    }
    if ( millis() > u32wait ) u8state++; // wait state
  break;
  case 1:
    if (arrPos>=maxArr) arrPos=0; //arrPos>9
    sensVal1[arrPos] = analogRead(sensPin1);
    sensVal2[arrPos] = analogRead(sensPin2);
    arrPos++;
  //注意!! switch 文の case 部に変数宣言と初期化があると、エラーは出ないが正常に動作しない。
  //int totalSensVal1=0, totalSensVal2=0;
    totalSensVal1=0, totalSensVal2=0;
    for (int i=0;i<maxArr;i++) { //i<10
      totalSensVal1=totalSensVal1+sensVal1[i];
      totalSensVal2=totalSensVal2+sensVal2[i];
    }
    delta=totalSensVal2-totalSensVal1;
    u8state++;
  break;
  case 2:
    boolean update=false;
    if *1&&(currentDeg<2500))  {
      currentDeg++;
      intervalMillis=intervalS;
      update=true;
    } else
    if *2 {
      currentDeg--;
      intervalMillis=intervalS;
      update=true;
    } else
    if *3 {
      currentDeg++;
      intervalMillis=intervalL;
      update=true;
    } else
    if *4 {
      currentDeg--;
      intervalMillis=intervalL;
      update=true;
    }
    if (update) {
      myservo.write(currentDeg);
        if (DEBUG_LOG) {
          Serial.print("SensVal1=");Serial.print(totalSensVal1);
          Serial.print("\t");
          Serial.print("SensVal2=");Serial.print(totalSensVal2);
          Serial.print("\t");
          Serial.print("delta=");Serial.print(delta);
          Serial.print("\t");
          Serial.print("interval=");Serial.print(intervalMillis);
          Serial.print("\t");
          Serial.print("deg=");Serial.print(currentDeg);
          Serial.println("\t");
        }
    }
   
    u32wait = millis() + intervalMillis;
    u8state = 0;
  break;
  } //end switch()
}



 

 



*1:delta < -(deltaThreshold+100

*2:delta > deltaThreshold+100)&&(currentDeg>0

*3:delta < -deltaThreshold)&&(currentDeg<2500

*4:delta > deltaThreshold)&&(currentDeg>0

MFJ のお知らせ

MFJのメルマガで生産終了のお知らせが来ました。

メルマガ購読しているだけで、買ったことはありませんでしたが、カタログを見ているだけでも様々な商品があり楽しいメーカーでした。ビジネスが順調であれば後継者も居たでのしょうが、米国でもアマチュア無線の商売は厳しいようで残念です。

Hamlife.jp にも記事がありました。

www.hamlife.jp

フードドライヤーの太陽光追尾その4

フードドライヤーの太陽光追尾その3 - cruzioのブログ の続きです。

ブレッドボードに仮組みしていた回路を穴開き基板に実装しようとしましたが、ピンヘッダーのピンが微妙にずれてしまっていて基板に入りません。

Arduino NANO にピンヘッダをはんだ付けしたときに曲がって付いてしまったようで、過去にも何回か失敗したことがあります。今回はブレッドボードに刺した状態ではんだ付けしたのですが、このやり方↓はダメな方法でした。

たまにしかやらないので、方法を忘れてしまいますのでここに書いておきます。

ピンヘッダをまっすぐはんだ付けする方法

このように穴開き基板を浮かせてピンの足が下まで入るようにして、

この状態ではんだ付けします。

最初に端の4箇所だけはんだ付けしたら、基板から外して曲がっていないか、基板との出し入れはスムーズかどうか確かめます。最初の4箇所が大丈夫なら概ねOKですが、念の為途中で何回か確かめます。

ブレッドボードでも一気にはんだ付けせずに、確かめながらやればよいのですが、ブレッドボードはピンの抜き差しが固く、取り外しが面倒で一気にやってしまいがちです。

(続く)

フードドライヤーの太陽光追尾その3

フードドライヤーの太陽光追尾その2 - cruzioのブログ の続きです。

水沢うどんの箱を切り詰めて下側の筐体にします。先日アマゾンで買ったコーナークランプが役に立ちました。

水沢うどんの蓋がなぜか2つあったので、ちょうど良かったです。カッターで切れるので楽でした。

試作ができました。

箱の中はまだバラック状態。Arduino は Uno から Nano に変更しました。ブレッドボードを使っていますが、テストがうまく行ったら基板を作る予定です。電源はモバイルバッテリーを使用。

試作ができたので、初めて屋外で試します。せっかく晴天なので、フルーツもセットします。いつものリンゴです。

今日は黄砂が来るそうですが、ドライヤーの方が網に干すよりも砂は付きにくいと思います。

最初、試してみたところ、太陽の方を向かないで停止したままだったので、調べてみたら屋外は明るすぎてCDSの出力が飽和してしまっていたようでした。そのため、CDSを白い紙で覆い、プログラムのしきい値も調整したところ、太陽を向くようになりました。今までずっと部屋の中でやっていたのでわからなかったのです。

しばらく動かしていたのですが、途中で止まってしまいました。どうやら、モバイルバッテリーは、電流値がある程度無いと出力が停止するようです。アンカーのバッテリーは低電流モードというのがありますが、それも2時間でオフになるとのこと。

今は1秒毎にセンサーを走査していますが、1分にしても大丈夫だと思うので、消費電流はもっと減ります。。

(続く)

フードドライヤーの太陽光追尾その2

フードドライヤーの太陽光追尾 - cruzioのブログ

の続きです。

PID 制御が難しいため、シンプルに、センサーの目標値が一定範囲より逸脱している場合は、1度ずつサーボモータを動かして、範囲内の値になるように動かすようにしました。追従の時間がかかりますが太陽なので問題ありません。

 

制御は目処が付いたので、板を切り出して試作の回転台を作ります。「回転テーブル」という金具を使って、サーボモーターの軸を中心にして回転させます。

板にケガキします。

4mm厚の薄い板なので、割れないように気を使います。形になってきました。

サーボモーターの軸と、回転台の高さを合わせるためスペーサで調節しました。

この回転テーブルの上下に板をネジ止めするには、他方の板にネジ止めするための穴を開ける必要があります。そして、上下の回転テーブルは45度ずれた位置でないとネジ穴が見えません。サーボモーターと回転テーブルの芯が合っている必要があります。などなど色々あり、工作は大変でした。今までで一番頭を使いました。(汗)

なんとか回転台部分が完成しました。

youtu.be

(続く)