名前が決めれない(RaspberryPi)

ラズベリーパイを使ったプログラムを公開します

CPU温度の確認

cat /sys/class/thermal/thermal_zone0/temp


C言語によるCPU温度の取得

ソース
kenichihanasaki / rpi-cpu-temperature / source / rpi-cpu-temperature — Bitbucket

/* 
 * File:   main.cpp
 * Author: admin
 * 
 * パイプを使ったコマンド呼び出しによるCPU温度の取得を行います。
 * 
 * Created on 2015/02/27, 20:18
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*
 * 
 */
int main(int argc, char** argv) {
    
    char buffer[1024];
    memset(buffer, 0, sizeof(buffer));
    
    const char* command = "cat /sys/class/thermal/thermal_zone0/temp";
    
    FILE* fp = popen(command, "r");
    
    fgets(buffer, sizeof(buffer), fp);
    pclose(fp);
    
    printf("cpu-temperature %s\n", buffer);
    
    return 0;
}


ビルド

make
./rpi-cpu-tempereture




CPU温度の監視とコマンド実行

ソース
https://bitbucket.org/kenichihanasaki/rpi-cpu-temperature-monitor/src

/* 
 * File:   main.c
 * Author: system
 *
 * Created on 2015/04/29, 13:17
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <stdbool.h>

#define BUFFER_SIZE (512)
#define INTERVAL (3)

volatile bool g_running = true;

/**
 * 
 */
static void signalHandler(int sig)
{
	g_running = false;
}

/**
 * 
 */
int main(int argc, char** argv) {
	
	int max_temperature = 80 * 1000;
	int temperature = 0;
	
	char command[BUFFER_SIZE];
	char buffer[BUFFER_SIZE];
	
	const char* path = "/sys/class/thermal/thermal_zone0/temp";
    
    FILE* fp = NULL;
	
	if (SIG_ERR == signal(SIGINT, signalHandler)) {
		exit(EXIT_FAILURE);
	}
	
	if(argc >= 2)
	{
		temperature = atoi(argv[1]) * 1000;
		
		if(temperature != 0)
		{
			max_temperature = temperature;
		}
	}
	
	memset(command, 0, sizeof(command));
	
	if(argc >= 3)
	{
		strncpy(command, argv[2], BUFFER_SIZE - 1);
	}
	else
	{
		strncpy(command, "sudo halt", BUFFER_SIZE - 1);
	}
	
	//printf("max_temperature=%d\n", max_temperature);
	
	while(g_running)
	{
		if((fp = fopen(path, "r")) != NULL)
		{
			fgets(buffer, sizeof(buffer), fp);
			fclose(fp);
			fp = NULL;
			
			temperature = atoi(buffer);
			
			if(temperature >= max_temperature)
			{
				system(command);
				break;
			}
		}
		
		sleep(INTERVAL);
	}
    
	if(fp != NULL)
	{
		fclose(fp);
	}
	
	return (EXIT_SUCCESS);
}


r-pi.hateblo.jp

オーバークロックとダウンクロック

RaspberryPiをオーバークロックする - Qiita

/boot/config.txtの書き換え

起動時の設定ファイルにより動作クロックを変更することが出来る。詳細についてはeLinuxの資料を参考にした。

デフォルトのCPUクロックは700Mhzであることがわかる。
/boot/config.txt

## Some over clocking settings, govenor already set to ondemand

##None
#arm_freq=700
#core_freq=250
#sdram_freq=400
#over_voltage=0

1GHzまでクロックアップするには次のようにする。
/boot/config.txt

##Turbo
arm_freq=1000
core_freq=500
sdram_freq=500
over_voltage=6


CPU温度の確認 - namae_ga_kimerenai’s blog

見た目を整える

f:id:namae_ga_kimerenai:20150222164825j:plainここからが、手間がかかる作業になる。


株式会社タカチ電機工業

箱(黒)TW型プラスチックケース:W110 x D220 x H45.3(mm)/ブラック TW11-5-22B タカチ電機工業製|マルツオンライン


箱(白)TW11-5-22G プラスチックケース|通販|フルタカパーツセンターオンライン


ケースの加工業者もあるみたいだが、使用しなかった。

この箱をドリルで、穴あけ、ヤスリで整える、という手順を繰り返して部品をつけていく。

ちなみに、はじめは、ホットカッターを使って加工しようとしたが
切断面が汚くなり、うまくいかなかった。

f:id:namae_ga_kimerenai:20150222164119j:plain

穴あけの例として、上のケーブルが出てるとこの穴ね。
本当に根気がいるので、がんばってガリゴリしてほしい。



電源


RaspberryPiと、LEDパネルの2つに、それぞれ電源がいる。

電源からRaspberryPiに接続するケーブルは、USBからmicroUSBに変換するやつを使う。
電源からLEDパネルに接続するケーブルは、自作する。



