SSブログ
小物・ツール ブログトップ
前の10件 | -

LCDに文字を表示させよう! [小物・ツール]

 今回はLCDに文字を表示させてみます。

 こちらのサイトをご覧になって、まずWindowsにドライバを読み込ませ、併せてインストールされる環境開発ソフトでArduinoにソースコード(C言語に似てるオリジナル。Arduinoでは「ライブラリ」とか「サンプルコード」とか言うみたい。)を書き込んでゆきます。

Arduinoはきちんと認識されました。.PNG インストールが終わったら念のためデバイスマネージャで認識されてる事を確認の上、早速デスクトップ上に現れた∞マークの「Arduino」を起動します。

キャプチャ.PNG
 開発ソフトが開くので以下のコードをコピペしてください。


//ここから
// include the library code:
#include 

// these constants won't change.  But you can change the size of
// your LCD using them:
const int numRows = 4;
const int numCols = 20;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() { 
  Serial.begin(9600);

//表示させたい文字を設定します。
 
  lcd.begin(numRows, numCols);
  lcd.clear();


// 以下、 lcd.setCursor(横の座標,縦の座標); 
// を指定して lcd.print("20文字"); で入力します。

  lcd.setCursor(0,0);
  lcd.print("MediaServer on LINUX");
  lcd.setCursor(0,1);
  lcd.print("AMD Phenom :GIGABYTE");
  lcd.setCursor(0,2);
  lcd.print("     on Arduino     ");
  lcd.setCursor(0,3);
  lcd.print("    by  bellmura  ");


//(既定には無い)外文字を設定します。
//要するにドット絵です。ここでは「Ⅱ」を設定しています。

 byte moji[8] = {
    B11111,
    B01010,
    B01010,
    B01010,
    B01010,
    B01010,
    B11111,
  };

//設定した外文字を格納する部屋を0~7で指定して、タイトルを付けます。
  lcd.createChar(0, moji);

//表示させる座標を指定します。
  lcd.setCursor(10, 1);
  lcd.write(byte(0));

}

byte serial_getch(){
  
  int incoming;  
  while (Serial.available()==0){}
	// read the incoming byte:
  incoming = Serial.read();

  return (byte) (incoming &0xff);
}

