誰でもできる電子工作・プログラミング趣味ブログ

電子工作とプログラミングを趣味にする人口を増やすため、
誰でもできる電子工作とプログラミングを紹介します。

BBCが研究する速読技術の紹介

2018年08月17日 | ニュース
BBCで実に興味深い実験が行われていたので紹介します。
実際の原文は以下のリンクから(英文です)
http://www.bbc.co.uk/blogs/internet/entries/13e78bfb-ba62-4e93-a30f-33c69963267a


文章を読む時、人は上下左右に視点を移動しますよね?
BBCが研究する手法では、この文章を読む際の視点移動する"時間ロスを無くす"方法です。

具体的な内容としては、文章を細かく区切った言葉(英語だと単語)を同じ場所へ
パラパラ漫画のように短時間で切り替えて表示する手法。

視点は一点を凝視することになるので、視点移動は不要となり、
文章を読むスピードが上がるとの理屈。

通常平均的な人の読むスピードは1分当たり200単語(英語の場合)に対し、
この手法では、1分当たり800単語まで引き上げられるとな!

スマートウォッチなどの小さい画面でも、効果的に文章を表示できる可能性を秘めてます。

是非日本語での実験もやって欲しいですね!

基板製作

2018年04月07日 | 電子工作
2015-11-08付のブログで紹介した走行ロボットの電子回路をPCB基板で製作してみました。
実際のPCB基板がこちら


発注先はスイッチサイエンスさんです。https://www.switch-science.com/pcborder/
送料込みで約2,500円程度でPCB基板が制作できました。

発注にはPCB基板の設計図となる"ガーバーデータ"を自分で作成しzipファイルで送付することになります。
今回はガーバーデータの作成について記載します。
一度にアップ出来ないので、少しずつ更新させて頂きます。

使用した回路設計ツールは、EAGLE(Ver8.1) … 最新は8.7.1(2018.4.3時点)
非商用で基板サイズも80cm x 80cmまでであればフリーで使用できます。

1.前準備
ダウンロードは以下リンクから各OSにあったソフトウェアをダウンロードしインストール
https://www.autodesk.com/products/eagle/free-download

起動後、まずはprojectを作成します。
今回はProjects->eagleのタブ内に"NEW"フォルダを作成。右クリックのNew Folderで新規作成ができます。


そのフォルダに新規プロジェクト"TEST_PROJECT"を追加しました。


プロジェクトができました。


2.回路図作成
今回のプロジェクトで作成した回路図はこちら。この回路図を作成していきます。




まずは、"1.前準備"で作成したプロジェクトに回路図ファイルを作成・追加します。
回路図は先ほど作成したプロジェクト項目の上で右クリックし、NEW→Schematicを選択することで回路図エディタが開きます。


回路図エディタ


回路部品の追加は左のEditメニューからAddアイコンを選択するとAddメニューが開きます。


Addメニュー(部品一覧)


抵抗器を選択して配置します。ただし、Libraryには抵抗器だけでも相当な数があります。
日本規格の回路記号は見当たらなかったので、今回はUS規格(米国規格)を使いました。
※基板発注時には何事もなく注文できたので問題ありません。
※日本規格の回路LibraryもWebを検索するとあるようですので、ダウンロードして追加するのも手です。

抵抗器は一般的なサイズのR-US_0204/7を使用しますが、
今回のプロジェクトでは一部0.2Ωの抵抗を使用しているのでR-US_0207/7も使用しています。(端子ピッチは同じ)
数字の頭"0204"は抵抗器のサイズ、後半の"/7"や"/10"は素子端子間ピッチを意味してます。
/5は5mm, /7は7.5mm, /10は10mmといった具合です。詳細は以下赤枠に記載されてます。





プロジェクト再始動

2016年09月06日 | 電子工作
昨年11月からパタリと更新を途絶えさせてから、早くも10ヶ月の歳月が過ぎ去ってしまいました。
仕事とプライベートで色々とありすぎて、趣味には一切手に付けられておりませんでした。

昨年作成していたロボは、当時のまま机上に放置された状態です。
ただブレッドボードから基板に移植している最中だったので、配線が無残な状態に。。。
ようやく若干ですがロボ製作を進められそうな状況になったので、プロジェクト再始動します。

ただ中断した際の状況が明確に記憶に残っていないので、取り掛かりは少々お時間かかりそうです。
週末には何かしら報告できるように頑張ります。

出来なかったらごめんなさい。

秋月電子さんへ行ってきました

2015年11月23日 | 電子工作
ブログの更新が大分おろそかになってます。最近仕事もプライベートもめっきり忙しくプロジェクトの進捗も芳しくない状況です。すみません。
今日はたまたま東京に来る予定があったので、秋葉原の秋月電子さんに寄ってきました。店内は最近リニューアルしたからかとても混雑。当たり前ですがネットと違い部品探すのが大変。ただ、探している部品を店員さんに告げると即座に「何番の棚でーす」と教えて頂ける。店員さんの記憶力に天晴れでした。また、店舗がそこまで大きくないので、在庫も最小限しか置いていないとのこと。購入を予定していた一部部品も在庫切れで買えず、残念。個人的には送料500円払ってでもネット注文が楽かな、、、
今日購入した部品はPICマイコン16系と18系を数個とArduinoのマイコンATmega328を数個。後は適当に基板やらソケットやらを購入しました。
プロジェクトVAの赤外線センサー回路はATmega328での接続でと考えています。やはり、Arduinoの開発環境が使いやすく楽であるのが一番の理由でしょうか。
まだまだ完成の姿には程遠いですが、プロジェクトVAの拡張機能としてマイクロホンモジュールを搭載し音声認識で、操作することを考えてます。目標を高く持たないとモチベーションが維持できない達なので、敢えてハードルを上げていきます。

