Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

Arduinoねた その87 GPS(GYSFDMAXB)

2019-04-02 | Arduinoねた

さて今度は、GPSの実験をしてみました。

秋月電子で購入した小型高感度GPSモジュール(GYSFDMAXB)

「みちびき」にも対応しているらしいです。

 

 

これで何をやりたかったかというと・・・

①時刻を取得すること(電波時計みたいにできるのかな!?)

②ロボカップジュニアのレスキューメイズやレスキューラインで、ロボットの絶対位置を検知できれば最強ですよね。そんなことができるのか!?

の2点です。

 

まず、GPSモジュールをArduinoに接続します。

電源電圧は5Vなのに、入出力の信号レベルは C-MOSロジック(3.3V)ということで、ちょっと面倒なハズなのですが・・・

どうもGPSから信号を貰うだけの場合は、1本の信号線をそのまま直に接続するだけで良いみたいです。

 

ということで・・・

GPS(5V)<---- 5V
GPS(GND) <-- GND
GPS(TXD)<-- Arduino(D2)

こんな感じで接続しました。

 

そして、スケッチはこちら

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

void setup() {
  mySerial.begin(9600);
  Serial.begin(115200);
  }

void loop() {
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

めっちゃ簡単ですね。

ArduinoとPCはシリアル通信を使う(シリアルモニタを使うので)し、ArduinoとGPSもシリアル通信を使うので、GPSとの通信はソフトシリアル通信を使っています。(そのために、D2,D3をソフト的なTX,RX端子にしている)

GPSとの通信を9600bps、PCとの通信を115200bpsに設定します。

そして、PCのシリアルモニタの通信速度を115200bpsに設定してスケッチを実行すると・・・

なにやら、大量のデータがGPSから送られてきました。

 

やった~ 簡単に受信成功じゃん!

と喜んだものの、そう簡単ではありませんでした。

 

単に、GPSとの通信ができただけで、GPSが衛星の電波を受信できているわけではありませんでした。

GPSモジュールが、衛星の電波を受信すると、モジュール上のLEDが1秒ごとに点滅します。

これで、受信ができるのですが・・・(天気にもよると思うのですが・・・)モジュールを窓際に置くと、短い時間で点滅する(衛星の電波を受信する)ように思います。

 

まあ、とりあえず、GPSの「はじめの一歩」は進めたということで・・・

 

 

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その86 ESP32-DevkitC-32D

2019-03-30 | Arduinoねた

前回、間違って購入してしまった ESP32 ですが・・・

リベンジを果たすために、もう一度、秋葉原の秋月電子に行って、今度は間違いなく 32D を購入してきました。

 

(下が32Dです。シールドの部分の刻印に 32D と書かれています。)

 

で・・・2つを並べてみると・・・全然違いが分からないくらいです。

これなら、買いなおす必要は、なかったかも・・・

もちろん、スケッチもそのまま適用できました。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その85 pixy2

2019-03-28 | Arduinoねた

もう、我が家の子供たちは、とっくにロボカップジュニアを卒業しているので、ロボットの研究とかには必要が無いのですが・・・

今更ながら、pixy2 なるものを買ってみました。

これ、カメラなのですが、新しくライントレース(原文では"Line Tracking")の機能が組み込まれているということで、大変興味深いです。

 

注文したら、2日位で届きました。

箱から出してみると・・・めっちゃ小さいです。

 

 

ドキュメントなどは、ここにあります。

Pixy2 Quick Links

ただし(当たり前ですが)英語です。

 

さて、最初は、PixyMon というツールをインストールします。

次にUSBケーブルでPCとpixy2を接続します。

もう、それだけで、PixyMon に pixy2 が撮影した画像が映し出されます。

 

次に色を覚えさせます。さらに、その色の判定を調整します。・・・と続きます。

 

まどろっこしいので、一番興味のあるライントレースに移ります。

PixyMon の Program を選択し、一覧から line_tracking を選択します。すると、黒線を認識して進むべき方向(ベクトル)を表示してくれます。

適当に実験してみた結果・・・

 

・あまり、カメラ(pixy2)を黒線に近づけると認識しない。
 ⇒画像を認識する最適な距離があるようだ・・・近すぎたらダメ

・逆に、カメラを黒線から遠ざけると、周りの他の黒線やコースの外側などの色を認識してしまい、混乱する。

 

この適切な距離や角度を設定するのがミソのようです。

 

で・・・肝心のライントレース機能ですが・・・なかなか優秀です。

カーブはもちろん、直角もちゃんと認識します。

当たり前ですが、カメラで撮影して、先の線を読んで(判断して)いるので、カーブなどのかなり手前から、曲がる判断を出すことになります。

今までのロボットのライントレースとは感覚が違うので・・・審判はとまどうかも・・・!?

 

さて、1本の黒線をトレースするのは得意なようですが・・・交差点はどうでしょうか!?

例えば十字路に向かうと、直進と左右のベクトルが3本認識されます。

デフォルトでは、なるべく直進になる経路が優先順位として上位に選択されるようです。

 

ということで、ロボカップジュニアの Rescue Line の交差点に対応するのは、そう簡単ではなさそうです。 

でも、なかなか研究のしがいがありそうです・・・

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その84 ESP32 OLED

2019-03-26 | Arduinoねた

ESP32がやっと使えるようになってきました。

今度はセンサーが使えるかどうか実験です。

実験したのは、M&YがレスキューBで使用していた温度センサー(TPA-81)です。

 

OLEDがI2C接続なので、さらにI2C接続のセンサーが使えるかどうかの実験です。

 

 

配線がごちゃごちゃしていますが・・・ちゃんと使えました。

このOLED(SSD1306)ですが・・・小さいのですが、きれいに表示されて読みやすいです。

さて、とりあえず、使えそうであることが分かったので、配線を整理してみました。

 

 

これで、スッキリです。

 

ところで、このOLED(SSD1306)ですが・・・これまで使用していた液晶ディスプレイと違ってクセがあります。

普通は、同じ場所に文字を書くと、前に書かれていた文字が消えて、新しい文字が表示されます。(上書きされる:書き換えられる)

ところが、OLEDは、前に書かれていた文字と新しく書いた文字が重なって表示されます。

だから、文字を上書きする前に、前の文字を消さなければなりません。

画面を全部クリアするには、clearDisplay() を使うのですが、部分的に消す方法が分かりません。

とりあえず、四角く黒で塗りつぶす fillRect() を使っています。

あと、いろいろ書き込んだ後に display() で、実際に表示されます。(これをよく忘れて、なぜ表示が変わらないのか悩みました)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その83 ESP32 WiFiの実験

2019-03-24 | Arduinoねた

せっかく ESP32 にはWiFiの通信機能があるのだから・・・それを活かした実験をしてみました。

といっても、先人の知恵をそのまま試しただけですが・・・

 

参考にしたページはこちら mgo-tec電子工作 です。

ここに掲載されていたスケッチをコピペします。

#include <ESP8266WiFi.h>

//ご自分のルーターのSSIDを入力してください
const char* ssid = "xxxx";
//ご自分のルーターのパスワード
const char* password = "xxxx";

boolean Ini_html_on = false;//ブラウザからの初回HTTPレスポンス完了したかどうかのフラグ

WiFiServer server(80);
WiFiClient client;

void setup() {
Serial.begin(115200);
// Connect to WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

// Start the server
server.begin();
Serial.println("Server started");

// Print the IP address
Serial.println(WiFi.localIP());
}
//************メインループ********************************
void loop() {
if (Ini_html_on == false) {
Ini_HTTP_Response();
} else if (client.available()) {
Serial.print(client.read());
}
delay(1);//これは重要かも。
}
//*****初回ブラウザからのGET要求によるHTMLタグ吐き出しHTTPレスポンス*******
void Ini_HTTP_Response()
{
client = server.available();//クライアント生成
delay(1);
String req;

while (client) {
if (client.available()) {
req = client.readStringUntil('\n');
Serial.println(req);
if (req.indexOf("GET / HTTP") >= 0 || req.indexOf("GET /favicon") >= 0) { //ブラウザからリクエストを受信したらこの文字列を検知する
//Google Chromeの場合faviconリクエストが来るのでそれも検出する
Serial.println("-----from Browser FirstTime HTTP Request---------");
Serial.println(req);
//ブラウザからのリクエストで空行(\r\nが先頭になる)まで読み込む
while (req.indexOf("\r") != 0) {
req = client.readStringUntil('\n');//\nまで読み込むが\n自身は文字列に含まれず、捨てられる
Serial.println(req);
}
req = "";
delay(10);//10ms待ってレスポンスをブラウザに送信

//メモリ節約のため、Fマクロで文字列を囲う
//普通のHTTPレスポンスヘッダ
client.print(F("HTTP/1.1 200 OK\r\n"));
client.print(F("Content-Type:text/html\r\n"));
client.print(F("Connection:close\r\n\r\n"));//1行空行が必要
//ここからブラウザ表示のためのHTML吐き出し
client.println(F("<!DOCTYPE html>"));
client.println(F("<html>"));
client.println(F("<body>"));
client.println(F("<font size=30>"));
client.println(F("Hello World"));
client.println(F("</font>"));
client.println(F("</body>"));
client.println(F("</html>"));

delay(10);//これが重要!これが無いと切断できないかもしれない。
client.stop();//一旦ブラウザとコネクション切断する。
delay(10);
Serial.println("\nGET HTTP client stop--------------------");
req = "";
Ini_html_on = false; //一回切りの接続にしたい場合、ここをtrueにする。
}
}
}
}

このスケッチの最初の

#include <ESP8266WiFi.h>

が無い、とエラーになるので(よくわからないけど・・・) WiFi.h に変えました。

先頭の方に、我が家のルーターのSSIDとパスワードを入力して動かすと・・・

 

シリアルモニターにこんな感じで表示されます。

 

表示された、ローカルアドレス(この場合は 192.168.1.15)をスマホのブラウザの接続先に入力すると・・・

ブラウザに「Hello World」が表示されました。

 

なるほど・・・これは、なかなか楽しいですね。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その82 ESP32 DevKitC

2019-03-16 | Arduinoねた

以前にESP32の勉強をしようと思って、「どうせどれでも同じだろう・・・」と何も考えずに AMAZON で安物のESP32を購入したのですが・・・なんだか標準のモノとは違っていたので、普通のものを手に入れて勉強をすることにしました。

そんなわけで・・・

仕事の帰りに秋葉原の秋月電子に立ち寄り、ESP32 DevKitC なるのものを買ってきました。

(秋葉原に気軽に寄れるのは東京に住んでることの特権ですねぇ  笑)

 

まず・・・

ESP-WROOM-32D開発ボード

を買うハズ・・・自分でも、これを買ったつもりだったのですが・・・

ESP32-DevKitC ESP-WROOM-32開発ボード

家に帰った後で確認したら、買ったのはコレでした。

何か・・・ダメダメですね。

 

まず、普通に使えるようにPC側をセットアップします。

・ArduinoのIDEを起動
・設定 > 環境設定 追加のポートマネージャーに「https://dl.espressif.com/dl/package_esp32_index.json」を入力(コピペ)してOKをクリック
ツール > ボード > ボードマネージャー > esp32をインストール
ツール > ボード > ESP32 Dev Module に変更
CP210x USB - UART ブリッジ VCP ドライバ
https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
これは前回やったので、今回はいらないようです。
・ツール > シリアルポート > デバイス番号(今回は COM6)に変更
・ツール > UploadSpeed = 115200 
・シリアルモニタ > 1152000 bps

とりあえず、概要はこんな感じです。

これで、Arduino IDE でプログラミング ⇒ ESP32 ができるようになりました。

 

ESP32のモジュールをブレッドボードに挿すと・・・モジュールが幅広なので、片側の1列しか使えません。

 

 

そこで、ブレッドボードを合体して、その真ん中に挿しました。

 

 

まずは、LEDを点滅させてみます。

 

ここで、まず悩んだのが・・・Arduinoのピンとの対応が全く分かりません。

 

いろいろ調べると・・・以下の対応であることが分かりました。


Arduino ESP32のIO番号(主機能)

     D0     3 Serial RXD 
     D1     1 Serial TXD
     D2   15 HSPI SS, T3, A13
     D3   13 HSPI MOSI, T4, A14
     D4   12 HSPI MISO, T5, A15
     D5   14 HSPI SCK, T6, A16
     D6     0 boot mode, A11, T1
     D7     2 boot mode, A12, T2
     D8   16 Serial1
     D9   17 Serial1
     D10   5 VSPI CS
     D11 23 VSPI MOSI
     D12 19 VSPI MISO
     D13 18 VSPI CLK
     A0   25 DAC1, A18
     A1   26 DAC2, A19
     A2   27 A17
     A3     4 A10, T0
     A4   21 SDA
     A5   22 SCL

ということで、例えばD13にLEDを接続する場合は、LEDを18ピンに接続します。

そして・・・以下のスケッチを実行すると・・・

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

void loop()
  {
  digitalWrite( 18,HIGH );
  delay( 10 );
  digitalWrite( 18,LOW );
  delay( 490 );
  }

 

0.5秒毎にLEDが点滅します。

 

うん、やっと、プログラミングができる状態になった感じです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その81 ESP8266

2019-03-09 | Arduinoねた

私はハード工作は(根がソフト屋なので)苦手なのですが・・・最近、いろいろなハードが出てきており、完全に時代に取り残されてしまっています。

フォーラムの質問に、ESP32を使用可能かどうかの質問があり、「ESP32って何?」から始まりました。

で、よくわからないけど、勉強用にAMAZONで安物を購入してみました。

手に入れたのが、コレ

 

 

Pinbotronix ESP8266 WiFi開発ボード 0.91インチESP8266 OLEDディスプレイWifiキット8
CP2102 IOTサポート Arduino IDE NodeMCU LUA

なんか、基板の上に小さなOLEDが搭載されていてカッコイイ・・・というのが選択した理由です。

 

では、触ってみます・・・

 

まず、Arduino IDE を起動します。

ファイル⇒環境設定

表示された環境設定のダイアログの「追加のボードマネージャのURL」に

http://arduino.esp8266.com/stable/package_esp8266com_index.json

を入力して、OKボタンをクリックをします。

 

次に、ツール⇒ボード⇒ボードマネージャー を選択すると、ボードマネージャーが表示されます。

その中から、「esp8266 by ESP8266 community」選択してインストールボタンをクリックします。

インストールが開始されます。

インストールが終わったら、閉じるボタンをクリックします。

これで Arduino IDE に ESP8266用のArduinoコア がインストールされました。(らしい)

 

さあ、これでOK・・・とは行きませんでした。

スケッチが転送できません。(シリアルポートが選べない状態になっていて、転送がエラーになります)

まあ、いつものことです。

 

いろいろ調べた結果・・・

https://docs.heltec.cn/#/zh_CN/user_manual/how_to_install_esp8266_Arduino

・・・画面の説明が中国語なのですが、なんとなく絵を見ながら・・・

 

追加のボードマネージャのURL は

https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/releases/download/0.0.1/package_heltec_esp8266_index.json

 

ボードマネージャーで追加するのは

Heltec ESP8266 

だと分かりました。

 

それでも、スケッチを転送しようとすると、転送エラーになります。

 

で・・・結局原因は・・・

CP210x USB to UART Bridge VCP Drivers 

このドライバのインストールが必要でした。

デバイスマネージャーをよく見たら、エラーになっていた。

上のドライバーをインストールしたら、シリアルポートが有効になりました。

 

今回も長かった!

 

OLEDのデモプログラムを転送したら、きれいに表示されました。(めっちゃ小さいけど・・・)

 

 

撮影の腕が悪いので、上の写真では文字がにじんでいる感じですが、文字ははっきり表示されます。

ただ・・・めっちゃ小さい!

 

※備忘録として・・・Reset のポート番号を16に変更する

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その80 SSD1306

2019-02-19 | Arduinoねた

さて、OLEDのSSD1306ですが・・・前回、デモは動作させることができたので、今回はもうちょっと実用的な使い方です。

具体的に、テキストと数値を表示してみました。

 

#include<Wire.h>
#include<Adafruit_GFX.h>
#include<Adafruit_SSD1306.h>

Adafruit_SSD1306 display(128, 64, &Wire, 4); // デバイス変数の宣言

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // デバイスの初期化
  }

