2020年3月31日火曜日

ラズパイ(IOT・73)

前回、電源をGPIOポートから取れるようにしました。
接続して起動は可能です。
動作も可能です。
ですが、電力不足の注意ランプが表示されてしまいました。
今回、モーターの電力も使っているので、
その分の影響も出てしまったようです。
そこで、モバイルバッテリーについている
2つ目のプラグから電源を取得して起動できるように
接続してみます。
そこで、コネクタが飛び出さないように、
スリムケーブルを購入してみました。

2020年3月30日月曜日

ラズパイ(IOT・72)

USB電源を直接GPIOに接続してみます
この電源用マイクロUSBコネクタDIP化キットを使うと
USBの電源を2つに分岐して使えるようになります。

ついでに、背面に乗せていたモバイルバッテリーですが、
本体に入るように内部のフレームを若干削って、
スッキリ収まるに調整してみました。

2020年3月27日金曜日

ラズパイ(IOT・75)

一通りの実行環境ができたので、
動かしてみたいと思います。
今回は、Webアプリとして作成してますので、
スマホからアクセスしてみます。
アドレスは、デフォルトで
raspberrypi.local:3000
コントローラーが表示されます。
そこから、WiFiでラズパイに接続します。
ジョイスティックを動かすと、駆動できることが
確認できました。

ラジコンみたいに遠隔操作できますね

ラズパイ(IOT・71)

タミヤのカムプログラムロボットにラズパイを載せてみました
横幅ぴったりですが、ただ電源用のMicroUSBポートのスペースが
飛び出てしまいます。
動作に支障がないと言えばないのですが、
スッキリさせたい感じです。
そこで、電源回りを考えてみます。
ラズパイの場合、電源は電源用のMicroUSBポートを利用する
ことが前提でできているのですが、
USBポート自体に電源を流して使うセルフパワーや、
GPIOポート上にある5Vのピンに電源を繋げることで、
動作させることができます。
ただ、本体のMicroUSBからの接続では、過電流対策の
ブレーカーが効いていたりしますが、
直接流す場合は、ここが働かないので注意が必要です。

今回は、接続をスッキリさせるために、取り付け位置を
変更させるために別のMicroUSBポートを接続し、
直接電力を接続する方法を試してみます。
で利用するのがこちらです。
電源用マイクロUSBコネクタDIP化キット

2020年3月26日木曜日

新しい機器について(色々・6)

普段使いにしているMacMiniのキーボードを有線から
無線に変えてみました。
これまでは、USB接続の純正品を使っていたのですが、
Magic Trackpad2を使うようになるとテンキー部分の幅分が横に
伸びるので、置き場所と取り回しがやりにくくなってしまっていました。


そして、こちらの現在販売されているものへ移行です。


普段はノートパソコンを使っていることもあり、
テンキーはほぼ使ってなかったので、机の上をスッキリさせられました。
場所をとらず、使用感がノートと同じになったので、
違和感が無くなりました。
また、バタフライキーボードのペタペタ感でない、この慣れ親しんだ
キーの沈み具合は最高です。
(時代とともに、Optionキーの位置が変更されたりと、若干の差異もこれで解消です。)


2020年3月25日水曜日

ラズパイ(IOT・70)

前回使ってみたjQueryのアナログパッドプラグインの
動作を試してみます。
サンプルのコードを試してみます。
  $(function() {
    var analogpad = $('#analogpad').analogpad();

    var width = 300;
    var height = 300;
    var x = width / 2;
    var y = height / 2;
    var scale = 3;

    var draw = function() {
        var canvas = document.getElementById('canvas');
        var context = canvas.getContext('2d');
        context.fillStyle = '#000';
        context.fillRect(0, 0, width, height);
        context.fillStyle = '#fff';
        context.fillRect(x-5, y-5, 10, 10);
    };

    setInterval(function() {
        var input = analogpad.input();
        x = x + input.x * scale;
        y = y - input.y * scale;
        draw();
        $('#x').val(input.x);
        $('#y').val(input.y);
    }, 50);
});


とすると、アナログパッドを動かしたときのX・Y軸の
値が-1~1までの値で取れている事が
確認できました。

2020年3月23日月曜日

ラズパイ(IOT・69)

