Vol.554 10.Oct.2008
C
自宅で染み抜き
by fjk
ある朝、洗濯をしようとしていた女房が「このシャツはシミがひどく、漂白しても落ちないので捨てましょうよ」と声をかけてきた。そのシャツはまだ新しいのだが多分焼き肉のソースが飛んで所々にシミがついている。「染み抜きをすれば綺麗になるかも」と答え、とりあえずシャツは捨てられないことになった。
染み抜きに確証があったわけではないが、ちょっと前に、たまたまテレビで「しみぬき王子」(福永真一さん、http://blog.livedoor.jp/karisuma929/)のワンポイント染み抜き法を聞いていたからである。 それは、家庭でも出来る簡単な方法として、
@ 酸素系の漂白剤(例えばワイドハイター)に重曹を1:1で加えた液を作る。
A 裏に布などをあて、綿棒などで滲みの部分にその液を着ける。
B さらに、その部分に蒸気をあてる(やかんの湯気又はアイロンのスチーム)。
C 最後に水洗する。
という手順である。
半信半疑でその手順に従って染み抜きをトライしてみると、直ぐには色が変わらないが、しばらくするとシミが薄くなり、これを2回繰り返したところ、シミはほとんど無くなった。生地の色落ちもなく大成功である。
これは、漂白力は加熱やアルカリにするほど反応速度が高まるためで、軽微なシミなら@の液を着けるだけでもシミが取れた。もっと漂白力を高める組み合わせもあるのだが、あまりアルカリを強くすると生地を傷めるので、上記の組み合わせが適当らしい。もっと詳しい情報は「家庭で出来る染み抜き方法」(http://sentaku-shimnuki/hyohaku-2.html)などを参照。
S
PICを使おう(7)−A/Dと温度−
by fjk

PIC16F88でLCD表示が上手くいったので、次はアナログデータを取り込む。PB4に可変抵抗器で作製した電圧を入力してテストする。mikroBASICのマニュアル通りにプログラムを記述。A/Dは10ビット(1024)でフルスケール電圧が5Vなので、A/Dデータを5倍するとほぼ入力電圧となる。2進数の文字列変換にはWordToStr関数を用いた。
可変抵抗器の変わりに温度センサICであるLM35D(1V/100℃、ブレッドボードの左端にある3ピンのIC)を差し込むと温度が表示された(0.5℃単位。LM35Dのピン配置は下図参照)。
電圧リファレンスとして電源電圧である5Vを用いたが、可変抵抗器を使って1.024VをRA3(ref+)に入力すると0.1℃の精度で温度が測定できる(この場合A/Dデータは5倍としない)。
作製したプログラムは以下のとおり。
program ADtest '------------------------------------------------------
' PIC16F88 内部8MHz (IRCF<0:2>=111)
' LCD制御pin R/W:RB0 RS:RB7 E:RB6 (PB0はダミー、実際は入力として使用)
' LCDデータpin D4:RA0 D5:RA1 D6:RA7 D7:RA6 (こんなビット組み合わせも可能)
' Device Flags: (configデータです。EditProjectウィンドウのDeviceFlagsで設定)
' _CP_OFF _CCP1_RB3 _DEBUG_OFF _WRT_ENABLE_OFF
' _CPD_OFF _LVP_OFF _BODEN_OFF _MCLR_OFF _PWRTE_ON
' _WDT_OFF _INTRC_IO _IESO_ON__CFG2 _FCMEN_ON__CFG2
dim text as char[20] ' LCD表示文字列のバッファー
dim temp as word ' A/D変換データの格納変数(16ビット)
main:
OSCCON = %01110000 ' 内部クロックの8MHzを使用
CMCON = %00000111 ' コンパレータを使わない
PORTA = 0
TRISA = %00110000 ' PA4、PA5(MCLR)は入力
ANSEL = %00010000 ' PA4はアナログ入力
ADCON1 = %10000000 ' A/D変換データは右詰め
PORTB = 0
TRISB= %00000001 ' PB0は入力
Lcd_Config(PORTA,6,7,1,0,PORTB,7,0,6) ' LCDの初期化
Lcd_Cmd(LCD_CURSOR_OFF) ' LCDのカーソルは表示しない
Lcd_Out(1,1,"A/D test") ' タイトルをLCDに表示
Lcd_Out(2,5,"0 mV") ' 電圧表示の初期データをLCDに表示
while TRUE
temp = Adc_Read(4) * 5 ' PB4をA/D変換し、5倍してtempに格納
WordToStr(temp,text) ' ワードデータを文字列に変換
Lcd_Out(2,1,text) ' 変換した文字列をLCDで表示
wend ' A/D変換を繰り返す
end.
PA3(ref+)に1.024Vを入力して温度を測定・表示する例(configの設定は前プログラムと同じ)。
program TMPtest ' --------------------------------------------------------------------------------
dim text as char[20] ' LCD表示文字列のバッファー
dim temp as word ' A/D変換データの格納変数(16ビット)
main:
OSCCON = %01110000 ' 内部クロックの8MHzを使用
CMCON = %00000111 ' コンパレータを使わない
PORTA = 0
TRISA = %00111000 ' PA3、PA4、PA5(MCLR)は入力
ANSEL = %00011000 ' PA3、PA4はアナログ入力
ADCON1 = %10100000 ' A/D変換データは右詰め、ref+を使う
PORTB = 0
TRISB = %00000001 ' PB0は入力
Lcd_Config(PORTA,6,7,1,0,PORTB,7,0,6) ' LCDの初期化
Lcd_Cmd(LCD_CURSOR_OFF) ' LCDのカーソルは表示しない
Lcd_Out(1,1,"Temp test")
text = "0.0 C" ' 半角の[°]は入力できない
text[4] = 0xDF ' ℃と表示するため16進で指定。
Lcd_out(2,4,text)
while TRUE
temp = Adc_Read(4) ' A/D変換データを取得
WordToStr(temp,text) ' 文字列に変換
strAppendSuf(text,".") ' 文字列の長さを1つ増やす
text[5] = text[4] ' 4文字目を右に移動
text[4] = "." ' 小数点を途中に追加
Lcd_Out(2,1,text) ' LCDに表示
wend
end.

PIC16F88を用いたLCD温度計の回路図