void loop() {
  int i;

  display.setTextSize(1); // 文字の大きさ
  display.setTextColor(WHITE); // 文字の色

// 画面への表示
  for(i=0;i<10;i++) { 
    display.clearDisplay(); // 画面クリア
    display.setCursor(0,0);
    display.println("Hello");
    display.println("World!");
    display.display();
    delay(1000);
    display.clearDisplay(); // 画面クリア
    display.setCursor(0,0);
    display.println("sample");
    display.println("program");
    display.display();
    delay(1000);
    }

  for(i=0;i<100;i++) {
    display.clearDisplay(); // 画面クリア
    display.setCursor(64, 32);
    display.print("i :");
    display.setCursor(88, 32);
    display.print(i,DEC);
    display.display();
    delay(500);
    }
  delay(1000);
  }

 

実験して分かったことは・・・何かを書いたところに、上書きすると・・・前の文字が消えずに、新しい文字が重なって書かれます。

だから、重ねて書いていくと白い四角になるだけです。(笑)

ということで、毎回画面をクリアしないと、何が表示されているかがわからなくなってしまいます。

これが、正しい使い方なのか分からないので・・・さらに研究したいと思います。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その79 OLED(Organic Light Emitting Diode)の実験

2019-02-15 | Arduinoねた

 

さて今度は、秋月電子で購入した、メッチャ小さな有機LEDのディスプレイです。

 

 

めっちゃ、小さい!

 

まず、最初にやることは

I2Cのアドレスの確認です。

ディスプレイの裏面(基盤側)に 0x78 と 0x7A のどちらに抵抗が付いているかを確認するようです。

 

 

私のは 0x78 側に付いていました。

ということで、I2Cのアドレスを 0x78 にするのかというと・・・0x3Cにします。

(0x7A の場合は、0x3Dを指定します。)

 

次に接続・・・4つの端子を普通に接続します。

GND、VCC(5Vに接続)、SCL(A5に接続)、SDA(A4に接続)

ですね。

 

「Adafruit SSD1306」ライブラリのインストールです。

スケッチ ⇒ ライブラリをインクルード ⇒ ライブラリを管理

で「ssd1306」を検索して最新バージョンのライブラリをインストールします。

 

同様に「Adafruit GFX  Library」のライブラリをインストールします。

 

次に、サンプルスケッチを開きます。

libraries ⇒ Adafruit_SSD1306 ⇒ examples ⇒ ssd1306_128x64_i2c ⇒ ssd1306_128x64_i2c.ino

のことだと思います。

 

このサンプルスケッチに書かれているI2Cアドレスを(先ほどの 0x3C に)書き換えます。

