ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Posts Tagged ‘アルドゥイーノ

「ラボワーク LW05 – Netduino 3 と 38 種類のセンサキット体験」の報告

leave a comment »

今年2月から兵庫県神戸市の三ノ宮駅近くの会議室を借りてやっているマイコンボードの勉強会「ラボワーク」は今月で5回目となった。今回から本格的に Netduino を使うことにした。Netduino は Arduino UNO とI/Oピンコンパチブルのマイコンボードで、Microsoft の .NET Micro Fremework が動いており Visual Studio を使って C# をプログラミング言語として開発することができる。安価で手軽に使いやすい Arduino と C# の充実したライブラリを利用できるパワフルな Netduino の両方を取り上げることで、マイコンボードの活用の幅も広がると考えている。

P1160929_mid_640_480

今回は 38 種類のセンサーキットを試した。センサーキットを試すには、アナログポートで入力した値を取得して何かの形で表示しなければならない。そこで 4本の LED チューブを備えたマルチファンクションシールドを利用した。マルチファンクションシールドはラボワークの第3回で使ったことがあり、シフトレジスタを介して LED チューブをコントロールするようにできている。そこでアナログポート A5 からの入力値をダイレクトに数値で表示するサンプルスケッチを用意し、ボリュームをつないで確認した後に様々なセンサを取り付けて試した。

P1160933_clip_640_480

P1160936_mid_640_480

このセンサーキットには、キースイッチ、ロータリーエンコーダスイッチ、タッチセンサ、距離センサ、サウンドセンサ、人感センサ、レーザーセンサ、磁気センサ、磁気リードセンサ、磁気ホールセンサ、温度センサ、赤外線センサ、傾きセンサ、衝撃センサ、水銀センサ、心拍センサ、炎センサ、リードセンサ、光ブロークンモジュール、ジョイスティックモジュール、フォトレジスタ、バイブレーション、ブザー、フルカラーLED、点滅LED、5Vリレーモジュール、などが入っている。似た機能のセンサやアクチュエータが複数あり、どんなセンサなのか想像しがたいものもある。実際に使っても反応がわからないものもあった。またフルカラー LED のようにセンサではないものもあったが、それらは今回テストしなかった。

P1160932_mid_640_480

P1160937_mid_640_480

P1160939_mid_640_480

P1160944_mid_640_480

今回のラボワークでは、様々なセンサを体験しながら、それらをどう使うかという利用シーンについてもディスカッションができた。またアクチュエータについても試したいという希望もあった。次回以降、またこれらの結果をふまえてラボワークの企画を作っていく。興味のある方はアドミンティーチャーズのサイトから電子メールで申し込みをしてください。

アドミンティーチャーズ
https://adminteachers.wordpress.com/

アドミンティーチャーズの「ラボワーク」、第5回は「Netduino 3 と 38 種類のセンサキット体験」をする。

leave a comment »

今年2月から毎月第一土曜日と決めて神戸三ノ宮の会議室を借りてやっているアドミンティーチャーズの「ラボワーク」。第5回は「Netduino 3 と 38 種類のセンサキット体験」をする。

38 種類のセンサは、キースイッチ、ロータリーエンコーダスイッチ、タッチセンサ、距離センサ、サウンドセンサ、人感センサ、レーザーセンサ、磁気センサ、磁気リードセンサ、磁気ホールセンサ、温度センサ、赤外線センサ、傾きセンサ、衝撃センサ、水銀センサ、心拍センサ、炎センサ、リードセンサ、光ブロークンモジュール、ジョイスティックモジュール、フォトレジスタ、バイブレーション、ブザー、フルカラーLED、点滅LED、5Vリレーモジュール、などだ。似た機能のセンサやアクチュエータが複数あり、どんなセンサなのか想像しがたいものもある。今回はセンサキットを買っただけで使っていない。ぶっつけ本番の、まさに「ラボワーク」だ。

P1160745_mid_640_480

また今回から再び Netduino を取り上げる。Arduino と Netduino の両方でプログラミングをする。Netduino はモデルチェンジをしており、Netduino 2 から Netduino 3 となっている。Netduino 3 では I/O ポートが独立したコネクタでボードの片端にまとめられているのでセンサなどを接続しやすい。