void loop(){

  byte rxbyte;
  byte temp;

  rxbyte = serial_getch();

  if (rxbyte == 254) //Matrix Orbital uses 254 prefix for commands
  {
    switch (serial_getch())
    {
    case 66: //backlight on (at previously set brightness)
      // not implemented				

      break;
    case 70: //backlight off
      // not implemented				
      break;
    case 71:  //set cursor position
      temp = (serial_getch() - 1);  //get column byte
      switch (serial_getch())  //get row byte
      {
        //line 1 is already set up
      case 2:
        temp += 0x40;
        break;
      case 3:
        temp += 0x14;
        break;
      case 4:
        temp += 0x54;
        break;
      default:
        break;
      }
      lcd.command(0b10000000 + temp);
      break;
    case 72:  //cursor home (reset display position)
      lcd.command(2);
      break;
    case 74:  //show underline cursor
      lcd.command(0b00001110);
      break;
    case 75:  //underline cursor off
    case 84:  //block cursor off
      lcd.command(0b00001100);
      break;
    case 76:  //move cursor left
      lcd.command(16);
      break;
    case 77:  //move cursor right
      lcd.command(20);
      break;
    case 78:  //define custom char
      lcd.command(64 + (serial_getch() * 8));  //get+set char address
      for (temp = 7; temp != 0; temp--)
      {
        lcd.print(serial_getch()); //get each pattern byte
      }
      break;
    case 83:  //show blinking block cursor
      lcd.command(0b00001111);
      break;
    case 86:  //GPO OFF
      //implement later
      break;
    case 87:  //GPO ON
      /*temp = serial_getch();
       				if (temp == 1)
       				{
       					GPO1 = GPO_ON;
       				}*/
      break;
    case 88:  //clear display, cursor home
      lcd.command(1);
      break;
    case 152: //set and remember (doesn't save value, though)
    case 153: //set backlight brightness
      //not implemented
      break;

      //these commands ignored (no parameters)
    case 35: //read serial number
    case 36: //read version number
    case 55: //read module type
    case 59: //exit flow-control mode
    case 65: //auto transmit keypresses
    case 96: //auto-repeat mode off (keypad)
    case 67: //auto line-wrap on
    case 68: //auto line-wrap off
    case 81: //auto scroll on
    case 82: //auto scroll off
    case 104: //init horiz bar graph
    case 109: //init med size digits
    case 115: //init narrow vert bar graph
    case 118: //init wide vert bar graph
      break;
    default:
      //all other commands ignored and parameter byte discarded
      temp = serial_getch();  //dump the command code
      break;
    }
    return;
  } //END OF COMMAND HANDLER

  //change accented char to plain, detect and change descenders
  //NB descenders only work on 5x10 displays. This lookup table works
  //  with my DEM-20845 (Display Elektronik GmbH) LCD using KS0066 chip.
  switch (rxbyte)
  {
    //chars that have direct equivalent in LCD charmap
    /*		case 0x67: //g
     			rxbyte = 0xE7;
     			break;
     		case 0x6A: //j
     			rxbyte = 0xEA;
     			break;
     		case 0x70: //p
     			rxbyte = 0xF0;
     			break;
     		case 0x71: //q
     			rxbyte = 0xF1;
     			break;
     		case 0x79: //y
     			rxbyte = 0xF9;
     			break;
     */  case 0xE4: //ASCII "a" umlaut
    rxbyte = 0xE1;
    break;
  case 0xF1: //ASCII "n" tilde
    rxbyte = 0xEE;
    break;
  case 0xF6: //ASCII "o" umlaut
    rxbyte = 0xEF; //was wrong in v0.86
    break;
  case 0xFC: //ASCII "u" umlaut
    rxbyte = 0xF5;
    break;

    //accented -> plain equivalent
    //and misc symbol translation
  case 0xA3: //sterling (pounds)
    rxbyte = 0xED;
    break;
    /*		case 0xB0: //degrees symbol
     			rxbyte = 0xDF;
     			break;
     */  case 0xB5: //mu
    rxbyte = 0xE4;
    break;
  case 0xC0: //"A" variants
  case 0xC1:
  case 0xC2:
  case 0xC3:
  case 0xC4:
  case 0xC5:
    rxbyte = 0x41;
    break;
  case 0xC8: //"E" variants
  case 0xC9:
  case 0xCA:
  case 0xCB:
    rxbyte = 0x45;
    break;
  case 0xCC: //"I" variants
  case 0xCD:
  case 0xCE:
  case 0xCF:
    rxbyte = 0x49;
    break;
  case 0xD1: //"N" tilde -> plain "N"
    rxbyte = 0x43;
    break;
  case 0xD2: //"O" variants
  case 0xD3:
  case 0xD4:
  case 0xD5:
  case 0xD6:
  case 0xD8:
    rxbyte = 0x4F;
    break;
  case 0xD9: //"U" variants
  case 0xDA:
  case 0xDB:
  case 0xDC:
    rxbyte = 0x55;
    break;
  case 0xDD: //"Y" acute -> "Y"
    rxbyte = 0x59;
    break;
    /*		case 0xDF: //beta  //mucks up LCDSmartie's degree symbol??
     			rxbyte = 0xE2;
     			break;
     */  case 0xE0: //"a" variants except umlaut
  case 0xE1:
  case 0xE2:
  case 0xE3:
  case 0xE5:
    rxbyte = 0x61;
    break;
  case 0xE7: //"c" cedilla -> "c"
    rxbyte = 0x63;
    break;
  case 0xE8: //"e" variants
  case 0xE9:
  case 0xEA:
  case 0xEB:
    rxbyte = 0x65;
    break;
  case 0xEC: //"i" variants
  case 0xED:
  case 0xEE:
  case 0xEF:
    rxbyte = 0x69;
    break;
  case 0xF2: //"o" variants except umlaut
  case 0xF3:
  case 0xF4:
  case 0xF5:
  case 0xF8:
    rxbyte = 0x6F;
    break;
  case 0xF7: //division symbol
    rxbyte = 0xFD;
    break;
  case 0xF9: //"u" variants except umlaut
  case 0xFA:
  case 0xFB:
    rxbyte = 0x75;
    break;
  default:
    break;
  }

  lcd.print(rxbyte);  //otherwise a plain char so we print it to lcd
  return;


}

//ここまで



なぜこんな複雑なコードを使用するのかと言えば、LCD SmartietというソフトをWindows上で走らせて、PC内のCPUやメモリなどの状態をLCDに表示させるリソースメーターとして使用する為ですが、結論から言えば、
失敗!
文字化けしちゃいました…[もうやだ~(悲しい顔)]

 もう、疲れたんだ…。
 いいんだ、文字が表示できれば…(涙)

 


 