(デフォルトでは 0x3D になっている。⇒ 0x3C)

void setup() の中です。

 

これで・・・コンパイルすればディスプレイにアニメーションなどのデモが表示されます。

 

 

なかなか美しい・・・でも、やっぱり小さいです。

普通の液晶と違って、見やすいですが・・・文字は小さくて読み辛い(歳なので・・・)です。

 

 

 

この性能で良いので、2倍くらいの大きさにしてもらえると、ありがたいのですがねぇ・・・

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その78 WS2812

2019-02-13 | Arduinoねた

またまた、久々の Arduino ねた

もう時代遅れかもしれませんが、マイコン内蔵のカラー発光LEDである WS2812 のプログラミンをして遊びました。

こういうことは、時間が経つと・・・すっかり忘れてしまいますねぇ・・・(歳だから!)

今回使用したのは、WS2812が、24個円形に配置されているものです。

 

 

光を点滅させて回すと・・・まさに電子ルーレットですね。

 

とりあえず、忘備録的にスケッチを掲載しておきます。

 

#include <Adafruit_NeoPixel.h>
#define LEDNUM 24
Adafruit_NeoPixel TestLED = Adafruit_NeoPixel(LEDNUM, 3, NEO_GRB + NEO_KHZ800);

void AllOff() {
  int i;
  for(i=0;i<24;i++)
    TestLED.setPixelColor(i, TestLED.Color(0,0,0));
  TestLED.show();
  }

