読者です 読者をやめる 読者になる 読者になる

Raspberry Pi 電子工作

LEDの点灯や各種アナログセンサーを使ったMaker's系のプログラム

まだ外部ディスプレイ、キーボードがないとラズパイできないと思ってるの?

Raspberry Piを始めるのに外部ディスプレイやキーボードは不要なんです。
絶対必要だと誤解されてる方もいるので、不要だということを再度説明致します。

[必要なもの]

  • ラズパイ本体
  • SDカード(ラズパイ2ならMicro SD)
  • WindowsMacのどちらか。
  • MicroUSBケーブル
  • Lanケーブル


どこにもUSBキーボードや外部ディスプレイはありません。
なんども言いますが、Raspberry Piを始めるにあたって外部ディスプレイは不要なんです。

実際どのように進めていけば良いのかは、こちらの投稿をご覧ください。lchikaamazon.hatenablog.com

Raspberry Pi2を無線にてインターネット接続する。

ラズパイを無線にて接続します。

OS: RASPBIAN Debian Wheezy Kernel version:3.18

有線でSSH接続が必要なのでまずはLanケーブルを接続します。
モニターがあれば直接割り振られたアドレスを確認できますが、今回は周辺機器がない場合を想定します。

Macならターミナルからnmapを使用できますし、WindowsならGUIのソフトウェアを使っても構いません。詳細は以下を確認してください。
【たぶん一番わかりやすい】Raspberry PiへのOS(Raspbian)インストール(周辺機器なし) - Raspberry Pi 電子工作

nampを使う場合は自分のipアドレスを調べます。Macであれば、環境設定→ネットワークを選択すると現在のipアドレスが表示されます。仮に192.168.0.5とした場合、その他のデバイスは192.168.1.0/24(この場合192.168.0.1 ~192.168.1.255をスキャンする)にnmapします。

以下の結果が返ってくるかと思いますので、192.168.0.7にSSHで接続します。
Nmap scan report for 192.168.0.7
Host is up (0.014s latency).
PORT STATE SERVICE
22/tcp open ssh

$ssh pi@192.168.0.7
パスワードの初期値はraspbianです。

ここで、無線Lanの子機をRaspberry Piのusb端子に差し込みます。
自動で認識しますので、

$lsusb

と実行するとデバイス名が表示されるのを確認してください。

Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter

その後ネットワークの設定を行います。

 $ sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

テキストエディタで開いて
以下を追加します。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
   ssid="今回接続したいssid"
   proto=WPA2
   key_mgmt=WPA-PSK
   psk="psk"
}

ssid、pskは大抵の場合、お使いの無線機器に貼り付けてあるシールに記載があります。
設定が終了したら、再起動してください。
$reboot

ハック ラズベリーパイ Raspberry Pi2 スターターキット

ハック ラズベリーパイ Raspberry Pi2 スターターキット

サーボモーターを動かす

サーボモータと言えばラジコン等でよく目にすることが多いですが、
どのようなものかというと下記の動画をご覧いただくのがよいと思います。How to do Flag waving directly on Raspberry Pi with no add-on board - YouTube

wikipediaによるサーボモーターの項目によるとホビーユースのサーボモーターでは
標準規格化されていないと書いています。

確かにサーボモーターのデータシートを見ると
各社で数値採用している数値は、統一されていない印象があります。

このサーボモーターを制御するためには、LEDの項目で出てきた、PWMのパルス信号を送ります。
ある一定の周期でパルスを送るのですが、このパルス幅に応じてモーターの目標角度が決まります。
f:id:yuriai0001:20141227101955p:plain
サーボモーターは連続して回転できるわけではないため、角度は0度~概ね180度までしか動作しないことに注意してください。

今回利用するサーボモーターにはメーカー標準のデーターシートが見つからなかったため、
TowerPro SG90 Servo Specifications and Reviews
上記で確認しました。

パルスの周期は?になっており、 パルス幅は5-24msのようです。
先ほど標準規格がないと書きましたが、他の個体のパルス周期は15~20msが標準で採用されている
ようなので、今回は20msを採用してみましょう。

