SSブログ
- | 次の10件

衝動買いした 『 arduino ボード 』 の詳細 [Arduino]

■目的
・衝動買いしたボードの仕様、ピンアサインなどを調べる

■参考
http://ideahack.me/article/134
http://share-lab.net/arduino-matome2
http://akizukidenshi.com/download/ds/smartproject/arduino_catalog.pdf

nice!(0)  コメント(0) 

GPSモジュールで測定してみる [Arduino]

■目的
安価なGPSモジュールとArduinoで位置情報を取得してみた

■環境
・Windows 10 Pro
・OS Ver1709 /ビルド 16299.125
・Arduino IDE 1.●.●
・Arduino(互換)
GPSモジュール(NEO-6M NEO-6M-0-001)

・HiLetgo NEO6M U-blox MV2 Flight コントローラー NEO-6M APM 2.5 GPSモジュール Arduino EEPROMに対応
・NEO-6M GPSモジュール(NEO-6M-0-001)+アンテナ
・UART通信(シリアル通信)
・パワー:3~5V
・インタフェース:RS232 TTL


 ※https://www.amazon.co.jp/HiLetgo-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC-GPS%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-Arduino-EEPROM%E3%81%AB%E5%AF%BE%E5%BF%9C/dp/B01D1D0F5M


■配線
Arduino の GND - GPSモジュールの GND
Arduino の 3.3V - GPSモジュールの VCC
Arduino の 3ピン - GPSモジュールの RX
Arduino の 4ピン - GPSモジュールの TX


■分かったこと
・窓際でないと受信しませんでした。
・GPSモジュールの青色LEDが点滅すると、GPS信号を受信できているようです。
・GPS受信前はNMEAデータの最初の数行は出力内容が「***」となりますが、受信が確立するとボードの青色LEDが点滅し、「数字」が出力されるようになります。
・GPS衛星からの信号には、現在位置だけでなく現在時刻(日付・日時)を知ることができる。
・NMEA-0183は、GPSで最も一般的な通信フォーマット。
・NMEA-0183フォーマットのメッセージは、$GPで始まる。$GPに続く3文字の記号がメッセージの種類を表している。
・Googleマップでは、  http://maps.google.com/maps?q=緯度,経度  というURLにアクセスすると、その緯度経度座標にマーカーが立った地図が表示されるようになっている。つまり、GPSモジュールから取得した
 緯度経度情報をこのURLに当てはめてしまえば、現在位置にマーカーが立った地図を  Googleマップで表示するURLリンクを生成することができる。
・Googleマップについてよく調べてみると、GoogleマップのURLの座標は60進数ではなく10進数で表現しなければならないことがわかった。  つまり、GPSモジュールから出力されるNMEA-0183フォーマットの60進数表記の緯度経度座標を、Googleマップ用の10進数表記の緯度経度座標に変換する必要がある。
・みちびき(準天頂衛星システム)とは、準天頂軌道の衛星が主体となって構成されている日本の衛星測位システムのことで、英語ではQZSS(Quasi-Zenith Satellite System)と表記します。
・みちびきは3基打ち上げられていて、2017年に4基目も打ち上げられ。常に日本の上空には2基以上で測位することができるようになって、測位誤差は数cmの精度までになった。
・1PPS (Pulse Per Second) 出力はLED が接続されており、GPS Fix 時には1秒ごとにLEDが点滅します。
・GPS使って位置を知るだけでは寂しい。このGPS モジュールの最大の利点は1PPSです。
 1PPS (Pulse Per Second) 出力はLED が接続されており、GPS Fix 時には1秒ごとにLEDがフラッシュします。
 この1PPSはGPS衛星に搭載されている原子時計と同期しているので正確です。ただし、GPSモジュール内蔵クロックが48MHzなので
 最大42nsぐらいのジッタはありそうです。長い目で見ると原子時計並に正確な1Hzが得られるというものです。
・衛星番号
 みきびき1号 193番  みちびき2号 194番  みちびき3号 ?番 199  みちびき4号 ?番 195
・Lat   / Long


■これから調べること
・NEO-6M は GPS(アメリカ)のみに対応していて、GLONASS (ロシア)やQZSS(日本)は対応していない? 本当か


■参考
http://www.ayomaonline.com/iot/gy-gps6mv2-neo6mv2-neo-6m-gps-module-with-arduino-usb-ttl/    ★/今回NMEA出力した、プログラム、回路図(配線)今回Nanoを使用
https://qiita.com/snumano/items/e03d16e232e4ee1e9d24  配線
http://www2.kaiyodai.ac.jp/~jtahar0/posts/activity9.html  Google mapに表示する方法
http://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html   GPS NMEAデータフォーマット
http://www.spa-japan.co.jp/tech_old/GM38m5.html  GPS NMEAデータ
http://www2.nc-toyama.ac.jp/~mkawai/lecture/radionav/nmea0183.html   GPS NMEAデータ
http://iot.keicode.com/arduino/arduino-gps.php
http://deviceplus.jp/hobby/entry060/     アルディーノ 11,10を使用した コードあり
https://ambidata.io/blog/2017/08/04/gps-2/   ESP8266 ArduinoとGPSモジュールでGPSロガーを作る
https://lowreal.net/2016/02/17/1    ublox NEO-6M GPS Module
http://mcommit.hatenadiary.com/entry/2016/09/07/233816  NMEAセンテンス説明/テラターム設定
https://support.garmin.com/faqSearch/ja-JP/faq/content/8Yi0K3KRw77vBMOP6srxK9  衛星番号 http://www.ne.jp/asahi/nature/kuro/HGPS/principle_gps.htm  衛星番号
http://www.ne.jp/asahi/nature/kuro/HGPS/principle_gps.htm  ★★★GPSの仕組み


nice!(0)  コメント(0) 

RTCモジュールで時計をつくる [Arduino]

■目的
・安価なRTCモジュールをAmazonで購入してみたので、動作検証をおこなう。
 購入モジュールは、DS3231高精度リアルタイムクロックモジュール  232円/個

■環境
・Windows 10 Pro
・OS Ver1709 /ビルド 16299.125
・Arduino IDE 1.●.●
・Arduino(互換)
・Rasbee オリジナル MCUのDC 3.3-5.5V DS3231高精度リアルタイムクロックモジュール 精密RTCモジュール 1個 [並行輸入品]
 (詳細)
  動作電圧: 3.3-5.5V
  材料:PCB;メインカラー:ブルー
  クロックチップ: 高精度クロックチップ DS3231
  プログラマブル方形波出力
 ※https://www.amazon.co.jp/gp/product/B01FWHD7AU/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1

■配線
 ・上図、写真参考 (これkら作成する)
 ・下記のWebより配線、プログラムをダウンロードし実行する
   ※http://programresource.net/2015/04/05/2519.html

■把握したこと
 ・

■調査すること
 ・

■参考
http://programresource.net/2015/04/05/2519.html
http://programresource.net/2015/04/23/2547.html  megaで動作させる方法
https://qiita.com/papuwa/items/4a6ffe92aa6b7a34a6e1  ?

nice!(0)  コメント(0) 

加速度センサー [Arduino]

下記プログラムは、キャリブレーション機能が動作しません。
プログラムのおかしなところをご教授願いたくコメント頂けないでしょうか?
お願い致します。m(__)m



/*
----------<2017.12.03>---------------------------------------------
・File name: _07_LCD_kasokudo.ino
・3軸加速度センサモジュール LIS3DHを用いLCDに傾斜角度を表示する
・PCのシリアルモニタには、ADC値、傾斜角度を表示する。
----------<2017.12.17>-------------------------------------------
・Cal機能追加
-----------------------------------------------------------------
*/
/*
----------------------------------------------------------
LiquidCrystal(rs, enable, d4, d5, d6, d7) 
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) 

rs(レジスタ選択):  LCDのRSピンに接続するArduino側のピン番号♯12 
rw(読み書き):  LCDのRWピンに接続するArduino側のピン番号♯11 
enable(動作起動信号):  LCDのenableピンに接続するArduino側のピン番号♯10 
d0~d7(データ):  LCDのdataピンに接続するArduino側のピン番号 
d0~d3はオプションで、省略すると4本のデータライン(d4~d7)だけで制御します
-------------------------------------------------------------------------
*/

#include   //LCDシリアル通信
LiquidCrystal lcd(12,11,10, 5, 4, 3, 2);  //LCD、アルディーノ接続

const int analogInPinX = A0;    // X軸アナログ入力ピン(定数)
const int analogInPinY = A1;    // Y軸アナログ入力ピン(定数)
const int analogInPinZ = A2;    // Z軸アナログ入力ピン(定数)

static int cal_x=0,cal_y=0,cal_z=0; //cal値

void setup()
{
  lcd.begin(16,2);         //LCDの行と桁数の設定
  Serial.begin(9600);      // シリアルモニタを開始

  pinMode(6,INPUT); 
}

void loop()
{
  int i;
  long x = 0, y = 0, z = 0;    // AD値
  for (i=0; i < 50; i++) {     // 値を50回取得し、平均化する
    x += analogRead(analogInPinX) ; // X軸
    y += analogRead(analogInPinY) ; // Y軸
    z += analogRead(analogInPinZ) ; // Z軸
  }
  x /=  50 ;
  y /=  50 ;
  z /=  50 ;

  int rotateX = (x-277)/2.48 - 90 + cal_x ; //角度を求める式
  int rotateY = (y-277)/2.48 - 90 + cal_y  ;
  int rotateZ = (z-277)/2.48 - 90 + cal_z  ;


  //cal  
  while (digitalRead(6) == LOW) {
  int cal_x = -rotateX ; 
  int cal_y = -rotateY ;
  int cal_z = -rotateZ ;

  int rotateX = rotateX + cal_x ; 
  int rotateY = rotateY + cal_y ;
  int rotateZ = rotateZ + cal_z ; 
  
  }


// PCシリアルモニタ表示 ------------------------------
  Serial.print("X:") ;  
  Serial.print(x) ;
  Serial.print(", ") ;
  Serial.print(rotateX) ;
  Serial.print((char) 223); 
  Serial.print("    Y:") ;
  Serial.print(y) ;
  Serial.print(", ") ;
  Serial.print(rotateY) ;
  Serial.print((char) 223);
  Serial.print("    Z:") ;
  Serial.print(z) ;
  Serial.print(", ") ;
  Serial.print(rotateZ) ;
  Serial.print((char) 223); 
  Serial.println() ;
  delay(500) ;

// LCD表示 --------------------------------------------
  lcd.clear();
  lcd.setCursor(1, 0); //カーソルを1桁、0行目にセット
  lcd.print("X:");     //X傾斜角
//lcd.print(x) ;
//lcd.print(", ") ;
  lcd.print(rotateX) ;
  lcd.print((char) 223); //°表示

  lcd.setCursor(9, 0); //カーソルを7桁、0行目にセット
  lcd.print("Y:") ;    //Y傾斜角
//lcd.print(y) ;
//lcd.print(", ") ;
  lcd.print(rotateY) ;
  lcd.print((char) 223); //°表示

  lcd.setCursor(1, 1); //カーソルを1桁、1行目にセット
  lcd.print("Z:") ;    //Z傾斜角
//lcd.print(z) ;
//lcd.print(", ") ;
  lcd.print(rotateZ) ;
  lcd.print((char) 223); //°表示
  delay(500);

}


nice!(0)  コメント(0) 

アナログ入力ピン [Arduino]

■アナログ入力ピン
<概要>
アナログピンは、analgoRead()関数で電圧値を読み取るためのピンです。
そのピンはADC(アナログデジタル変換)に接続されていおり、10bit(1024階調)の解像度を持っています
よって、アナログピンに最大の5V電圧を加えると、
1単位 5V/1024=4.9mVの階調で読み取ることができます。
 ※最大5Vとなる理由は、アルディーノボートが5Vで動作で
   Atmega内部のADCのVDDも5Vのためです。
また、サンプリングタイムは100usecのスピードであり1秒間に1万回読み取ります。、
(T=1/100usec = 10kHz = 10,000 Hz = 1秒間に1万回)

■サンプル スケッチ



#include   ; シリアル通信を使用するための関数を取り込む

int analgPin = 3;
flote V1=0.0;

void setup()
{
serial.begin(9600);
}
 
viod loop()
{
 V1 = analogRead(analgPin);
 Serial.println(V1,3);
}



※analogReadResolution()関数を使用することで解像度を上げられる
  Arduino 原文:http://daisuki-arduino.com/arduino-analogreference/

analogReference(INTERNAL)
このコマンドで DEFAULTの5Vから
内部基準電圧1.1Vに変わる。

そうすることで、アナログピンに最大の1.1V電圧を加えると、
1単位 1V/1024=1.1mVの階調で読み取ることができます。

----
Arduinoの標準関数
analogRead()
の実行に約100usかかる
---

ADの高速化
https://ameblo.jp/aretaumitohirunosunahama/entry-12014713486.html


タグ:Arduino
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー
- | 次の10件

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。