実験室 » Arduino » この記事

ここ最近やってみた工作の練習(4)

ロボット工作でいずれ何かに応用できるのを期待してこのごろ演習をした内容(4)。

 

前回行き詰まっていたところをひつこく調べてみました。

 

やっぱり、記事の指定する8ビット双方向ロジックレベル変換モジュール FXMA108(秋月電子の通販コード(M-04522))を使うと、
ソフトシリアルが出てこなかったので(外すと出てくる)、以前DSPラジオを作る時にアマゾンで買っておいて余った(HiLetgo IIC I2C ロジック レベル 変換 双方向モジュール 5V Arduinoに対応)中華ロジック変換モジュールでやってみました。

 

下の写真の構成で、記事のとおり

 

20171124a

 

(Arduinoと数百円のWi-Fiモジュールで爆安IoTをはじめよう)
https://ics.media/entry/10457

 

LEDのオンオフの切り替えが出来ました。

 

(備忘録)アルディーノからでたRXとTXは、WROOMで受ける時、逆にしないといけない。RX->TX、TX->RX。クロス接続になる。

ここ最近やってみた工作の練習(3)

ロボット工作でいずれ何かに応用できるのを期待してこのごろ演習をした内容(3)。

 

2.ArduinoからESP-WROOM-02(Wifiモジュール)のシリアル通信を経由して、サーバーにデータを書き込む練習。
BlueToothでのシリアル通信は、以前できたので、今回はWifiで接続実験を練習しました。いずれ、Unity+Wifi+Arduinoの組み合わせで何か作りたいものです。が、今は単体の練習をしないとね。

 

最初は、こちらの記事で練習していたんですが、

 

(Arduinoと数百円のWi-Fiモジュールで爆安IoTをはじめよう)
https://ics.media/entry/10457

 

3ページ目の、ATコマンドで通信速度を設定のところで行き詰まってしまいました。(ノД`)シクシク
どうも指定されている[8ビット双方向ロジックレベル変換モジュール FXMA108]のところで、コケたらしくて、指定通りにしても「goodnight moon!」のまま先に進みませんでした。ソフトウェアシリアルのオブジェクトmySerialの出力をリード線で、0,1ピンに入れてあげると、アルディーノのシリアルモニタに値が出てくるので、オブジェクトは出来ているのが確認できますが、Wifiモジュールに届いていないみたいです。これに関しては、またのちのち調べることにしようかと思います。

 

で、わからんものはわからんので、もうちょっと簡潔に実験してるところを探してみたら、「おもちゃラボ」にいい塩梅に実験記事が載っていたのでそちらをやってみました。これはほぼうまくいったので、興味があったら皆さんもやってみると面白いかと思います。

 

(【Arduino】ESP-WROOM-02( ESP8266 )を使ってWifiで無線通信する )
http://nn-hokuson.hatenablog.com/entry/2017/04/09/091148

 

ロジックボード無しでやると、記事の「ESP-WROOM-02の通信速度を9600bpsまで下げる必要があります」というところの処理部分も引っかかること無くクリアできました。(mySerialが取得できてて、”Hellow, world?”が出力される)

 

20171123_w400h300

 

(´・ω・`)ただー、最後のtest.phpの中で、5行目$filenameってありますが、これでデータファイル開けるものなのでしょうか?自分はなんかうまくいかないので、別の変数を起こして、

 

$readfile = ‘data.txt';
のようにして、

 

$contents = fread($fp, filesize($readfile));

 

と書き換えて、期待する動きになりましたが。うーん?

ここ最近やってみた工作の練習(1)

ロボット工作でいずれ何かに応用できるのを期待してこのごろ演習をした内容(1)。

 

1.UnityとArduino間でのシリアル通信
Androidスマホから自走ロボに、ブルートゥースモジュール経由でシリアル通信してコマンドを送り込むというのは以前作ったもので一応出来たので、次はUnityアプリとArdunio間での通信ができたらいいなと思い、参考プログラムを練習しました。「おもちゃラボ」のこの記事の内容をやってみました。

 

(UnityでArduinoとシリアル通信をする )
http://nn-hokuson.hatenablog.com/entry/2016/07/26/205745

 

内容もシンプルだし、cdsセンサーが手元にあれば事足ります。記事の内容で特に行き詰まったところもなかったので、お薦めしたいです。

 

20171121_w400h300

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