LCD(キャラクタ液晶)でリソースメーター! [小物・ツール]

 今日は前述のLCDについて詳しくご説明いたします。

とんでもなくカッコいいマシン!.jpg 実はLCDをリソースメーターとして使おうと思ったのは一昨年の夏ごろ。
 MDPCのめちゃくちゃカッチョ良いPCを見てからでした。
 「パソコン内の情報を液晶に表示出来るんだ…。」
 いやあ、世界は広い!
 何と素敵なセンスでしょう。
 感動しました。



あれやこれや色々試してみました.jpg それ以来、ありとあらゆるサイトを見て周り、本屋を立ち読みしたり、片道2時間かけて図書館に出向いたり、パーツショップを回ったり、海外を含む通販サイトでいろいろと買い込んで研究しました。

 しかし、とにかく情報量が少ない。
 今時流行らない事らしく、情報の殆どは5年以上前のものばかり…。

 画像のパーツ郡はそのコレクション(?)の一部で、他にもいろいろありましたがゴミになっちゃいました[もうやだ~(悲しい顔)]


 最終的にたどり着いたのが画像のパーツ。
用意するのはこんなカンジ.jpg 画像中央の青い基盤は【永久保証付き】Arduino Uno(「アリュデュイーノ・ウノ」って読むんだって。)で、汎用の制御装置です。
 昨日のテレビ番組で見かけたんですが、日本にはこんな風に活用できるサイコーなヤツらも居ます。

 便利なのはY!オークションで出品されてるジャンパワイヤ・USBケーブル付きのもの。配線が楽チンです。

 画像下部のは4行X20文字のキャラクタ液晶
 この製品の縦幅は5インチベイにドンピシャなのでお勧めです。基盤自体も小型だし。

 このほかに10kΩの可変抵抗器をご用意ください。



 それでは、まずLCDの加工に取り掛かりましょう。

LCDの加工.jpg 基盤裏側の「R8」部分に付属の抵抗器を取り付け、「J2」にハンダを盛り付けてショートさせます。
 これで配線しなくてもLCD内のLEDが発光してくれるようになります。


信用していいのはこの配線図だけと思ってもらった方がいいです。.png LCDとArduinoを接続していきます。
 画像はArduinoサイトのものに手を加えたものです。
 LCDの1~14の穴にそれぞれ配線していきます。

 尚、WEB上には色んな配線図が散見されますが、中には無茶苦茶いい加減なものあって通電した際に一瞬でLCDをパーにした苦い経験から言えるのは、信用していいのはArduinoサイトのものだけだという事です。

少々乱暴なハンダ付け.jpg Arduinoにピンコネクタで接続すると抜けちゃう不安があるのと、PCに取り付ける際のスペースに制約があるため、僕はコネクタ差込部を取っ払ってハンダで直付けしました。

 LCDを5インチベイに取り付ける際にはコネクタを利用して接着剤などで固定してやれば問題無いのでしょうが、もしも「ハンダ直付け」をする際にはArduino心臓部のムカデみたいな細長いICチップは熱に弱いので取り外してから(これは差し込まれてるだけなので簡単に抜けます。)作業して下さい。

Arduinoのピンコネクタ取っ払って配線直付け.jpg
 配線作業は終わりました。
 でもこの段階ではまだUSB接続しても画像のように文字が表示される事はありません。



 次回はドライバのインストールとソースコードの書き込み作業をご説明致します。
















HDDは5インチベイにすっぽりハマるってご存知でした!? [小物・ツール]

DC-DCコンバータ装着 010.JPG
 「う~ん、どうしよう…。」
 HDDの置き場に苦心する中、選択肢は5インチベイ内に収める以外に見当たりませんでした。

 別に一般的で安価な変換マウンタ使えば問題ないんですが、何だか味気無くて…。

 アーでもないコーでもないやってるうちに「[exclamation]」気が付きました。
 HDDって横向きにすると5インチベイに(やや小さいものの)すっぽりハマります。

 SATA・電源ケーブルの接続を考えると裏表逆に取り付ける必要がありますが、これは使えそうな発見です。


