SSブログ

【2021年年の瀬】今年の総括「新規事業は臥薪嘗胆」! [徒然日記]

もうすぐ2021年も終わろうとしていますが、まったく仕事が納まりません。今年の仕事は今年中に!と気持ちは強く持っているものの、なんとか形になるのが大晦日かなぁ、という感じ。(少なくとも今日中にはムリ)

仕事の合間の気分転換のために、このブログを書いてます。このコロナ禍にもかかわらず仕事があるということは非常にありがたい話なんですけどね。


仕事ではまる2021大晦日.png


問題なのは、仕事のがんばりとは裏腹に、成果がなかなかついてこないことです。苦しいです。会社からの期待はある程度あるのは分かっているので、気持ちは焦るばかりです。まぁ、頑張ったところで結果がついてくるものではないというのはよく分かっていますが。

新規ビジネスというのは、頑張りに比例するものでなく非線形なものというのが持論です。新しいことって受け入れられるまでに相応の時間がかかります。昔、ネットワークサービスを作ったことがあるのですが、サービス開始が1998年で、利益が出始めたのが2002年。

インターネットバブルともてはやされていた時代にもかかわらず事業化まで4年もかかりました。認知されるのに時間がかかったこともありますが、それ以上にサービスや製品が受け入れられる環境が整うのに時間がかかったのが要因です。

最近では、AIやIoTがそれに該当するでしょうか。私もその分野の仕事なので歴史は繰り返すという感じですね。コロナもあったので、インターネットよりも少し歩みが遅い感じがします。でも、今年一年の間に、これらの技術を受け入れられる環境がようやく整ってきたように思います。

