編集履歴一覧に戻る
TentoBugのアイコン画像

TentoBug が 2025年01月05日19時07分19秒 に編集

コメント無し

タイトルの変更

-

SPRESENSEで方位?を表示・・・。

+

SPRESENSEでv=rω・・・。

本文の変更

# はじめに

-

 2日目で挫折しそうになったで、文字化することにしました。

+

 2日目で挫折しそうになったで、文字化することにしました。やりたいことは、大昔に勉強しました。

-

# 経過 1日目 1. チュートリアルにある動画で学ぶを視聴しました。 2. 開発環境のセットアッでき、LEDも点灯はできした。

+

等速円運動の大きさ $v =r \omega$ 加速度の大きさ   $a =$ 向心力       $F =ma$ ![キャションを入力できす](https://camo.elchika.com/31dcdfc1a5e16002d9b0c6cc6992b20cf8108eb6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f34353038373066372d623831362d343136312d613561642d643338663862353230303634/)

-

2日目 1. LCDをつけてSPIのサンプルプログラムを動かそうと思ったのですが、真っ黒。 2. 部品を外して配線だけ残して、LEDを2つつけました。 3. A3というのはDAでなくADということが分かりました。 4. Lチカと関数ポインタを利用して明るく暗くなりを繰り返します。  1週間目 1. SPIをあきらめてI2Cの設定をしました。 2. Arduino IDEのスケッチ例にあるgnssを改造してLCDに方位を表示するようにしました。

# 部品 || 部品 | 備考(敬称略) | |:---:|:---:|:---:| |U1、U3| SPRESENSE | | |U2| MM-TXS01 | サンハヤト | |U4| AE-AQM0802 | 秋月電子通商 | |D1| LED(赤) | | |D2| LED(黄) | | # 設計図

-

![キャプションを入力できます](https://camo.elchika.com/36eb558694b1011592a3598dcfed203b30b98873/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f39336436353030382d353535312d343935662d383132662d366664613937323735666162/)

+

![キャプションを入力できます](https://camo.elchika.com/805aaba6b6db8c6fc4d7b75618869faa51f9a5c2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f62663533343334612d636439362d346661342d613531652d613838393166306631393362/) ![キャプションを入力できます](https://camo.elchika.com/24376f4792d35dfc8b0ac659bb2106ca3a98e71e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f64623136613234302d313762352d346235332d613336632d386566316334343732623634/)

# ソースコード ```arduino:実験中

-

#include <SFE_BMP180.h>

#include <time.h> #include <FFT.h> #include <GNSS.h> #include <Wire.h>/* I2C*/ #include <Flash.h> #include <File.h> #define STRING_BUFFER_SIZE 128 /**< %Buffer size */ static SpGnss Gnss; /**< SpGnss object */

+

int duty=0; File FlashFile;

-

int duty=0;

unsigned int warikomi(void){ digitalWrite(PIN_D22, HIGH); delayMicroseconds(duty); digitalWrite(PIN_D22, LOW); delayMicroseconds(500-duty); return 500; }

+

void lcdClear(){ char command[]={0x38,0x01}; Wire.beginTransmission(0x3E); Wire.write(command,2); Wire.endTransmission(); delay(200); } void lcd1(char* StringBuffer){ Wire.beginTransmission(0x3E); Wire.write(0x00); Wire.write(0x80); Wire.endTransmission(); delay(1); Wire.beginTransmission(0x3E); Wire.write(0x40); Wire.write(StringBuffer,8); Wire.endTransmission(); delay(1); } void lcd2(char* StringBuffer){ Wire.beginTransmission(0x3E); Wire.write(0x00); Wire.write(0x80+0x40); Wire.endTransmission(); delay(1); Wire.beginTransmission(0x3E); Wire.write(0x40); Wire.write(StringBuffer,7); Wire.endTransmission(); delay(1); }

void setup() {

+

char StringBuffer[STRING_BUFFER_SIZE];

/* ポートの設定 */

+

pinMode(PIN_D02, OUTPUT); pinMode(PIN_D22, OUTPUT);

pinMode(PIN_D23, OUTPUT);

-

pinMode(PIN_D22, OUTPUT);

+

pinMode(PIN_D16, INPUT_PULLDOWN); pinMode(PIN_D17, INPUT_PULLDOWN);

/* シリアル通信設定 */ Serial.begin(115200); sleep(3); attachTimerInterrupt(warikomi,500);//us /*LCDモジュール初期化*/ int i=0;

-

char command[]={0x38,0x39,0x14,0x70,0x56,0x6C,0x38,0x0C,0x01};

+

char command[]={0x38,0x39,0x14,0x70,0x56,0x6C,0x38,0x0C,0x01}; digitalWrite(PIN_D02, LOW); delay(200); digitalWrite(PIN_D02, HIGH);

Wire.begin();

-

+

delay(200);

Wire.beginTransmission(0x3E); Wire.write(command,9); Wire.endTransmission(); delay(200);

-

Wire.beginTransmission(0x3E); Wire.write(0x40); Wire.write(0x31); Wire.endTransmission(); delay(200);

+

snprintf(StringBuffer, STRING_BUFFER_SIZE, "setup "); lcd1(StringBuffer);

/* Set serial baudrate. */ Serial.begin(115200); /* Set Debug mode to Info */ Gnss.setDebugMode(PrintInfo); //Gnss.setInterval(SpInterval_1Hz); int result; /* Activate GNSS device */ result = Gnss.begin(); Gnss.select(QZ_L1S); Gnss.select(QZ_L1CA); Gnss.select(GPS); /* Start positioning */ result = Gnss.start(COLD_START); }

-

static void print_pos(SpNavData *pNavData)

+

static void print_0(SpNavData *pNavData)

{ char StringBuffer[STRING_BUFFER_SIZE]; struct tm now; int e=0; /* 日本時間の設定 日付?*/ now.tm_year =pNavData->time.year; now.tm_mon =pNavData->time.month; now.tm_mday =pNavData->time.day; now.tm_hour =pNavData->time.hour+9; now.tm_min =pNavData->time.minute; now.tm_sec =pNavData->time.sec; //mktime(&now); snprintf(StringBuffer, STRING_BUFFER_SIZE, "%02d:%02d:%02d,%f,%3.3f,%d", now.tm_hour,// pNavData->time.minute, pNavData->time.sec, pNavData->direction, pNavData->velocity, //速さ duty ); Serial.print(StringBuffer); Serial.println(""); /* LCD2行目 */ snprintf(StringBuffer, STRING_BUFFER_SIZE, "%2d %3.2f", pNavData->numSatellites, pNavData->direction);

-

Wire.beginTransmission(0x3E); Wire.write(0x00); Wire.write(0x80+0x40); Wire.endTransmission(); delay(1); Wire.beginTransmission(0x3E); Wire.write(0x40); Wire.write(StringBuffer,7); Wire.endTransmission(); delay(1);

+

lcd2(StringBuffer);

/* LCD1行目 */

-

Wire.beginTransmission(0x3E); Wire.write(0x00); Wire.write(0x80); Wire.endTransmission(); delay(1); Wire.beginTransmission(0x3E); Wire.write(0x40);

snprintf(StringBuffer, STRING_BUFFER_SIZE, "%02d:%02d:%02d", now.tm_hour,// pNavData->time.minute, pNavData->time.sec);

-

Wire.write(StringBuffer,8); Wire.endTransmission(); delay(1);

+

lcd1(StringBuffer);

}

+

static void print_1(SpNavData *pNavData) { char StringBuffer[STRING_BUFFER_SIZE]; struct tm now; int e=0; /* 日本時間の設定 日付?*/ now.tm_year =pNavData->time.year; now.tm_mon =pNavData->time.month; now.tm_mday =pNavData->time.day; now.tm_hour =pNavData->time.hour+9; now.tm_min =pNavData->time.minute; now.tm_sec =pNavData->time.sec; snprintf(StringBuffer, STRING_BUFFER_SIZE, "%02d %02d %2d", pNavData->time.minute, pNavData->time.sec, pNavData->numSatellites ); /* LCD1行目 */ lcd1(StringBuffer); if (pNavData->posDataExist == 1){ snprintf(StringBuffer, STRING_BUFFER_SIZE, "%02d:%02d:%02d,%3.3f,%3.3f,%d", now.tm_hour,// pNavData->time.minute, pNavData->time.sec, pNavData->direction,//角度 pNavData->velocity, //速さ pNavData->numSatellites//衛星 ); Serial.print(StringBuffer); Serial.println(""); //Flash.begin(); File f=Flash.open("shimako/data.csv",FILE_WRITE); f.println(StringBuffer); f.close(); /* LCD2行目 */ snprintf(StringBuffer, STRING_BUFFER_SIZE, " go "); lcd2(StringBuffer); }else{ snprintf(StringBuffer, STRING_BUFFER_SIZE, "wait...."); lcd2(StringBuffer); } } /* ファイルの読み込んで送信 */ void r() { lcdClear(); lcd1("r "); FlashFile = Flash.open("shimako/data.csv"); if (FlashFile) { Serial.println("data.csv"); while (FlashFile.available()) { Serial.write(FlashFile.read()); } Serial.print("\r\n"); //受け側による。タイムアウト・・・。 FlashFile.close(); } else { /* ファイルがない時 */ Serial.println("error"); } } /* ? */ void d(){ lcdClear(); lcd1("d "); Serial.println("filepath"); String filepath; Flash.exists(filepath); Serial.println(filepath); } /* 初期化 */ void f(){ lcdClear(); lcd1("f "); Serial.println("format"); Flash.format(); Flash.mkdir("shimako/"); Serial.println("good"); }

int ad=0; int hugo=1; SpNavData NavData; void loop() {

+

int sw=digitalRead(PIN_D16)+2*digitalRead(PIN_D17);

if(duty>499){ hugo=-1; }else{ if(duty<1)hugo=1; }

-

duty+=hugo; //??日目 LCDへ方位を表示 FF /* Check update. */ if (Gnss.waitUpdate(-1)){ Gnss.getNavData(&NavData); print_pos(&NavData);

+

//メニュー switch (sw){ case 0: Gnss.getNavData(&NavData); print_0(&NavData); break; case 1: Gnss.getNavData(&NavData); print_1(&NavData); break; case 2: unsigned int SelialCom; //lcdClear(); lcd1("r f d "); lcd2(" "); SelialCom=Serial.read(); switch(SelialCom){ case 'r': r(); break; case 'f': f(); break; case 'd': d(); break; } break;

} } ``` # 考察

-

1. 同じ場所グルグルっても方を示す数値がおかよう気がしました。 2. 電池にして屋外へ行くと緯度や経度が変わったら変わような気がしてきたですが、どうろう 3. LEDが変化していないな・・・。 ![キャプションを入力できます](https://camo.elchika.com/feac7794847925d70a5a10e47f26cf080b147e76/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f65666562313234342d313261372d346661632d393065372d383464343061393865386431/)

+

1. グラフは、青が角度橙が速度で灰色が衛星の数。右り?と左回り?を30秒た結果で、v=1.5m/sぐらのかな。 2. 腕が70cmでr=0.7、$\omega$は・・・・。で求め角度で・・・。なんか中途半端に終わりました。 2. LEDが変化していないな・・・。 ![キャプションを入力できます](https://camo.elchika.com/6158ee75f7557ae7da7e64c27632e6997bebc5a2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f37643265636338382d383064332d343862322d623565652d323835333931303964306433/)

# 参考 [https://elchika.com/promotion/spresense2024/library/#nav](https://elchika.com/promotion/spresense2024/library/#nav) [https://developer.sony.com/spresense/development-guides/arduino_developer_guide_ja.html#_signalprocessing_%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA](https://developer.sony.com/spresense/development-guides/arduino_developer_guide_ja.html#_signalprocessing_%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA)