実験室 » Arduino » この記事

DSPラジオを作ってみた

液晶にラジオ局の周波数を表示させるラジオを作りたいなと前から思っていまして、ネットでこれならなんとか出来そうだという例を見つけたので作ってみました。

 

ブレッドボード上では、それなりに鳴ってくれたのに気を良くしていつものようにユニバーサル基盤に移植したんですが、そこからが大変で、期待よりも低性能なラジオが出来上がりました。かなりがっかりです(´・ω・`)

 

20170915a

 

見切り発車でギリギリいっぱいに詰め込んだ結果、レイアウトに大幅な狂いがでて、箱が穴だらけになるとか満身創痍です。やっぱり初めてのは痛々しい。次回はもうちょっと手順を見直さないといけないと反省しました。もっともしばらく作りたくないですが…。

 

以下は、どこのサイトを参考にしたかとか作っていて、気づいたこととかの覚書です。

 

(さらに…)

最近作ったもの(2) -電子工作-

もう一つ作りました。

 

ずっと前に作った、アルディーノで制御する三輪ライントレース車をタンクタイプに改造して、AndoroidスマホとBlueTooth機器を使ってシリアル通信化しました。

 

20170614b

 

新たに購入した、タミヤのタンク基本セットとオプションのユニバーサル基板セットに2000円ぐらいかかっています。

 

BlueToothの部品は、「HC-06」になります。

 

前にも同じように、BlueToothモジュールを介してシリアル通信ができないものかとやった覚えがあるのですが、その時は失敗してます。今回は、いきなりアルディーノタンクにHC-06をのっけて実験するのは止めにして、以下のブログさんの記事を参考に前実験してみました。

 

[curious4dev ]
http://curious4dev.mydns.jp/post-1354/

 

シンプルに説明してくれているので、とてもわかり易くて助かりました。
で、下のような感じで真似をして…

 

20170614c

 

うまくいきました。うまくいったのでこちらのプログラムとライントレース用のプログラムを、組み合わせて走らせてみます。

 

取得したアスキー文字をswitch文で振り分けてあげればいいだけなので、一定速度で一定方向にただ動かすだけのシンプルなものなら、以下のコードで動きました。

 

[CMascot.h]

// スマホとブルートゥース(シリアル)通信で、やり取りするタンクプログラム[2017.06](完成版)

// Bluetooth通信ライブラリ
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11);

void setup() {
  
  // [1] アルディーノ側初期設定
  Serial.begin(9600);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);   // アナログ値出力 (0~255 まで負の値不可)
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);   // アナログ値出力 (0~255 まで負の値不可)

  // [2] HC-06 側初期設定
  BT.begin(9600);
}

void loop() {
  // ローカル変数
  char a;  // 受信した値を格納(アルディーノのswitch文では、文字型も受付るが、'A'は、65と解釈されるので文字列の数値も値が'1'は49 '0'は48と解釈される)
  
  // Bluetooth 受信処理
  if (BT.available()) {
    a = (BT.read());

    // Case文
    switch(a){

/* TestCode
      case 48:
        BT.println("0 commaned about 48");
        break;
      case 49:
        BT.println("1 commaned about 49");
        break;
      case 1:
        BT.println("1 commaned about 1");
        break;
      case 0:
        BT.println("0 commaned about 0");
        break;        
*/


      case 49:  // 前進
              
        // 左モーター制御(正転)
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(9, 255);
        // 右モーター制御(正転)
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        analogWrite(6, 255);
 
        delay(10);
        BT.println("Foward Commanded!");
        break;
        
      case 50: // 後退 [moter(); 内で、左右モーターを逆転させ、かつ最大出力とする]

        // 左モーター制御(逆転)
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(9, 255);
        // 右モーター制御(逆転)
        digitalWrite(4, LOW);
        digitalWrite(5, HIGH);
        analogWrite(6, 255);
        
        delay(10);
        BT.println("Back Commanded!");
        break;
        
      case 51:  // 停止
      
        // 左モーター制御
        digitalWrite(7, LOW);
        digitalWrite(8, LOW);
        analogWrite(9, 0);
        // 右モーター制御
        digitalWrite(4, LOW);
        digitalWrite(5, LOW);
        analogWrite(6, 0);

        delay(10);
        BT.println("Stop Commanded!");
        break;
        
      case 52:  // 前進しながら右旋回
      
        // 左モーター制御(正転)
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(9, 255);
        // 右モーター制御(正転)
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        analogWrite(6, 80);
            
        delay(10);
        BT.println("Foward and Right Commanded!");
        break;
        
      case 53:  // 前進しながら左旋回

        // 左モーター制御(正転)
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(9, 80);
        // 右モーター制御(正転)
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        analogWrite(6, 255);
        
        delay(10);
        BT.println("Foward and Left Commanded!");
        break;
        
      case 54:  // 信地旋回(右) [moter(); 内で、左モーターを正方向に。右モーターを逆方向にして、最大出力]

        // 左モーター制御(正転)
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(9, 255);
        // 右モーター制御(逆転)
        digitalWrite(4, LOW);
        digitalWrite(5, HIGH);
        analogWrite(6, 255);
    
        delay(10);
        BT.println("Rapid Right Commanded!");
        break;
        
      case 55:  // 信地旋回(左) [moter(); 内で、右モーターを正方向に。左モーターを逆方向にして、最大出力]

        // 左モーター制御(逆転)
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(9, 255);
        // 右モーター制御(正転)
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        analogWrite(6, 255);
    
        delay(10);
        BT.println("Rapid Left Commanded!");
        break;

      default:
        break; 
    }

  }
}




 

あんまり複雑なことは出来ません。動作を変えるのに、都度ターミナルからコマンドを送り込まないといけないので。ですが、プロトタイプとしてはこれでも十分ではないかと思います。

アルディーノの工作続き

自走ロボットは解体して小さなモジュール作りをしています。RGBライトのモジュールは地味だけどいじってると面白かったりします♪

自走ロボット

ちびっこ生徒さんたちが作っている八の字コースを自走してコースをはずれそうになると、自分で軌道を修正するというロボットを自分も作ってみました。自分で作ってはじめて分かりましたが、センサーの取り付け位置によって、制御プログラムの指定値も変わってくるので、手で工作するハードパートは思っていた以上に重要だということが分かりました。

アルディーノ(温度センサ)の実験あと久しぶりに秋葉原いってきた

写真はLCDシールドを乗っけたアルディーノに温度センサをくっつけてみた実験の結果です。机の上の温度計付き時計の温度は27度を指しているので、センサーが示す値が26度ということだと誤差が一度以上でてますヾ(o゚ω゚o)ノ゙100円のセンサーだから?

さて、誤差なのかそもそもその程度の性能なのかは置いといて、これらの部品を買いになんか久しぶりに秋葉原に買い出しに行ってきました。そして実に4年程秋葉原きてないことに気付く(゚д゚)! しかしなんかずいぶん変わりましたね秋葉原は。自作パソコン系のショップがほんとに減りました。というか、無いの。以前パーツや中古パソコンを売っていたような、ちっこい裏通りのボロテナントの二階の店とかがみんな風俗店になってますがな(;´Д`) これはひどい。結局のところAmazonとかにおされて、ネットで買えるものは秋葉原に無くてもいいやということで、食いもの屋とかメイド喫茶とかのサービス業だらけになったんでしょうね。しかし…表通り歩いてても、客引きのコスプレネーちゃんと変な外人ばっかりじゃんヽ(`Д´)ノプンプン。しかし、これも時代の流れなのか。

…どうせだったら、フィギュアとロボットが融合したようなのが次の秋葉原の顔になった方が面白いのにね。イメージとしてはホイホイさん的なのとか。秋葉原もこの中途半端な過渡期を過ぎて七年後にはどう更に変わってゆくのでしょうかね。興味つきませんわ♪

アルディーノのLCDシールドを組み立ててみた

今後センサーなどの実験をした際に測定値をアルディーノ側でも表示できたらいいなぁと思って、LCDシールドキットを購入してみました(初心者なので無理しない)。半田づけなんて小学校か中学校以来ですよ…なんというか…ジュ~( ;∀;)とかプリント基板少しこがしちゃったりハンダがうまくのってくれなかったりいろいろ難しいです。


動きましたヾ(o゚ω゚o)ノ゙基板少し焦げたけど。

アルディーノ

Hellow World!!

とおんなじ感じのLED一個点滅させる最初の組み込みプログラムを実践してみました。独立した電源で動くのを見てるとなお楽しいです。(*´д`*)アハァ