void FlowOn(int Lr,int Lg,int Lb,int Lw) {
  int i;
  for(i=0;i<LEDNUM;i++) {
    TestLED.setPixelColor(i,TestLED.Color(Lr,Lg,Lb));
    TestLED.show();
    delay(Lw);
    }
  }

void FlowOff(int Lw) {
  int i;
  for(i=0;i<LEDNUM;i++) {
    TestLED.setPixelColor(i,TestLED.Color(0,0,0));
    TestLED.show();
    delay(Lw);
    }
  }

void setup() {
  TestLED.begin();
  AllOff();
  }

void loop() {
  int i;

  for(i=0;i<10;i++) {
    FlowOn(10-i,i,0,42);
    FlowOff(42);
    }
  for(i=0;i<10;i++) {
    FlowOn(0,10-i,i,42);
    FlowOff(42);
    }
  for(i=0;i<10;i++) {
    FlowOn(i,0,10-i,42);
    FlowOff(42);
    }
  }

 

まず最初に、以下のヘッダーファイルを読み込みます。

#include <Adafruit_NeoPixel.h>

 

何連のLEDモジュールを使用するのか宣言をします。(今回は24連なので、LEDNUM=24)

Adafruit_NeoPixel TestLED = Adafruit_NeoPixel(LEDNUM, 3, NEO_GRB + NEO_KHZ800);


LEDの色の指定はこれ

TestLED.setPixelColor(i, TestLED.Color(Lr,Lg,Lb));

i番目のLEDの色を Lr,Lg,Lb で指定します。(Lrなどは、いつも眩しすぎるので10くらいにしています。)

これで色を指定したからと言って、光るわけではありません。

 

TestLED.show();

これで、指定した色のとおりに発光します。

LEDを消灯するには、Lr,Lg,Lbをすべて0にしてから、TestLED.show();を実行します。

 

 

やっぱり、簡単なプログラムでも、自分が作ったプログラムが動作すると楽しいです。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その77 久々のArduino

2019-01-04 | Arduinoねた

PCのOSをWindows10にしたときに、Arduinoの環境を消してしまいました。

で、久々にArduinoのプログラミングをやってみることにしました。

まずは、開発環境のインストール・・・と思いきや、ダウンロードしたZipファイルを展開するだけで環境が整いました。

で、さっそく、サンプルプログラムを書き込もうとすると・・・エラーになります。

ボードを「Arduino Nano」にして、ポートを設定しても変わりません。

Arduino UNOを接続してみると・・・あっさり接続できました。

何で、Arduino Nano はダメなの!?

何度か、設定を繰り返していたら、プロセッサなる設定項目があることに気が付きました。

これを見ると、ATmega328PとATmega168Pが選べます・・・さらにATmega328P(Oid bootloader)というのがあり、これを選ぶとプログラムが転送できました。

 

 

よくわからないけど・・・私の持っている Arduino Nano は古いらしい・・・

 

まあ、とにかく、Arduinoの開発環境を再構築できたようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その76 ArduinoISP

2016-05-13 | Arduinoねた

えーと、いまさら恥ずかしい話ですが・・・

 

これまで、AVRマイコンの ATMEGA 168 などにArduinoのブートローダを書き込むために AVRISP を使用していました。そしてその度に Atmel のツール(AVR studio)を起動していました。

しかし・・・ぬぅわんと、Arduinoがあれば簡単にブートローダーが書き込めることを知りました。

 

参考にしたのはこのページです。

しなぷすのハード制作記

 

手順の概略を忘れないように書いておきます。

①Arduino UNO をPCに接続する。

②Arduino IDE を起動して、「ファイル」⇒「スケッチの例」⇒「ArduinoISP」を開く

③Arduino IDEから、「ツール」⇒「マイコンボード」⇒「Arduino UNO」を選択

④Arduino UNO に「ArduinoISP」のスケッチを書き込む

⑤書き込むATMEGA328をブレッドボードに差し、Arduino UNO と接続

⑥Arduino IDEから、「ツール」⇒「書込装置」⇒「Arduino as ISP」を選択

⑦Arduino IDEから、「ツール」⇒「ブートローダーを書き込む」を選択

LEDが点滅して、なにやら作業が進みます。

点滅が終わると、書き込み終了です。

 

 

 

さて、書き込めたハズのAVRの動作確認は・・・

Arduino UNO に挿してみるのが一番早いです。

Arduino UNO にがっしりと挿さっているATMEGA328を抜いて、書き込んだヤツに替えるのですが・・・抜けない・・・時計用の精密ドライバーでなんとか抜きました。

差し替えてみると・・・ちゃんと動きます。

ということで、Arduino Uno 用の Arduino は焼けました。

 

焼けたんですけど・・・これでは全然うれしくないです。

これまで使ってきた、クリスタルを使わない簡易Arduinoはどうやって焼けばいいの!?

というのを、もうちょっと研究しないとだめなようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その75 Infra Red Thermometer TPA81 続き

2015-11-18 | Arduinoねた

なんだか長いタイトルになってしまいました。

