可変三端子レギュレータLM317Tを使ってみた

・目的

可変三端子レギュレータを使用し

電源回路をブレッドボード上に

作るりLEDの明るさを変化させる。

 

・使用したもの

LM317T

ブレッドボード

LED

1kΩ抵抗

可変抵抗(B10k)

 

・LM317Tの仕様について

 1.2Vから37Vの幅の電圧を出力できる

f:id:shangtian:20171018230646p:plain

図1:ピン配置

出典:LM317T仕様書

 

可変レギュレータはVrefが常に同じ値になるよう

調整する。LM317TではVref=1.25である。

 

f:id:shangtian:20171016211232p:plain

図2: 基本回路構成

出典: LM317T仕様書

 

Voutは以下の式により求めることが

できる

f:id:shangtian:20171016215158p:plain

LM317TはVref = 1.25[V]

Iadjは100μAより小さくなるよう

設計されている

 

上式よりR1とR2の比率によって

出力電圧(Vout)を調整できる。

 

 

例)Vref = 1.25[V] Iadj = 100μ[A]

*Iadjの定格値は50μ[A]だが最大値で計算してみる

  R1 = 1K[Ω] R2 = 10K[Ω]

       であるとき

  

f:id:shangtian:20171018230024p:plain

 

      R1 = 1K[Ω] R2 = 0[Ω] であるとき

 

f:id:shangtian:20171018230526p:plain

        となる

 

Iadjを最大にして第二項はも0.01[V]なので

f:id:shangtian:20171018231816p:plain

と考えて良さそう

 

 

・方法

図2の基本構成回路を基に

図3の回路をブレッドボード

に組む。

f:id:shangtian:20171016221124p:plain

図3:基本構成回路をもとに組んだ回路w

 

・結果

 

電圧変化しました。


f:id:shangtian:20171018231241j:image

 図4:実際に組んで動かした

グラフィックボードを分解して、掃除してみた

譲り受けたパソコンに搭載されてた

グラフィックボードが

ホコリまみれだったので

分解して、掃除してみた。

 

グラフィクボードは

ATI Radeon 256MB PCI Express DMS-59

Graphics Card Low Profile 7120035100G

http://www.itinstock.com/ati-radeon-256mb-pci-express-dms-59-graphics-card-low-profile-7120035100g-14255-p.asp


f:id:shangtian:20171013073551j:image

 

裏返して


f:id:shangtian:20171013074127j:image

基盤と放熱板を固定してる

ネジをはずしてみると


f:id:shangtian:20171013074300j:image

放熱板が外れる


f:id:shangtian:20171013074416j:image

次にファンの電源供給用の

コネクタをペンチで外した
f:id:shangtian:20171013074540j:image

放熱板を覆ってる

透明なケースのネジ

を外と


f:id:shangtian:20171013074757j:image

ファンの根元辺りにも

ネジがあったので外す

とファンが外れて

放熱板だけになる
f:id:shangtian:20171013074900j:image

そして放熱板を水洗いして、

ファンのホコリも

取り除いたら放熱板にファンと

ケースを取り付けて元に戻す

 

放熱板とGPUの間には

グリスが塗られてるので

まずは古いグリスを拭き取る
f:id:shangtian:20171013075021j:image


f:id:shangtian:20171013075320j:image

 拭き取り終わったら

新しいグリスを塗る

 下の写真のグリスを使った 
f:id:shangtian:20171013222256j:image

塗り終わったら

基板に放熱板を

とりつけた。

 

下の写真が掃除し終わった

グラフィックボード

結構きれいになった。
f:id:shangtian:20171013075338j:image

ArduinoでGPSモジュールGM-318をつかってみた

・はじめに

GPSモジュールが安売りされていた。

通常価格は3250円だそうだがなんと999円

ということで勢いで買ってしまった。

 

GPSとは

複数人工衛星から発射される電波受信し、その信号到達する時間差計算することで受信機位置を知ることができる。

というもの。GPSとは - 時事用語 Weblio辞書

から引用。

 

GPSが吐き出すデータはNMEAフォーマトの情報。

NMEAは音波探査機、ソナー、風速計