ESP-WROOM-02でDCモーターをWiFi駆動

2015年11月08日 | 電子工作
前回のブログでI2C通信に手こずった内容を投稿しましたが、今回のWiFi通信は以外とスムーズに成功しました。

DCモータのWiFi制御システムとしては、ESP-WROOM-02側をWebサーバーとして起動しHTTPのインターフェースで車両をコントロールします。
Webサーバーとしての必要な関数類はArduinoのライブラリで提供されているので、何も難しいことはありません。

ESP-WROOM-02のライブラリのインポート方法は、「ファイル」→「環境設定」より以下の図のように
Additinal Boards Manager URLs: の欄に"http://arduino.esp8266.com/stable/package_esp8266com_index.json"
を入力して"OK"とすると、ESP8266(ESP-WROOM-02のチップ)のライブラリが使用できるようになります。

※設定後に「ツール」→「ボード」から適切なESP8266のボードを選択してください。
 因みに、私は"Generic ESP8266 Module"を使用しています。

車両筐体は仮姿で製作しました。
材料と部品としては、タミヤのギヤボックスとタイヤセット、ポールキャスターと適当な板(家に落ちてた板)で車両筐体を製作し
ブレッドボードでESP-WROOM-02とDRV8266の回路を構築してモーターに接続しました。固定はガムテープです。雑ですみません。。。


モータードライバのA0, A1端子処理とそれぞれのドライバのI2Cアドレスは以下の通りとなります。
左タイヤ両方OPEN状態としたので、以下表よりI2Cのスレーブアドレスは0xC8となりますが、プログラム上は1bit右シフトさせた値の0x64となります。
右タイヤ両方GND接続としたので、以下表よりI2Cのスレーブアドレスは0xC0、上記同様1bit右シフトさせた値の0x64となります。

※1bitシフトさせた値は、windowの電卓で(プログラマ電卓)で数値を入力後、2で割ると簡単に計算できます。

ESP-WROOM-02のソースコードは以下。



#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <Wire.h>

const char *ssid = "PROJECT-VA";
const char *password = "";

ESP8266WebServer server(80);

#define ADDR1  0x64
#define ADDR2  0x60

byte LEFT_VALUE=0x00;
byte RIGHT_VALUE=0x00;

String form ="<html><head></head>"
"PROJECT-PA Control"
"<form action=start><input type= submit  value=FORWARD  target=tif></form>"
"<form action=back><input type=submit value=BACKWARD target=tif></form>"
"<form action=right><input type=submit value=RIGHT target=tif></form>"
"<form action=left><input type=submit value=LEFT target=tif></form>"
"<form action=stop><input type=submit value=STOP target=tif></form>"
"<form action=left_plus1><input type=submit value=Left_Plus1 target=tif></form>"
"<form action=right_plus1><input type=submit value=right_Plus1 target=tif></form>"
"<iframe src=javascript:false style=display:none name=tif id=tif></iframe>"
"</html>";

void setup() {
  delay(500);
  Serial.begin(115200);
  Wire.begin(2, 14);
  delay(50);
  
  WiFi.softAP(ssid, password);
  
  server.on("/", root_command);
  server.on("/stop", stop_command);
  server.on("/start", start_command);
  server.on("/back", back_command);
  server.on("/right", right_command);
  server.on("/left", left_command);
  server.on("/left_plus1", left_plus1_command);
  server.on("/right_plus1", right_plus1_command);
  server.begin();
}

void loop() {
  server.handleClient();
}

void root_command() {
  server.send(200, "text/html", form);
}

void stop_command() {
  motor_command(0x18, 0x18);
  server.send(200, "text/html", form);
}

void back_command() {
  motor_command(0x18, 0x18);
  delay(10);
  motor_command(0x19, 0x19);
  server.send(200, "text/html", form);
}

void start_command() {
  motor_command(0x18, 0x18);
  delay(10);
  motor_command(0x1A, 0x1A);
  server.send(200, "text/html", form);
}

void right_command() {
  motor_command(0x18, 0x18);
  delay(10);
  motor_command(0x2A, 0x1A);
  server.send(200, "text/html", form);
}

void left_command() {
  motor_command(0x18, 0x18);
  delay(10);
  motor_command(0x1A, 0x2A);
  server.send(200, "text/html", form);
}

void left_plus1_command() {
  byte temp = LEFT_VALUE;
  if (LEFT_VALUE < 0xFC) {
    temp = LEFT_VALUE + 0x04;
  }
  motor_command(temp, RIGHT_VALUE);
  server.send(200, "text/html", form);
}

void right_plus1_command() {
  byte temp = RIGHT_VALUE;
  if (RIGHT_VALUE < 0xFC) {
    temp = RIGHT_VALUE + 0x04;
  }
  motor_command(LEFT_VALUE, temp);
  server.send(200, "text/html", form);
}

void motor_command(byte left_data, byte right_data){
  for(int i=0;i<3;i++) {            //通信信頼性確保のため、同一命令を3回送信
    Wire.beginTransmission(ADDR1);
    Wire.write(0x00);
    Wire.write(left_data);
    Wire.endTransmission();
    
    Wire.beginTransmission(ADDR2);
    Wire.write(0x00);
    Wire.write(right_data);
    Wire.endTransmission();
    LEFT_VALUE = left_data;
    RIGHT_VALUE = right_data;
    delay(10);
  }
}
</code>




後は、スマホのWiFi接続から"PROJECT-VA"のアクセスポイントへ接続。
上記ソースコードのssidは自由に設定変更下さい。

接続後スマホのブラウザのアドレス入力部に、"192.168.4.1"を入力すると
以下のようなボタンが並んだ画面が表示され、車両を制御することができます。