P1160846_mid_640_480

P1160848_mid_640_480

第5回ラボワーク「Netduino 3と 38 種類のセンサキット体験」の詳細は、アドミンティーチャーズの Web サイトで。

アドミンティーチャーズ
https://adminteachers.wordpress.com/

アドミンティーチャーズ「ラボワーク LW05 – Netduino 3 と 38 種類のセンサキット体験」
https://adminteachers.wordpress.com/2016/06/03/%e3%83%a9%e3%83%9c%e3%83%af%e3%83%bc%e3%82%af-lw05-netduino-3-%e3%81%a8-38-%e7%a8%ae%e9%a1%9e%e3%81%ae%e3%82%bb%e3%83%b3%e3%82%b5%e3%82%ad%e3%83%83%e3%83%88%e4%bd%93%e9%a8%93/

<概要>

日時:2016年6月4日(土)19:00~20:00
場所:神戸市青少年会館 サークル4号室(6階)
        (前回の勤労会館と同じ建物です)

神戸市中央区雲井通5丁目1番2号
最寄駅は三宮(JR、阪神、阪急、神戸市営地下鉄)徒歩2分から5分
神戸市勤労会館へのアクセス

対象:高等学校の情報教員、または情報教育に関心のある方
定員:15名
申し込み:電子メール

宛先 ad-teachers@outlook.com
件名 「2016年6月4日 ラボワーク LW05 申し込み」
メールの本文にご氏名、所属をお書きください。

アドミンティーチャーズのラボワーク LW04 「W5100 イーサネットシールドを使ったWebサービスのプログラミング」の報告

leave a comment »

今年2月から毎月第一土曜日と決めて神戸三ノ宮の会議室で行っているマイコンボード勉強会「ラボワーク」。5月は「W5100 イーサネットシールドを使ったWebサービスのプログラミング」をテーマにした。

P1100979_clip_640_480

このイーサネットシールドは Arduino の事実上のデファクトスタンダードなイーサネットシールドで、Wiznet の W5100 チップが使われている。Arduino IDE 開発環境で標準でライブラリが用意されているのでプログラミングもしやすい。

このイーサネットシールドを使って Web サービスを実装するには次のようにする。

———————————————————————————

void setup() {
  Ethernet.begin(mac,ip);
  server.begin();
}

void loop() {
  EthernetClient client = server.available();
}

———————————————————————————

たったこれだけで Web サービスが動く。あとは受け取ったデータを解析し、適切な HTML テキストをクライアントに返すだけだ。

クライアントに対してテキストを送り返すには次の一行でいい。

———————————————————————————

  client.println("This is my web");

———————————————————————————

ただこれを単に void loop() に書くだけでは、ひたすら際限なく同じテキストをクライアントに送り続けることになる。そこでクライアントから接続要求があったときに、テキストを一回だけ送るという処理が必要になる。

たとえば次のスケッチは接続要求のキャラクタを文字列につなぎ、文字列に「GET」があれば HTML のリクエストだと判断し、一回だけテキストを返してサービスを終了する。

———————————————————————————

void loop() {
  EthernetClient client = server.available();
    if(client.connected() == 1){
    c = client.read();
    stc.concat(c);
    if(client.available() == 0){
      Serial.println(stc);
    }
  }
  if(stc.indexOf("GET") != -1 && client.available() == 0){
    client.println("This is my web");
    client.stop();
    stc = "";
  }
}

———————————————————————————

これでクライアントから接続すると「This is my web」の文字がブラウザに表示される。正しい HTML 文ではないが、表示されるはずだ。

クライアントからの要求が POST メソッドだったときは、受け取ったテキストを解析して必要な処理をさせることができる。たとえば HTML 文にチェックボックスとボタンを用意して、8 x8 マトリックス LED をコントロールするようなこともできる。

P1160747_mid_640_480

P1160639_mid_640_480

しかし、メモリの制約だと思われるが、あまり長い HTML テキストを送ることや POST メソッドも長いメッセージを受け取ることができない。そこで、HTML テキストは SD カードに保存しておき逐次読みだして送信することを考えなければいけない。また POST メソッドも不要なテキストを削除して処理する必要がある。