ジャイロコンパス、自動操舵装置、GPS受信機

などの海上電子装置における、電気的・データを

合わせた使用のこと。

 

NMEAはセンテンスの集まりで、1センテンスは

「$」ではじまり、「\r\n」(改行)で終わる。

 

・目的

Arduino でNMEAデータを受け取り

シリアル通信にてデータを表示する。

 

・使用したもの

GM-318

Arduino UNO 

ブレッドボード

ジャンパワイヤ

 

GM-318の特徴

シリアル通信可能(デフォルトでは4800bps)

NMEA0183 プロトコルをサポート

f:id:shangtian:20170923082314p:plain

図1 :ピンナンバー割り振り

 

表1:ピン説明

Pin

Name

機能

1

GND

Ground

2

VCC

電源供給3.3~3.5V

3

TX

シリアルデータ送信

4

RX

シリアルデータ受信

5

PWR_CTRL

パワーセーブピン

 

5ピンの機能を使わない時は

GNDに接続すること

 

・方法

(1)回路作成

回路図を図に示した

 

f:id:shangtian:20170923074932p:plain

図2:回路図

 

(2)プログラム作成

 図3にスケッチをしめした。 

今回はGPSモジュールから受け取った値

を単純にシリアルモニタで確認できるように

した。

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); //RX,TX

void setup() {

  Serial.begin(57600);

  while(!Serial){
    ;
  }
  mySerial.begin(4800); //4800bpsで指定
}

void loop() {
  if(mySerial.available()){
    Serial.write(mySerial.read());
  }

}

図3:スケッチ

 

・結果

結果は図4。室内で計測したため

位置情報は得られなかったが、

NMEAデータがどんどん吐き出されている

のがわかる。

f:id:shangtian:20170927104224p:plain

図4:NMEAデータ

 

ということで外へ行ってデータ収集。

f:id:shangtian:20170927104914j:plain

図5:データ収集

 

図5の状態でうろうろしてたんで

かなり変な人だと思われただろうw

周りの歩行者からの視線を感じた。

 

Tera Term を使いログをとった。

 

計測結果を示すことはできないが

うまく測定できた。

 

<参考文献>

GPSのNMEAフォーマット

NMEA 0183 - Wikipedia

deviceplus.jp

Atmega328Pで自立走行ロボットを作ろう(その1)

・目的 

最終的な目標は距離センサとATmega328Pを使って

自立走行できるロボットを作る。

 

超音波センサで距離を測り障害物に

近づいたらそれを避けて直進するように

する。

 

今回はブレッドボード上に回路を組む

ところまで。

 

・使用したもの

Arduino uno

ATmega328P

TA7291P

HC-SRO4

ブレッドボード

XHコネクタ

ユニバーサル基板

16Mhz振動子

タミヤモーター

レギュレータ5V1A

 

 

・方法

 

1)Arduino unoで回路を組み立てる

 

ブレッドボードにArduino を使って回路を組み立てる

回路図は図1に示した。

 

 

f:id:shangtian:20170918100013p:plain

図1:プロトタイプ

 


TA7291p を使ってみた

 

超音波センサとモータードライバの詳しい使い方は

以下から。

 

shangtian.hatenablog.com

  shangtian.hatenablog.com

 

 

2)コード

 

コードを図に示した。

const int で接続するピンを

宣言しておく

 

また前進、後退、右、左、停止、距離測定

を行う関数を作成

 

 

 

const int Pin1 = 6;
const int Pin2 = 7;
const int Pin3 = 9;
const int Pin4 = 10;
const int pwm1 = 5;
const int pwm2 = 11;

const int Trig = 3;
const int Echo = 4; 

void setup() {
  pinMode(Pin1,OUTPUT);
  pinMode(Pin2,OUTPUT);
  pinMode(Pin3,OUTPUT);
  pinMode(Pin4,OUTPUT);
  pinMode(pwm1,OUTPUT);
  pinMode(pwm2,OUTPUT);
  pinMode(Trig,OUTPUT);
  pinMode(Echo,INPUT);
  //Serial.begin(9600);
}