来年はビジネスが一気に右肩上がりしますように。という願いを込めて、早く仕事仕上げよ。。。
(´;ω;`)




イラスト図解 スマート工場のしくみ IoT、AI、RPAで変わるモノづくり

イラスト図解 スマート工場のしくみ IoT、AI、RPAで変わるモノづくり

  • 出版社/メーカー: 日本実業出版社
  • 発売日: 2018/08/30
  • メディア: 単行本(ソフトカバー)



IoT・AIの法律と戦略〔第2版〕

IoT・AIの法律と戦略〔第2版〕

  • 出版社/メーカー: 商事法務
  • 発売日: 2019/03/18
  • メディア: 単行本



AI/IoT特許入門~AI/IoT発明の発掘と権利化の勘所~ (現代産業選書―知的財産実務シリーズ)

AI/IoT特許入門~AI/IoT発明の発掘と権利化の勘所~ (現代産業選書―知的財産実務シリーズ)

  • 作者: 英仁, 河野
  • 出版社/メーカー: 経済産業調査会
  • 発売日: 2018/06/15
  • メディア: 単行本



タグ:日常
nice!(14)  コメント(0) 
共通テーマ:趣味・カルチャー

SPRESENSEでジェスチャー使って音楽を操作する「MusicGripper」の裏話 [SPRESENSE]

SPRESENSE の Qiita Advent Calendar のトリとなる記事をあげることができました。SPRESENSEと六軸センサーで傾きを検出して、音楽のボリュームと再生速度を操作するその名も「MusicGripper」です。




実は、もともとはSPRESENSEを使ったスマートグラスのようなものを作りたいと思っていましたが、0.96インチの液晶ディスプレイが、SPRESENSEで何をやっても動かない。簡単に動くと思ったのですがこれは大誤算。






レンズや鏡も準備していたのですが、これは困った。動かない原因はおいおい調べるとして、Advent Calendar のトリとしては立派なコンテンツをあげたいところ。このままでは間に合いません。

いろいろ考えた結果、前からアイディアとしてあたためていたジェスチャーで音楽を操作することを試してみることにしました。

しかし、順調にものごとが進むことは稀で、ここでもいくつかの壁がありました。一つ目はBLEと音楽再生の平行処理です。BLEの接続は前から調べていたのでなんとかなりますが、今回は音楽再生とBLE受信の平行処理をしなければなりません。

いろいろ検討したのですが、さすがPythonです。ここは ”Threading” というテクニックを使って解決しました。Pythonは正直苦手なんですが、これは直感的で使いやすいですね。


import time
import threading

n = 0
def func1():
   global n
   while n < 10:
     print ('hello')
     time.sleep(0.5)

thread1 = threading.Thread(target=func1)
thread1.start()
while n < 10:
  n = n+1
  print('n='+str(n))
  time.sleep(1)
thread1.join()



二番目に苦労したのが、再生速度を変える方法です。これがかなり面倒くさい。再生速度を早くするには、オリジナルの音源のサンプル数を間引きしてプレーヤーに渡す必要があります。一方で、再生速度を遅くするにはサンプルの間を補間する必要があります。

聞くだけでも面倒な処理ですが、ここもPythonの数値ライブラリが活躍してくれました。これらの話を、今後このブログでしていきたいと思います。




SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



Prament BMI160 モジュール 6DOF 6 軸角速度ジャイロ + 重力加速度センサ IICSPI

Prament BMI160 モジュール 6DOF 6 軸角速度ジャイロ + 重力加速度センサ IICSPI

  • 出版社/メーカー: Prament
  • メディア: エレクトロニクス



nice!(18)  コメント(0) 
共通テーマ:趣味・カルチャー

Qiita投稿第三回目!音響通信についてのまとめ [徒然日記]

三度目のQiita投稿をしました。今年はじめにかなり苦労したSPRESENSEの音響通信のまとめ記事です。





この音響通信の記事は苦労したわりにはあまり反響がなかったのですよね。音で通信できるって省電力だし、安い部品で実現できるので、個人的には結構いいよなと思っているのですが。

今回は独自に実装したのですが、できればオープンソースと足並みを揃えたいところ。minimodemはどうだろうか?と思っているのですが、いかんせん実装がLinux前提となっているので少し難しそう。

誤り訂正など、まだまだ足りないところがあるので、少しずつ成長をさせていきたいと思っています。願わくば、オーディオ機能をサブコアで動かせるようにしたいと思っています。(できるのかな?)そうすればTXとRXを別々に実装できるので非常に効率よく通信ができます。

趣味でやっていることなので、個人的な研究材料として、ゆっくりゆったりと少しずつ機能向上をさせていきたいと思います。(^^)/~



SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



SONY SPRESENSE 拡張ボード CXD5602PWBEXT1

SONY SPRESENSE 拡張ボード CXD5602PWBEXT1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



SPRESENSE用 マイクキット Mic&LCD KIT

SPRESENSE用 マイクキット Mic&LCD KIT

  • 出版社/メーカー: モノパ!
  • メディア: エレクトロニクス



タグ:Spresense Modem
nice!(17)  コメント(0) 
共通テーマ:趣味・カルチャー

SPRESENSE/Arduino でAVI動画を記録 [SPRESENSE]

Qiita投稿2回目です。クリスマスまでいくつ記事がかけるかな??今回は、SPRESENSEやArduinoでAVI動画を記録するライブラリを作ってみました。ここで紹介するサンプルはSPRESENSE用ですが、ライブラリそのものはJPEG画像さえ入手できればArduinoでも使えるように設計しています。


s_github.png YoshinoTaro/AviLibrary_Arduino

Contribute to YoshinoTaro/AviLibrary_Arduino development by creating an account on GitHub. github.com





SPRESENSEやArduinoなどの省電力のボードマイコンはカメラ用のISPが内蔵されていないので動画を撮影することはできません。でも、SPRESENSEのカメラのようにカメラモジュールがJPEG出力している場合は、Motion JPEG(AVI)で動画を簡単に記録できます。


void setup() {
  Serial.begin(115200);
  theCamera.begin();
  while (!theSD.begin()) { Serial.println("insert SD card"); }

  // Setup the still picture parameters of Spresense Camera
  // The image format must be JPEG
  theCamera.setStillPictureImageFormat(
     CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V, CAM_IMAGE_PIX_FMT_JPG);

  theSD.remove(filename);
  aviFile = theSD.open(filename, FILE_WRITE);

  // Initialize AVI library
  theAvi.begin(aviFile, CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V);
  theAvi.startRecording();
}

void loop() {
  static uint32_t start_time = millis();
  CamImage img = theCamera.takePicture();

  // Add a frame. The image format must be JPEG
  theAvi.addFrame(img.getImgBuff(), img.getImgSize());

  uint32_t duration = millis() - start_time;
  if (duration > recording_time_in_ms) {
    // Stop AVI library
    theAvi.endRecording();
    theAvi.end();
    theCamera.end();
    while (true) {}
  }
}



このライブラリは実時間で記録することもできますが、FPSを指定して再生速度を指定することができます。特にタイムラプスの使用を想定しているので、数分毎に撮影した画像を指定したFPSで再生することができます。

void setup() {
  Serial.begin(115200);
  theCamera.begin();
  while (!theSD.begin()) { Serial.println("insert SD card"); }

  // Setup the still picture parameters of Spresense Camera
  // The image format must be JPEG
  theCamera.setStillPictureImageFormat(
     CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V, CAM_IMAGE_PIX_FMT_JPG);

  theSD.remove(filename);
  aviFile = theSD.open(filename, FILE_WRITE);

  // Initialize AVI library
  theAvi.begin(aviFile, CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V);
  // Start the timelapse specifying fps
  theAvi.startTimelapse(target_fps);
}

void loop() {
  static uint32_t start_time = millis();
  CamImage img = theCamera.takePicture();
  // Add a timelapse frame. The image format must be JPEG
  theAvi.addTimelapseFrame(img.getImgBuff(), img.getImgSize());

  uint32_t duration = millis() - start_time;
  if (duration > recording_time_in_ms) {
    // Stop AVI library
    theAvi.endTimelapse();
    theAvi.end();
    theCamera.end();
    while (true) {}
  }
}


特にSPRESENSEの場合は、低消費電力で動かすことができるので、数分おきに起動して撮影を繰り返すことでバッテリーでも長時間撮影が可能です。省電力カメラのサンプルも用意しています。夜空の撮影や、旅程の記録、自宅の監視用にぜひぞうぞ。

void setup() {
  // Initialize LowPower Library
  LowPower.begin();
  RTC.begin();

  // get boot cause to check whether this boot is caused by the alarm
  bootcause_e bc = LowPower.bootCause();

  Serial.begin(115200);
  theCamera.begin();
  while (!theSD.begin()) { Serial.println("insert SD card"); }

  // Setup the still picture parameters of Spresense Camera
  // The image format must be JPEG
  theCamera.setStillPictureImageFormat(
     CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V, CAM_IMAGE_PIX_FMT_JPG);

  // In the case of power on / reset, the parameters are set to the initial value.
  if (bc != DEEP_RTC && bc != DEEP_OTHERS) {
    theSD.remove(filename);
    rec_frame = 0;
    movi_size = 0;
    file_size = 0; 
  } else {
    EEPROM.get(rec_frame_address, rec_frame);  // memory the recorded frame count
    EEPROM.get(movi_size_address, movi_size);  // memory the size of the video
    EEPROM.get(file_size_address, file_size);  // memory the file size
  }

  aviFile = theSD.open(filename, FILE_WRITE);

  // Initialize AVI library
  theAvi.begin(aviFile, CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V);
  // set parameters got from EEPROM
  theAvi.setTotalFrame(rec_frame);
  theAvi.setFileSize(file_size);
  theAvi.setMovieSize(movi_size); 
  // Start the timelapse specifying fps
  theAvi.startTimelapse(target_fps);
}

void loop() {
  CamImage img = theCamera.takePicture();
  // Add a timelapse frame. The image format must be JPEG
  theAvi.addTimelapseFrame(img.getImgBuff(), img.getImgSize());
  // end the recording immediately
  theAvi.endTimelapse();
  theAvi.end();
  theCamera.end();

  // memory the updated parameters
  EEPROM.put(rec_frame_address, theAvi.getTotalFrame());
  EEPROM.put(movi_size_address, theAvi.getMovieSize());
  EEPROM.put(file_size_address, theAvi.getFileSize());

  // finish the task when the total frame is over the specified number
  if (theAvi.getTotalFrame() > recording_total_frames) {
    while (true) {}
  }
  // power off until  the time specified by sleep_time
  LowPower.deepSleep(sleep_time);
}




SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



SONY SPRESENSE カメラモジュール CXD5602PWBCAM1

SONY SPRESENSE カメラモジュール CXD5602PWBCAM1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



SONY SPRESENSE 拡張ボード CXD5602PWBEXT1

SONY SPRESENSE 拡張ボード CXD5602PWBEXT1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



タグ:Spresense
nice!(20)  コメント(0) 
共通テーマ:趣味・カルチャー

Qiita に記事を初投稿してみました! [徒然日記]

「Qiita」という技術情報共有サイトがあります。エンジニアならしらない人はいないというぐらい有名なサイトで、前から気になっていたのですが、内弁慶な私はなかなかデビューできず。

Qiitaとは
Qiita.png

その Qiita がクリスマスに向けて Advent Calendar なるもイベントをやっていることを発見。クリスマスまでテーマについて、誰かが入れ替わりで技術記事を投稿するというものです。


qiita_adventcalender.png


SPRESENSE応援団長(仮)を自負しているからには、SPRESENSEについてなにか投稿せんといかんだろ!ということで初投稿しました!



SPRESENSEの情報についてまとめた内容です。自分なりには割ときちんとした内容になったなと思っていますので、ご一読いただければ嬉しいです!

このあとクリスマスまでに記事を3本ほど投稿をしてみようと思っています!( ー`дー´)q






タグ:Qiita
nice!(20)  コメント(0) 
共通テーマ:趣味・カルチャー

安定化電源が壊れた(:_;) [徒然日記]

だいたい6年前くらいに購入した中華製安定化電源が壊れてしまいました。日頃からバッテリーものをよく扱うので、それほど安定化電源の稼働率は高くなかったですが、それでも6年も動いていたのは立派です。


sDSC02326.jpg


スイッチが入らなかったり、入っても切ることができなかったりと、どうもスイッチ部分がバカになった模様。中を見ても電子部品は問題はなさそう。直してもよいのですが、放っておくと徐々に電圧が下がる品質イマイチの電源だったので、良い機会なので廃棄しようと思います。


sDSC02334.jpg


6年経って安定化電源の選択肢も広がっていると思うので、自分へのクリスマスプレゼントとして新しく購入したいと思います。今の候補は次のものですが、どうなんだろう?安いし評判も悪くなさそう。もう少し調べて決めたいと思います。





タグ:安定化電源
nice!(17)  コメント(0) 
共通テーマ:趣味・カルチャー

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