イーサネットシールドになぜ SD カードスロットが付いているのかが疑問だったが、実用的な Web サービスを構築するには長い HTML テキストを処理する必要があるからだ、ということがよくわかった。

Arduino と Web サービスは今後も「ラボワーク」でとりあげることにする。無線ネットワークもやってみたい。わかったことの詳細は、また別途項を改めて報告したい。

今週末は神戸三ノ宮でアドミンティーチャーズのラボワーク。ArduinoでWebサービスをプログラミング。

leave a comment »

今週末は連休の後半だが、5月7日(土)に神戸三ノ宮でアドミンティーチャーズのラボワーク第4会をやる。今回のテーマは「Webサービス」だ。使うのは WIZnet の TCP/IP ハードウェア処理チップ W5100 を使った Arduino UNO 用の定番イーサネットシールドだ。

アドミンティーチャーズ「ラボワーク LW04 – W5100イーサネットシールドを使ったWebサービスのプログラミング」
https://adminteachers.wordpress.com/2016/04/18/%e3%83%a9%e3%83%9c%e3%83%af%e3%83%bc%e3%82%af-lw04-w5100%e3%82%a4%e3%83%bc%e3%82%b5%e3%83%8d%e3%83%83%e3%83%88%e3%82%b7%e3%83%bc%e3%83%ab%e3%83%89%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fweb/

p1140109_clip_640_480

Arduino には、このイーサネットシールドを使って TCP/IP 通信をするライブラリが提供されている。このライブラリを利用すると簡単に TCP/IP 通信をするプログラムを作ることができる。Web サービスのサンプルコードも提供されており、簡単に Web サーバーを作ることができる。

Web サーバーを作るだけでなく、プログラム上で TCP/IP 通信のデータを見ると、Web サービスでどんなデータがやりとりされているかがわかる。すると単に決まった固定の HTML テキストを返すだけでなく、I/O ポートから受け取ったデータを返すことや、POST メソッドで受け取ったデータをどう処理すればいいかが理論的に理解できる。

このように今回の実習では、単に実用的な Web サービスを作るだけでなく、HTTP 通信の中身を明らかにすることもラボワークの目的とする。まさに「ラボ」という言葉にぴったりの時間にするように企画している。

3月5日(土)、神戸三ノ宮で行った「ラボワーク LW02 – Digispark 切手大の小さい Arduino を使う」

leave a comment »

アドミンティーチャーズ「『ラボワーク LW02 – Digispark 切手大の小さい Arduino を使う』の報告」
https://adminteachers.wordpress.com/2016/03/28/%e3%80%8c%e3%83%a9%e3%83%9c%e3%83%af%e3%83%bc%e3%82%af-lw02-digispark-%e5%88%87%e6%89%8b%e5%a4%a7%e3%81%ae%e5%b0%8f%e3%81%95%e3%81%84-arduino-%e3%82%92%e4%bd%bf%e3%81%86%e3%80%8d%e3%81%ae-2/

今回の「ラボワーク」では、参加のみなさんがご自分のパソコンをお持ちになったので、実際に環境を整えたりスケッチを書いたりという実践的な実習ができた。とてもよかった。今回の「ラボワーク」では、次のようなことをした。

・切手大の Arduino の亜種といえる Digispark を使ってみる。
・Arduino IDE で Digispark を開発するための環境を整える。
・Digispark と PC 間のインタフェースについて知る。
・Arduino IDE を使って簡単な「Lチカ」プログラミングをして Digispark を動かす。

Digispark は USB インタフェースの形状が異なるものを 2種類用意した。ひとつはむき出しの USB コネクタがボード上に形成されているもので、もうひとつはボードにマイクロ USB コネクタが付いているも。むき出し USB コネクタのものはケーブル不要で直接パソコンに挿すことができるので便利だ。どちらの Digispark も中身は同じ。

