マカロニペンギンの健忘録

特にテーマを決めているわけじゃないが、私が気になったことを書いていく予定です。

表計算ソフトの誤差について

2010年10月30日 | Weblog
いままで、表計算ソフトは誰に教わることもなく独学でやってきました。
日頃、表計算ソフトは見積書作成などで使用していますが整数しか扱ったことがありませんでした。小数点以下の計算はめったにしたことはありませんでした。

今回、Arduinoのサーミスタのサンプリング値→電圧→抵抗値→温度を計算するにあたり指数・対数計算が必要なのでOpenOfficeのCalcのお世話になりました。

ふと、計算結果をArduinoのIDEにコピーする前段階でテキストエディタに張り付けたとき想定していなかった数字が貼り付けられたことにビックリしました。
どこかの計算ミスかと思い、改めて計算を見直してみましたがそんなことはありません。

簡単に再現する方法があります。
A1セルに「0」を入力します。
A2セルに「=A1+0.1」を入力します。
A2セルをコピーしてA3からA62に貼り付けします。
A62セルをコピーしてどこか別のセルに「形式を選択して貼り付け」で値のみを貼り付けます。
すると「6.1」ではなく「6.0999999」が表示されてしまうのです。

OpenOfficeのコミュニティーフォーラムに質問したところ、「誤差」だそうです。
試しにMS社の97年度版の表計算ソフトで同じことをしたところ、似たような結果になりました。

コミュニティーフォーラムで教えてもらった日経PC21のホームページにもMS社のソフト上でこの誤差の説明をしてありました。
独学の弊害ですね。加藤茶のパソコン教室などに行けばきっと教えているかもしれない常識的なことを知らないなんて・・・・
もし、こんな知識で人が乗った宇宙船の軌道計算をしていたらとんでもないことになっていたでしょう。(私がそんなことをすることには絶対にありませんが)

ホント、日々勉強です。
OpenOfficeコミュニティーフォーラムのみなさん、ありがとうございました。

ただ、未だに納得はしていませんよ。
こんなことを気にしなくってもきちんとした値がでる表計算ソフトを作ってほしいと切に要望します。

Proposed Univarsal Board for Arduino

2010年10月30日 | 電子工作
Arduino用のユニバーサル基板は数社から発売になっています。
私が持っているのはサンハヤト製とSparkfun製のものです。

どららも共通しているのが2階建て以上にはできないと言うことです。

やはり、Arduinoを使えば3階建て以上にしたいと思うのは当然なのではないでしょうか。
私も今回、液晶ディスプレイをArduinoに取り付けましたが、液晶ディスプレイボードは最上階に取り付けるとして、それ以外のアプリケーションボード(私が勝手に命名)は中層階に付けたいじゃないですか。

そこでユニバーサル基板屋さんに提案です。

既存のArduinoのユニバーサル基板よりは少し大きくなってしまうのですが、オスのピンとメスのピンの幅の同じユニバーサル基板を作って欲しいのです。

私が書いた(汚い)手書きの図面と通りです。

当然ながら、少しずつですがずれていきます。
基板上のバランスにもよりますが、10階建てぐらいになるとバランスがとれなくなって倒れると思います。

とりあえず、この提案をArduinoのユニバーサル基板を作っているメーカーに提案しようと思っています。

よろしくお願いいたします。

温度計完成 on Arduino

2010年10月29日 | 電子工作
前回の続きです。

Arduinoで温度計が完成しました。
Arduinoでは対数計算ができない(と思う)ので、OpenOfficeでサンプリング-温度のテーブルを作成しプログラムの中に載せることにしました。
ですのでテーブルばかりがデカいです。
それから作成したテーブルでカバーしている温度幅は-10.0℃から41.2℃までです。

あと、B定数ですがメーカーから出されてるもの(3435K)は25℃と85℃を基準にしているものなので、気温を測定するにはちょっと、と言うわけで0℃と25℃で計算し直しました。(3269K)

実際の温度とどのぐらいの誤差があるのかは分かりません。
趣味で補正をしていただける方がいらっしゃいましたら、ご連絡ください。

サーミスタは石塚電子株式会社の103AT-11です。
このサーミスタは温度が上がっていくにしたがい、抵抗値が下がっていくタイプです。

//----------------------------------------------------------------------------
// Ondosokutei
// 2010/10/29 http://blog.goo.ne.jp/soratobu_macaronipenguin
// Thermistor = Ishizuka Electronics Corporation 103AT-11
// B_teisuu 3435K -> 3269K ni henkou
// temp range -10.0 to 41.2