void forward(int val){
  digitalWrite(Pin1,LOW);
  digitalWrite(Pin2,HIGH);
  analogWrite(pwm1,val);
  digitalWrite(Pin3,HIGH);
  digitalWrite(Pin4,LOW);
  analogWrite(pwm2,val);
}

void reverse(int val){
  digitalWrite(Pin1,HIGH);
  digitalWrite(Pin2,LOW);
  analogWrite(pwm1,val);
  digitalWrite(Pin3,LOW);
  digitalWrite(Pin4,HIGH);
  analogWrite(pwm2,val);
}

void right(int val){
  digitalWrite(Pin1,LOW);
  digitalWrite(Pin2,HIGH);
  analogWrite(pwm1,val);
  digitalWrite(Pin3,LOW);
  digitalWrite(Pin4,HIGH);
  analogWrite(pwm2,val);
}

void left(int val){
  digitalWrite(Pin1,HIGH);
  digitalWrite(Pin2,LOW);
  analogWrite(pwm1,val);
  digitalWrite(Pin3,HIGH);
  digitalWrite(Pin4,LOW);
  analogWrite(pwm2,val);
}

void despin() {
  digitalWrite(Pin1,LOW);
  digitalWrite(Pin2,LOW);
  digitalWrite(Pin3,LOW);
  digitalWrite(Pin4,LOW);
}

float echo() {

  int dur;
  float distance;
  digitalWrite(Trig,HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig,LOW);
  dur = pulseIn(Echo,HIGH);
  distance = (float)dur*0.017;
  return distance;
}

void loop() {
  float a,b;
  float dis;
  float Distance;
  dis = echo();
  if(dis >= 0.5){
    Distance = dis;
  }
  if(Distance <= 5.0){
    //Serial.println(Distance);
    reverse(50);
    delay(5000);
    right(50);
    delay(5000);
    despin();
    a = echo();
    left(50);
    delay(10000);
    despin();
    b = echo();
    delay(5000);

    if(a >= b){
      right(50);
      delay(10000);
    }
  }else{
    //Serial.println(Distance);
    forward(200);
    delay(1000);
  }
} 

3)ATmega328Pで動かしてみる

 今度はArduinoからATmega328P

に置き換えてみる

 

図のコードをATmega328Pに書き込んで

ブレッドボード上に繋いでみた

 

書き込みは以下の記事のように

行った。

shangtian.hatenablog.com

 

f:id:shangtian:20170918111932p:plain

 

 

 

びんぼうでいいの 組み立てからドライバのインストールまで

・はじめに

aitendoで販売しているArduino UNOの互換機である

びんぼうでいいの をくみ立てた。

 

値段は以下の通り

びんぼうでいいの基板 500円

部品パック      250円

AVRマイコン     230円

 

・手順

 

(1)半田付け

なにはともあれ買ってきた部品と基板を

半田付けする。

f:id:shangtian:20170921000650j:plain

発振子が16Mhzと12Mhzの2つをとりつけないと

いけないので、その位置だけ注意して半田づけ

する。

 

半田すると下の写真みたいになる

f:id:shangtian:20170921000909j:plain

 

(2)ブートローダーを書き込む

 

ブートローダー書き込み済みの

ATmega328Pを購入したなら

(2)は読み飛ばしていい

 

素のATmega328Pを購入したなら

ブートローダーを書き込む必要がある

 

書き込み方法は以下の記事にまとめて

あるので、それを読んでほしい

 

shangtian.hatenablog.com

 

ブートローダーを書き込んだら

さっき半田付けしたICソケットに

ATmega328Pを装着

f:id:shangtian:20170921003901j:plain

(3)ドライバのインストール

 

Mac

 環境:Mac mini(Late 2014) 

            macOS Sierra 10.12.6

 

aitendoのホームページに載っている

ドライバはインストールしても最新の

Mac osには対応してないようだ

 

以下のからまずzipファイルをダウンロード

github.com

Download ZIPをクリック

f:id:shangtian:20170920184243p:plain

 

ダウンロードしたZIPファイルを解凍したら

CH34x_install_v1.3.pkgをダブルクリック