Digispark は Arduino IDE で開発することができるが、Digispark 用のボードマネージャーを適用する必要がある。ここで現在、Digispark 開発用に提供されているボードマネージャーが、Arduino IDE のバージョンによっては動かないという現象がある。Windows 用の Arduino IDE では、1.6.5 では正しく適用されることがわかっているので、異なるバージョンの Arduino IDE を使っている方には 1.6.5 をインストールしなおしていただき、その後 Digispark 用のボードマネージャーを適用していただいた。

Digispark は他の Arduino と異なり、パソコンとのインタフェースは USB – シリアル変換ではない。パソコンからは Digispark はキーボードやマウスと同様の HID (Human Interface Device) として動作する。したがって固有のデバイスドライバを導入する必要がなく、標準の HID ドライバが適用されればいい。スケッチを導入するには、まず Arduino IDE で「マイコンボードに書き込む」ボタンを押してから USB に Digispark を挿す。Digispark は通電後、数十秒間はプログラム転送モードになり、その間にスケッチが導入される。スケッチの導入が終われば自動的にリセットし、プログラムが動き始める。

Digispark にはオンボードで LED が 1個ついているので、スケッチでオンボードの LED を点滅させるスケッチを作って確かめた。点滅速度を変更したり、PWM でフェードイン、フェードアウトの光らせ方を体験したりした。

次回は 4月2日(土)。テーマはプログラミングとし、シフトレジスタでコントロールする LED チューブの点灯と、ダイナミック点灯のプログラミングを考えている。前回同様 12 名の定員の小さな会議室を予約しているので、希望の方は早めに申し込んでください。数日中にアドミンティーチャーズのサイトで告知します。

アドミンティーチャーズ Web
https://adminteachers.wordpress.com/

P1120096_mid_640_480

Funduino の Arduino NANO 用インタフェースシールドを使う

leave a comment »

Funduino は Arduino 互換機や関連商品を開発、販売しているメーカーらしい。ドイツの Funduino.de のオフィシャルサイトがある。

http://funduino.de/

funduino.de_Web_mid_640

ちなみにアメリカのドメイン funduino.com は、おそらくドメイン失効でドメインセラーに乗っ取られてしまっている。

http://funduino.com/

funduino.com_Web_DomainSeller_mid_640

Arduino NANO は USB – シリアル変換モジュールを内蔵した Arduino で、コンピュータでスケッチを書き、USB ケーブルで接続してプログラムを送り込むことができるマイコンボードだ。使い方としては Arduino で現在最も流行している Arduino UNO と同じ感覚で使うことができ、Arduino UNO よりずいぶん小型である。この程度の大きさなら、邪魔なピンを外してしまい、そのまま機器に組み込んでもいいだろう。

P1110873_clip_640_480

Fig.1 Arduino NANO 表側

P1110874_clip_640_480

Fig.2 Arduino NANO 裏側

P1110929_clip_640_480

Fig.3 Arduino NANO と平成20年の 500円玉と 10円玉

P1110882_clip_640_480

Fig.4 Funduino の Arduino NANO 用シールド 表側

P1110888_clip_640_480

Fig.5 Funduino の Arduino NANO 用シールド 裏側

Arduino NANO は機器に組み込みことを想定した Arduino だが、I/O ピンが下向きにしか出ていないのでプロトタイピングには不便だ。そこでこの Funduino の Arduino NANO 用シールドを使ってプロトタイピングをしやすくする。このシールドは Arduino NANO の I/O ピン上向きに並べ、それぞれの I/O ピンの横に +VCC 電源と GND グランドを並べている。また AC アダプタジャックがあり、AC 電源を供給して動かすことができる。

Arduino NANO は FunduinoNANO 用シールドの上部ソケットに差し込む。

P1110897_clip_640

Fig.6 Arduino NANO を Funduino Arduino NANO 用シールドに挿す

P1110902_clip_640_480

Fig.7 Arduino NANO を Funduino Arduino NANO 用シールドに挿した

Arduino NANO を Funduino Arduino NANO 用シールドに挿すと、AC アダプターから電源を共有して Arduino NANO を動かすことができる。スケッチを送り込むときは Arduino NANO の USB コネクタを使う。

P1110904_mid_640_480

Fig.8 Funduino の Arduino NANO シールドに AC 電源を供給して Arduino NANO を動かす

P1110903_mid_640_480