#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,5,4,3,2);
float temp_table[] = {41.2,41.1,41.0,40.9,40.7,40.6,40.5,40.4,40.2,40.1,40.0,39.8,39.7,39.6,39.5,39.3,39.2,39.1,39.0,38.9,38.7,38.6,38.5,38.4,38.2,38.1,38.0,37.9,37.7,37.6,37.5,37.4,37.3,37.1,37.0,36.9,36.8,36.7,36.5,36.4,36.3,36.2,36.1,35.9,35.8,35.7,35.6,35.5,35.4,35.2,35.1,35.0,34.9,34.8,34.7,34.5,34.4,34.3,34.2,34.1,34.0,33.8,33.7,33.6,33.5,33.4,33.3,33.1,33.0,32.9,32.8,32.7,32.6,32.5,32.3,32.2,32.1,32.0,31.9,31.8,31.7,31.6,31.4,31.3,31.2,31.1,31.0,30.9,30.8,30.7,30.5,30.4,30.3,30.2,30.1,30.0,29.9,29.8,29.7,29.5,29.4,29.3,29.2,29.1,29.0,28.9,28.8,28.7,28.6,28.5,28.3,28.2,28.1,28.0,27.9,27.8,27.7,27.6,27.5,27.4,27.3,27.1,27.0,26.9,26.8,26.7,26.6,26.5,26.4,26.3,26.2,26.1,26.0,25.9,25.7,25.6,25.5,25.4,25.3,25.2,25.1,25.0,24.9,24.8,24.7,24.6,24.5,24.4,24.3,24.2,24.0,23.9,23.8,23.7,23.6,23.5,23.4,23.3,23.2,23.1,23.0,22.9,22.8,22.7,22.6,22.5,22.4,22.3,22.2,22.1,21.9,21.8,21.7,21.6,21.5,21.4,21.3,21.2,21.1,21.0,20.9,20.8,20.7,20.6,20.5,20.4,20.3,20.2,20.1,20.0,19.9,19.8,19.7,19.6,19.5,19.3,19.2,19.1,19.0,18.9,18.8,18.7,18.6,18.5,18.4,18.3,18.2,18.1,18.0,17.9,17.8,17.7,17.6,17.5,17.4,17.3,17.2,17.1,17.0,16.9,16.8,16.7,16.6,16.5,16.4,16.3,16.1,16.0,15.9,15.8,15.7,15.6,15.5,15.4,15.3,15.2,15.1,15.0,14.9,14.8,14.7,14.6,14.5,14.4,14.3,14.2,14.1,14.0,13.9,13.8,13.7,13.6,13.5,13.4,13.3,13.2,13.1,13.0,12.9,12.8,12.6,12.5,12.4,12.3,12.2,12.1,12.0,11.9,11.8,11.7,11.6,11.5,11.4,11.3,11.2,11.1,11.0,10.9,10.8,10.7,10.6,10.5,10.4,10.3,10.2,10.1,10.0,9.8,9.7,9.6,9.5,9.4,9.3,9.2,9.1,9.0,8.9,8.8,8.7,8.6,8.5,8.4,8.3,8.2,8.1,8.0,7.9,7.8,7.6,7.5,7.4,7.3,7.2,7.1,7.0,6.9,6.8,6.7,6.6,6.5,6.4,6.3,6.2,6.1,5.9,5.8,5.7,5.6,5.5,5.4,5.3,5.2,5.1,5.0,4.9,4.8,4.7,4.6,4.4,4.3,4.2,4.1,4.0,3.9,3.8,3.7,3.6,3.5,3.4,3.2,3.1,3.0,2.9,2.8,2.7,2.6,2.5,2.4,2.3,2.1,2.0,1.9,1.8,1.7,1.6,1.5,1.4,1.3,1.1,1.0,0.9,0.8,0.7,0.6,0.5,0.4,0.2,0.1,0.0,0.0,-0.1,-0.2,-0.3,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.3,-1.4,-1.5,-1.6,-1.7,-1.8,-2.0,-2.1,-2.2,-2.3,-2.4,-2.5,-2.7,-2.8,-2.9,-3.0,-3.1,-3.3,-3.4,-3.5,-3.6,-3.7,-3.9,-4.0,-4.1,-4.2,-4.3,-4.5,-4.6,-4.7,-4.8,-4.9,-5.1,-5.2,-5.3,-5.4,-5.6,-5.7,-5.8,-5.9,-6.1,-6.2,-6.3,-6.4,-6.6,-6.7,-6.8,-6.9,-7.1,-7.2,-7.3,-7.5,-7.6,-7.7,-7.8,-8.0,-8.1,-8.2,-8.4,-8.5,-8.6,-8.8,-8.9,-9.0,-9.2,-9.3,-9.4,-9.6,-9.7,-9.8,-10.0};

