FC2ブログ

なんかいろいろこんぴゅーたかんけいのなぐりがき

なんか勉強しているこんぴゅーた関係のことのメモやそれ以外のことを書こうかなあ...

logs

MatrixLED + 温度センサで温度計

ちょうど部屋の温度計が壊れていたので、数時間かけて温度計を作ってみた。

P1080590.jpg


温度表示には温度別にそれぞれLED表示用の配列を用意した。もちろんさっき作った配列生成ツールを使った。

でこれがソース。MatrixLED制御部はhttp://kousaku-kousaku.blogspot.com/2008/07/arduinoled.html から拝借

boolean matrix[8][8]={
{0,0,0,1,1,0,0,0},
{0,0,1,0,0,1,0,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0}
};
boolean niju[8][8] =
{
{ 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 },
{ 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 1 , 1 , 1 , 0 , 1 , 1 , 0 },
};
boolean sanju[8][8]=
{
{ 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 },
{ 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 },
};
boolean niju1[8][8]=
{
{ 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 },
{ 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 },
{ 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 },
};
boolean niju2[8][8]=
{
{ 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 },
{ 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 },
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
};
boolean niju3[8][8]=
{
{ 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 },
{ 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 1 , 1 , 1 , 0 , 1 , 1 , 0 },
};
boolean niju4[8][8]=
{
{ 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 },
{ 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 1 , 1 , 1 , 0 , 0 , 1 , 0 },
};
boolean niju5[8][8]=
{
{ 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 },
{ 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
};
boolean niju6[8][8]=
{
{ 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 },
{ 0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 },
{ 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 1 , 1 , 1 , 0 , 1 , 1 , 0 },
};
boolean niju7[8][8]=
{
{ 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 },
{ 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 1 , 1 , 1 , 0 , 0 , 1 , 0 },
};
boolean niju8[8][8]=
{
{ 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
};
boolean niju9[8][8]=
{
{ 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 },
{ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 },
{ 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 },
{ 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 },
};



int sencer = 5;
double num = 0;
double temp = 0;
int count=0;
void setup(){
Serial.begin(9600);
for(int i=2;i<=17;i++){
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
}
void loop(){
count++;
if(count>=25)
{
num = analogRead(sencer);
num = num*5;
temp = (num - 424) / 6.25;
Serial.println(temp,DEC);
count=0;
}

switch((int)temp)
{
case 20:showMatrix(niju);break;
case 21:showMatrix(niju1);break;
case 22:showMatrix(niju2);break;
case 23:showMatrix(niju3);break;
case 24:showMatrix(niju4);break;
case 25:showMatrix(niju5);break;
case 26:showMatrix(niju6);break;
case 27:showMatrix(niju7);break;
case 28:showMatrix(niju8);break;
case 29:showMatrix(niju9);break;
case 30:showMatrix(sanju);break;
default:showMatrix(matrix);break;
}



}
void showMatrix(boolean matrix[8][8])
{
for(int i=2;i<=9;i++){
digitalWrite(i,HIGH); //行:HIGHで点灯
for(int j=10;j<=17;j++){
if(matrix[i-2][j-10]==1){//点灯条件
digitalWrite(j,LOW); //列:LOWで点灯
}


delayMicroseconds(300);//0.03秒点灯
digitalWrite(j,HIGH);//オフにする
}
digitalWrite(i,LOW);//オフにする
}
}

ソース見ると分かるが表示可能範囲は20~30度まで。それ以外はAと表示される。

ドットマトリックスLEDを試した

P1080589.jpg

昨日秋月で100円で買ったドットマトリックスLEDをArduinoに配線してみた。ピンが合計16本いって、一見ArduinoDuemilanoveではピンが足りないような気がするが実はアナログ入力のところを17、18番ピン・・・といったように扱える。

今回の実験は
http://kousaku-kousaku.blogspot.com/2008/07/arduinoled.html

を見てやったんでソースコードは上のページ参照のこと。

実験していくとどうやら、ドットをそれぞれ光らせるには1か0の値が入った8×8の配列が必要みたい。
なので文字とか絵とかを表示したかったらいちいち1とか0とかを64回入力して配列を作らなければならない。

で、面倒なんでPythonで配列作成補助ツールを作った。将来のことを考えて8×8以外、たとえば16×16のマトリクスでも作成できるようにした。
チェックボックスをチェックしていきOUTPUTボタンを押せば標準出力に配列がでるんでそれをコピペして利用するかんじ。

写真掲載予定

で、ツールのコード(要:Tkinterモジュール。確かWindows版Pythonの場合、デフォルトで入ってるはず)

from Tkinter import *

def output():
global dots
print '{'
for x in range(low):
for y in range(low):
if dots[x][y].get():
num = 1
else:
num = 0
if y == low-1:
print num,'},'
elif y == 0:
print '{',num,',',
else :
print num,',',

print '};'


root = Tk()
root.title("DotsMatrixMaker2Array")
low = 16 # if you change this number you can make low*low dots
frame = range(low)
dots = range(low)
for x in range(low):
frame[x] = Frame(root)
dots[x] = range(low)

for x in range(low):
for y in range(low):
dots[x][y] = BooleanVar()

for x in range(low):
for y in range(low):
Checkbutton(frame[x],variable=dots[x][y]).pack(side = LEFT)
frame[x].pack()

button = Button(text="output",command=output).pack()
root.mainloop()


今回作ったツールはすでにどっかに存在する気がするがネットで調べても見つからなかったんで作ってしまった、結構作るのに時間かかったなあ・・・

Paging Navigation

Navigations, etc.