ラベル Raspberry Pi の投稿を表示しています。 すべての投稿を表示
ラベル Raspberry Pi の投稿を表示しています。 すべての投稿を表示

2018年7月14日

HDピコレーザープロジェクター 自作キットを組み立ててみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
つい先日、Twitterのタイムラインを眺めていたら、こんなものを発見。


これは試してみるしかない、と1台買ったので組み立ててみました。
ちなみに、お値段は購入時点で税込15,120円。限定数販売後は値上げするようです。


届いた中身はこんな感じ(写真には写ってませんが、レーザー出力部とHDMI信号を受ける基板を繋ぐフレキも入っています)


ひとまず、ベースとなるアルミプレートに基板とレーザー出力部を仮置きしてみる。
基板はそのまま「1」の番号が振ってあるネジで5箇所を固定。


レーザー出力部に付属のフレキを「TOP」の刻印がある向きで接続。
反対側を基板に繋ぎつつ、固定場所に位置合わせします。


レーザー出力部を「1」の番号が振ってあるネジで3箇所 固定。


トップのアクリルパネルを固定するためのシャフト(3番の部品)を、アルミプレートの裏側から「2」の番号が振ってあるネジで5箇所 固定。


最後に、アクリルパネルの保護紙を剥がして、「4」の番号が振ってあるネジで5箇所 固定。

なかなかコンパクトで、サイズはiPod Classicと同じくらい、重さは87gでした。


同じくレーザー走査型のプロジェクターで、SONYが海外にて販売しているMP-CL1Aとサイズ比較。
MP-CL1Aは個人輸入で1台5万円くらいだった記憶...


少し明るい環境だったので、はっきりとした比較にはなりませんが、レーザークラス3RのMP-CL1A(左)と比較して、HDピコレーザープロジェクター(右)はクラス1にしては健闘していると感じました。

ちなみに、MacとHDMIで接続したところ、YPbPrの信号には対応してないようで、画面全体がピンク色に...
手元にあるRaspberry PiやPINE64では問題なく表示されました。

