2020年02月

ARゴーグルを作りたい話3

 最近なんとなく作っているARグラスの新型ができたので書きます。

ab58m-igftm
a5s3u-qio8s
ajukv-llh3f

 こんな感じです。メガネはダイソーで売ってるサングラスで、それに外付けのモジュールを付けました。細い方の筒の中は空で、ここを縮めることはできるのですが、家にある設備で切れるレンズがシートレンズしかなく、それだと焦点距離が伸びないのでしょうがなく長くなっています。また、LCD-反射板間の距離が長くなってしまったので全体的に像が暗くなってしまいました。


aqw3p-mi7xb

 内容物はこんな感じです。今回から表示したい文字をシリアル通信で送れるようにしたのでArduino nanoのほかにXBeeも積んでいます。今回はやりませんでしたが、いろいろな荒業を使えば電装の機構の体積は半減させることができます。まあ、今回使ったリポバッテリーは↓なのですが、こんなに容量はいらないので、もっと小さいものがあれば小型化できます。


 これらのことから、全力で小型化すれば細い方の筒の容量だけで実現できる気がします。まあ、やる気は起きませんが。次やるときはそもそもARじゃなくて普通に視界の一部分をふさいで表示しようと思います。普通に薄くて見にくいし、そもそも自分が見ている深度とARグラスに表示しているものの深度が違えばどうせ水晶体でピント調節しないといけないしであまり利点がないと思うっからです。

 技術的なことを言えば今回は下図のようにArduino-XBee-XBee-Arduino-LCDという風にデータを送り表示しています。これは、将来を見越してセンサーの値とかを送れるようにするのと、ワイヤレスが条件だったのでこうなりました。
Untitled Diagram
 いつもの通りプログラムは下に書いときます。今回のプログラムは過去作品の寄せ集めですが、SPIとハードウェアシリアル通信をやっているのでそこだけひねってあります。

 これを作っている間にTsukubaMiniMakerFaireにお手伝いに行って色々見てきたのでいろいろ作ろうと思います。それではまた今度。

送信側
int LED = 13;
int count = 0;
String s1 = "   Hello";//ここに表示したい文字
String s2 = "   World";

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  count++;
  Serial.write(count);
  if ((count % 2) == 1) {
    digitalWrite(LED, HIGH);
    Serial.write('$');
    Serial.write(s1.length());
    for (int i = 0; i < s1.length(); i++) {
      Serial.write(s1.charAt(i));
    }
  } else {
    digitalWrite(LED, LOW);
    Serial.write('$');
    Serial.write(s2.length());
    for (int i = 0; i < s2.length(); i++) {
      Serial.write(s2.charAt(i));
    }
  }
  delay(50000);
}
受信側
int LED = 13;
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>             // Arduino SPI library#include <Adafruit_GFX.h>    // Core graphics library

// ST7789 TFT module connections
#define TFT_CS    10  // define chip select pin
#define TFT_DC     9  // define data/command pin
#define TFT_RST    8  // define reset pin, or set to -1 and connect to Arduino RESET pin

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.read() == '$') {
    int i = Serial.read();
    char s[i];
    for (int c; c < i; c++) {
      s[c] = Serial.read();
    }
    tft.init(240, 240, SPI_MODE2);
    tft.setTextColor(ST77XX_WHITE);
    tft.setRotation(0);
    tft.fillScreen(ST77XX_BLACK);
    tft.setTextSize(4);
    tft.setCursor(0, 0);
    for (int c; c < i; c++) {
      tft.print(s[c]);
      Serial.print(s[c]);
    }
    tft.println("");
    SPI.end();
  }
  delay(10);
}

ARゴーグルを自作したい話2

 前回作ったときにいろいろ思うところがあったので作り直してみました。ただ、今回のにも課題があるのですぐ作り直すと思います。

 前回の課題として、重い、バンドで固定しないといけない、表示が面倒というものがありました。特に三個めが顕著で、一回反射の像を見ることになっていたので、左右が反転してしまっていました。そのため表示したいものは左右反転画像を用意してやってそれを表示していました。これではシステムの冗長性が一切確保できないので、これを解決するために二回反射するものを作りました。

 そんなこんなで、今回はArduino LCDぐらいで簡単にできるものを目指しました。 Untitled Diagram
 いつも出てくる適当模式図です。二回反射させることで反転しません。またLCDはこの間使ったやつを使っています。このLCDはドライバが面倒だけど図形とか文字とか表示できるのでとっても便利です。
 あと今回鏡はPカッターじゃ切れないことが分かったのでガラスカッターを買いました。めっちゃきれいにガラスが切れるので最初から使えばよかったと思いました。


 まず、3Dモデルで適当に作って印刷して組み立ててのトライ&エラーを繰り返します。
 それでできた3Dモデルはこちらです。1
