[Arduino] 時刻の取得2

Arduinoで、時刻を表示しましょう。
時刻の取得1では、tinyRTC(DS1307)を使って、時刻を表示させました。

今回は、DS3231 を使います。I2C接続になります。

こちらは、充電式電池がついています。さらに温度センサーもついています。

今回は、AdafruitのRTClibライブラリを利用します。

[スケッチ例]-[RTClib]-[DS3231]を選択します。

次のようにつなげます。
RTC-UNO
——-
C-SCL
D-SDA
+-5V
–GND

コンパイルして、書き込みます。
シリアルモニタを起動し、9600bpsにあわせて時刻が表示されたらOKです。

なお、時刻はコンパイル時のPCの時刻を取得します。
コンパイル書き込みの時間があるので、実際の時刻と数秒誤差が生じます。

温度も知りたい場合は、別のライブラリを使います。

[スケッチ]-[ライブラリのインクルード]-[ライブラリの管理]を開き
検索に「DSC3231」と入力し、DSC3231をインストールします。
スケッチの例から DS3231_testをコンパイルして実行します。


// Display the temperature
Serial.print("T=");
Serial.print(Clock.getTemperature(), 2);

ここが、温度取得ですね。

[Arduino] 時刻の取得1

Arduinoで、時刻を表示しましょう。
Arduino単体では、時刻を保持できません。内蔵電池がないため、電源が切れるたびに、時刻はリセットされます。そのたびに、コンパイルして書き込みするのは大変です。
そこで、電池で時刻を保持するRTC(リアルタイムクロック)モジュールを使います。

参考:https://ht-deko.com/arduino/tiny_rtc.html

今回は、TinyRTC(DS1307) を使います。I2C接続になります。

こちらは、LIR2023(充電式電池)がついています。CR2023と同じ大きさですが、CR2023をそのまま使うことはできません。
またオプションで、温度センサー(DS18B20)をつけることができます。

今回は、AdafruitのRTClibライブラリを利用します。
[スケッチ]-[ライブラリのインクルード]-[ライブラリの管理]を開き
検索に「RTC」と入力し、RTCLibをインストールします。

[スケッチ例]-[RTClib]-[DS1307]を選択します。

次のようにつなげます。
RTC-UNO
——-
SCL-SCL
SDA-SDA
VCC-5V
GND-GND

コンパイルして、書き込みます。
シリアルモニタを起動し、57600bpsにあわせて時刻が表示されたらOKです。

なお、時刻はコンパイル時のPCの時刻を取得します。
コンパイル書き込みの時間があるので、実際の時刻と数秒誤差が生じます。

[Arduino] 第8回 Arduino NANO

本家のArduino UNOは3000円位しました。
中国製のサードパーティも売られています。

しかし、ドライバや不具合の確認が難しいです。
本家のArduino UNOは1個は持っていた方が、後での部品の動作確認にも役立ちます。

次に、複数のArduino UNOを持つために、マイコンなどを購入して自作する方法です。部品の調達方法さえ誤らなければ、品質は保てます。
しかし、マイコン250円、細かい部品100円、USB電源 200円、ヒューズ付きだと800円と、1000円近くなります。

自作も面倒となれば、Arduino NANOがおすすめです。さらに、そのサードパーティは、意外と品質も保ててる?ようです。追加ドライバなしで認識するのもあります。
なんといっても1個250円程度。。。唯一の欠点はminiUSBケーブルが必要。一番手元にないケーブルですね・・・。

こちらの商品、安いのですが、半田付けするという別の問題が発生します。。。

半田付けのもあります。ただ、半田つげが悪いという評判も。。。

最近、中国業者の商品のアマゾンでのレビュアーに大量のサクラが混じっていますね。カスタマーとか日本人名がついているのは大抵サクラと思ってよいでしょう。

[Arduino] 第7回 自作Arduino

第6回の人感センサー付きLEDライトのように、いつでも使えそうなものを作っても、
ほかのプログラムを作るために、毎回ばらすのはもったいないです。

かといって、Arduinoを何個も買うのは経済的に厳しいです。
そこで、Arduinoを自作してみましょう。

ここも合わせてみておきましょう

https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

材料は以下の通りです。最初は秋月電子さんなどから調達しましょう。

こんな感じで作ります。

実際はこんな感じ

本体はこれで完成です。次に、
ブートローダを書き込みます。

ブートローダーの書込み

http://tech.andhandworks.com/2015/04/arduino.htmlも参考にしてください。

サンプルスケッチから ArduinoISP を選んで Arduino UNO に書き込みます。

Arduino UNOと自作機を次のようにつなぎます。

ボードをArduino UNOを選んで、Arduino as ISPを書込装置を使って(スケッチ-書込装置を使って書き込む) ブートローダーに書き込みます。

ちなみに、スイッチサイエンスさんには、ブートローダー書込済みのマイコンが売られています。

互換(外部16MHz水晶子を使う場合) https://www.switch-science.com/catalog/663/

互換(内部8MHzクロックの場合)https://www.switch-science.com/catalog/1414/

上の作業が面倒だという方向けです。

UNOと自作機は切り離して大丈夫です。これで自作機の完成です。

プログラムの書き込み

Lチカプログラムを書き込んでみましょう。そのためには、PCと自作機をつなぐ必要があります。
UNOを経由する方法もありますが面倒なので、次を使います。

次のようにつなぎます。LEDもつけています。

書き込むとLチカします。

最後は、電源供給だけでよいので、

https://www.switch-science.com/catalog/2443/

http://akizukidenshi.com/catalog/g/gK-06656/

などで、電源供給するとスタンドアローンで動きます。

[Arduino] 第6回 人感センサー付きLEDライト

第4回第5回でLEDの点滅、明るさの感知をしました。これに人感センサーを加えると、ホームセンターなどで売られている人感センサー付きLEDライトができあがります。

人感センサーを用意しましょう。慣れないうちは、スイッチサイエンスさんや秋月電子さんから購入することがベターでしょう。

秋月電子さんで400円します。慣れてくると、アマゾンで安い部品(中国からの配送、コピー品、不良品に注意)を探すのもよいかと思います。

あと、大きめの白色LEDが必要ですね。

などそろえておきましょう。

今回はシンプルに作ります。
「人が検知され暗ければ、LEDライトが10秒間点灯、そうでなければ消灯」としましょう。

プログラムは以下です。

int LED_PIN = 11; // LEDはピンを11番に設定
int PIR_PIN = 2; //  人感センサーは2番ピンを使う
int CDS_PIN = 0; //  CDSはアナログA0のピンを使う
int INTERVAL=10000; // 10秒間
void setup() {
// put your setup code here, to run once:
pinMode( PIR_PIN ,INPUT); //人感センサー信号の入力
pinMode( LED_PIN ,OUTPUT); //LEDライトの出力
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED_PIN, LOW); //いったん消灯
if (digitalRead(PIR_PIN) == 1) { // 人を検知したら
if ( analogRead(CDS_PIN) < 80 ) {// 暗ければ(好みで値は調整)
digitalWrite(LED_PIN, HIGH); //LED点灯
delay(INTERVAL); //10秒間点灯
}
}
}

 

接続は次のようになります。

明るいと、LEDは点灯しません。
CDSセルを軽く押さえて、人感センサーに手をかざすとLEDが光ります。

[Arduino] 第5回 信号の入力

第4回では、デジタル信号を出力しました。

アナログ信号の入力

今回は、アナログ信号を入力してみましょう。

には、CDSセルが入っています。これは明暗によって抵抗が変わるものです。最近、暗くなると点灯するライトとかのたぐいですね。
プログラムは次のようになります。

int CDS_PIN = 0; //アナログA0のピンを使う
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); //シリアルモニタで情報を見る。
}
void loop() {
// put your main code here, to run repeatedly:
int analog_val;
analog_val = analogRead(CDS_PIN);
Serial.println(analog_val); //シリアルモニタで出力する
delay(1000);
}

日付_CDSで保存しましょう。
次に、
次のように1k(茶黒赤金)とCDSセルを接続します。

コンパイルして、Arduinoに書き込みます。

ツールのシリアルモニタを開きます。

9600bpsになっていることを確認してみましょう。

1秒おきに数字が出るはずです。

抵抗がなければ、5vの電圧が流れているはずです。
明るいと230ぐらいの値になります。
一方、暗いと(手でCDSを覆うなど)56ぐらいの値になります。

このように明暗で値が変わるので、この変化を利用するのがIOTの基本になります。

デジタル信号

ここでは、サンプルは用意しませんが、デジタル信号の時は、

第4回でやったLチカで信号の出力をした

pinMode(ピン番号,OUTPUT)
の逆で
pinMode(ピン番号, INPUT)

を設定しておいて、値を知りたいときに

digitalRead(ピン番号);

とすると、デジタル信号を0,1で読み取ることができます。また使うときに紹介します。

 

[Arduino] 第4回 信号の出力

第3回では、サンプルプログラムでLEDを光らせました。
今回は、実際にプログラムを書いてみましょう。

[ファイル]-[新規ファイル]
を選びます。

2つのパートからなります。
setup 設定
loop 実行(ループ)、メインプログラム
になります。

第3回では、LEDの点滅を13番ピンで行いました。今回は11番ピンでやってみましょう。

int LED_PIN = 11; // ピンを11番に設定
int INTERVAL = 1000; //待機時間の設定 1000ミリ秒=1秒
void setup() {
// put your setup code here, to run once:
pinMode( LED_PIN ,OUTPUT); //11ピンから信号(電流)を出力する
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED_PIN, HIGH); // 10番ピンに電流を流す
delay(INTERVAL); //1秒待つ
digitalWrite(LED_PIN, LOW); // 10番ピンに電流を止める
delay(INTERVAL); //1秒待つ
}

できたらファイルを保存します。日付_BLINKとして保存しておきましょう。
コンパイルして、11番ピンから接続して点滅したらOKです。

[Arduino] 第3回 Arduino開発環境の構築

まずは本で勉強

本体などが届いたら、まずは、本で一通りやっておくのがよいでしょう。

この本では、S4Aでも教えてくれるのがよいです。ブロックを組んでプログラムを組むタイプです。ただ、PCとつないでいないといけないので、最後はネイティブのプログラムを書く羽目になります。小中学生向けですね。

開発環境の構築

まず、https://www.arduino.cc/ へ行って、開発環境を整えましょう。
Softwareを選択します。

中程に、Windows版があります。ZIP版(バージョンを保持できるので)をダウンロードした方がよいでしょう。

寄付(donate)してダウンロードするか、そのままダウンロードするかを選択してダウンロードしてください。

 

保存したら、ZIPファイルを展開します。

D:/Program/Arduinoなどのフォルダを作ってそこに保存しましょう。

Arduino.exeを開きます。

作ったファイルやらライブラリを保存する場所を選択しておきましょう。[ファイル]の[環境設定]を開きます。

スケッチの保存場所はArduinoと保存した場所と異なるところに保存する必要があります。

D:/Arduino

としておきましょう。あと、より詳細な情報を表示するのコンパイルにチェックを入れておくと、エラーがでたとき対応しやすいです。

行番号は表示させておいた方がよいでしょう。

PCと本体をUSBで接続します。ハブを介さず直接接続した方がよいです。今からやろうとしていることは、センサーすなわち、電圧、電流を気にするたぐいのものですから!!!
接続したら、[ツール]を開きます。

ボード:Aruduino/Genuino Uno
シリアルポート:それぞれの環境。画像ではCOM5(Arudino/Genuino Uno)
を選択します。

いわゆるLチカ

では、LEDをチカチカと点滅させる通称Lチカをやってみましょう。

用意するもの

・ブレッドボード 1個
・LED 1個
・200Ω抵抗(赤黒茶金)1個
・ジャンパーピン オス-オス2本

ブレッドボードは、基板がいらず、半田付けもしないので、気軽に、部品を取り付けたり取り外したりすることができます。
下のキットで大丈夫です。

回路図のように、LEDと赤黒茶金の帯の200Ωの抵抗とをつけます。LEDは長い方がプラスです。抵抗は向きはありませんが、赤がプラス側につけるという風にルールを作ると
電流の方向がわかりやすいです。

回路図はfritzingというフリーソフトを使っています。よく落ちます;;;

本でも解説してありましたが、通常のLEDは最大3vまで耐えられ?ます。Arduinoは5v電源を使っているので、回路を間違うとLEDが吹っ飛びます;;;
何個も飛ばしました;;;
ちゃんと計算して抵抗はつけましょう・・・。
ジャンパーピンは、プラス側を赤色、マイナス側を黒色にしておくと、電流の流れがわかりやすくなります。
ここでは、13ピンにつけます。マイナスはGNDにつけます。

取り付けが終わったら、いよいよプログラムを動かしましょう。

ファイル、スケッチ例、01.Basics、Blinkを選択します。
サンプルファイルが用意されています。

チェックマークを押してコンパイルして、右矢印マークを押してマイコンに書き込みます。

すると、Arduino本体のオレンジのLEDとブレッドボードのLEDが点滅するはずです。

[Arduino] 第2回 最初は本家のArduinoを買おう

最初は本家のArduinoを買おう

まずはじめに用意するものは

  • 本家のArduino
  • LEDなどの部品類

が必要になります。ここで、本家のArduinoと書きましたが、Arduinoはオープンソース化されているので、いろんなメーカーがいろいろな商品を出しています。商品が異なるとどこで躓いたのか分からなくなるので、まずは、本家のArduinoを買いましょう。

ところが、Arduinoはイタリア生まれなのですが、米国とのライセンスの関係でGenuinoと名前もありますが、どちらも本家です。さらにArduinoには、様々なバージョンが用意されています。ここでは、
Arduino Unoを使いたいと思います。これひとつ(Uno)で何でもできるよということですね。

どこからでもよいのですが、アマゾンのスイッチサイエンスさんがよいかとおもいます。
送料が無料になるからという理由だけです。

次に、本ですが、私が使ってわかりやすかったのがこの本です。これもアマゾンでどうぞ。Kindle版だとかなりやすいです。わかりやすいプログラムの本は厚いですが、すぐ古くなるので、悩ましいですね。

そして、最後にLEDなどの部品類。上の本を読みながら進める場合、残念ながら専用キットがありません。いろいろ用意しなければならないのです。。。いろいろ買いましたが、下のが一通り揃っており、本の内容通りに進められました。ちなみに、これにはArduinoもついているので、別途本体を買わなくてよいです。

[Arduino] 第1回 Aruduinoをはじめよう

はじめに

かなり前から、Arduinoをやっているのですが、久しく使わないとプログラムって忘れますね。。。
メモついでにネットで残しておこうと

いつもは、PukiWikiを使っているのですが、スキンやプラグインが古くなってきたので、今更ながら、WordPressで書こうと思います。
使い勝手がよければ、ほかの項目もこちらに移行したいなとも思っています。

いまさらArduino?

今更感があるArduino。周りもRaspberry Piじゃないの?と聞かれます。もちろん、Raspberry Piも重要です。ラズパイは自走ロボットや機械学習などスタンドアロンでの動作も要求されるので、メモリやらなんやらスペックも大きめです。しかし、私がやりたいのはIOT。ネット環境が揃ってなくてはなりません。裏を返せば、IOTでは、センサーの情報を収集することが主な目的で、重たい演算は、サーバでやればよいわけです。結果を再び、Arduinoに返してもよいのです。ということで、非力なボードでも十分役に立つのです。しかも、コストがかなり安いのも魅力的です。

 

8bitマイコンに、5v電源、四角いUSBの穴があり、SDカードとかネットとかにはつなげそうにありません。
時間も正確に刻むことはできないでしょう。今更感満載です。

目標は、センサーで得た情報をデータベースにあげることを目標にします。

そもそも、WordPressにあまり慣れていないので、まずはこの辺で。

下の本を買ったところ、かなり勉強になりました。まずは1冊用意しておきましょう。