サウンド
圧電スピーカー(圧電サウンダ)SPT15: パーツ一般 秋月電子通商 電子部品 ネット通販
TPA2006使用 超小型D級アンプキット: 組み立てキット 秋月電子通商 電子部品 ネット通販


外部のスピーカーを使う場合は、必要ないが、音を鳴らせるようにしたかったので
アンプとスピーカーをつけている、音量が小さくて、音質は悪い。

RaspberryPiのGPIOの電源とアンプを接続している。


RaspberryPiとLEDパネルの接続
RaspberryPiのGPIOのコネクタと、LEDパネルのコネクタは、ピン数が違う。
接続するためのケーブルは、自作する。

このへんの、細かい部品は、マルツパーツで、入手した。

日本圧着端子製造(JST) RA-S261T ヘッダソケット26P(MILスタンダード)
2540-16 ヘッダソケット16P(MILスタンダード)
(これで、あってるか自信ない)

圧着には、万力を使った。


RaspberryPiの固定

上のやつは、一回貼ったら、剥がすのが大変なので、最後のほうで使おう。



LANケーブルコネクタ

箱に、LANケーブルのコネクタを付ける。
固定は、ホットボンドを使った。



アクリルパネルの作成
アクリル板、アクリルケース、アクリル加工専門販売アクリルショップ「はざい屋」

図面
f:id:namae_ga_kimerenai:20150222180524p:plain

アクリルパネルの作成には、業者を使った。

この時点で、ハードウェアは完成。



音を鳴らす - 名前が決めれない(RaspberryPi)

時計のプログラムを作成する

オリジナルのソース
hzeller/rpi-rgb-led-matrix · GitHub

git clone https://github.com/hzeller/rpi-rgb-led-matrix/


改造したソース
https://bitbucket.org/kenichihanasaki/rpi-clock/src


ビルド

git clone https://kenichihanasaki@bitbucket.org/kenichihanasaki/rpi-clock.git
cd rpi-clock
make
sudo su
./clock


フォルダ構成
gpio.cc
gpio.h

led-matrix.cc
led-matrix.h

thread.cc
thread.h

修正したファイル
README.md
Makefile
main.cc

追加したファイル
bmp2array.pl
テスト用のPerlプログラム
ビットマップから配列を作成する。


関連リンク
Linux シグナル入門 - 2. シグナル・ハンドラと signal システム・コール
Gitコマンド一覧 - Qiita


見た目を整える - 名前が決めれない(RaspberryPi)

16x32LEDパネルを追加する

まずは、LEDパネルを買う。
RGBフルカラードットマトリクスLEDパネル 16x32ドット: LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販

使い方
Overview | Connecting a 16x32 RGB LED Matrix Panel to a Raspberry Pi | Adafruit Learning System

上記は、英語のサイトだけど、すごく分かりやすく書いてある。

"You Will Need"が、必要な部品
"Wiring the Display"が、ケーブルの接続図
"Testing"が、動作確認

ケーブルの接触不良や、配線間違いがあると、画面がバグる
あれー?ってなる。


GPIOピン配置
RPi Low-level peripherals - eLinux.org

上のピン配置と"Wiring the Display"を見ながら、頑張れ。




時計のプログラムを作成する - namae_ga_kimerenai’s blog




Hello Raspbian!

この時点で、下みたいに、SSHでコンソールが使える状態の前提で進める。

f:id:namae_ga_kimerenai:20150221180828p:plain

ちなみに、上は

#apt-upgrade

を実行中。


PCでもそうだが、時刻を同期させないと、内部時計は結構ずれる。
なので、ntpdateコマンドを使って、外部のNTPサーバーと時刻を同期させる。


ntpdate.cron

#!/bin/sh
ntpdate ntp.nict.jp ntp.jst.mfeed.ad.jp


上のやつ(ntpdate.cron)を、1時間ごとに、呼び出すため
/etc/cron.hourly
にファイルを置けばOK


起動時にシェルスクリプトを実行する。
/etc/rc.local
上記のファイルに実行したいコマンドを記述すればOK



16x32LEDパネルを追加する - namae_ga_kimerenai’s blog

熱対策

サーバーとして、RaspberryPiを使うので、熱対策をしたほうが、いいかもしれない。

 

Raspberry Pi に熱対策してみる : アジャイル株式会社

 

 


Raspberry Pi用ヒートシンクセット

Raspberry Pi用ヒートシンクセット

 

 

上のやつは、両面テープがついてて、貼り付けるだけだ。

らくちん。

 

より冷却したい場合は、ファンを使うといい。

 

Raspberry Piの温度対策、5Vファンの取り付け方(61度→46度) | ものづくりエクスペリメント

 


Hello Raspbian! - namae_ga_kimerenai’s blog