2
 パソコン上で見るとなんかスタイリッシュに見えなくもないので騙されてました。
 実際に組み立てるとこうなります。aott3-qy9zq
awtyp-08b5d
 なんか違う感じがするのがわかるでしょうか?アクリル板の正面にちょうど目が来るので、本体が頬の横に来ます。そうすると正面からのシルエットも相まって面白眼鏡にしか見えません。まあ、写りは下のように悪くないです。
ao640-skvnt

 こんなんで映す方法はいいんですけどデザインがいまいちなので、ver3を作ります。モーターが届いたので自転車も作りたいです。それではまた今度。

AliExpressaから荷物が届いた話。

AliExpressに頼んでいた荷物が届いていたので、その時にやったやり方を書いていこうと思います。

①会員登録
 トップページを開き、右上のsigh inと書かれたら辺にカーソルを合わせるとウィンドウが出てくるので、sign inを押します。するとページが変わり、Quick accessにツイッターのアイコンがあるのでそこを押します。(自分はツイッターでアカウントを作りましたが、それ以外でも問題なくできると思います。)そうすると、アプリ認証のページに飛ぶのでそこで認証すれば登録完了です。

②設定1
 デフォルトだと、値段がUS$になっていて分かりにくいのでこれを変更していきます。まあ特に難しくなく、右上のShip to/JPYというところをクリックして、出てきたCurrencyの中から選ぶだけです。

③買い物
 お買い物の方法はアマゾンと一緒で、適当に検索したりカテゴリーから検索したりします。いい感じに日本語に機械翻訳されているので、特に不自由はないと思います。ほしい商品があったら、色とか、素材とか、どこの倉庫から送るかとか、数量とかを入力し、カートに追加していきます。送り主の倉庫がいくつかある場合、その場所によって値段が違ったりするので気を付けてください。

 買いたいものがすべて決まったらカートに移動します。カートの中の欲しいものを選択していくとそれを買うものという扱いになり、右にその分の合計金額が表示されていきます。なお、ここで選択しなかったものは買えないので注意してください。そして、購入というボタンを押すと購入できます。この時に配送先と支払方法を決めないといけないのですが、そこそこめんどくさいので別の項で説明します。

④送り先
 海外のサイトなので送り先の丹生力が日本と違い分かりにくいです。キャプチャ
 この画面を埋めていく必要があるのでそれぞれの行ごとに説明していきます。全体を通して、Japan以降の住所は日本郵政がわかれば問題ないので、多少おかしくても多分届きます。読むのがめんどくさい人は下の完成例を参考に入力してください。
  • 1行目...名前と携帯番号です。名前は姓名どういう順番でも日本郵政が理解できる形なら大丈夫です。次に携帯番号ですが、080,090,070の一番先頭の0を消し、80,90,70という風に書き始め、あとは普通に入力します。
  • 2行目...streetには、何丁目何番何号、町名を入力していきます。皇居で例えると千代田1-1の部分です。これは、数字→町名の順番で入力します。また、右のApartment,Unit,etcにはその名の通りマンション名とか部屋番号とかを入れていきます。部屋番号は#○○○みたいな感じで入力しとくと言いそうです。
  • 3行目...ここは書いてあることそのまま国,都道府県,市区町村を入力していきます。皇居で言う、東京都千代田区の部分です。
  • 4行目郵便番号です。
 これを入力するとこのようになります。保存しておきたいはチェックマークにチェックしておくと保存できます。

キャプチャ2


⑤支払方法
 だいたいの人はクレジットカード払いをすると思います。その人は普通にカード番号とカード名義と有効期限とセキュリティーコードを入力するだけです。

 ただ、クレジットカード情報を中国企業に渡したくないという人もいると思います。AliExpressでクレジットカード情報が盗まれたみたいな話は聞いたことがありませんが、まあそれでも不安な人はVプリカを使うといいと思います。これは、VISAがやっているプリペイドカードで、ネットで簡単に課金ができるうえに、これ本体はただのプリペイドカードなので課金した金額以上は絶対に使えないのでもし何かあっても被害があまりないという優れものです。
 何年か前までクレジットカードを持ってない未成年がMinecraftを買うにはこれをコンビニで買うしかなかったので、使ったことがある人もいるかもしれません。
 Vプリカのサイトは普通のサイトなので普通に使えると思います。それでもできなかったときはFAQでも読んでくだしあ。
 Vプリカはクレジットカード名? を自分で決めるのですが、これを入力するとき最初の一文字の後スペースを入れて疑似的に姓名っぽくすると認証される必要があります。


 まあそんなこんなで注文すると業者にもよりますがそこそこの日数で届きます。私は1/29に注文したもののうち一つは届きましたが、もう一つはまだ届いていません。荷物が届かないこともなくはないらしいですが、その時は運営に連絡すると返金してくれるようです。というのも、荷物が客のところに届いたのが確認されるまではお金は運営一時的に預かっているという扱いになるらしく、AliExpressの注文履歴から届いたということを入力しない限り業者にお金が払われないようです。それなので荷物が届いたらなるべく早く注文履歴から荷物が届いたことを報告してあげてください。

 そんなこんなで無事に中国から荷物が送られてきました。
