初歩の電子工作とデジカメの日記

電子工作備忘録とデジカメで撮影した写真のブログです。

Arduino備忘録 15 (2桁 7セグメントLED専用基板製作)

2016-08-11 10:31:51 | Arduino Uno
7セグメントLEDを使う電子工作では、それが何桁であろうとArduinoと接続するためにはジャンパ線を数多く必要とするので、ブレッドボード上ではジャンパ線が錯綜して正にスパゲッティ状態になってしまう。
ジャンパ線の接続を楽にするのと見栄えを少しでも良くするために前回の「1桁7セグLED」の時に専用基板を製作してうまく仕上がったので今回は「2桁7セグLED」の専用基板を製作した


実体配線図の作成
Photoshop Elementsを使用。ユニバーサル基板はいわゆるCタイプサイズ(72mm x 47mm)として作図
抵抗器はハンダ付け箇所の減少になる集合抵抗を使用した。
基板上は部品の「2桁7セグLED」と「集合抵抗器」そして「Arduino」と接続するための「ピンソケット 1 x 8」だけのすっきりした部品面になる



完成した「2桁7セグLED」専用基板の部品面



基板のハンダ面。リード線はすべて「錫メッキ線」を使ったので交差する部分には絶縁のため「収縮チューブ」を通した



基板と「Arduino」の結線
ジャンパ線は8連のフラットケーブルを使ったのでより一層基板上はすっきりしている
基板上部の2本のジャンパ線は桁を表示する「Arduino」11pin , 13pinと繋がっている。



以前のスケッチを使用し、「Arduino」への書き込みが完了すると表示面にはっきり、くっきりと数字が映し出された(スモーク加工のプラ板も使用している)。


Arduino備忘録 14 (1桁 7セグメントLEDでカウントアップ)

2016-08-06 23:28:22 | Arduino Uno
7セグメントLEDを使った電子工作は前回2桁7セグLEDを使った工作をしました。順番が逆になっていまうのですが今回は1桁7セグメントLEDを使う電子工作を復習しました。


使用したLEDは買い置きしてあった型番「MAN4640A526G」の1桁7セグメントLEDです。多分町田の「サトー電気」で買った部品でしょう
カソードコモンで10本のピンが文字の両側にあるので、これを横に並べて2桁の7セグLEDとして工作するのは難しい工作になってしまいそうだ
またピンは規則的には並んでいないので接続するピン番号を間違え易いので注意が必要だ



回路図作成には「BSCH3V」ソフトを使用。また図面左上部の「7セグLED」のパーツ図面はソフト「LCO」を使っての自作です
実際の回路作成はブレッドボードでも良いのですが、ジャンパ線がスパゲッティ状態になってしまった前回の経験を踏まえ、1桁でもあるのでユニバーサル基板を使っハンダ付けの配線工作をした



完成基板の部品面
より線のジャンプワイヤーが1本もなくすっきり仕上がった



ハンダ面は技術の未熟さもあってすっきりとはなっていないが、ジャンパ線の交差状態を見ると2桁7セグLED配線もハンダ付け工作でできるかな



完成した7セグ基板と「Arduino Uno」を結線し、通電すると数字が表示されるが、昼間は特に数字が今一くっきりとはなっていないので急遽、アクリル板をカットし、表示部分を覆ってみると数字がはっきり見えた



/* 1桁7セグメントLED表示器(MAN4640A526G)使用
* 1桁のみ0-9へカウントを繰り返すスケッチ
* 配列[ ]を利用する
* 新しい関数・・・n,i,digits,display_number
*/
const int anode_pins[] = {2,3,4,5,6,7,8,}; //アノードピンを配列に格納する
const int cathode_pin = 11; // カソードに接続するArduinoのピン
const int number_of_anode_pins = sizeof(anode_pins) / sizeof(anode_pins[0]); // 文字数を少なく
// 数字と表示させるセグメントの関係
const int digits[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00100111, // 7
0b01111111, // 8
0b01101111, // 9
};

