Quantcast
Channel: JH7UBCブログ
Viewing all 440 articles
Browse latest View live

Arduino HC-SR04

$
0
0
 Arduino(あちゃんでいいの)に超音波距離測定モジュールHC-SR04を接続する実験をしました。

 このモジュールは比較的安価(aitendoでは390円)で購入できます。

 距離の測定範囲は、2cm~450cmで、分解能は、0.3cmです。

 5Vで動作し、動作電流は15mAです。40KHzの超音波を発生し、超音波が物体にぶつかって反射して帰ってくるまでの時間をEcho Pulseとして発生します。

 モジュールに超音波を発生させるためには、10μs以上のトリガーパルスを加えます。

 「あちゃんでいいの」とHC-SR04との接続は次のとおりです。

イメージ 2

 D2は出力設定でHC-SR04のTriggerに、D3は入力設定でHCSR04のEchoに接続します。
(どの入出力端子に接続するかは、任意です。スケッチで対応できます)

 接続した様子です。


イメージ 1

ArdionoでHC-SR04を使用した例はWeb上にいくつか見られ、OXつくろうどっとこむやはじめての電子工作長1入門などにスケッチが公開されています。

Echoからのパルスの幅を測定するには、pulseIn()という関数を使っています。

スケッチは次のようにしました。(上記Webサイトからのコピペです。)

イメージ 3

 測定した距離は、シリアルモニタに表示します。Triggerに出力するパルス幅は、最小10μで良いのですが、実験をしてみるともう少し長い方が動作があんていするようなので、20μsとしまた。

 Echoからのパルス幅が超音波のセンサーと物体間の往復時間(μs単位)になります。センサーと物体間を進むのにかかる時間は、Duration/2/1000000(s)となります。

 音速は、常温で340m/s=340*100cm/sですので、センサーと物体の間の距離(Distance)は

 Distance = 340*100*(Duration/2/1000000)=Duration*0.017 (cm) です。

 スケッチを「あちゃんでいいの」に書き込みました。シリアルモニタの表示の様子です。

イメージ 4

 左端の数字がDuration 右側の数字が距離cmです。̟±1cm程度のゆらぎがあります。

 センサーの前に手をかざしても、おおむね妥当な距離を示してくれます。

 動くロボットの目としてこのセンサーを活用する例が多いようですが、私の目標としては、テルミンのような楽器をArduino(あちゃんでいいの)で作ってみたいと思っています。


Arduino CW練習機

$
0
0
 この1週間ほどArduino CW練習機(モールス符号練習機)のプログラミングをしていました。

 HSPやIchigoJamで既にプログラミングした経験があり、簡単にできると思ったのですが、除雪作業の疲れもあり、あまりはかどりませんでした。一応できましたので、公開します。

 まず、モールス符号をどのようにして発生させるかです。

 モールス符号は、短点(トン、dot)と長点(ツー、dash)から構成され、長点は、短点の3倍の長さ、長点または短点間の間隔は、短点と同じ時間、文字と文字の間は短点の3倍の長さ、語と語の間は短点の7倍の長さと決められています。(A1クラブのHP参照

 Arduinoでは、音を出す関数 tone(pin,frequency,duration)がありますので、これを使います。圧電スピーカーを使えば、ちょうど良い音量で聞くことができます。また、時間を待つ関数は、delay()を使います。

 モールス符号の送出速度は、10kΩボリュームの電圧で調整します。(およそ30文字/分~300文字/分の間で調整できます)

 配線図です。

イメージ 1

 実査の配線です。

イメージ 2

 ABC順、A-Zランダム、A-9ランダムの3つのモードが選べます。ランダムのときは、頭にHR HR BTを送出します。

 シリアルモニタの画面です。
イメージ 3

 ABC順でまず、モールス符号を何度も聞いて覚えましょう。

 覚えたら、次はA-Zランダムモードで、アルファベットを確実に覚えましょう。

 さらに、0-9の数字を加えたモードで練習をすれば、これでほぼ交信できますが、実際には/ ? , . なども覚える必要があります。

 最後に、スケッチです。まだ改良の余地がありますので、まだVERは0.5です。

 どうぞ、勝手に改良してお使いください。
 ----------------------------------------------------------------------------------
/*
CW Trainer Ver0.5
2016.1.22
JH7UBC Keiji Hata
*/
#define SP_PIN 2//圧電スピーカーを接続するピン
#define freq 800//トーン(Hz)

char moji[37] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//各文字に対するモールスコード(短点0、長点1、ストップビット1 例 A=00000110=6)
byte mcode[36] = {6,17,21,9,2,20,11,16,4,30,13,18,7,5,15,22,27,10,8,3,12,24,14,25,29,19,31,63,60,56,48,32,33,35,39,47};

int m = 0;  //文字のコード
int y = 0;  //モールス符号送出時のビット0の値
int val = 0;//入力した値
int n;      //文字数
int interval1;
int interval2;

void setup(){
  Serial.begin(9600);
  randomSeed(analogRead(0));
  Serial.println ("***** CW Trainer *****");
}

void loop(){
  Serial.println("");//改行
  Serial.println("1:ABC..0..9  2:A-Z(RANDOM)  3:A-Z0-9(RANDOM)");
  Serial.println("Input number (1-3)");
  input();//入力待ち
  switch (val){
    case 49://"1"の時の処理
      for (int i=0; i<=35; i++){
         Serial.print(moji[i]);
         Serial.print(" ");
         m = mcode[i];
         morseTone();
         delay(interval1);
      }
    break;
 
    case 50://"2"の時の処理
      HRBT();
      n=26;
      rndChar();
    break;

    case 51://"3"の時の処理
      HRBT();
      n=36;
      rndChar();
    break;
  }
}

void HRBT(){  // HR HR BTの送出
  HR();
  HR();
  Serial.print("BT");
  m=49;
  morseTone();
  delay(interval2);
  Serial.println("");
}

void HR(){
  Serial.print("HR ");
  m=16;
  morseTone();
  delay(interval1);
  m=10;
  morseTone();
  delay(interval1);
}

void rndChar(){  //100文字をランダムに送出する
    int count=0;//カウンタクリア
    while (count < 100){
    int x = random(n);
    Serial.print(moji[x]);
    Serial.print(" ");
    m = mcode[x];
    morseTone();
    delay(interval1);
    if (( (count+1) % 10) ==0){  //10文字ごとに改行する
    Serial.println("");//改行
  }
  count++;
  }
}

void morseTone(){  //モールス符号を送出する
  int dottime = analogRead(1) / 5;
  int dashtime = dottime * 3;
  interval1 = dottime * 2;
  interval2 = dottime * 4;
 
  while (m != 1){
    y = m & 1;
    if (y == 0){
      tone(SP_PIN,freq,dottime);
      delay(interval1);
    }else{
      tone(SP_PIN,freq,dashtime);
      delay(interval2);
    }
    m = m >> 1;//1bit 右にシフト
   }
}

void input(){  //1文字入力
  while ( Serial.available() == 0 ){  //入力があるまで待つ
  }
  val = Serial.read();
}

「あちゃんでいいの」のラベル

$
0
0
 「あちゃんでいいの」は、Aeduino UNO互換機ですが、AVRマイコンATmega328P-PUがむき出しの状態になっていて、Arduinoとしてのピンの配置が分かりません。

 そこで、ピンの名称が分かるラベルを作って、のりで張り付けました。

イメージ 1

 aitendoでもラベルを売っていますが、今回は、IchigoJam用のラベル(エクセルファイル)を「あちゃんでいいの」用に書き換えて使いました。

 これで、「あちゃんでいいの」をブレッドボードで使うときに配線が分かりやすくになります。

 あれっ、良く見たらD9がD0になってる。直さなきゃ。

6m & Down contest賞状

$
0
0
 今日、JARLから2015年6m & Down コンテストの賞状が届きました。

イメージ 1

 6m & Down コンテストには、毎年50MHzのCWで参加しています。

 これまで、東北地区2位が最高でしたので、1位は初めてです。

 今年も頑張ろうと思います。

「あちゃんでいいの」+AD9834DDS

$
0
0
 「あちゃんでいいの」+AD9834DDSで、7MHz用アカギスタンダードのVFOを作ろうと思い、実験をしています。

イメージ 1

 左側の基板が、DDS部で、右の基板が表示とコントロール部です。

 「あちゃんでいいの」は、FT232RLを接続して、ICPSでスケッチを書き込みます。

 スケッチは、基本的には、JA2GQP局のArduino AD9834DDS VFOのスケッチを使わせていただきます。
 
 ただ、7MHz CW トランシーバ用に若干改造が必要になります。

 このプロトタイプでうまく動作したら、7MHz用アカギスタンダードに実装したいと考えています。

AS40+DDS VFO

$
0
0
あちゃんでいいの+AD9834DDS VFOを7MHzアカギスタンダードに載せてみました。

イメージ 1

DDSからの出力は、LPF+バッファを通して受信部と送信部のミキサーに供給しています。

5V用の電源と送受信コントロールユニットは、作り直しました。

自作のSGから7MHzを発生させて受信してみると、ほぼ表示周波数で受信できました。

また、4mほどのビニール線をアンテナ端子につけて受信してみると、交信中の信号が聞こえます。

受信部は、ほぼ問題なく動作しています。

ただ、シャーシを触ると「ザー」というノイズが若干入ります。デジタル系の雑音のようです。最終的にはノイズ対策が必要です。

送信に関しては、DDS VFOの出力が小さいので、パワーがさっぱり出ません。

各段の信号レベルを見直し、調整がが必要です。

完成までには、もう少し時間がかかりそうです。

ピンと来た 小林桂

$
0
0
 東出昌大出演のサントリートリスのCMを見ていると、バックに聞き覚えのある声のボーカルが流れている。

 曲は、Beyond the sea。(アルバム「ネイチャーボーイ」)


 ピンときた。たぶん、小林桂の声だと思いWebを検索すると、そのとおり。

 日本人にはめずらしい、甘いボイス。軽いのりで聞いていて心地よい。

 そういえば、彼のアルバムを1枚持っている。

イメージ 1

1999年に録音された「So nice」。もう15年も前なんですね。

日本では、男性のジャズボーカルは、めずらしい。

女性ボーカルも良いですが、男性ボーカルも魅力的ですね。


6mでVKが聞こえ始めました。春ですね。

$
0
0
 暖かい日が続いていたのですが、気圧配置が冬型になるとまだまだ雪が降ります。

 今朝は、30cm以上の降雪があり、久しぶりに除雪で汗を流しました。

 でも、太陽高度が高くなり、日中の気温が上がると雪が解けるようになりました。

 除雪の合間に午後2時半頃シャックに行って6mをワッチしてみました。

 50.105MHzでVK4WTNのCWのCQが聞こえます。

 コールして、559、559で交信できました。

 6mでVKが聞こえ始めたってことは、お空の方は一足先に春なんですね。


SainSmartのI2C LCD テスト

$
0
0
 AS40用のディスプレイに使おうと思って、AmazonからSainSmartのIIC/I2C/TWI 16*02 LCD(黄色発光)を購入して、表示テストをしました。

 表から見ると普通の1602LCDと同じです。

イメージ 1

 裏側に、I2C変換モジュールがついています。

イメージ 2

 SDAはArduinoのA4に、SCLはA5に接続します。

 Amazonのカスタマーレビューを見て、
 http://bitbucket. org /fmalpartida /new-liquidcrystal /downloads から「LiquidCrystal_V1.2.1zip」をダウンロードして解凍、LiquidCrystalというフォルダをLiquidCrystal_I2Cに名前を変更して、Arduinoのlibrariesフォルダに保存しました。

 カスタマーレビューにあったスケッチで、表示テストをしたのですが、NG。「Hello,World!」を表示しません。

 うーーん。何故?

 メーカーのHPにもカスタマーレビューにもI2Cアドレスは、0x3Fとあります。

 しかし、「おにおんのブログ」には、アドレスが、0x27となっています。

 そこで、アドレスを0x27に変更したら、見事に表示しました。コントラスト調整を後ろのボリュームで行い、かなりはっきり文字が表示されました。夜見るとバックライトは非常に明るいです。

イメージ 3

 スケッチは次のとおりです。

イメージ 4

 さて、この表示器を今テストしてるAS40用のAD9834DDS VFOの表示用に使ってみます。


AS40D完成

$
0
0
 7MHz用アカギスタンダードのVXOの代わりにAD9834DDS VFOを搭載したAS40D(AS40 Digital)が、ようやく完成しました。

イメージ 1

内部の様子です。

イメージ 2

 AD9834DDS VFOの回路図です。

イメージ 3

 Arduinoの最小構成の「あちゃんでいいの」でDDS、LCD、ロータリーエンコーダをコントロールしています。

VFOの周波数STEPは、STEPボタンを押すたびに1KHz→100Hz→10Hzと変化します。

RITは、受信時の周波数を20Hzステップで±980Hz変化することができます。

メモリは、今回は欲張らず、1チャンネルだけにしました。(EEPRPMの容量があるだけ増やすことはできます。)

MRを押すと周波数が「あちゃんでいいの」のEEPROMに記憶されます。MRを押すとメモリーから周波数が読みだされ、VFOにセットされます。

「あちゃんでいいの」(Arduino)のスケッチは、基本的には、JA2GQP局のものを使わせていただきましたが、今回のスケッチとAS40Dの詳細は、JH7UBCホームページに掲載します。(JA2GQP局ありがとうございました。)

NJM567トーンデコーダ

$
0
0
JRCのトーンで―コーダIC NJM567のテストをしました。

 このICは、特定の周波数を検出し、出力するICで、検出周波数は、外付けのRとCで可変できます。

 CW用のゼロイン・インジケータの回路が「電子工作」というサイトにありましたので、公開されている回路でテストしてみました。

 回路図です。

イメージ 1

 検出周波数と帯域幅は、次の式で計算できます。

イメージ 3


 ブレッドボードに回路を組んで、テストしてみました。

イメージ 2

 
 自作のAD9850DDS SGから信号を送り、LEDの点滅で、信号の検出を測定してみました。

 この回路で、入力40mV以上で動作しました。中心周波数800Hzのとき、検出帯域幅は、80Hzで、中心周波数の10%でした。

 このICでCWの音声信号をON/OFFのデジタル信号に変換し、CW解読器の入力信号にしようと考えています。

Arduino 周波数カウンタ

$
0
0
 Arduino周波数カウンタのテストをしました。

 使ったのは、Arduino互換のaitendo 「あちゃんでいいの」です。


 原典は、こちらのようです。

 信号は、2SC1815アンプを通して、Arduino(あちゃんでいいの)のD5に加えます。

イメージ 1

 周波数は、シリアルモニタに表示されます。

ブレッドボードに回路を組んで、自作のAD9850DDS SGから信号を入れて周波数を測定してみました。

イメージ 2

 1MHzを入力したときのシリアルモニタの表示です。

イメージ 3

 ゲートタイムは、1sにして測定しました。16MHzの水晶の精度からして、こんなものでしょう。

 正常にカウントする上限の周波数は、私の場合は、約5MHzでしたが、情報では6.5MHzまではカウントするそうです。

 スケッチは、「なんでも作っちゃう、かも」というブログに掲載されたものをstart(1000) として、ゲートタイムを1sにしました。

 ここで使うFreqCounter.hというライブラリは、Freq Counterライブラリからダウンロードして、ライブラリに追加しておきます。

 次は、周波数をLCDに表示してみます。

Let's A1 コンテスト結果

$
0
0
昨年10月25日(日)に行われたA1 CLUB主催のLet's A1 コンテストの結果が発表されました。


このコンテストは、縦振電鍵など単一接点のキーを使うユニークなコンテストで、このところ毎年参加しています。

当局 JH7UBC は、一般部門第2位でした。昨年が3位でしたので、1ランクアップです。

交信いただいた各局、ありがとうございました。

ダウンロードした賞状の画像です。

イメージ 1


Arduino 周波数カウンタその2

$
0
0
 Arduino(あちゃんでいいの)周波数カウンタをLCD表示にしました。

 1MHzを入力した時の表示です。Arduino周波数カウンタの方のLCDのコントラストが弱く、はっきりしませんが、1000046Hzを表示しています。

イメージ 1

10KHzでの表示です。10001Hzを表示しています。

イメージ 2

10Hzでの表示です。10Hzと表示しています。

イメージ 3

今回の回路図です。

イメージ 4

スケッチです。

イメージ 5

 
 精度は、いまいちですが、こんな簡単なスケッチで周波数カウンタを実現できるのですから、周波数カウンタが必要な場合は、ちょいちょいとArduinoで作ることができますので、利用価値があるのではないでしょうか。

Arduino 周波数カウンタその3

$
0
0
 「迷走の果て・Tiny Objects」というブログに掲載されている、レシプロカル式周波数カウンタを試しました。

 レシプロカル式つまり、逆数式というのは、信号の周期Tを測定して、その逆数を計算し、f=1/Tより周波数を求める方式です。

 このスケッチは、外部割り込み0を使いますので、信号はD2に入力します。それに伴い前回の周波数カウンタのLCDへの接続を変更します。

 信号の立ち上がりで、割り込みを発生させて周期をマイクロセカンド単位で測定します。
 setup()の中の、attackInterrupt(0,periodIrq,RISING);で割り込み方法を指定します。

 回路図です。ここでは、「あちゃんでいいの」を使っています。

イメージ 1

1000Hzを測定してみました。

イメージ 2

 正確に表示されました。

 上限は、約50KHzまででした。下の方は、自作SGの下限周波数10Hzまで測定できました。

 ただ、100Hz以下になると表示がブレます。信号源の自作SGの安定性が低い周波数であまりよくないせいかもしれません。

 普通のカウンタでは、低い周波数はゲートタイム1秒が必要ですが、このレシプロカル式カウンタの場合は、非常に短い時間で周波数を測定することができますので、チューニングメータなどへの応用が可能だと思います。

 工夫次第でもっと高い周波数まで測定できると思います。低い周波数での安定表示には、移動平均をとるなどすればいいのかもしれません。





いつもより早い春です。

$
0
0
 今年の冬は雪が少なく、例年より早くクロッカスが咲きました。(いつもより2,3週間早いと思います)

イメージ 1

でも、畑にはまだ除雪機で飛ばした雪がまだ残っています。

イメージ 2

今月中には、この雪も溶けそうです。

いよいよ春ですね。

パンジーとビオをの苗を買ってきて、プランターに植えました。プランターは2鉢、しばらく楽しめそうです。

イメージ 3



7セグメントLED表示のArduino温度計

$
0
0
 一昨年、Arduinoで温度計を作りました。記事は、こちら

 今回は、7セグメントLED表示の練習を兼ねて、Arduino(あちゃんでいいの)で、7セグメントLED表示の温度計をブレッドボード上に作ってみました。7セグメントLEDは、大きく明るく非常に見やすいです。

 PICは、LED表示を前提に設計されたと思われ、7セグメントLEDとの相性は良いのですが、Arduinoと7セグメントLEDとの相性は、今一つです。

 Arduinoで、7セグメントLEDを使うには、少し工夫が必要です。そこで、例によって使用例をWeb上を探しました。

 7セグメントライブラリ(SevSedLibrary)というのがあり、GitHubからダウンロードできます。4桁7セグメントLED用のライブラリで、ダウンロードしたSevSeg-masterを解凍し、SevSegにrenameしてArduinoライブラリに加えて使います。

 が、今回は、このライブラリを使わないでやってみました。Web上の記事からあちこち使わせていただきました。記事をUPされた皆さん、ありがとうございます。

 温度センサーは、手持ちのLM35DZを使っています。温度の測定範囲は、0~100℃で、出力は10mV/℃の使いやすいセンサーICです。

 ArduinoのAREFに1.023Vを加えると、センサーの出力(mV)を10で割れば、0.1℃まで直読できます。

 温度の測定は、1秒間隔で行います。これは、Arduino(ATmega328P)内蔵のタイマーの割り込みを利用します。

 これを使うには、MsTimer2ライブラリを使います。MsTimer2.zipはこちらからダウンロードできます。

 回路図です。

イメージ 1

 7セグメントLED(カソードコモン)は、秋月電子で販売している3桁の赤色LEDのC-335SRを使いました。

 電流制限抵抗を300Ωにした場合、 LEDの1セグメント当たり約9mA流れますので、すべてのセグメントが点灯した場合、約70mA流れArduinoのI/Oポートの最大電流40mAを超えてしまいます。そこで、2SC1815でLEDをスイッチングします。

 7セグメントLEDの各セグメント(A,B,C,D,E,F,G,DP)には、Arduinoの2~9番ピンを割り当てました。ダイナミック点灯として、各桁のON/OFFには、11~13番ピンを割り当てました。

 センサーからの出力はA0に加えています。

 ブレッドボードに組んだ様子です。

イメージ 2

 基準電圧は、10kΩのボリュームで調整してAREFに加えます。

 他の温度計を見ながらボリュームを調整して、正確な温度を表示するようにします。

 小数点は、2番目のLEDが指定されたときに表示するようにソフトで処理しています。

 ノイズ対策をほとんどしていませんので、0.1℃の値は、頻繁に動きます。移動平均をとるなどして、もう少し安定させる必要がありそうです。

 なお参考までに、詳しい説明とスケッチは、JH7UBCブログに掲載しました。

FCWA発行のアワード

$
0
0
 私が所属しているFCWA(福島CW愛好会)では、CW交信の活性化を図るためにアワードを発行しています。

 このワードに関する記事が、CQ誌4月号に掲載されました。

イメージ 1

 アワードの種類は、3種類で、The CW 10 Award、The CW 88 Award、The CW 365 Awardです。

 前の2つは、どちらかといえば、初心者向けでゲーム感覚で取り組めるアワードです。

 The CW 365 Awardは、従来からの規定を若干緩和したものの、ちょっと難しいアワードになっています。

 なお、詳細は、FCWAのホームページのアワードのページかCQ誌4月号146ページをご覧ください。

 CQ誌に掲載されてから、アワード申請者が急に増えてきました。

 今、中高年HAMにはCWブームとか、皆さんもCWとアワードに挑戦してみてjはいかがでしょうか。

縦振電鍵のチャッタリング

$
0
0
 このところ、Arduinoを使ったモールス符号解読器のプログラミングをしています。

 Aeduinoモールス符号解読器(CWデコーダ)については、Arduinoの勉強を始めたころに、一度取り組んでいます。


 このモールス解読器を改良して、実際の交信で使えるものにしたいと思い、取り組んでいます。

イメージ 1

 今回は、「あちゃんでいいの」を使い、表示器とともに筐体に収めよう考えています。

 テスト回路です。

イメージ 2

 モールス信号を内部コードに変換する方法は、前回と同じですが、デコードの方法を変えました。

 前回は、Switch case を使ったため、caseの最後の方の符号にたどりつくまで、時間がかかったのですが、今回は、配列をつかって、1対1で符号を取り出しますので、デコード時間がどの符号でも同じになりました。 

 上の写真のように、エレキ―の信号は問題なくデコードしますが、縦振電鍵を直接接続すると、うまくいきません。

 チャッタリングのせいだと思い、縦振電鍵のチャッタリングをpico scopeで観察してみました。

 電源は、5Vで、4.7KΩを介して電鍵に接続して、電圧の変化を観測しました。

 縦振電鍵は、GHDのGT706を使いました。

イメージ 3
チャッタリングの波形です。

イメージ 4

この場合、約15msのチャッタリングがあります。

何度か観測してみると、10ms~20msのチャッタリングを観測しました。

モールス解読器に直接縦振電鍵を接続する場合は、チャッタリング防止回路やソフトでの対応などチャッタリング対策が必要になります。


Let's A1 コンテストの入賞メダル

$
0
0
 昨年10月に行われたLet's A1 コンテストの入賞メダルが本日、A1CLUBコンテスト委員会より届きました。

イメージ 1

イメージ 2

 一昨年が3位で銅メダル、昨年が2位で銀メダル。1ランクアップですが、うれしいです。

さて、今年はと考えていたら、A1クラブのメーリングリストで、今年はルールの大幅な見直しが行われるとの情報が流れました。どのようになるんでしょうね。

 ま、どちらにしても今年も頑張ろうと思います。

Viewing all 440 articles
Browse latest View live