Fig.9 Funduino の Arduino NANO シールドに取り付けた Arduino NANO にパソコンからスケッチを入れる

またこのシールドは、Arduino UNO とピン互換の穴があり、ピンを取り付ければ Arduino UNO のシールドを使うこともできそうだ。ただしこのシールドは、上に Arduino NANO が載るため、上から Arduino UNO 用のシールドをかぶせるにはピンの高さが足りないだろう。ピンを二重に載せるか長いピンを手に入れて取り付ける、あるいはシールドを通常とは逆に下に取り付けることなどを考えなければならないだろう。

Arduino NANO でプロトタイピングをするには便利なアイテムだ。

Written by Yoshio Matsumoto

2016年2月27日 at 12:18 PM

100 円均一ショップで買った乾電池チェッカーで Netduino 2 と Arduino UNO の PWM パルス幅変調アナログ出力をチェックする

leave a comment »

100 円均一ショップには電子工作で使えそうなものがたくさんある。電子パーツとして買うとそれなりに値段がするものが手軽に手に入る。100 円均一ショップで売っていたアナログメーター式の乾電池チェッカーを使って Netduino 2 と Arduino UNO の PWM パルス幅変調アナログ出力をチェックする実験をしてみた。

Netduino 2 や Arduino UNO のアナログ出力は PWM パルス幅変調 Pulse Width Modulation であり、実際に出力電圧が変化しているのではない。5V の電圧を出力するにあたってパルスを使い、パルス幅の 5V と 0V の比を変化させることで平均電圧、という表現は正確ではないかもしれないが、疑似的に電圧を変化させるのと同等の効果を得ているのだ。ちなみに Arduino Due には D/A 変換回路が組み込まれており、本物のアナログ出力を行うことができるようだ。

P1110829_clip_640_480

まず本体を分解する。ニッパーとペンチで角から。分解すると内部はアナログメーターと 4 本の抵抗で構成されていることがわかる。はんだごてではんだを溶かしてばらばらにする。

P1110830_mid_640_480

P1110831_clip_640_480

念のため元の回路とテスターで測った抵抗の実測値をメモしておく。

P1110832_mid_640_480

このアナログメーターで、5V の出力値を MAX で表示できるようにすればいい。そこでいくらの抵抗をつなげばよいかをボリュームで調節して決める。ボリュームの値は 800 オームから 1k オームにすればよいことがわかった。

P1110833_mid_640_480

手元に適当な値の抵抗がなかったので、510 オームの抵抗を 2本直列につなぎ、1.02 kオームにして使うことにした。回路はとりあえず空中配線で。

P1110834_mid_640_480

Netduino 2 で PWM によるアナログ出力をするには、C# では次のようなコードになる。パルス幅を連続的に変化し、フェードイン、フェードアウトの効果を得る出力だ。

———————————————————————————

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace Netduino_Analog_Out_Blink
{
    public class Program
    {
        public static void Main()
        {
            PWM myPWM = new PWM(SecretLabs.NETMF.Hardware.Netduino.PWMChannels.PWM_PIN_D9,100,0,false);
            double myAdd = 0.001;

            myPWM.Start();

            while(true)
            {
                myPWM.DutyCycle = myPWM.DutyCycle + myAdd;
                Thread.Sleep(2);

                if(myPWM.DutyCycle > 0.999)
                {
                    myAdd = myAdd * (-1);
                }
                if(myPWM.DutyCycle < 0.001)
                {
                    myAdd = myAdd * (-1);
                }
            }
        }
    }
}

———————————————————————————

これを電池チェッカーのメーターで受け取ると、メーターの針がゆっくりと右へ左へ振れることがわかる。

P1110837_mid_640_480

Arduino UNO で PWM によるアナログ出力をするには、次のようなスケッチになる。

———————————————————————————

int bri = 0;
int myAdd = 5;

void setup()
{
  pinMode(9, OUTPUT);
}

void loop()
{
  analogWrite(9, bri);

  bri = bri + myAdd;

  if (bri == 0 || bri == 255)
  {
    myAdd = myAdd * (-1);
  }
  delay(40);
}

———————————————————————————

P1110835_mid_640_480