IMG_2095IMG_2094

 Amazonで買った時も思いましたが、中国から贈られてくるものは基本的に梱包が雑です。以前モーターを買ったときは、プチプチシートで包んだ生身のモーターが送られてきたのですが、これを運んでくれる日本郵政ってすごいんだなぁと思います。

 今回はこれで終わりです。ARゴーグルもどきのver2ができているのでそのことも近く記事にすると思います。それではまた今度。

ソレノイドで星形5気筒エンジンを作った話

 なんとなくソレノイドを使ってエンジンを作ることにしました。
 実用性は求めていないので、見た目的に美しく構造も簡単な星形エンジンにすることにしました。

 まず、星形エンジンを作るにあたって、Fusionでモデルを作ってシミュレーションしてみました。
 それがこちらです。なんか適当に作っても回る気がしてきました。

 これを実際に印刷して動くようにするのはめんどくさいので、あくまで参考にしつつ3Dプリントしてきちんと動くようにしていきます。この作業はまあまあめんどくさく、例えばM2のビスを通すときの穴の大きさは2.6mmだったり、520ベアリングがはまる穴の大きさは5.4mmだったりするのを経験則であてはめながらモデルを作っていきます。

 キャプチャ

 いい感じにビス頭とかの空間を開けつついい簡易に干渉しないように作っていきます。めんどくさいのでベアリングやビスは作りませんし、設計段階でソレノイドの正確な位置を決めるのもぶっちゃけめン独裁のでいい感じにレールだけ作っておきます。

 これを3Dプリンタで印刷して、組み立てて、適当に回路を組み、プログラムも適当に描くと動きました。
 なんかかくかく言っているのでプログラムの回転数を小さくしてみるといい感じになりました。


 配線の具合を整えたらこんな感じになります。apxl8-zesbz

 見た目もきれいですし、見ていて楽しいので昨日から意味もなく机の上で回したりしています。

 最近ガラスカッターを買って、100均の鏡が簡単に切れるようになったので、ARデバイスver2の開発をしています。春休みは、台湾に短期留学するのとTMMFに呼ばれている以外絶妙に暇なので、来週中にも完成させてブログに書けるぐらいまで進めたいと思います。それではまた今度。

1.3インチ SPI LCDディスプレイ(CSなし)を使ってみた話。

 アマゾンで買ったIPSパネルのLCD(SPI通信なのにCSがないやつ)を動かしたのでその方法です。ちなみに同じディスプレイがアマゾン以外でも売っているらしいです。
 ちなみに買ったディスプレイは↓です。


 そもそも、この商品ページがクッソわかりずらい上に、通常のライブラリはCSがあるものとしてできているので、配線をしても普通のライブラリのサンプルそのままでは動きません。また、結構マイナーなものらしく、日本語で使い方を解説しているところが見つかりませんでした。
 なのでその使い方です。

①配線
ディスプレイ:Arduino(UNO)
GND  : GND
VCC : 3.3V(5V)
SCL : 13pin
SDA : 11pin
RES : 8pin
DC : 9pin
です。プログラムをいじれば13,11ピンはArduinoに元からついているSCL,SDA(A5,A4)に変えることもできます。むしろそうした方が速度は速いです。

②ライブラリ
 IDEを開いて、"スケッチ"->"ライブラリをインクルード"->"ライブラリを管理"
と進んで検索ウィンドウを出します。
そこで"Adafruit GFX graphics"と検索して一番上に出てくるものと"Adafruit ST7789"と検索して出てくるものをインストールします。

③コード
 ここ(https://github.com/jumejume1/tft240x240-spi)からダウンロードして、中の.inoを実行します。そうするとIDEが開かれるのでそのまま書き込めばOKです。

 そうやるとこのように表示されるはずです。 このモジュールは3.3V対応のはずですが、5Vで通信できます。毎度のこと気になる方は抵抗を直列つなぎにするといいと思います。

 今回はここまでです。千石にソレノイドを頼んだんですが、在庫がないらしくて時間がかかるようです。それまで気長に待とうと思います。それではまた今度。
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

読者登録
LINE読者登録QRコード