2016-01-21

[Raspberry Pi] 赤外線を読み取る Detect infrared light

青いケーブルで赤外線受信モジュールをRaspberry Piに配線した。

赤外線モジュールを配線する

まず、赤外線受信モジュールをRaspberry Piにつなぎます。3本の端子があるはずです。: グラウンド、電源電圧、出力。秋月電子には2種類の赤外線受信モジュールが売っていました。1~2個100円です。電源電圧や、どの端子がどれに対応するかは、データシートを見て確認します。データシートは同封されていたり、webで検索して見つけられます。今回は、PL-IRM1261-C438 (PARA LIGHT)を使います。

LIRCのインストール

LIRCをインストールします

sudo apt-get install lirc

ハードウェア設定ファイルの編集

ここではvimを使って編集します。
sudo vim /etc/lirc/hardware

そして, 次のように編集します

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev 
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

ピン制約の設定

次に、Raspberry Piのどの端子に赤外線受信モジュールを接続したか書きます。ここでは、Kernel 3.18以降の手順を示します。カーネルのバージョンはuname -rで確認できます。

sudo vim /boot/config.txt

そして、繋いだピンに合わせて設定します。ここでは、GPIO17に受信モジュールの出力端子を繋いだ場合を示します。今回はGPIO18には何も繋いでいませんが、後ほど赤外線LEDの発光時に予定です。

dtoverlay=lirc-rpi,gpio_in_pin=17,gpio_out_pin=18

gpio-info.jpg

動作確認

lsmod | grep lirc

lirc_rpi
lirc_dev
rc_core

TK

ls -l /dev/lirc*

受信する

sudo /etc/init.d/lirc stop
sudo mode2 -d /dev/lirc0

次のような画面が表示され、pulseとspaceが並びます。




しかし、もし次のようなエラーが表示されたら,

$ sudo mode2 -d /dev/lirc0
mode2: could not open /dev/lirc0
mode2: default_init(): Device or resource busy

LIRCを一旦停止させ、再び起動させます。

sudo /etc/init.d/lirc stop
sudo /etc/init.d/lirc start

参考

[Raspberry Pi]赤外線リモコンを使う


2016-01-19

[Raspberry Pi] スクリーンショットの撮り方



まず、scrotというスクリーンショットを撮るソフトを入れる。他にもソフトはあるが、これが一番手軽で扱いやすいと判断した。

sudo apt-get install scrot

人によっては、既にscrotの最新版がインストールされていることもある。

ターミナルでscrotを打つと、/etc/homeに画面全体のスクリーンショットが保存される。
また、scrot -sとすると、次にクリックしたウィンドウのスクリーンショットが保存される。ターミナルのスクリーンショットを撮るときは、もう一つターミナルを起動すればよい。

参考

[Raspberry Pi] LED点滅させる (Pythonによるハード制御)

2016年1月15日

  • Raspberry Pi Type B
  • 1kΩ抵抗
  • 赤色LED
  • ブレッドボード

を使用します。
まず、次のソースコードを/home/piに作ります。他の人を調べると, python以外にもCで書いている人もいますね。


blink.py


import RPi.GPIO as GPIO
import time

LEDPIN = 24

GPIO.setwarnings(False) # Surppress warnings
GPIO.setmode(GPIO.BCM)
GPIO.setup(LEDPIN, GPIO.OUT)

while True:
 GPIO.output(LEDPIN, True)
 time.sleep(1)
 GPIO.output LEDPIN, False)
 time.sleep(1)


そして、

sudo python3 blink.py

として実行します。すると、GPIO 24 (18番ピン) が2秒周期で Low と High を繰り返すのを観測できます。

Pythonでハードを簡単に制御できるなんてすばらしい。

参考
LEDを点滅させる(RPi.GPIO 利用)

[Raspberry Pi] LEDを点灯させる

2016年1月14日