次は真っ暗な環境で試してみようと思います。(続報はTwitterに書くかも

追記:真っ暗な部屋で映してみました。



投影先は天井、距離は2mくらいで、正確に測ってないけど50インチくらいはあるはず。
小さい文字はボケるけど、動画を見る分には悪くないかなというところです。

2016年2月12日

スマートミラーを作ってみた(ハードウェア編)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

どうも、トイレハックの人です。
なんか最近そういう風に言われることが多いのですが、non技術者からは「トイレで苦しんでるの?」って言われるので困ってます。

そういえば、2/19(金)のデブサミ2016RESTfulトイレについてLTすることになりましたので、興味のある方は是非お越しください。(スマートミラーも持って行こうか考え中。)

さて、本題ですが... つい最近、こんな記事を見てしまいまして...

Google社員が自作した「スマート鏡」はスマホの通知センターのように時刻・天気・ニュースを表示 - GIGAZINE
http://gigazine.net/news/20160203-smart-bathroom-mirror/

しばし意識を失ったのち気がついたら、手元に市販の額縁と秋月電子通商で売ってるSHARP製IGZO液晶が届いていました。




IGZO液晶、7インチに1920x1200という高解像度で、めちゃくちゃ薄くて明るいのに2Wくらいしか電気食わない省エネ仕様で素晴らしいですね。


桜島の黒神から撮った星景写真が綺麗に表示されたので感動しました。

本題に戻りまして、これらを使ってスマートミラーを作ることにしましょう。
額の裏ぶたを外して、液晶パネルと基板をつなぐフレキが通るスペースを作っていきます。
鉛筆で穴あけの位置を書いたらフライスでサクッと。


フレキを通したら、液晶を裏ぶたに両面テープで貼り付けます。
ちなみに、失敗したら剥がせない(液晶が割れる)ので細心の注意を払って位置合わせする必要あり。
フレキを通した穴は黒色のmtで塞いでおきます。


一旦動作テスト。


うまくいったので、液晶部分の周りに厚紙(液晶の厚みの分だけある)を切り抜いて貼って、その上に黒い画用紙を貼り付け。
液晶と厚紙の隙間には黒のmtを上から貼って横からの光漏れを完全にシャットアウトします。
フレキの反対側サイドからの光漏れが激しかったので、ここにはmtを2重に貼りました。


液晶周りが完成したら、IGZO液晶駆動基板とRaspberry Pi B 2を裏ぶたに固定します。
プラナットをアロンアルファーで止めて、プラネジで止めました。
(もうちょっとちゃんとした固定方法をとった方がいいかも)


最後に、額についてたガラスをマジックミラーに変えます。
マジックミラーは大阪吹田市の株式会社コーワさんに発注。
https://mirror.kowa-j.co.jp/magicmirror.html

額に元々入っていたガラスの寸法を測って、厚み3mm、角磨き上げ、縦210mm、横297mmで作ってもらいました。
お値段3564円 + 梱包送料864円 = 計4428円
注文日は2/7、2/10に発送されて、届いたのは2/12です。

マジックミラー、裏ぶたをセットして起動!
※写真写り上あまり反射してないように見えますが、実際は普通の鏡くらい綺麗に反射してます。(たぶん部屋が暗いせい)



と、いうわけでハードウェアは完成です。
これから、ここに表示するためのソフトウェアを作っていかなければ...

冒頭の記事で紹介されているGoogle社員作のミラーは白文字で天気や予定などの情報を表示しているので、まずはそんな感じのものを作ろうかと。

Raspberry Pi 2 Bというちょっと強力なやつを載せてるので、カメラ繋いで顔認識させて鏡に映った顔にオーバーレイするようなプログラムとか、なんか色々夢が広がりそうだなぁ...と思っているところです。
ソフトウェア編の記事も後ほど書く予定です。

2015年4月14日

Raspberry Piのピン変換とラベルを作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Raspberry Pi、ピンヘッダなのでArduinoみたいにジャンパワイヤーをぶすぶす刺せないのつらい...
と、初代を買った当初から思っていたのですが、ここ1年くらいGPIOをあんまり触ってなかったので、すっかり忘れていました。
最近になって、また色々と触り始めたので思い出したように作ってみた訳です。

40P(20×2)のピンソケットをうまく位置合わせしてガッチリ押し込んであげると、そのままイイ感じにくっついてくれるので特にハンダ付けはしていません。
ラベルはIllustratorで書いて、市販のステッカーシート(A4サイズ)にインクジェットプリンタで印刷。
一番小さい文字は2.8ptですが、"写真用紙光沢"+"きれい"の設定で潰れずに印刷できました。


あとはこれをカッターで切って貼るだけです。
実際に使ってみると以下のように基板面から刺す位置が上がってしまいますが、ピンヘッダ部が空いているケースに入れている場合は丁度よい位置になるはず。


2015年3月30日

Raspberry Pi 2にArchLinux, Xfce, Chromiumをインストール

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

卒論などでバタバタしてて放置してたRaspberry Pi 2、2ヶ月弱ぶりに触ってみました。
2/7の段階ではUSBキーボードを刺しただけでハングするくらい不安定だったArchLinuxでしたが、3/2に公開されたバージョンがあったので、インストールしてみます。
※細かい説明はコマンドの右側に「←」に続けて記述しています。(コピペ時に含めない様に注意)

パーティション作成

ここは別のマシン(ArchLinux on ThinkPad X220)で行いました。
トランセンド製のMicroSDHCカード 16GBを使用。

sudo fdisk /dev/mmcblk0
fdisk (util-linux 2.25.2) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。

コマンド (m でヘルプ): o
Created a new DOS disklabel with disk identifier 0xd88f609a.

コマンド (m でヘルプ): p
Disk /dev/mmcblk0: 14.7 GiB, 15719727104 bytes, 30702592 sectors
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xd88f609a

コマンド (m でヘルプ): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初のセクタ (2048-30702591, default 2048): 
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-30702591, default 30702591): +100M

新しいパーティション 1 をタイプ Linux、サイズ 100 MiB で作成しました。

コマンド (m でヘルプ): t
Selected partition 1
16 進数コード (L で利用可能なコードを一覧表示します): c
DOS 6.x 領域を作成、または変更してしまった場合は、cfdisk 付属文書にある追加情報ページを参照してください。
パーティションのタイプを 'Linux' から 'W95 FAT32 (LBA)' に変更しました。

コマンド (m でヘルプ): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
パーティション番号 (2-4, default 2): 2
最初のセクタ (206848-30702591, default 206848): 
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (206848-30702591, default 30702591): 

新しいパーティション 2 をタイプ Linux、サイズ 14.6 GiB で作成しました。

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

フォーマットと展開

sudo mkfs.vfat /dev/mmcblk0p1
sudo mount /dev/mmcblk0p1 boot
sudo mkfs.ext4 /dev/mmcblk0p2
sudo mount /dev/mmcblk0p2 root
su
wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz
bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C root
sync
mv root/boot/* boot
umount boot root
SDカードを取り出す。

Rapsberry Pi 2での作業

SDカードをRaspberry Pi 2に刺して、LANケーブルを接続、電源を入れる。
ユーザ:root / パスワード:root でログイン
pacman -Syu  ←インストール済みパッケージのアップデート
pacman -S base-devel wget  ←gcc, makeなどのインストール
passwd  ←rootパスワードの変更
useradd -m -g wheel <ユーザ名>  ←ユーザの追加
passwd <ユーザ名>  ←追加したユーザのパスワード設定
visudo
以下のコメントアウトを外す
Defaults env_keep += "HOME"
%wheel ALL=(ALL) ALL
systemctl enable sshd.service  ←SSHサーバの起動
ip addr  ←Raspberry Pi2のIPアドレスを表示
exit
続きはSSHでRaspberry Pi 2に接続して行う

XとXfceのインストール

sudo pacman -S xorg-server xorg-server-utils xorg-xinit 
sudo pacman -S xf86-video-armsoc-git xf86-video-fbdev xf86-video-vesa
sudo pacman -S xfce4 xfce4-goodies

yaourtのインストール

sudo pacman -S yajl
cd
wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz
tar zxvf package-query.tar.gz
cd package-query
makepkg
sudo pacman -U package-query-1.5-2-armv7h.pkg.tar.xz
cd
wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz
tar zxvf yaourt.tar.gz
cd yaourt
makepkg
sudo pacman -U yaourt-1.5-1-any.pkg.tar.xz
yaourt -Syy  ←データベースのアップデート
yaourt -S ttf-ricty  ←日本語フォントのインストール
sudo pacman -S chromium  ←ブラウザ(chromium)のインストール

画面解像度の調整

1920x1080のFullHDで出力されるようにします。
sudo nano /boot/config.txt
hdmi_groupとhdmi_modeのコメントアウトを解除し、以下のように書き換え
hdmi_group=2
hdmi_mode=82
ここで、hdmi_groupの2はDMT、hdmi_modeの82は1080p 60 Hzを意味する
詳細はeLinux.orgのRPiconfigに記載されています。

Xfceの起動

以下、Raspberry Pi 2でログイン後
startxfce4
でデスクトップが表示されれば成功

YouTubeも再生できます。

2015年2月7日

Raspberry Pi 2 Model Bが到着

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

販売開始直後に発注したので、3日程度で到着。
外箱のサイズはB+と比較して若干厚みが増してましたが、ボード自体は発表通りサイズ・ポート位置の変更は無し。


手元にある2種類のB+用ケースに入れてみましたが、1個は完璧、もう1個は一部削ることで入りました。


今は販売されてない(2Bの発売開始とほぼ同時に消えた)このケースの場合、以下の写真のような感じ。


ものによっては基板裏の部品が干渉して入らないものあるようで、基板下にゆとりがあるケースならだいたい入るかなぁっと。

ちなみに↓これはキレイに入った。
http://jp.rs-online.com/web/p/development-board-enclosures/8293459/
ただし、このケース、通気口が無いので上の写真の真っ黒ケースに載せ替えたという訳です。

OSについては、BやB+でRaspbianを使っていた人なら、B(B+)で起動して
sudo apt-get update
sudo apt-get dist-upgrade
したSDを2Bに差し替えるだけで起動する。


dist-upgradeは結構時間が掛かるのでのんびり待ちます。
SDを2Bに差し替えて電源を入れると、クアッドコアの証、ラスベリーロゴが4個表示されて起動。


ブラウザでYouTubeを再生してみたりしましたが、まぁ見れる感じでした。
ただ、raspbian自体がちょっと微妙だなぁと思い始めてた(パッケージが古いものがあったりする)ので、次回はArch Linuxに載せ替える話の予定。

追記:dist-upgrade後のSDカード、boot領域の中身。


2013年11月3日

Raspberry Piで秋月の無接点プッシュスイッチを使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Web系のお仕事が山積みで、数ヶ月間更新出来ていませんでした;;
現在もガッツリ電子工作系に打ち込む時間が無いので、今回はベーシックな小ネタということで。


秋月電子で売ってる「無接点プッシュスイッチ(コード付)」を使う。
"機械的接点がない光学式の無接点プッシュスイッチです。デジタル出力型ICセンサ内蔵でドライブ回路に直結可能。" という説明の通り、ICが載ってるので出てる線はVCC、GND、OUTの3本です。
添付されていた参考資料によると、スイッチを押すとOUTがGNDに落ちるようになっていたので配線は以下。


これに加えてLEDを1個追加したので、図には入れてませんが、GPIO 17(pin11)から1kΩの抵抗を介してLED、GND(pin6)というのを入れています。

プログラム(Python with RPi.GPIO)はこんな感じで。
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)
GPIO.setup(17,GPIO.OUT)

while True:
 if (GPIO.input(4)):
  GPIO.output(17,GPIO.LOW)
 else:
  GPIO.output(17,GPIO.HIGH)
ifとelseの中身を変えてあげれば何にでも使えますね。

もし、ボタンを押したらコマンドを叩く様にしたい場合は、
import RPi.GPIO as GPIO
import subprocess

GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)
GPIO.setup(17,GPIO.OUT)

while True:
 if (not GPIO.input(4)):
  subprocess.call("shutdown -h now", shell=True)
みたいな感じにしてあげれば良いかも。
#このままだとボタンを押していると連続して叩いてしまうので、一回だけ実行するようにする必要ありです。

追記:pushCheck = Falseとか定義して、以下みたいな感じにすればOK
while True:
 if (not GPIO.input(4) and not pushCheck):
  pushCheck = True
  print "Push!"
  GPIO.output(17,GPIO.HIGH)
 if (GPIO.input(4) and pushCheck):
  pushCheck = False
  GPIO.output(17,GPIO.LOW)

話は変わりますが、12/1に割と大きなネタがあるので、時期が近づいたら改めて告知します。

2012年12月14日

Raspberry PiでSPG20-1332を回す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Raspberry Piで秋月電子で売っている安いステッピングモーター(コパル製 SPG20-1332)を回す。
以前、Arduinoで二相励磁駆動させたものをRaspberry Piでやってみました。



回路は以下の様な感じで。


Raspberry PiのI/Oは3.3V系なので、トランジスタアレイ(TD62004APG)を入れてレベルシフトしています。

#include <stdio.h>

int main()
{
    int i;
    
    system("echo \"7\" > /sys/class/gpio/export");
    system("echo \"8\" > /sys/class/gpio/export");
    system("echo \"9\" > /sys/class/gpio/export");
    system("echo \"10\" > /sys/class/gpio/export");
    system("echo \"out\" > /sys/class/gpio/gpio7/direction");
    system("echo \"out\" > /sys/class/gpio/gpio8/direction");
    system("echo \"out\" > /sys/class/gpio/gpio9/direction");
    system("echo \"out\" > /sys/class/gpio/gpio10/direction");
    
    for (i=0; i<360; i++) {
            system("echo \"1\" > /sys/class/gpio/gpio7/value");
            system("echo \"1\" > /sys/class/gpio/gpio8/value");
            system("echo \"0\" > /sys/class/gpio/gpio7/value");
            system("echo \"1\" > /sys/class/gpio/gpio8/value");
            system("echo \"1\" > /sys/class/gpio/gpio9/value");
            system("echo \"0\" > /sys/class/gpio/gpio8/value");
            system("echo \"1\" > /sys/class/gpio/gpio9/value");
            system("echo \"1\" > /sys/class/gpio/gpio10/value");
            system("echo \"0\" > /sys/class/gpio/gpio9/value");
            system("echo \"1\" > /sys/class/gpio/gpio10/value");
            system("echo \"1\" > /sys/class/gpio/gpio7/value");
            system("echo \"0\" > /sys/class/gpio/gpio10/value");
    }
    
    system("echo \"7\" > /sys/class/gpio/unexport");
    system("echo \"8\" > /sys/class/gpio/unexport");
    system("echo \"9\" > /sys/class/gpio/unexport");
    system("echo \"10\" > /sys/class/gpio/unexport");
}
480ステップで1回転なので、120回ループしてあげれば1回転、上記では360回ループなので3回転します。

とりあえず動かすだけなので、system関数でシェルを呼び出す感じのへたれコード。
本格的に使うならレジスタを直で叩く方が良いと思います。(速度的に雲泥の差)

追記:PythonでRPi.GPIOを利用して上記をそっくりそのまま写すならこんな感じかな?(未検証)
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(8,GPIO.OUT)
GPIO.setup(9,GPIO.OUT)
GPIO.setup(10,GPIO.OUT)
    
for i in range(0,360):
      GPIO.output(7,GPIO.HIGH)
      GPIO.output(8,GPIO.HIGH)
      GPIO.output(7,GPIO.LOW)
      GPIO.output(8,GPIO.HIGH)
      GPIO.output(9,GPIO.HIGH)
      GPIO.output(8,GPIO.LOW)
      GPIO.output(9,GPIO.HIGH)
      GPIO.output(10,GPIO.HIGH)
      GPIO.output(9,GPIO.LOW)
      GPIO.output(10,GPIO.HIGH)
      GPIO.output(7,GPIO.HIGH)
      GPIO.output(10,GPIO.LOW)

GPIO.cleanup()
ループ部分は以前の記事に近い形で書き直せるはず。(放置)

2012年10月19日

Raspberry Piが届いた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

注文していたRaspberry Piがようやく到着。
既に他のブログに掲載されているような紙箱ではなく、こんな感じのプラスチックケース入り。
教育機関などで大量購入、大量保管するときは非常に便利そう。


中は帯電防止ビニール袋に包まれたRaspberry Pi本体とクイックスタートガイド系の紙が2枚入っている。


一緒に買ったクリアケースに入れてみたところ。


クリアケースは土台と上部に分かれていて、土台に固定すると外しにくい感じ。
上部は簡単に外せる感じになっていて、普段はケース、時々GPIOで遊ぶ、なんて使い方にも優しい設計。

もう少し落ち着いたらこれで遊んでみようと思います。