// 数字(n)を表示する
void display_number (int n) {
for (int i = 0; i


1桁 7セグメントLEDでカウントアップ


Arduino備忘録 13 (2桁7セグLEDでカウントアップ)

2016-08-04 10:30:16 | Arduino Uno
前回、温度センサから室温を読み込んでシリアルモニターに表示するスケッチを作成、実行しました。
今回は読み込んだデータを7セグメントLEDに表示する方法を学習、実行します。まずは7セグメントLEDに数字を表示するスケッチの学習です


回路図作成ソフト「BSCH3V」で作図。
図面右部分のパーツ「2桁7セグLED」はBSCH3V」用の部品作成ソフト「LCo」を使って自分で作成しました。
「Arduino」と「2桁7セグLED」の接続ピンの番号が順番通りにはなっていませんのでご注意です。



使用した「2桁7セグLED」
画像の部品はアノードコモンですが、使用したのはカソードコモンの部品で、外観は全く同じです。



回路図通りに「Arduino」と「2桁7セグLED」を結線しましたが、まるでスパゲティ状態ですね。



Arduino IDE のスケッチで、こちらの記事がお手本です
//
// 2桁の7セグメントLEDでカウントアップするスケッチ
//
int _cnt = 0; //
int _number = 0; //
boolean _flg = false;

void setup(){
Serial.begin(9600);
for (int i=2; i<=8; i++){ //2~8番ピン デジタル出力へセット
pinMode(i,OUTPUT);
}
pinMode(13,OUTPUT); // カソードコモンピン
pinMode(11,OUTPUT); // カソードコモンピン
}
boolean Num_Array[10][7]={ //LEDレイアウトを定義
{1,1,1,1,0,1,1}, //0
{0,0,1,1,0,0,0}, //1
{1,1,0,1,1,0,1}, //2
{0,1,1,1,1,0,1}, //3
{0,0,1,1,1,1,0}, //4
{0,1,1,0,1,1,1}, //5
{1,1,1,0,1,1,1}, //6
{0,0,1,1,0,1,1}, //7
{1,1,1,1,1,1,1}, //8
{0,1,1,1,1,1,1} //9
};

void NumPrint(int Number){ //LED表示関数を定義
for (int w=0; w<=7; w++){
digitalWrite(w+2,-Num_Array[Number][w]);
}
}

int NumParse(int Number,int s){ //2桁をそれぞれの桁で分解する関数
if(s == 1){
return Number % 10; //10で割ったあまり = 一桁目の値
}
else if(s == 2){
return Number / 10; //10で割った値を整数にする = 二桁目の値
}
return 0;
}
void loop(){
if(_number >= 100){
_number = 0;
}
//flg変数をtrue / falseを切り替えることで11番13番ピンの出力を交互に切り替える
if(_flg){
digitalWrite(11,LOW);
digitalWrite(13,HIGH);
_flg = false;
NumPrint(NumParse(_number,1)); //1桁目の表示
}
else{
digitalWrite(11,HIGH);
digitalWrite(13,LOW);
_flg = true;
NumPrint(NumParse(_number,2)); //2桁目の表示
}
//100まで行ったら表示する数値(_number)を1つ足す(実質delayの10×100で1秒に1カウント)
if(_cnt >= 100){
_number++;
_cnt = 0;
Serial.print("NUMBER:");
Serial.println(_number);
}
_cnt++;
delay(10);
}


2桁7セグLEDでカウントアップ

Arduino備忘録 12 (温度センサー (LM35DZ) を使う)

2016-07-28 21:32:47 | Arduino Uno
今回は温度センサー (LM35DZ) を使ってシリアルモニターに温度 (室温)を表示します。また室温が摂氏29度以上の場合はLEDが点滅します。


回路はシンプルで 次の通りに結線する

  • センサー Vcc ー Arduino +5V
  • センサー GND ー Arduino GND
  • センサー Vout ー Arduino A0
  • Arduino D13P ー R 330Ω ー LED ー GND


ブレッドボードに部品を配置、Arduino と結線する



スケッチはこちらの記事を参考にさせてもらった

/* 温度センサーの値をシリアルモニタに表示する
* 29度以上ならLEDが点滅する
*/
int sensorPin = A0; //センサーの入力はアナログ0番ピンを指定
int sensorValue = 0; // 初期設定
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600); //シリアルモニタに表示する通信速度の設定
}

void loop() {
sensorValue = analogRead(sensorPin); //アナログ0番ピンからの入力値を取得
float temp = modTemp(sensorValue); //温度センサーからの入力値を変換
Serial.println(temp); //結果をシリアルモニタに表示
delay(500); //0.5秒ウェイト

}
//アナログ入力値を摂氏度℃に変換
float modTemp(int analog_val){
float v = 5; // 基準電圧値( V )
float tempC = ((v * analog_val) / 1024) * 100; // 摂氏に換算
if (tempC > 29) {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
} else {
digitalWrite(13, LOW);
}
return tempC;
}


シリアルモニターの表示数値
図中赤ラインの時センサーを指で握って暖めたので摂氏29度以上となり、LEDが点滅した。



温度センサー (LM35DZ) を使う

Arduino備忘録 11 (3ledの点灯をCDSセルのアナログイン数値で切替える)