電源は3.3Vのピンもしくは5Vのピン、抵抗は500ΩにしてLEDと直列につなぐ。それだけ。

Raspberry Pi Type B 3982円
SDカード(Transcend 8G) 639円
HDMIケーブル 660円
赤色LED 20個 100円
抵抗(炭素皮膜)1KΩ 100個 200円
ジャンパーコード(オス・メス) 10本 220円

合計 5801円





つなぐだけでLEDが点く。何もソースコードを必要はない。各ピンについては上記画像を参考にした。

ブレッドボードにつないだ。LEDやブレッドボードは秋葉原の秋月電子まで自転車を走らせて。最初、どうやってRaspberry Piのピンをつなぐのかもわからなかったけど、調べながらやってみたら、できるものだ。

[Raspberry Pi] Raspberry Pi買った

2016年1月7日
楽天でRaspberry Piを買い、届きました。ハードディスク代わりの8GB SDカードも買った。SDカード、キーボードやディスプレイがないと、何もできないので、あわせて揃える必要がある。キーボードやディスプレイは大学にあったものを借りることにした。航空写真や家電操作などやりたいことがあり、楽しみ。




Raspberry Pi Type B 3982円
SDカード(Transcend 8G) 639円
HDMIケーブル 660円
ディスプレイ 0円
キーボード 0円


購入したらすることを下に書きました。

OSインストール
まず、フォーマットされたSDカードにOSをインストールします。Debian系のraspbianです。
https://www.raspberrypi.org/downloads/noobs/
からNOOBSのzipファイルをダウンロードします。1GBほどあります。解凍したら、ファイルやフォルダをまるごとSDカードにうつします。SDカード直下にコピーしてください。そうしないと、あとでインストールが始まりません。SDカードをraspbianにセットし、microUSBを電源につなぐと、自動的にraspbianのインストールが始まります。


日本語を表示
日本語を表示できるようにフォントを入れる。

apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname


キーボードレイアウトを変更
日本語キーボードのレイアウトに対応させる

sudo raspi-config

から上下キーとエンターで

4 Internationalisation Options

を選び

I3 Change Keyboard Layout

Generic 105-Key(Intel)

Japanes

といった調子でキーボードのレイアウトを日本語に設定できる。

2016-01-06

書評: 安富歩(2011)『生きる技法』青灯社

筆者は東大教授。ブックオフで見つからず、東大の図書館で見つけた。読みやすい文体で書かれている。180ページしかなく、すぐ読めてしまう。1日1冊生活を続けて11日目の本だ。

「自立とは依存することだ」
これは発見だった。これまで、仕事の能力を上げ、経済的に自由になり、誰にも頼らずに済むことが自立だと思っていた。つまり、「お金=自由」だと思っていた。しかし、どこかに違和感も感じていた。その違和感は正しかった。本書は、人は誰かに依存しなければ生きられず、より多くの人に依存できるようになることが自立だと言う。誰かに頼らないと生きていけないことに罪悪感を覚える必要はない。もし、本当に一人で生きていくなら、森で生活したソローのように生きるのだろう。

他にも、本書に挙げられた命題のいくつかを下記に述べる。文字にすると当たり前だと感じるかもしれないが、これを実感するには難しい。この中には、私が20年近くかけてようやく到達したものもあるし、新たな視野を広げてくれるものもあった。

  • 誰とでも仲良くしてはいけない
  • 自由とは選択の自由のことではない
  • 自由とは思い通りの方向に成長することだ
  • 自分を嫌っている限り、本当の友だちはできない
  • 自立は、金では買えない
  • 自己権をは、他人(親や教師など)に押し付けられたものである
  • 自己嫌悪を抱いている限り、失敗が約束されている
  • 「俺は悪くないんだ」と自分に言い聞かせて、自己嫌悪を抑えるのは逆効果である
  • 夢を実現することそのものには、何の意味もない
  • 幸福とは、手に入れるものではなく、感じるものである
  • 成長とは、生きる力の増大である
  • 成長は、願うことで実現される
大学に入るころ、全く新しい環境に飛び込むことになった僕は、自分の友だちを増やしていくことにした。まわりには、何を考えているのかわからない秀才がたくさんいたからだ。四年経ってわかったことは、数には何の価値もないということだった。むしろ、数を増やそうとするあまり、大事にすべき友人に費やす時間や労力をどうでもいい人間に割くことは問題だった。これには、人に嫌われることを恐れていたことも一因である。どうでもいい人間に嫌われることは何も怖くないのだ。

本書は、自己嫌悪についての命題から察せられる通り、幼少期の親との関係に問題を抱えていた人にも読んで欲しい。幼少期こそ、世界にどのような態度で挑むかが決定されるからだ。
自分の本当の感覚を失っているからだ。

難関大学に合格し、難関企業に就職し、若くして役員になり、それで幸せなのだろうか。実は、エリートは必ずしも自信満々ではなく、背後に鬱々とした葛藤や自己嫌悪を抱えていることも多い。そういった方々にも、ぜひ読んでいただきたい。そのような人は、子ども時代にありのままの自分を受け入れてもらったことがないのだ(アリス・ミラー(1996)『才能ある子のドラマ』山下公子訳, 新曜社)。彼らのようなエリートは、ありのままの自分が世界に受け入れてもらえないと思う病気を抱えているからこそ、がんばれてこれたにすぎない。

本書は、自立、自由、幸せなどに悩み、毎日に充足感が持てず、生き方を見失っている人はみな手に取るべきだ。


今日は論文締切日でした

1月5日
修士論文が書き終わっていないので、審査員に待ってもらうよう連絡しました。他のみんなもそうでした。毎年の恒例のようです。締め切りは形式的なものに過ぎないらしい。

研究のキャリアを上がれば上がるほど、一人前の研究者というのが程遠いものだと知ります。大学に入るときは、学士をとればその学問を修めたことになるのだと思っていました。ところで、修めるとはどの程度のことなのでしょう。学士をとるとき、
  「あれ、学士とっても一人で研究できるわけじゃないんだ。ほとんど助教に言われたことをするばかりだった」
と思ったのが懐かしいです。大学院は勉強ではなく研究をする場所なので、修士をとれば一人前に研究ができるのかと考えました。しかし、今は
  「あれ、修士をとっても一人で研究できるわけじゃないんだ。研究は何とかまわりに質問して助けを求めながら、あまり面倒をみてもらったわけではないが、形になった。」
という感想です。一人で先輩方のように研究できるかは怪しいです。教授にいたっては、「修士論文なんてな、研究内容なんて見てないわ。修士でできることなんて、たかが知れてるんだわ。せめて論文の体裁だけは守っておけな。」という始末です。研究者の道は果てしない。

本記事が学士や修士で何を得ようか考えている後輩の一助となりますよう。

2016-01-04

ヤフオクの検索一覧をまとめてウォッチリストに入れるChrome拡張機能

http://internet.watch.impress.co.jp/www/article/2003/0226/ya.htm

検索結果一覧を表示しているとき、そのページの出品をまとめてウォッチリストに入れるGoogle Chrome拡張機能である。ファイルはbackground.jsとmanifest.jsonの2つのみ。

manifest.json


{
  "name": "Add Watch List",
  "description": "Add items to watch list",
  "version": "2.0",
  "permissions": ["activeTab"],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_title": "Add Watch List"
  },
  "manifest_version": 2
}



background.js

// Called when the user clicks on the browser action.

chrome.browserAction.onClicked.addListener(function(tab) {

  // No tabs or host permissions needed!

  console.log('Adding items to a watch list in ' + tab.url);

  // pop up page information

  //alert(tab.title);

  var url = tab.url;

  var xmlHttp = new XMLHttpRequest();

  xmlHttp.open("GET", url, false);

  xmlHttp.onload = function (e) {

  if (xmlHttp.readyState === 4) {

    if (xmlHttp.status === 200) {

      console.log(xmlHttp.responseText);

      } else {

      console.error(xmlHttp.statusText);

      }

    }

  };

  xmlHttp.onerror = function (e) {

    console.error(xhr.statusText);

  };

  xmlHttp.send(null);

  var src = xmlHttp.responseText;

  var count = 0;

  var poss = src.indexOf('<p class="modWlBtn" onclick="return false;"><a href="');

  var posl = src.indexOf('" class="b unwt" id="');

  var watch_url = src.slice(poss+53,posl);

  var watch_button_urls = [watch_url];

 

  while (poss != -1){

    count++;

    poss = src.indexOf('<p class="modWlBtn" onclick="return false;"><a href="', poss+1);

    posl = src.indexOf('" class="b unwt" id="', poss+1);

    if(poss>0){

    watch_button_urls.push(src.slice(poss+53,posl));     

    }

  }

//  window.open('http://www.yahoo.co.jp');



  console.log(watch_button_urls);

  var count2 = 0;

   for(var i=0;i<watch_button_urls.length;i++){

    count2++;

    chrome.tabs.create({url:watch_button_urls[i]});

   }

  alert(count2);

});

ウォッチリストへ追加するのは、a hrefのリンクを踏むことによって実現している。まず、ソースコードからウォッチリストのURLを探してきて、配列 watch_button_urlsに格納する。URLは
<p class="modWlBtn" onclick="return false;"><a href="

" class="b unwt" id="
に挟まれている。 そして、各要素に対してchrome APIからchrome.tabs.create({url:url})を呼びだして、ウォッチリスト追加の新規タブを開く。 この時点の問題点は、ウォッチリストに追加しようとした数だけ、それがたとえ既にウォッチリストに追加されていても、その数だけ新規タブが生成されてしまうこと。 クラウドワークスでここまでのプロトタイプを送ったが、契約が成立しなかったので公開しました。 この拡張機能は、上の2ファイルを空っぽのフォルダに入れ、chromeを起動し、設定から拡張機能をえらび、右上のデベロッパーモードをONにし、左上の「パッケージ化されていない拡張機能を読み込む」によって、さきほどのフォルダを指定することで読み込めます。 デバッグは、拡張機能のページから
を探してきて、バックグラウンドページを開く。すると、コンソールが表示される。今回はjsファイルのみで。htmlファイルがないので、このようになる。htmlがあればアドレスバーに chrome-extension://extensionのID/background.html のように入力してコンソールを開ける。

2016-01-03

一日一冊生活を続けて一週間経った

当初は三日坊主で終わるかと思ったので、まずは三日間を目標にした。まず三日間はクリアした。そこで、目標を延長して一週間にしてみた。すると、一週間もクリアした。今ではもはや一日一冊が習慣となった。朝起きると、日々のスキマ時間のどこに読書を入れるかを自然と考えている。この調子で、他のノルマも習慣化していき、自分に対する負荷をちょっとずつあげていくつもりだ。

現在はまだ、読みやすい本しか読んでいないが、読解時の理解力やスピードをあげていき、質も量も重い本、たとえばダグラス・ホフスタッター(1979)『ゲーデル、エッシャー、バッハ』のような本も一日で読めるようになりたい。

この取組には、パレートの法則を時間の効率に適用する人がいることを参考にしている。即ち、時間をかけて完璧を目指すのではなく、荒っぽく20%の労力で80%の課題達成ができれば十分だと考えている。

飲食店への商品持ち込みを批判する人への反論

持ち込み商品の反対意見について反反論がある。持ち込み商品については、それはマナー違反だからと言う人が多い。商品を持ち込んでいる客がいると、注意したところでバイト代の上がらないバイト、給料の上がらない正社員は注意をし、さらに周りの客でも注意をする人がいる。彼らにその理由を聞くと、「...