DC-DCコンバータ装着 004.JPG ホームセンターでプラスチックのL字棒を購入。2mで500円くらいだったかな。
 
 5インチに切ってHDDに合わせてネジ穴を開けます。
 取り付け場所の上下・左右を間違えないように、慎重に穴あけ作業を行いました。
 塗装はお約束の模型用つや消しブラックで。

 固定作業はケースの「ひっかけ」(DVDドライブなどを取り付ける際、滑り込ませる為の折り曲げ部分)を利用。
 MDPC-Xで以前取り寄せた6角ボルトとワッシャーを用いて意味有り気な雰囲気に(笑)


DC-DCコンバータ装着 015.JPG SATA・電源ケーブルは「ひっかけ」穴から接続。
 HDDが上下裏返しになってるので一般的な左電源・右SATAとは逆になってます。






 気が向いたら14cmファン(これも5インチベイにドンピシャ!)でも付けようかな、と思います。
 

取り付けはキチッといきましょう。 [小物・ツール]

ポンプステー製作 010.JPG

 Pクリップとタイラップで固定するのはやめて、汎用金属ステーとネジでガッチリ固定する事にしました。
 ガチャガチャするのはポリシーに反します。

ポンプステー製作 001.JPG ホームセンターで売ってる汎用ステーを揃えます。
 小型のもの2つと大型のもの1つ。
 大型の物はPCケースに取り付ける為のネジ穴を4mm径で開けてもらいました。

 ステーとアクリルトップの穴位置が合わなかったので丸ヤスリで少し削って固定。

 すっきりしました。
 シンプルっていいですねぇ。

水温計の自作 [小物・ツール]

 今度は水温計を設置する事にしました。
 水冷水冷言っても果たしてどの程度の温度なのか気になるところですし。


 PCパーツ店を回ってみると売られていたのが内蔵型3.5インチベイタイプ。安価です。
 また、WEBで探してみると多分、両面テープでどこにでも貼り付けられるこんなタイプもありました。

 順当に考えればリザバータンクの底部に取り付けるセンサー
温度計付きのファンコンを組み合わせるのでしょうが、そもそもファンコンならPCケースに付属してるし、インチベイをガチャガチャゴテゴテにしたくないし、何しろ安易なポン付け感が情けなくて気に入らないので自作に挑戦してみます。


 まず、こだわったのが7セグメントLED表示である事。
 自作感バリバリで、暗いPCケース内で一際目立ち、マザーボードのPOSTコード表示(ASRockでは「Dr.Debug」って言うんだって)と統一性も図れます。

水温計設置 001.JPG そんな既製品は在りゃしないので秋月電子のブレッドボード・温度計キットを用いることに。
 付属の組み立て説明書がとにかく懇切丁寧でサルに波平の毛を移植したくらいの知識しか無い僕でも理解できました。

 あ!僕じゃないよ。あの事件(笑)←?




水温計設置 008.JPG この「ブレッドボード」ってハンダ付け無しで基板を組み上げられる優れものです。
 ハンダ技術に自身が無い僕には正しく打って付け!
 耐久・安定性に欠けるし少々スペースは嵩みますが、ユニバーサル基板なんか使ったらまず間違いなく配線間違えるのでこれにしときます。


水温計設置 016.JPG 電源は3pinコネクタから取ることに。
 抵抗値0Ωのジャンパーをハンダ付けしてブレッドボードに差し込みます。
 画像の黄色線は使わないので取り外してしまいましょう。



水温計設置 025.JPG 7セグLEDはブレッドボードに直接差し込むのが本来なんですが、取り付け場所に制約ができてしまうのでコードを用いて分離しました。

 電源を接続して動作確認すると…、おおっ!出ました!温度です。
 う~む、一安心。




水温計設置 037.JPG 電子パーツ店で購入した汎用ケースに穴開け加工してボードを収めます。
 ケースから伸びるコードに余計なテンションが掛かって負担にならぬよう、タイラップで「抜け止め」を施しました。
 あ、そうそう、コードには勿論スリーブ被をせてあります。



水温計設置 040.JPG 温度センサー部も延長コードを用いてリザバータンクに差し込めるようにしました。
 リザバータンク止水蓋のLEDを差し込む凹みをキリで貫通させてコードを通し、隙間埋めと絶縁コーティングは件の万能接着剤で。
 コイツをリザバータンク内のクーラントに差し込んで水温を計ってやろうってワケです。





 さて次回は、このデヂタル温度計の取り付け編でございます。
 


 


  

これが「タップ」か…。 [小物・ツール]