TPA81のI2Cアドレスを変更できたので、2個のTPA81を接続してみました。

I2Cアドレスは片方がデフォルトの D0 で、もう片方が変更した D2 です。

 

 

結論から言うと、2個のTPA81が独立して機能しました。

Img_2509

 

やっぱりSDA、SDLの信号線を10KΩの抵抗でプルアップしないと動作しませんでした。

 

 

これで、複数のTPA81を同時に使用することができそうですねぇ。

 

 

 

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その74 Infra Red Thermometer TPA81

2015-11-16 | Arduinoねた

赤外線温度センサーでも、世界標準?のTPA81について・・・

これは、モジュール単体でI2Cのセンサーになっているので、簡単に接続できます。

 

 

しかし、これのI2Cアドレスを変更するのに、またまた苦労しました。

同じメーカーの超音波センサーであるSRF02のI2Cアドレスの変更はすでに実験済みなので、同じ方法で出来るかと思いきや・・・

そんなに簡単ではありませんでした。

英語の説明を読む限りでは・・・SRF02と同じように A0 AA A5 の3バイトに続けて変更したいI2Cアドレスを書き込むように読めるのですが・・・

何度やってもダメです。

ネットでいろいろ検索しましたが、お手上げ状態でした。

 

 

で、もう一度・・・英語の説明文をSRF02のとTPA81のとで一字一句比べて見ました。

To change the I2C address of the TPA81 you must have only one module on the bus. Write the 3 sequence commands in the correct order followed by the address. Example; to change the address of a TPA81 currently at 0xD0 (the default shipped address) to 0xD2, write the following to address 0xD0; (0xA0, 0xAA, 0xA5, 0xD2 ). These commands must be sent in the correct sequence to change the I2C address, additionally, No other command may be issued in the middle of the sequence. The sequence must be sent to the command register at location 0, which means 4 separate write transactions on the I2C bus.

ここまでは、アドレス以外は、全く一緒でした。

しかし、次の文章が違っていました。

Additionally, there MUST be a delay of at least 50uS between the writing of each byte of the address change sequence.

1バイト書き込む毎に50μ秒の時間待ちをしなさい・・・ということですね。

で、

  Wire.beginTransmission(i2cAddress);
  Wire.send(0x00);
  delayMicroseconds(50);
  Wire.send(0xA0);
  delayMicroseconds(50);
  Wire.endTransmission();
こんな感じで入れてみました・・・

そうしたら・・・

書き換え成功です。

 

 

やっぱり、説明書はちゃんと読まないとね。

 

 

じゃあ、最後まで読んでみると・・・

When done, you should label the sensor with its address, if you lose track of the module addresses, the only way to find out what it is to search all the addresses one at a time and see which one responds.

もしアドレスを変えたら、ちゃんとアドレスを書いておきなさい。 もし、書き換えたアドレスを忘れてしまったら、一つ一つアドレスを試してみるしかありません。

 

 

ひえ~ 恐ろしい!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その73 マイコン内蔵RGB 8LEDスティック

2015-07-08 | Arduinoねた

秋月電子で買ってきた「マイコン内蔵LED」を気に入ったので・・・また買ってきました。

今度のは、これです。

マイコン内蔵RGB 8LEDスティック

 

薄いLEDが8個、細長い基盤に配線されているので、接続も簡単です。

Arduino との接続は電源(5VとGND以外は信号線が一本だけです。

 

 

で・・・今まで実験していた WS2811 のスケッチを実行してみると・・・ダメでした。

7つのLEDが白くまぶしく光って、残りの1個だけがなにやら点滅します。

で、何が悪かったかというと・・・

プログラムの最初の方の

Adafruit_NeoPixel TestLED = Adafruit_NeoPixel(LEDNUM, 3, NEO_GRB + NEO_KHZ800);

この最後のパラメータを NEO_GRB + NEO_KHZ800 にしたら、動作してくれました。

LEDを光らせるのに、RGBそれぞれの明るさを0~256で指定するのですが・・・

あまりにも眩しいので、いつも16位の値を指定しています。

 

後で気が付いたのですが・・・ WS2811 と色のパラメータの指定がちょっと入れ替わっています。

WS2811の時は 緑、赤、青の順だったのですが、WS2812 は 赤、緑、青の順で赤と緑が入れ替わっています。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする