« 2015年6月 | トップページ | 2018年7月 »

2018年6月

2018年6月30日 (土)

Arduinoで作ろう(16) HC-SR04 で距離の測定

Multifunctionshield_hcsr04_

 Multi function shieldに測距センサHC-SR04をつないで距離計を作ってみました。
前回はLCDに表示させてますが,今回は7セグLEDです。

このシールドは,どこに何の端子が出ているのか分かりにくいのですが,この回路図とか,Fritzingのパーツの絵を見ると分かりますよ。3×4列のピンヘッダのところにD5,D6,D9,A5と+5V,GNDのピンがあります。
そういえば,この基板上にジャンパピンが2つありますが,これの役割も上記の回路図を見ると確認できます。これ,結構重要な情報ですよね。


スケッチはこちら→ 20180701.ino


/*
Multi_function_shield
超音波センサ HC-SR04
*/

#include
const int LAT = 4; // Latchピン
const int CLK = 7; // Clockピン
const int SDI = 8; // Serial Data In ピン
const int trig = 5;
const int echo = 6;
int time;
float distance;
int Buffer[4] = {0}; //1~4桁 数字のバッファ

byte digit[10] = //7seg 点灯パターン
{
B00000011, // 数字 0
B10011111, // 1
B00100101, // 2
B00001101, // 3
B10011001, // 4
B01001001, // 5
B01000001, // 6
B00011011, // 7
B00000001, // 8
B00001001 // 9
};

const byte keta[4] =
{
B00010000, //1桁め
B00100000, //2桁め
B01000000, //3桁め
B10000000 //4桁め
};

void setup() {
pinMode(SDI, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(LAT, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
}

void loop() {
digitalWrite(trig, LOW);
delayMicroseconds(1);
digitalWrite(trig, HIGH);
delayMicroseconds(11);
digitalWrite(trig, LOW);

time = pulseIn(echo, HIGH);
distance = (time / 2) * 0.0340 * 10;
Serial.println(distance / 10);

Buffer[3] = int(distance) / 1000;
Buffer[2] = (int(distance) % 1000) / 100;
Buffer[1] = (int(distance) % 100) / 10;
Buffer[0] = (int(distance) % 100) % 10;
Disp();
}

void Disp() {
for (byte j = 0; j < 4; j++) {
digitalWrite(LAT, LOW);
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]);
if (j == 1) {
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]&B11111110);
}
shiftOut(SDI, CLK, LSBFIRST, keta[j]); // 桁
digitalWrite(LAT, HIGH);
delay(4);
}
}

| | トラックバック (0)

2018年6月26日 (火)

Arduinoで作ろう(15) LM35DZの温度計

Multifunctionshieldlm35dz

 Multi Function Shieldに温度センサLM35DZを取りつけて,温度計にしてみました。
LM35DZのアナログデータ出力は,A4で読み取ります。
Arduinoの基準電圧は5.0Vではなくて,実測で4.88Vだったので, temp = ((4.88 * analogdata) / 1024)としました。これでセ氏温度になりますが,さらに10倍して小数点以下1桁まで表示できるようにしてみました。
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]&B11111110); ってとこで,小数点のDpを点灯させています。

スケッチはこちら→ 20180626.ino

/* Multi_function_shield 温度センサ LM35DZ */

const int LAT = 4; // Latchピン
const int CLK = 7; // Clockピン
const int SDI = 8; // Serial Data In ピン
float analogdata, temp;
int Buffer[4] = {0}; //1~4桁 数字のバッファ
byte digit[10] = //7seg 点灯パターン
{
B00000011, // 数字 0
B10011111, // 1
B00100101, // 2
B00001101, // 3
B10011001, // 4
B01001001, // 5
B01000001, // 6
B00011011, // 7
B00000001, // 8
B00001001 // 9
};
const byte keta[4] =
{
B00010000, //1桁め
B00100000, //2桁め
B01000000, //3桁め
B10000000 //4桁め
};

void setup() {
pinMode(SDI, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(LAT, OUTPUT);
Serial.begin(9600);
}

void loop() {
analogdata = analogRead(A4);
temp = ((4.88 * analogdata) / 1024) * 1000;
Serial.print(analogdata);
Serial.println(temp);
Buffer[3] = int(temp) / 1000;
Buffer[2] = (int(temp) % 1000) / 100;
Buffer[1] = (int(temp) % 100) / 10;
Buffer[0] = (int(temp) % 100) % 10;
Disp();
}

void Disp() {
for (byte j = 0; j < 4; j++) {
digitalWrite(LAT, LOW);
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]);
if (j == 1) {
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]&B11111110); //小数点をつける
}
shiftOut(SDI, CLK, LSBFIRST, keta[j]); // 桁
digitalWrite(LAT, HIGH);
delay(4);
}
}

| | トラックバック (0)

2018年6月25日 (月)

Arduinoで作ろう(14) ラーメンタイマー

71udt2dw40l__sl1002_

 aitendoで買った Multi function Shieldで3分間ラーメンタイマーを作ってみました。
LCDに比べて7セグLEDを点けるのはちょっと面倒ですが,やっぱりなんだか魅力的ですよね。

ココに取説のPDFがあるし,ココにライブラリ,ココにサンプルスケッチがありますが,ライブラリを使わないでラーメンタイマーを作ってみましょう。
このシールドには,74HC595が2個ついていて,Latch,Clock,SDIはそれぞれ4,7,8ピンです。
0~9の7セグ(アノードコモン)点灯パターンの配列を作って,各桁に入れる数字のためのバッファ配列も作っておきます。
millis()を使って残り時間を計算し, shiftOutで7セグLEDに数字データを送ってやります。
3分立ったら「チャルメラ」の音楽が鳴るようになってます(^^)

スケッチはこちら→ 20180625.ino

/* Mult_function_shield ラーメンタイマー180秒 */

const int buz = 3; // Buzzerピン
const int LAT = 4; // Latchピン
const int CLK = 7; // Clockピン
const int SDI = 8; // Serial Data In ピン
const int time = 180;
int timer = time; //残り時間
int Buffer[4] = {0}; //1~4桁 数字のバッファ

const byte digit[10] = //7seg 点灯パターン
{
B00000011, // 数字 0
B10011111, // 1
B00100101, // 2
B00001101, // 3
B10011001, // 4
B01001001, // 5
B01000001, // 6
B00011011, // 7
B00000001, // 8
B00001001 // 9
};

const byte keta[4] =
{
B00010000, //1桁め
B00100000, //2桁め
B01000000, //3桁め
B10000000 //4桁め
};

void setup() {
pinMode(SDI, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(LAT, OUTPUT);
pinMode(buz, OUTPUT);
}

void loop() {
timer = time - millis() / 1000;
if (timer > 0) {
Buffer[3] = int(timer) / 1000;
Buffer[2] = (int(timer) % 1000) / 100;
Buffer[1] = (int(timer) % 100) / 10;
Buffer[0] = (int(timer) % 100) % 10;
Disp();
}
else if (timer == 0) {
digitalWrite(LAT, LOW);
shiftOut(SDI, CLK, LSBFIRST, 0b00000011); //数字 0
shiftOut(SDI, CLK, LSBFIRST, B00010000); //1桁目
digitalWrite(LAT, HIGH);
tone(buz, 392, 200); delay(200); //チャルメラ
tone(buz, 440, 200); delay(200);
tone(buz, 494, 800); delay(800);
tone(buz, 440, 200); delay(200);
tone(buz, 392, 200); delay(800);
tone(buz, 392, 200); delay(200);
tone(buz, 440, 200); delay(200);
tone(buz, 494, 200); delay(200);
tone(buz, 440, 200); delay(200);
tone(buz, 392, 200); delay(200);
tone(buz, 440, 1000); delay(1000);
}
else {
}
}

void Disp() {
for (byte j = 0; j < 4; j++) {
digitalWrite(LAT, LOW);
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]);
shiftOut(SDI, CLK, LSBFIRST, keta[j]); // 桁
digitalWrite(LAT, HIGH);
delay(4);
}
}

| | トラックバック (0)

2018年6月17日 (日)

Arduinoで作ろう(13) 大気圧センサMPL115A2

Mpl115a2_

I2C接続の大気圧センサ MPL115A2 を使って大気圧計を作ってみました。
以前,秋月電子で買ったものですが,今はSPI接続のMPL115A1しか売ってないみたいです。売り切れたのかしら?

このセンサを使うのにとても便利なライブラリがArduinoで遊ぶページで公開されています。ありがたいことです。
このライブラリを使うと,MPL115A2.read() という関数で大気圧を取得できるようになります。

で,実際に動かしてみると,このセンサは精度がイマイチのようで,値が±2 hPa くらいでフラフラします。電源が不安定なのかもしれませんが・・・。
特に小数点以下がフラフラしてうるさいので,int で整数値にしてみました。

スケッチはこちら→ 20180617.ino

/* 気圧センサMPL115A2 (I2C接続) */

#include <Wire.h>
#include <MPL115A2.h>
#include <ST7032.h>
ST7032 lcd;

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

void loop () {
lcd.setCursor(0, 0);
lcd.print(int(MPL115A2.read())); lcd.print(" hPa");
delay(1000);
}

| | トラックバック (0)

2018年6月15日 (金)

Arduinoで作ろう(12) サーボモータを動かす

Arduino12

 Arduinoでサーボモータを動かしてみました。
ライブラリを使うとこんなに簡単に動かせるんですね。以前PICマイコンを使ってPWMでサーボモータを動かしたときは結構苦労した記憶があるので,拍子抜けです。
こんなにカンタンだと,人間が堕落するような気がするなー。

Arduinoは最大で12個のサーボモータをつなげるので,サーボ型変数を設定します。1台だけなのでservo1にしました。
VRの真ん中の端子の電位0~5Vをアナログ入力端子A0に入れてAD変換し,さらに0~180度の角度データにマッピングしてサーボモータに送るだけです。

スケッチはこちら→ 20180615.ino

/* サーボモータをVRでコントロール */

#include <Servo.h>

Servo servo1; //サーボ型の変数をservo1とする
int deg;

void setup() {
servo1.attach(11); //servo1は,デジタルピン11につなぐ
}

void loop() {
deg = analogRead(A0);
deg = map(deg, 0, 1023, 0, 180); //AD変換した電圧データを0~180度の角度データにマッピング
servo1.write(deg); //サーボモータに角度を送る
}

| | トラックバック (0)

2018年6月13日 (水)

Arduinoで作ろう(11) RTCモジュール DS3231 でデジタル時計

Ds3231_i2c_lcd

RTC(リアルタイムクロック)DS3231搭載モジュールを使って,LCD表示のデジタル時計を作ってみました。

このRTCモジュールには電池ホルダがついていて,リチウム充電池LIR2032を入れて時計情報を保持できるようになっています。充電回路があるのでCR2032を入れたりしちゃイケナイようですが,長時間使うのでなければ大丈夫でしょう(?)
ArduinoとはI2Cで接続するので信号線は2本で配線もカンタンです。

勉強不足で,仕様や使い方が今ひとつよく分からないのですが,ココで拾ってきたサンプルスケッチを利用して(ほとんどそのままですが),デジタル時計を作ることができました。
DS3231用のライブラリは色々あるようですが,とりあえずココでダウンロードできるRtcDS3231ライブラリを使ってみました。

スケッチはこちら→ 20180613.ino

#include <Wire.h> #include <RtcDS3231.h> #include <ST7032.h>

RtcDS3231<TwoWire> Rtc(Wire);
ST7032 lcd ;

void setup ()
{
Rtc.Begin() ;

// DS3231の日時を「それなりの値」に設定する場合に、以下の2行をコメントアウト
// RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__) ;
// Rtc.SetDateTime(compiled) ;

lcd.begin(16, 2) ;
lcd.setContrast(30);
}

void loop ()
{
char buff[12] ;

RtcDateTime dt = Rtc.GetDateTime() ;

sprintf(buff, "%04u/%02u/%02u", dt.Year(), dt.Month(), dt.Day()) ;
lcd.setCursor(0, 0) ;
lcd.print(buff) ;

sprintf(buff, " %02u:%02u:%02u", dt.Hour(), dt.Minute(), dt.Second()) ;
lcd.setCursor(0, 1) ;
lcd.print(buff) ;

delay(100) ;
}

| | トラックバック (0)

2018年6月12日 (火)

Arduinoで作ろう(10) 赤外線距離センサ GP2Y0A21YK

Gp2y0a21yk_i2c_lcd_

赤外線測距センサ,SHARPのGP2Y0A21YKを使ってみました。10~80cmの距離が測れるみたいです。
センサから得られるアナログ値をAD変換して得られた値Aを26.549×(Aの-1.2091乗)して距離を計算しています。
この計算式はCQ出版の「Arduinoで計る,測る,量る」に書いてあった記事のバクリです(^^;)

スケッチはこちら→ 20180612.ino

/* 赤外線測距センサGP2Y0A21YK I2C接続LCD(AQM1602)使用 */

#include <Wire.h>
#include <ST7032.h>
ST7032 lcd;
int analogdata;
float distance;

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

void loop() {
analogdata = analogRead(A0);
distance = 26.549*pow(5.0*analogdata/1024, -1.2091); // 光測距センサーの出力値を"cm"に変換
lcd.setCursor(0, 0);
lcd.print("analogdata: "); lcd.print(analogdata);
lcd.setCursor(0, 1);
lcd.print("distance:"); lcd.print(distance); lcd.print("cm ");
delay(500);
}

| | コメント (0) | トラックバック (0)

2018年6月11日 (月)

Arduinoで作ろう(9) 超音波距離センサ HC-SR04

Hcsr04_i2c_lcd_

超音波距離センサHC-SR04を使うと,2~400cmにある対象物までの距離を測ることができます。測距の原理は次のようになっています。

(1) トリガ端子(trig)を10us以上Highにしてセンサモジュールから40kHzのパルスを8回送信する。
(2) 対象物で反射して戻ってきた超音波を受信すると,エコー端子(echo)がHighになる。
(3) pulseIn関数はエコー端子がHIGHになって再びLOWに戻るまでの時間を測定して返す。
(4) 音速×(エコー端子がHighになっている時間÷2) で,対象物までの距離を計算する。

HC-SR04には不具合のある製品があるようです。僕のがまさにそうでした(^^;) ご注意ください。

スケッチはこちら→ 20180611.ino

/* 超音波センサHC-SR04 I2C接続LCD(AQM1602)使用 */

#define trig 6
#define echo 7
#include <Wire.h>
#include <ST7032.h>
ST7032 lcd;
int time;
float distance;

void setup() {
lcd.begin(16, 2);
lcd.setContrast(30);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}

void loop() {
digitalWrite(trig, LOW);
delayMicroseconds(1);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);

time = pulseIn(echo, HIGH);
distance = (time / 2) * 0.0340;

lcd.setCursor(0, 0);
lcd.print(" time:"); lcd.print(time); lcd.print("us ");
lcd.setCursor(0, 1);
lcd.print("distance:"); lcd.print(distance); lcd.print("cm ");

delay(500);
}

↓ iPhoneで撮影すると,超音波の音が聞こえるんだー(・o・)

| | トラックバック (0)

2018年6月10日 (日)

Arduinoで作ろう(8) DHT11で温湿度計

Arduino8

秋月電子で買った温湿度センサDHT11を使って,温湿度計を作ってみました。
DHT11のDATAピンは5kΩくらいの抵抗でプルアップしないといけないようですが,秋月で売ってるDHTモジュール基板はプルアップ抵抗もついてるようです。
ライブラリ DHT-sensor-library と, Adafruit_Sensor.h が必要で,Adafruit_Sensor.hはDHTセンサーライブラリをインストールしたフォルダ内に置いておきます。
LCDは秋月のこれに替えてみました。I2C接続で,16文字x2行を表示できます。


スケッチはこちら→20180610.ino

/* 温度温度センサ DHT11 I2C接続LCD(AQM1602) DHT11のDAT端子→Arduinoデジタルピン12 */

#include <Wire.h>
#include <ST7032.h>
ST7032 lcd;
#include "DHT.h"
#define DHTPIN 12
#define DHTTYPE DHT11 // 温湿度モジュールの型番を設定
DHT dht(DHTPIN, DHTTYPE); // 接続ピン12とモジュール型番を登録

int temp, humi;

void setup() {
lcd.begin(16, 2);
lcd.setContrast(30);
dht.begin();
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(13, LOW);
delay(2000); // 温湿度測定のために2秒待つ
digitalWrite(13, HIGH);
temp = dht.readTemperature(); // 温度の測定結果をモジュールから読む
humi = dht.readHumidity(); // 湿度の測定結果をモジュールから読む

lcd.setCursor(0, 0);
lcd.print("Temp : ");
lcd.print(temp); lcd.write(0b11011111); lcd.print("C");

lcd.setCursor(0, 1);
lcd.print("Humi : ");
lcd.print(humi); lcd.print("%");

}

| | コメント (0) | トラックバック (0)

2018年6月 9日 (土)

Arduinoで作ろう(7) I2CのLCD + LM35DZで温度計

Arduino7

LM35DZの温度計の表示装置を7セグLEDからI2C接続の小型LCDAQM0802Aに替えてみました。
オレ工房さんがお作りになったI2C液晶のArduinoライブラリ – ST7032を使うとカンタンにできます。
LCDの電源以外の接続は,
SDA(データ)→ArduinoのA4,
SCL(クロック)→ArduinoのA5 の2本だけです。

スケッチはこちら→ 20180609.ino

lcd.write(0b11011111); lcd.print("C"); ってところは,単位の ℃ を(それらしく)表示するための記述です。


/*
温度センサLM35DZ
I2C接続LCD(AE-AQM0802)
*/

#include <Wire.h>
#include <ST7032.h>
ST7032 lcd;
float analogdata, temp;

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

void loop() {
analogdata = analogRead(A0); // 温度センサの出力をanalogdataへ
temp = ((5.0 * analogdata) / 1024) * 100; // 温度センサの出力値を"℃"に変換
lcd.setCursor(0, 0);
lcd.print(analogdata);
lcd.setCursor(0, 1);
lcd.print(temp); lcd.write(0b11011111); lcd.print("C");
delay(1000);
}

| | トラックバック (0)

2018年6月 8日 (金)

Arduinoで作ろう(6) LM35DZで温度計

Arduino6

秋月電子の7セグLED基板を2つ連結して,温度センサLM35DZの温度計を作ってみました。
1の位の7セグLEDのSDOを10の位の7セグLEDのSDIに繋げば2桁にできるんですね。カンタンです。

温度センサLM35DZが出力するアナログ値をA0で読み取り,℃単位に換算した値がtempです。
この値を10で割った整数値temp2が10の位の数字なので,これをまずSPIで7セグLEDに送ります。
んで,次にすかさず tempから10×temp2を引いて得られる1の位の数字をSPIで7セグLEDに送ります。
そうすると,最初に送ったtemp2の値は上の桁に押し上げられて,無事2桁の温度表示ができるわけです。
秋月の7セグLED基板,便利ですなー(・∀・)

スケッチはこちら→20180608.ino

/* 秋月AE-7SEG-BOARD_2桁 + 温度センサLM35DZ */

#include<SPI.h>
#define sck 13
#define latch 10
#define sdi 11
float analogdata;
int temp, temp1, temp2;

const byte digits[10] = {
0b11111100, // 0
0b01100000, // 1
0b11011010, // 2
0b11110010, // 3
0b01100110, // 4
0b10110110, // 5
0b10111110, // 6
0b11100000, // 7
0b11111110, // 8
0b11110110, // 9
};

void setup() {
pinMode(latch, OUTPUT);
pinMode(sck, OUTPUT);
pinMode(sdi, OUTPUT);
SPI.begin();
SPI.setBitOrder(LSBFIRST);
SPI.setDataMode(0);
}

void loop() {
analogdata = analogRead(A0); 
temp = ((5.0 * analogdata) / 1024) * 100;  //温度℃

temp2 = temp / 10;       //10の位
digitalWrite(latch, 0);
SPI.transfer (digits[temp2]);
digitalWrite(latch, 1);

temp1 = temp - temp2 * 10; //1の位
digitalWrite(latch, 0);
SPI.transfer (digits[temp1]);
digitalWrite(latch, 1);

delay(1000);
}

| | トラックバック (0)

2018年6月 7日 (木)

Arduinoで作ろう(5) 電子サイコロ

Arduino5

昨日のブレッドボードにタクトスイッチをつけて電子サイコロにしてみました。
randomSeedは乱数を初期化する関数で,A0ピンに加わっているノイズの電圧で乱数を初期化しています。
random(m,n)はmとn-1の間の乱数を返す関数です。

スケッチはこちら→ 20180607.ino


/*
秋月AE-7SEG-BOARDで電子サイコロ
*/

#include<SPI.h>
#define SW 12
#define sck 13
#define latch 10
#define sdi 11

const byte digits[16] = {
0b11111100, // 0
0b01100000, // 1
0b11011010, // 2
0b11110010, // 3
0b01100110, // 4
0b10110110, // 5
0b10111110, // 6
0b11100000, // 7
0b11111110, // 8
0b11110110, // 9
0b11101110, // a
0b00111110, // b
0b10011100, // c
0b01111010, // d
0b10011110, // e
0b10001110, // f
};

void setup() {
pinMode(latch, OUTPUT);
pinMode(sck, OUTPUT);
pinMode(sdi, OUTPUT);
SPI.begin();
SPI.setBitOrder(LSBFIRST);
SPI.setDataMode(0);
}

void loop() {
if (digitalRead(SW) == LOW)
{
for (int i = 0; i < 30; i ++) {

digitalWrite(latch, 0);
SPI.transfer (digits[i % 7]);
digitalWrite(latch, 1);

delay(50);
}
randomSeed(analogRead(A0));
int randnumber = random(1, 7);

digitalWrite(latch, 0);
SPI.transfer (digits[randnumber]);
digitalWrite(latch, 1);

}
}

| | コメント (0) | トラックバック (0)

2018年6月 6日 (水)

Arduinoで作ろう(4) 秋月電子の7セグLED基板

Arduino4

 普通の7セグLEDは配線がタイヘンなので,74HC595を基板に実装したシリアル信号接続の7セグLED基板(秋月電子)を使ってみました。
SDI,SCK,LATCHの3信号で表示ができますから 配線もスッキリです。
 この7セグLEDを使うために,まずSPIライブラリを読み込んでやります。 SPI通信で使うピンは,10(SS),11(MOSI),12(MISO),13(SCK)です。
 通信を始めるときに10ピンをHIGH→LOWにし,11ピンからデータを送り終えたらHIGHに戻します。ライブラリを使うとSPItransfer()でデータを送ると同時に13ピンからクロックも送られます。今回は0~Fをランダムに表示させてみましょう。

スケッチはこちら→ 20180606.ino


あと,今回はArduino nano(中国製の互換ボードですが)を使ってみました。400円弱で手に入りますからたくさん買ってしまいそう(^^;)


/*
秋月電子AE-7SEG-BOARD 0~Fをランダム表示
*/

#include<SPI.h>
#define sck 13
#define latch 10
#define sdi 11

const byte digits[16] = {
0b11111100, // 0
0b01100000, // 1
0b11011010, // 2
0b11110010, // 3
0b01100110, // 4
0b10110110, // 5
0b10111110, // 6
0b11100000, // 7
0b11111110, // 8
0b11110110, // 9
0b11101110, // a
0b00111110, // b
0b10011100, // c
0b01111010, // d
0b10011110, // e
0b10001110, // f
};

void setup() {
pinMode(latch, OUTPUT);
pinMode(sck, OUTPUT);
pinMode(sdi, OUTPUT);
SPI.begin();
SPI.setBitOrder(LSBFIRST);
SPI.setDataMode(0);
}

void loop() {
randomSeed(analogRead(A0));
int randnumber = random(1, 7);
digitalWrite(latch, 0);
SPI.transfer (digits[randnumber]);
digitalWrite(latch, 1);
delay(500);
}

| | トラックバック (0)

2018年6月 5日 (火)

Arduinoで作ろう(3) 7セグLEDでカウントアップ

20180605

7セグLEDを使って,16進数0~Fをカウントアップさせてみました。
7セグLEDのセグメントa,b,c,d,e,f,g,DpをArduinoのデジタルピン7,6,5,4,3,2,1,0につないであります。
配線が大変ですな(^^;)

0~Fのセグメント点灯パターンを配列に入れて,順にPORTDに送り出しています。

ソース(スケッチ)こちら↓ 20180605.ino

/* カソードコモン 7セグ LED 7セグLED セグメントabcdefgDp → Arduino デジタルピン76543210 */

const byte digits[16] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
B11101110, // a
B00111110, // b
B10011100, // c
B01111010, // d
B10011110, // e
B10001110, // f
};

void setup() {
DDRD = B11111111;
}

void loop() {
for (int i = 0; i < 16; i ++) {
PORTD = digits [i];
delay(500);
}
}


| | トラックバック (0)

2018年6月 4日 (月)

Arduinoで作ろう(2) タクトスイッチで2進数カウントアップ

Arduino_2_2


10kΩの抵抗でプルアップしたタクトスイッチを使って,スイッチのボタンを押すたびに2進数でカウントアップします。スイッチのチャタリングはdelay(300)でゴマかしています(笑)

ソース(スケッチ)はコレ→20180604.ino


/*
2進数カウントアップ(手動)
LEDはデジタルピン 2,3,4,5
*/

#define SW 10 //スイッチはデジタルピン10
int num;

void setup()
{
DDRD = B00111100; // ボートD(デジタルピン76543210)の入出力設定
}

void loop()
{
if (digitalRead(SW) == LOW)
{
num = num + B0100;
PORTD = num; // PORTD に出力
delay(300);
}
}

| | トラックバック (0)

2018年6月 3日 (日)

Arduinoで作ろう(1) Lチカで2進数カウントアップ

Arduino_1

 3年ぶりの投稿です。まだ生きてますw
 2年くらい前から,時々Arduinoをいじってたんだけど,ちゃんとログを残しておかないと覚えたことが身につかないので,新しいカテゴリ「Arduino」を作って,記録を残しておこうと思います。
 Arduinoは,センサやLCDなどのデバイスを使うためのライブラリが充実していて,大抵のことは誰かが書いたプログラム(スケッチ)をテキトーにコピペすればできちゃうところがイイ(・∀・)ですなー。

今さらですが,Lチカからやってみます。
デジタルピン2~5にLEDをつないで,2進数でカウントアップさせてみましょう。

ソースはコレ→ 20180603.ino

DDRDは,ポートD(デジタルピンの0~7)の入出力の設定(1で出力,0で入力)です。PICで言うと,TRISAやTRISBみたいなもんかな。
ちなみにポートBはデジタルピン8~13,ポートCはアナログピンA0~A5です。
んで,PORTDはポートDのデータレジスタで,出力の状態(1でHIGH,0でLOW)を設定します。

/* 2進数カウントアップ(自動) LEDはデジタルピン 2,3,4,5 */

int num;
void setup()
{
DDRD = B00111100; // ボートD(デジタルピン76543210)の入出力設定
}

void loop()
{
num = num + B0100; // 1を足す
PORTD = num; // PORTD に出力
delay(500);
}

| | トラックバック (0)

« 2015年6月 | トップページ | 2018年7月 »