接続したモーターの制御ができるように
操作するためのコントローラーを作成しようと思います。
コントロールは、どこからでも操作できるようにしたいので、
Web画面で動作できるようにしようと思います。
イメージとしては、ゲームコントローラーのように
アナログジョイスティックのようなものを
ドラッグさせた方向へ動くような感じです。
JSに丁度よさそうなプロジェクトがあったので
改良してみたいと思います。
https://github.com/hakobera/jquery-analogpad-plugin

2020年3月19日木曜日

ラズパイ(IOT・68)

前回組みあがったタミヤのカムプログラムロボットに
ラズパイで作ったモータードライブに配線を
組み合わせを行っていきます。
もともとこの製品は、色々なマイコンが組み合わせられるように
考えられているものでもありますので、
サイズ的にも、胴体部分にラズパイの基板を乗せられる分
のスペースがありますので便利ですね~。

あとは、モーターからはノイズが多く発生されるので、
ノイズキラーコンデンサをはんだ付けしておきます。

2020年3月18日水曜日

ラズパイ(IOT・67)

まず、現状の動きも気になったので、
タミヤのカムプログラムロボットを作ったものを
動かして遊んでみることにしました。

胴体部分にカムを取り付ける
とこがあるので、前進・カーブ・ストップと
組み合わせることで、面白い動きをさせることが
できるようになっています。
これはこれだけでも十分面白いですね。

2020年3月17日火曜日

ラズパイ(IOT・66)

タミヤのカムプログラムロボットを組み立ててみました。
まず、普通に組み立てていくとこんあ感じに仕上がります。
組み立てには、2時間くらいで完成します。

2020年3月16日月曜日

ラズパイ(IOT・65)

お次は、キャラピラー構造をもつものを簡単に作るために
おもちゃから改造です。
今回は、タミヤのカムプログラムロボットを改良してみます。
この製品はもともと、カムを組み替えることで、
動作する動きをカスタマイズして遊ぶキットなのですが、
IOTを組み合わせ動かすには最適な組み立てキットとなっています。

2020年3月13日金曜日

ラズパイ(IOT・64)

モーターもひとつが動かせるようになりました。
ですが、戦車タイプの駆動の場合、2つのモーターをつかって
左右のキャタピラーを制御する必要がでてきます。
そこで、今回は2つめのモータードライバーを導入してみます。

前回と同じように、もうひとつ
DRV8830使用DCモータードライブキット を追加します。
今回はふたつを同時に利用する形になるので、
二つ目側のアドレスが別のものになるように、
アドレス変更用にはんだを流し込みます。

2020年3月12日木曜日

ラズパイ(IOT・63)

モータドライバーに接続したモータを
制御できるようにするため、Pythonでプログラムを作成してみます。
Pythonからの制御は、シリアル通信をつかって
信号を送る形となります。

まずライブラリのインストール
 sudo apt-get install i2c-tools
 sudo apt-get install python3-smbus


次に以下のコマンドで、接続されたアドレスを確認します。
sudo i2cdetect -y 1


64番ということが分かったので、
このアドレスをめがけて命令を送ります。
import time
import smbus
i2c = smbus.SMBus(1)
adr1=0x64

time.sleep(5)
i2c.write_byte_data(adr1,0,0b10100101)  # アドレス、コマンド、バイト


これで回転ができるようになりました。

2020年3月11日水曜日

ラズパイ(IOT・62)

まずは、配線!基板にピンソケットを
はんだ付けします。
そして、ピンをラズパイに接続します。
プログラムとマイコンを接続する
インターフェースが充実してるのが
ラズパイの魅力のひとつでもありますね。

SDA(シリアルデータ)
SCL(シリアルクロック)
あとは、モーターの配線と
電源の配線を接続します。

2020年3月10日火曜日

ラズパイ(IOT・61)

これまでは、センサーを付けている場所での
測定であったりと、固定して作動させることが前提でしたが、
移動手段としてDCモーターを取り付けて
自由に動き回ることができるようにしてみたいと
思います。
まずは、モータードライバーの基板を
使えるようにしてみます。
基板には、DRV8830使用DCモータードライブキットを
利用してみます。

2020年3月9日月曜日

新しい機器について(色々・5)