今回はおなじみの、WiringPiとC言語を使ってパルスを制御していきます。
マイコンによるPWM制御に関して、興味を持った方は、他の専門書を参照いただくことにして、
ここではまず、サーボを動かすことを最終目的に取り組んでいきます。

Raspberry Piの内部電源だけでなく、電池を利用して電力を供給します。
市販のアルカリ電池、もしくはエネループのような充電式でもOKです。


サーボモーターからは3本の線がでており、コネクターにつながっていますが、
オレンジはGPIO18 につながるように、 赤:電池のプラス 茶色:GNDに接続します。
また、1kオームの抵抗をサーボが故障した場合を考えて、配置しておきます。
サーボモーターのワイヤーの色は違いますが、回路図を参照してください。

f:id:yuriai0001:20141227125906j:plain

設定数値等参考にさせていただきました。
RaspberryPiとWiringPiでサーボを動かす - Qiita

#include <stdio.h>
#include <wiringPi.h>
int main()
{
pinMode(18,PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetClock(400);
pwmSetRange(1024);

while(1){
    int num;
    scanf("%i",&num);
    printf("%d\n",num);

    if(num == -1){
      break;
  }
    pwmWrite(18,num);
  }
    return 0;
 }

これを前回の、圧電スピーカー時と同様に、コンパイルしてあげます。
圧電スピーカーで音階を奏でる - Raspberry Pi 電子工作

プログラムを起動したのちに、パルス幅をコンソールに入力することによって、サーボモーターの角度が変化します。上記サイトの例にならい、24、115と入力するとサーボが動くのを確認できると思います。


いままで、Raspberry Piを使った様々な電子工作プログラムを試してきましたが、例えば、サーボであったり、温湿度センサーであったり、比較的安価な値段で購入することが可能です。

特に秋月電子さんは豊富な品ぞろえと通販にも対応しており、非常におすすめできるお店です。
秋月電子通商 - 電子部品・半導体 【通販・販売】
今後、自分で工作を考えるときにはこのようなお店でパーツを自主的に入手しましょう。

ハック ラズベリーパイ Raspberry Pi2 スターターキット

ハック ラズベリーパイ Raspberry Pi2 スターターキット

圧電スピーカーで音階を奏でる

番外編圧電スピーカーで音階を奏でる。

すぐれたプログラマーになる過程で、いつかはC言語を学習することになります。ここで電子工作と一緒にC言語についても少しだけ触れてみましょう。今回は圧電スピーカを使って音階を奏でることにします。ここでもまずは、wiringPiを使います。

以前はRubyのライブラリーとして使ったwiringPiなのですが、今回はC言語です。本来のオリジナルプログラムはC言語で書かれています。それをRubyでも使えるようにされていたのですね。他の言語で書かれたライブラリーを目的の言語でも使えるように作られたプログラムをラッパーなどといいます。食品を保存するときに使うあのラップですね。既存の言語をターゲットの言語で覆い包んでしまうイメージです。

説明はこれぐらいにして、wiringPiをインストールしましょう。
gitがインストールされてない場合はインストールします。
pi@raspberry sudo apt-get install git-core

gitを使ってwiringPiをインストール。
pi@raspberry git clone git://git.drogon.net/wiringPi

pi@raspberry cd wiringPi
./build

buildと入力することによって、C言語ソースコードコンパイルします。

今回は、作者のサンプルプログラムをそのまま拝借して動かしてみましょう。
tone.cというファイルを作成します。
pi@raspberry vi tone.c

/*
 * tone.c:
 *	Test of the softTone module in wiringPi
 *	Plays a scale out on pin 3 - connect pizeo disc to pin 3 & 0v
 *
 * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
 ***********************************************************************
 * This file is part of wiringPi:
 *	https://projects.drogon.net/raspberry-pi/wiringpi/
 *
 *    wiringPi is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU Lesser General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    wiringPi is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public License
 *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
 ***********************************************************************
 */

#include <stdio.h>
#include <errno.h>
#include <string.h>

#include <wiringPi.h>
#include <softTone.h>

#define	PIN	5

int scale [8] = { 262, 294, 330, 349, 392, 440, 494, 525 } ;

int main ()
{
  int i ;

  if (wiringPiSetup () == -1)
  {
    fprintf (stdout, "oops: %s\n", strerror (errno)) ;
    return 1 ;
  }

  softToneCreate (PIN) ;

  for (;;)
  {
    for (i = 0 ; i < 8 ; ++i)
    {
      printf ("%3d\n", i) ;
      softToneWrite (PIN, scale [i]) ;
      delay (500) ;
    }
  }
}

この圧電スピーカーは極性を意識しなくても問題ありません。
そして、今回もコンパイルします。今回はファイルの出力名等々を指定します。
pi@raspberry cc -o myprog tone.c -lwiringPi -lpthread
pi@raspberry ./myprog

LEDの時と同じ回路を作り音を鳴らすと音階が流れました。


f:id:yuriai0001:20131203183709p:plain

C言語を使った工作として最後にサーボモータを動かしてみましょう。
http://lchikaamazon.hatenablog.com/entry/2014/12/21/153644

部屋の明るさを取得するフォトトランジスター編

f:id:yuriai0001:20141202100320p:plain
フォトトランジスターはスマートフォンにも組み込まれており、日ごろからお世話になっている電子部品です。
今回使用するフォトトランジスターはLEDに似たような部品です。上記の図では白色になってます。

カソード、アノードのように足の長さが違いますが、このフォトレジスターの場合、長いほうがコレクター、短い方がエミッターです。コレクターをプラス電源側につなげましょう。CDSの場合と回路は同じですが、抵抗値として7.5kΩを使ってください。

フォトトランジスターとは名前の通りトランジスターの仲間です。ベース(ここでは光の強さにより強弱)に電流を流すとコレクタ、エミッタ間でより強い電流を流すことができます。

ここでは、当然、Raspberry Piでデジタル化された数値を取得するのが目標です。電圧の変化をA/Dコンバターを通じて出力させてみましょう。

現在の部屋の照度(Lux)を取得するために、便利なスマートフォンアプリがあります。アプリでおおまかな照度を得ながら実験をするとより理解が深まると思います。

Android
REPLE(リプレ) - Google Play の Android アプリ
iOS

REPLE

REPLE

スマホで撮影すると、照度を簡単に得ることができました。ここで、大阪市立博物館による、照度と明るさの目安を確認しておくのもよいでしょう。
照度と明るさの目安

フォトレジスターから流れる電流量を事前に把握しておきましょう。
f:id:yuriai0001:20141202102611j:plain
データシートによると100Luxで33μAが流れます。
今回は、7.5KΩを利用しているので、出力電圧は
=7500Ω×33μA
=247500μV
= 0.247V
と予想できますね。

計測したい照度のレンジによって抵抗値を変えてあげる必要があります。今回は50Lux~500Lux程度の測定を目安にしています。

Raspberry Piの設定とプログラムのコードは元のページにありますので、先ほどの続き「シリアル通信を有効可する」からお読みください。
また、CDSセルとは出力される電圧が違うのでRaspberry Piに出力されるデジタル数値はCDSセルを使った場合とは異なります。
出力される数値を計算する場合は、A/Dコンバーターのデータシートをご覧ください。
http://www.ee.ic.ac.uk/pcheung/teaching/ee2_digital/MCP3002.pdf

ADコンバーターとフォトレジスタを使って部屋の明るさを取得しよう。 - Raspberry Pi 電子工作

Raspberry Piをメディアサーバーに変身させる。

まずはラズパイを押入れから引っ張り出してくる
意気揚々とラズパイを買ったものの、一度遊んだ後は押入れに眠ったままになっていませんか?

それって仕方ないことです・・・。そもそも、ラズパイは日常で絶対必要なデバイスというより、ガジェット(玩具)なので。今日はそんな悲しいラズパイをメディアサーバーとして復活させるための方法です。変身させちゃっていいんですか?いいんです!

何をするのかというと、日本でも発売されたクロームキャストのように、手元にあるメディア(映像、写真、音楽)などを大画面のデヴァイス(テレビ)などに映して楽しもう!ということをやってみます。

今回はOSをインストールして、スマホにアプリをダウンロードするだけでなので超簡単です。30分あれば、あなたのテレビでYoutubeを観れるようになります。ではやってみましょう。

Raspbmcを使おう
どのように実現するのかというと、Xbmcというアプリケーションを使います。X-box向けのメディアセンターアプリということで開発が開始された経緯があるのですが、現在はオープンソースプロジェクトとなっています。

RaspbianにもXbcmはインストールできますが、Raspbmcという専用のディストリビューションがありますのでそれを使うのが手っ取り早いです。


もし、windowsをお使いであれば、SDにセットアップしてくれるアプリケーションがあるので下記からDLしてください。
http://www.raspbmc.com/wiki/user/windows-installation/

LinuxMacOSをお使いの場合はこちらを参考にしてください。
http://www.raspbmc.com/wiki/user/os-x-linux-installation/

SDでのセットアップが完成したら、あとはラズパイを起動するだけです。
当然ですが、HDMIを使ってテレビに接続します。また、ネットワークへの接続は必須です。USBバスパワーではなく、スマホ用の5V、1Aのアダプターを使ってセルフパワーで電源を取ってくることをお勧めします。


自動的に何度か再起動を繰り返し、セットアップ完了!
f:id:yuriai0001:20140906160119j:plain


リモコンアプリをDLする
今後、リモコンとして使用できるスマートフォン向けアプリをDLします。
iOSでもAndoridどちらでも構いませんが、手元にiPhoneがあるので、iOS向けをダウンロード。

Official XBMC Remote

Official XBMC Remote

  • joethefox
  • ユーティリティ
  • 無料

アプリを起動すると、Add Hostを押してhostを追加します。
Description: MyHOMEなど適当に何か入れてください。
Host:port/ TCP port:ラズパイのipアドレス。portは80でOKです。
MAC Address、Username and Passwordの欄はブランクで構いません。

設定を完了してアプリのメニューからUse as REMOTE CONTROLを選択します。
そうすると自動で認識してくれます。

テレビでYoutubeを見る。
基本的にはシンプルなインターフェースなので、ある程度触れば直感で操作できるようになります。
例えば、Youtubeを見るのであれば、Videosの項目からVideo Add-onsを選択後、YouTubeを選びます。
インストールが完了するとVideos項目の欄にYouTubeがあるので・・・・。と言葉で説明するより実際にやってみたほうが早いです。

Raspberry Pi typeBで利用していますが、多少バックグラウンド処理でもたつくことがありますが、特にイライラすることもなく。
YouTubeからビデオの予告編を見る。
f:id:yuriai0001:20140906144227j:plain

その他のVideo Add-on
f:id:yuriai0001:20140906144855j:plain

Musicではネットラジオ局のアドオンがたくさんあります。

もちろん、SDの中にメディアファイルを用意すればそのディレクトリーを追加することが可能です。また、ネットワーク経由で例えばwindowsの共有ファイルを取り込むことも可能になってます。

以上、30分ほどの超簡単な作業でRaspberryPiをメディアサーバーにすることができました。

暑い夏の日には、涼しい家に帰りたい。

そろそろ夏が始まりますね。
冬場、外から帰ってきて部屋が寒いというのは元々外のほうが寒いということで、ある程度我慢できますが、夏の蒸し暑い部屋はどうですか?あの、「もやぁー」とした部屋はなかなか耐え難いですね。
f:id:yuriai0001:20140526151102j:plain

そこで、夏本番を迎えるまでにRaspberry Piを使ってエアコンを自動操作しちゃおうと計画しております。

パナソニックのスマート家電シリーズのように、スマートフォンからの操作に対応している家電もあり、持ち家の場合はそういうスマート家電を購入しちゃうのも1つの手なのですが、賃貸だとエアコンを付け替えるなんてのは大家さんの判断が必要になってしまい面倒な作業なのです。


ということで、作成までの手順として・・・。
Twitterのツイート情報をもとに電源 ON/OFF
(外部に公開となるとセキュリティ対策に費やす時間がもったないのでTwitterを使います)
・赤外線リモコンを作る(受信)
・赤外線リモコンを作る(発信)

いくぶん赤外線を使った工作は初めてなもので上手くいくのかは不安ですが、夏本番には間に合うように作成したいですね。今後の完成までの過程は当ブログにて随時公開致します。