タップ 002.JPG
 東急ハンズで購入してきました。ネジ切りタップ。 画像左がタップ本体320円、右がハンドル980円です。
 少々高価な気もしますが、道具にケチるとロクな事がないのでキチンとした者を揃えました。

タップ 008.JPG 組んでみました。
 タップをよく見てみると、三つ又になったネジのような構造になってます。
 どんな理屈でこうなってるのか分かりませんが、これに専用油を塗りつけて使うんだそうな。









 しまった!
 油買ってくるの忘れとった…。


(STRAIGHT/ストレート) HSSタップ M3×0.5 18-90352

(STRAIGHT/ストレート) HSSタップ M3×0.5 18-90352

  • 出版社/メーカー: (TOOL COMPANY STRAIGHT) ツールカンパニーストレート
  • メディア: その他



(STRAIGHT/ストレート) ラチェットタップレンチ M3~M10 18-1362

(STRAIGHT/ストレート) ラチェットタップレンチ M3~M10 18-1362

  • 出版社/メーカー: (TOOL COMPANY STRAIGHT) ツールカンパニーストレート
  • メディア: その他



次の獲物はこれだ。 [小物・ツール]

ファンフィルター 015.JPG 
そんなわけでPクリップや新色スリーブの到着がいつになるのか分からないので、別の作業で暇を潰す事にしました。


 うちのCPUクーラーは簡易水冷式CORSAIR CWCH60なのでラジエーター部のホコリ除けのファンフィルターは必須です。
 現状は市販品をそのまま使ってますが、デザインがダサいの何のって…。

 構想としては大してオリジナリティーがあるわけではないにしても、まあ、「今風」な仕上がりを目指してます。

熱収縮チューブの代わりは [小物・ツール]

熱収縮チューブの代わり 005.JPG SATAケーブルスリーブ化 課題その②は「コネクタがデカ過ぎて熱収縮チューブが入らん。」
 その対策として用意したのが画像の糸。

 近所の釣具屋さんで売ってました。
 釣竿を手作りする際に使用する(恐らくはリール竿の糸を通すラインガイドを固定するための)ものらしく、メタリックの青色が気に入りました。210円。

 昨日作った手作りガイドを利用して、3/8インチ径のスリーブを潜らせました。
 
 コネクタ部が邪魔でかなり強引に引き込んだのですが、やはり手作りガイドは必須なようです。
 ガイドは極力小さく、でも完全にコネクタ部の角っこをカバーしなければスリーブは通ってくれません。
 適当に作ったものでも偶然ギリギリ通ってくれましたが、作業の迅速さ・手軽さを求める場合はもう一回り太いスリーブを使ったほうが賢明かも。

 今日はSSD用2本、HDD用2本の計4本を加工しました。

テキトーにやったら出来ちゃいました。 [小物・ツール]

SATAケーブルガイド 002.JPG SATAケーブルスリーブ化の課題その①「コネクタがデカ過ぎてスリーブが通らん。」
 対策としてケーブルガイドを作ってみました。

 3mmのアクリル板の端材を瞬間接着剤で貼り合わせて、やすりで削りました。作業時間約1時間。
 こいつを使えば多分すんなり行くでしょう。

次はこいつだ! [小物・ツール]

6G対応SATAケーブル 006.JPG ド定番ですね。SATAケーブルのスリーブ化。
 
 これまで使っていたSATAケーブルは一般的な平べったい「きしめん型」のものです。
 これが取り回すのに厄介で厄介で…。

 M/Bメーカーさんももう少し考えて欲しいよ。
 M/Bとストレージの位置関係は直角。ボードから出た「きしめん型」は90度ネジってストレージに接続する事に。
 今使ってるフルタワーのケースでも、裏側板側に通してストレージに接続しようとするとケーブルホールの辺りでグニャリねじれます。
 以前使ってたミドルタワーに到っては、もう最悪。ボードとストレージが直近で余裕が無い為に、ねじれるわタワむわでもうグッチャグチャ…。

 せめてM/BのSATAポートがボードに対して直角に「立った」状態で付いていてくれればいいのに。


 愚痴っていても仕方が無いのでラウンド型を購入しました。
 しかし課題が。
 それは…。

 後ご期待、って事で(笑)




アイネックス ラッチ付 シリアルATAラウンドケーブル SATR-3103BK

アイネックス ラッチ付 シリアルATAラウンドケーブル SATR-3103BK

  • 出版社/メーカー: AINEX
  • メディア: Personal Computers



前の10件 | - 小物・ツール ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。