void setup(){
lcd.begin(16,2);
}


void loop(){
int sampling;
lcd.clear();
lcd.setCursor(0,0);
sampling = analogRead(0);
lcd.print("Sampling ");
lcd.print(sampling);
lcd.setCursor(0,1);
lcd.print("Temp. ");
lcd.print(temp(sampling));
delay(1000);
}

float temp(int temp_sampling){
return temp_table[temp_sampling - 370];
}

//----------------------------------------------------------------------------

温度測定 on Arduino

サーミスタの抵抗-温度特性

2010年10月28日 | 電子工作
続けざまに頭のお勉強だ。
Arduinoにサーミスタを接続して温度測定がしたい!!
サーミスタを購入したので準備万端だ。

Arduinoに接続もした。
数値が出てきた。

しかし!!
サーミスタは温度によって抵抗値が変化する。
さらにArduinoはテスターではないので入力は抵抗値ではなく電圧でしか入力することはできない。
また、さらにサーミスタは抵抗-温度特性という計算式上で温度と抵抗値を変化させる。
結論、繋げただけではまったく温度を読み取ることができない

とにかく順に解いていくしかないようだ。
私が購入したのは「石塚電子株式会社」の103AT-11というサーミスタ。
幸いなことに資料はネットに公開してある。
さらにさきほど言った抵抗-温度特性もこのページの中のカタログに載っていました。

R1=R2exp(B(1/T1-1/T2))
T1,T2:絶対温度
R1,R2:T1,T2におけるゼロ負荷抵抗値(Ω)
B:B定数(K)
だそうだ。
B定数は103AT-11の場合、3435Kであることは分かっている。

しかし私が知りたいのは温度から抵抗値ではなく、抵抗値から温度が知りたいのである。

ところでexpってなんだ?
もしかして高校で習ったんだろうか?
もうGoogle先生、Wikipedia先生総動員である。

結局、上記の式は
T1=1/(1/T2+1/B×ln(R1/R2))
になるみたいだ。
これはマジで間違えていたらごめんなさい。
ご指摘ありましたらよろしくお願いいたします。

0℃のところと25℃のところの数字を入れてみたら、同じにならないまでも比較的近い値になったので、もしかしたら合っていると思う。

後は電圧値から抵抗値を出せば、温度が分かるはずなんだけどな。
これは次回

数学の宿題の回答

2010年10月28日 | Weblog
業務連絡です。
会社の同僚さん、さきほど出した宿題はできたでしょうか。

先ほどの問題を平面で考えることにしました。
縦方向を300mmにした場合、当然ながら直角に切った面は300mmです。(図1)
縦方向の線は平行のまま右下に30°ずらすとすると図2になります。
図2の直角に切った断面はa'になります。
a'=300×cos30°=259となります。(図3)
つまり狭くなりました。
すみません。私が間違えていました。



液晶ディスプレイ起動

2010年10月27日 | Weblog
ご無沙汰です。
前回の液晶ディスプレイがうんともすんとも動かなかった理由は私の配線間違えによる瞬殺でした。
このディスプレイは千石電商のとっても良いモノだったのですが、一度も文字を表示すること無くお亡くなりになってしまいました・・・
どんなに良いモノでも配線を間違えれば一発で逝ってしまいます。

それからというもの代わりのディスプレイを手に入れるのが大変です。ここ神奈川県の湘南地区(と、言っても海からはかなり離れているのですが)はサザンのおかげで全国の知名度は抜群なれど、電子工作をするにはどうしようもないほど不便な場所なのである。

今回、やっとこさ秋月電子通商から、とっても安い液晶ディスプレイSC1602BS*Bを手に入れることが出来ました。
Youtubeの通りに画面にも表示するようになりました。

お恥ずかしながら、まだオライリージャパン発行の「Prototyping Lab」の099ページ止まりなのですが、ディスプレイの瞬殺以降、少しだけですが前に進むことができました。
まぁ、瞬殺のおかげでArduinoとディスプレイのつなぎ方をじっくり学ぶことができました。その甲斐あって本とはまったく異なるコネクタを持つこの液晶ディスプレイもどうやってつなぐのか分かるようになりました。