するとドライバのインストールが開始される。

f:id:shangtian:20170920184447p:plain

インストール終了ごMacを再起動する。

 

再起動したら びんぼうでいいの を

パソコンにつなぐ

 

ターミナルを開き

$ ls /dev/tty*

を実行して下の図のように表示されていれば

ちゃんと認識されている。

f:id:shangtian:20170920184928p:plain

 

 

 

CH34X usb-serial driver をmacにインストールしたらクラッシュする問題の解決方法

・はじめに

aitendo のびんぼうでいいの を買って

きたので、それ用のドライバをインストール

したところmacカーネルパニックを起こし

再起動がエンドレスに・・・

 

 ・解決方法

環境は 

Mac mini(Late 2014)

macOS Sierra 10.12.6

 

(1) まずセーフモードで起動

 

macが起動したらすぐShiftキーを押す

 

Appleロゴと進行状況インジケータが表示

されたらShiftキーを放す

 

ログイン画面が現れたらログイン

 

(2)ドライバ削除

ログインしたらターミナルを開き

以下のコマンドを実行

 

$sudo rm -rf /System/Library/Extensions/usb.kext
$sudo rm -rf /Library/Extentions/usbserial.kext

 

でusb.kextとusebserial.kextを完全消去

これでカーネルパニックから抜けられるはず

 

その後macを再起動する。

 

(3)修正版のドライバをダウンロード

 

adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver

からzipファイルをダウンロード

f:id:shangtian:20170920184243p:plain

 

zipファイルを解凍したら

CH34X_Install_V1.3.pkgをダブルクリックして

インストール

 

f:id:shangtian:20170920184447p:plain

 

インストールしたら再起動

 

(2)確認

 

再起動後デバイスを接続したのち

$ls /dev/tty*

を実行して以下のようにデバイスが表示

されれば成功

f:id:shangtian:20170920184928p:plain

 

support.apple.com

github.com

Ada入門:整数を使う

・目的

整数の扱いかたを知り、四則演算等をAdaで行う。

 

・方法

まずはコードの例から

 

with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.text_IO, Ada.Integer_Text_IO;

procedure integer1 is
   ---変数宣言
    val1           : INTEGER := 10;
    val2           : INTEGER;
    val3,val4      : INTEGER;

begin

    val2 := 2;
    val3 := val1 - val2;
    val4 := val1 + val2;

    Put("val1 = ");
    Put(val1);
    New_Line; --改行
    Put("val2 = ");
    Put(val2,2);
    New_Line;


    Put("val3 = "); Put(val3,0); New_Line;
    Put("val4 = "); Put(val4,0); New_Line;

end integer1;
 

 

with Ada.Text_IO;

with Ada.Integer_Text_IO;

 でAda.Text_IOライブラリをインポートする

ことでテキストを画面に表示したり、標準入力

を可能としたりする。

 

Ada.Integer_Text_IOでは整数の変数を扱うことが

できるようになる。

 

use

useを使うことでコードの記述量を大幅に

減らすことができる。例えばuseを使わない場合

Ada.Text_IO.Put("val1 =");

みたいになるが

use with Ada.Text_IO;

procedure ファイルの名前 is

begin

   Put("val1 =");

end<ファイルの名前>;

 

整数の宣言をするのは

procedure ファイルの名前 is

   ここの間

begin

 procedure ... is と beginのあいだ

に宣言する

 

変数に値を代入するときは:=を使う

   val := 11;

 

つぎは掛け算、割り算、余りについて

 

with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;

procedure integer2 is

   val1,val2,val3,val4  : Integer;
   val5,val6,val7       : Integer;
begin

   val1 := 15;
   val2 := 3;
   val3 := 4;

   val4 := val1 / val2;  --割り算
   val5 := val1 * val2;  --掛け算
   val6 := val1 mod 4;   --余り
   val7 := val1 rem 4;   --余り

   Put("val4 ="); Put(val4,0); New_Line;
   Put("val5 ="); Put(val5,0); New_Line;
   Put("val6 ="); Put(val6,0); New_Line;
   Put("val7 ="); Put(val7,0); New_Line;


end integer2;