2016-07-26 16:40:24 | Arduino Uno
CDSセルの機能、性質がわかった(?)のでいよいよLEDを接続して暗くなったらLEDが点灯するArduino電子工作をやります
LEDが1個では単調なので3個のLEDを使いました


図中の右端のCDSセルからのアナログイン数値をArduino A0ポートに取り込み、3個のLEDの点灯を切替えます。
LEDの色は赤、青、緑です。



CDSセル、赤、青、緑色LED、抵抗(1kΩx4本)をブレッドボードに配置、Arduinoと結線します
LED出力ピンは
d11p・・・緑色LED
d12p・・・青色LED
d13p・・・赤色LED



CDSセルからのアナログイン数値で3個のLEDの点灯が切り替わるスケッチです。
アナログイン数値を可視化できるようにシリアルモニターも使えるようにしています。
スケッチはこちらの記事をお手本にしています。

/* CDSセル(光センサー)で読み込んだアナログ入力値の大きさでLEDの点灯を切替える
* アナログ入力値はシリアルモニターに表示させる
*/
const int red_LED = 13; // 赤LEDが接続されているピン
const int blue_LED = 12; // 青LEDが接続されているピン
const int green_LED = 11; // 緑LEDが接続されているピン


int val = 0; // アナログ入力ピンの状態がこの変数(val)に記憶される
int state = 0; // LEDの状態(0ならオフ、1ならオンとする)

void setup() {
pinMode(red_LED, OUTPUT); // LEDを出力に設定
pinMode(blue_LED, OUTPUT);
pinMode(green_LED, OUTPUT);
Serial.begin(9600); // シリアルモニターを使う

}

void loop() {
val = analogRead(0); //センサから値を取得します
Serial.println(val); // シリアルモニターに数値(val)を出力
if(val <= 900){ // valが900以下なら点灯しない
state=0;
}
if(val > 900 && val <=950){ // valが900-950の間では赤色LEDが点灯する
state=1;
}
if(val > 950 && val <= 1000){ // valが950-1000の間では青色LEDが点灯する
state=2;
}
if(val > 1000){ // valが1000以上では緑色LEDが点灯する
state=3;
}

//変化があるかどうかチェック

if (state == 0) {
digitalWrite(red_LED, LOW);
digitalWrite(blue_LED, LOW);
digitalWrite(green_LED, LOW);
} else if (state == 1) {
digitalWrite(red_LED, HIGH);
digitalWrite(blue_LED, LOW);
digitalWrite(green_LED, LOW);
} else if (state == 2) {
digitalWrite(red_LED, LOW);
digitalWrite(blue_LED, HIGH);
digitalWrite(green_LED, LOW);
} else if (state == 3) {
digitalWrite(red_LED, LOW);
digitalWrite(blue_LED, LOW);
digitalWrite(green_LED, HIGH);
}
delay(100);

}


CDSセルからのアナログイン数値(val)が900以下では、どのLEDも点灯しません。valの値が900以上、950以下で赤色LEDが点灯します。


valの値が950以上、1000以下で青色LEDが点灯します。


valの値が1000以上なら緑色LEDが点灯します。


Arduino備忘録 11

Arduino備忘録 10 (光センサーでアナログ入力)

2016-07-24 12:53:32 | Arduino Uno
LEDメインのArduino電子工作はひとまず完了として、今回からセンサーを扱ってみます。最初は光センサー(CDSセル)を取り扱ってみます。


光センサーの性質を確認する回路、Arduinoは使わない。
光センサー(通称CdSセル)は、暗いところにおくとセンサー自体の抵抗値が大きくなり、明るいところに置くとセンサーの抵抗値が低くなる性質を持っている。
この回路ではCDSセルを何かで覆うと抵抗値が高くなり接続されているLEDの明るさは暗くなる


ArduinoでCDSセルの抵抗値の変化を確かめる回路。
[analog in]のポートは[A0]ピンを使用した。





// CDSセルの抵抗値をA0ピンで読み込み、シリアルモニターに出力する
int val=0; //入力される値を格納する変数
void setup() {
Serial.begin(9800); //シリアルモニターに出力する通信速度(Arduinoと同じ速度)
}
void loop() {
val=analogRead(0); //ANALOG INの0番ピンからデータを受け取る
Serial.println(val/4); //入力された値をシリアルモニターに出力
delay(100);

}


CDSセルを何かで覆うと抵抗値は高くなる。CDSセルの部分を明るくすると抵抗値は低くなる


Arduino備忘録 9 (4ledへPWM出力)

2016-07-23 07:20:13 | Arduino Uno
PWM出力の2回目です。
4個のLEDへPWM出力してLEDが順にだんだんと明るくなり、そして暗くなります。


ArduinoのPWM出力ができるD5,D6,D9,D10ピンにLEDを接続する回路を組みます。



ブレッドボードにLED,集合抵抗(220Ωx8)を配置し、Arduinoと結線。



スケッチはこちらの記事を使用させていただきました。


/* PWM出力で4個のLEDを制御する */
#define FADE_TIME 2 // フェードの時間を設定

int led_pins[] = {5,6,9,10}; // LEDをつなぐピンを定義。配列を使っています。

void setup() {
int i; // 変数 i を用意

for(i=0;i<4;i++){
pinMode(led_pins[i], OUTPUT); // LEDのピンに出力
}</div>
}

void loop() {
int i,j;

//LED1を暗から明へフェードする
for(j=0;j<4;j++){
for(i=0;i<256;i++){
analogWrite(led_pins[j], i);
delay(FADE_TIME);
}
}

//LED1を明から暗へフェードする
for(j=0;j<4;j++){
for(i=255;i>-1;i--){
analogWrite(led_pins[j], i);
delay(FADE_TIME);
}
}

}


4ledへpwm出力

Arduino備忘録8 (PWM出力でLEDの明るさ漸増、漸減)

2016-07-22 11:34:01 | Arduino Uno
Arduino Unoでは3、5、6、9、10、11ピンを使用してPWM(パルス幅変調)出力ができる。
9ピンで確認してみる


回路は簡単で、D9ピンをPWM出力ピンとしてLEDにパルス信号を送ります。



スケッチはArduino IDEの[ファイル]→[スケッチの例]→[03.Analog]→[Fading]


int ledPin = 9; // LED connected to digital pin 9

void setup() {
// nothing happens in setup(何も書かない)

}

void loop()
{
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
analogWrite(ledPin, fadeValue);
delay(30);
}

for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
analogWrite(ledPin, fadeValue);
delay(30);
}

}


PWM出力でLEDの明るさがだんだん明るくなる(or暗くなる)

Arduino備忘録7 (半固定抵抗器でAnalogIn-2-)

2016-07-21 10:55:43 | Arduino Uno

前回の半固定抵抗器を使ってAnalog入力の数値を読み取る電子工作を応用して4個のLEDを順番で点灯していく工作です


以前にも使用の集合抵抗(220Ωx8)を使った回路です。Arduino の A0ポートで半固定抵抗器のアナログ数値を読み込みます。



スケッチはこちらの記事を使用しました

/* 半固定抵抗器からのアナログ数値の変化を読み取って
* 4個のLEDの点灯が移り変わるスケッチ
*/

int sensorPin = A0; // 半固定抵抗器の電圧を読み取るアナログポート
int ledPin1 = 13; // LED1番目のポート
int ledPin2 = 12; // LED2番目のポート
int ledPin3 = 11; // LED3番目のポート
int ledPin4 = 10; // LED4番目のポート
int sensorValue = 0; // センサー初期値は0

void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);

}

void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue>204) {
digitalWrite(ledPin1, HIGH);
}
else {
digitalWrite(ledPin1, LOW);
}
if (sensorValue>408) {
digitalWrite(ledPin2, HIGH);
}
else {
digitalWrite(ledPin2, LOW);
}
if (sensorValue>612) {
digitalWrite(ledPin3, HIGH);
}
else {
digitalWrite(ledPin3, LOW);
}
if (sensorValue>816) {
digitalWrite(ledPin4, HIGH);
}
else {
digitalWrite(ledPin4, LOW);
}


}


ブレッドボードにLED、半固定抵抗器、集合抵抗、を配置し、Arduinoと結線します。



半固定抵抗器でAnalogIn-2-

Arduino備忘録6 (半固定抵抗器でアナログイン)

2016-07-19 12:14:18 | Arduino Uno
LED点滅の間隔を変化させるために半固定抵抗器を使い、AnalogInの数値をスケッチに取り込みます。


Vr-led回路図
LED点滅間隔を変化させるために半固定抵抗器を使用します。抵抗器からのアナログ数値の変化を読み取ってLEDの点滅間隔が変わります。



スケッチはArduino IDEの[ファイル]→[スケッチの例]→[03.Analog]→[AnalogInput]を使用します



/* LED点滅間隔が半固定抵抗器からのアナログ数値の変化を読み取って
* 変わるスケッチ
*/

int sensorPin = A2; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);

}

void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for <sensorValue> milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for <sensorValue> milliseconds:
delay(sensorValue);

}


ブレッドボードを使って部品配置およびArduinoとの配線画像





LED点滅間隔を半固定抵抗器で変化させる(アナログイン)