ちなみにこのディスプレイは7×2のコネクタを持っているためにブレッドボードに使用することができません。そのため、いきなりサンハヤト製Arduino用ユニバーサル基板に取り付けました。

ちなみにこの基板の裏を撮影した写真も添付しておきます。
とっても汚いです・・・

液晶ディスプレイ起動

想像力と創造力への挑戦

2010年10月22日 | 電子工作
私に対し、物議を醸し出してくる会社の同僚がおるんですわ。
当たり前過ぎちゃって普通の人は聞いてこないことまでズバズバ聞いてくるんですよ

事の起こりは先に書いたArduinoのことです。

「これで何ができるの」だとか「最終的に何がつくりたいのか」だとか、

実際、Arduinoってなんでもできるし、なにもできない。

今のところ、私のArduinoは大したことはできませんが、次は時計、その次は目覚まし時計、その次は温度計付き目覚まし時計にしたいと思っています。
それらを作っている過程で新しいアイデアが浮かんだらそちらを目指してみたいとは思います。

しかし「買った方が楽だし安いじゃん」と言う言葉はこの世界ではナンセンスだと思います。

とにかく想像力と創造力への挑戦なのです。
そして日常に当たり前にあるものを作っているとしても、その作っている過程を楽しみたい。

Arduino、そして電子工作ってそんなものだと思います。

ちなみに写真はディスプレイをつないだはいいけどウンともスンとも言ってくれずに困っているの図

arduinoで可変抵抗から入力してLEDの強弱

2010年10月19日 | 電子工作
いつもながら、こんなスケッチしか公開できずにすみません。

アナログ入力に可変抵抗をつなぎ、LEDをPWMで光量の増減をするスケッチを作りました。

-------------------------------------------
int val;

void setup()
{
pinMode(4, OUTPUT); // anode common
digitalWrite(4, HIGH); // 4番は常時オン
}

void loop()
{
val = analogRead(0);
if (val/4 > 200){
analogWrite(3, val/4);
}
}
-------------------------------------------

ただ、この電子部品の選定を間違えているのは可変抵抗を100kΩを使っていることです。(手持ちがこれしかなかったもので・・・)
10kΩが良いようです。

arduinoで可変抵抗から入力してLEDの強弱

春夏秋冬フォントを使っています。

2010年10月19日 | インターネット
皆さんはフォントに関してどのような感心がありますか?
私も日本でもっとも一般的な商業0Sに付属しているフォントを使っていて、それが当たり前になってしまっています。
しかし、普段使っていると言ってもやはりこのフォントには違和感があります。
正直、嫌いです。できたら使いたくない。
ただ、このフォントは解像度の悪いディスプレイで見ると結構見やすいんですよ。
そうゆうこともあり、手放せない。

子供たちが学校から持ち帰ってくるチラシに使われているフォントはOSに付属しているフォントなんかではありません。きっとフォントを気にしている先生がいるのかなぁ。読みやすいフォントを使われています。ただ、きっと有料なのでしょうね。
個人で、それも趣味で使用するのに有料フォントには手が出せません。

今回、あるものを作るのにOS付属のフォントではいやだなぁと思ったところからフォント探しが始まりました。
結果、個人で使用できて、私が「いいなぁ」と思えるフォントを見つけました。

春夏秋冬フォントです。

ただ、個人で作っているらしいのですべての漢字が登録してあるわけではないことだけは確かなようです。
私もあるものを作るために足りない漢字があったので掲示板で追加のお願いをしました。

ちなみに私の場合、このフォントをUbuntuで使用しています。



久しぶりにArduino on Ubuntu

2010年10月11日 | 電子工作
新しいArduino、Arduino unoが発売されたという記事を読んで、再びArduinoがやりたくなってDuemilanoveを引っ張り出しました。

とりあえず、LEDを一つでもいいから点滅させてみようと思ったのですが、使用しているパソコンが以前Arduinoを使用していた頃から一新されてしまっていてIDEがインストールさえされていない。

さらに最近の私のメイン機はUbuntuになっている。

調べてみると、さすがはArduino、Linuxのパッケージなどは当たり前のように揃っている。
さらにRepositoryさえ登録すれば、バイナリーでインストールできる(バージョンは古いですが)
USBのドライバー(だと思う)も書いてある通りに入力したら使えるようになりました。

今はとりあえず点滅しているだけですが、アイデアが固まったら、ハマってみたいと思っています。

とりあえず、下記のページにUbuntuでArduinoを使う方法が乗っています。
Install Arduino on Ubuntu Linux