テレビって色々な機器を接続しますよね~。
最近はほとんどがHDMIの端子を利用するようになった事もあり、
HDDレコーダー・Nintendo Switch・AppleTV・Microsoft Xboxなど
テレビの本体についているHDMIの端子だけでは足りなくなってきて
しまいました。
そこで、HDMI切り替え機を試してみました。
購入の条件としては、
・見た目がかっこいい
・シンプル
・低電力(できれば、電源を別途使わない)
という感じから、ELECOM HDMI切り替え機をチョイスです。

本体もコンパクトで場合によっては、MicroUSBによる
電源供給も可能で(今のところ外部電源は使わなくても利用できてます。)
選択されている機器のランプが柔らかく光る感じで、
邪魔になることもなく、丁度いい感じでした。

2020年3月6日金曜日

新しい機器について(色々・6)

Appleのワイヤレスヘッドホンもノイズキャンセリング機能付きなのが
出て気にはなっていたのですが、そのノイズキャンセリングが
如何程なのか試してみました。
サイズ的には、他の製品と比べても小型ですね。
ケースも持ち運びに負担がなく、Appleらしさを
感じられます。
そして、使ってみての実感としては、
周りの雑音・ざわざわ感が減る!といった感じです。
体から伝わる音もあるので、決して全てが消せるっという感じでは
ないのですが、雑音が消えた!っという感じでした。
でも、人の声とかは、そんなに消されているようにも
感じないので、消している周波数も調整されているような気がします。
初めての試したノイズキャンセリング製品でしたが、
面白いという印象でした~

2020年3月4日水曜日

ラズパイ(IOT・60)

Webの表示側に距離センサーから送られたデータが表示される
部分を追加します。
ここには、Socket.IOでリアルタイムに送られてきた
データが自動的に表示されるようにします。

  <ul id="messages"></ul>
  <form id="message_form" action="#">
    <input id="input_msg" autocomplete="off" /><button>Send</button>
    <input type="button" value="距離計測" onclick="sendGetDistance();" />
  </form>
  <script>
    var socketio = io();
    $(function(){
      $('#message_form').submit(function() {
        socketio.emit('message', $('#input_msg').val());
        $('#input_msg').val('');
        return false;
      });
      
      // メッセージを取得した場合
      socketio.on('message', function(msg) {
        $('#messages').append($('<li>').text(msg));
      });
      
      // 距離を取得した場合
      socketio.on('rec_distance', function(dat) {
        $('#messages').append($('<li>').text(
          dat.distance1 + 'mm ' + dat.distance2 + 'mm ' + dat.distance3 + 'mm ' + dat.distance4 + 'mm'
        ));
      });
    });
    
    function sendGetDistance() {
      socketio.emit('get_distance', '');
    }
  </script>

2020年3月3日火曜日

ラズパイ(IOT・59)

これでNode.jsとPythonをつないで連携がとれるように
なりましたので、この前接続できたレーザー距離センサーを
接続して、リアルタイムに距離が通知できるように
してみます。

まず、Node側のプログラムを拡張して、センサーからの
値を配信できるようにコマンドを増やします。

io.on('connection', function(socket) {
  // 距離計測開始を依頼
  socket.on('get_distance', function(msg) {
    console.log('get_distance: ' + msg);
    io.emit('get_distance', msg);
  });
  
  // 距離計測結果を受信
  socket.on('rec_distance', function(msg) {
    console.log('rec_distance: ' + msg);
    io.emit('rec_distance', msg);
  });

2020年3月2日月曜日

ラズパイ(IOT・58)

前回、Socket.IOの接続先サーバー用プログラムが
できたので、Python側からSocket.IOに接続するための
プログラムを作成します。

node_client.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socketio

sio = socketio.Client()

@sio.event
def connect():
    print('connection established')

@sio.event
def my_message(data):
    print('message received with ', data)
    sio.emit('my response', {'response': 'my response'})

@sio.event
def disconnect():
    print('disconnected from server')

@sio.on('message')
def on_message(data):
    print('I received a message! ' + data)
    if (data == 'aaa'):
      sio.emit('my message', {'response': 'my response'})
      sio.emit('message', 'response')

sio.connect('http://localhost:3000')
sio.wait()