どうも、電子工作YouTuber兼エンジニアのなかしーです。
おかげさまで登録者数が1000人を超えることができました。本当にありがとうございます。
チャンネルはこちら
>>なかしーの電子工作部
僕が今まで投稿した動画の中で最も人気があるシリーズが「エンジニアが教えるArduino講座」です。計18本に渡ってスライド等を使いながら初心者の方向けに部品の特徴やプログラミングについて解説してきました。
この記事ではArduino入門のまとめページとして、各回のポイントやプログラムを紹介していきたいと思います。
分からないことがあればYouTubeにコメントして頂ければ答えますし、コメントに応じてこちらの記事もアップデートしていきたい所存です。
動画では基本的にArduinoのスタータキットに入っている物を使用して解説しています。まだ、Arduinoをまだ持ってないという方はArduinoのスタータキットの購入を検討してみてください。
レビュー記事はこちら
>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】
YouTubeのコメントで「おすすめの参考書はありますか?」と聞かれることが多いんですけど、僕は参考書を読んでいません。もしも、参考書の購入を検討しているのであればこちらの記事を読んでみてください。
Arduinoの勉強に役立つ本の選び方【現役エンジニアが解説】もしも、Arduino入門講座を一通り終えたけど何を作ろうか迷っている方はこのような電子工作キットがおすすめですよ。
このスマートカーキットは講座で使用しているArduino UNOと同じものを使用しており、センサやアクチュエータを単体で動かしていたところからシステムよりのプログラミングを行うことが可能です。
随時更新予定です。
タップできるもくじ
- 1 第0回:導入編
- 2 第1回:LEDの点滅
- 3 第2回:スイッチによる条件分岐
- 4 第3回:サーボモーターを動かす
- 5 第4回:A/D変換
- 6 第5回:シリアル通信
- 7 第6回:LCDの使い方
- 8 第7回:データを保存できるEEPROM
- 9 第8回:加速度センサーとシリアルプロッタ
- 10 第9回:光センサー
- 11 第10回:超音波センサー
- 12 第11回:7セグメントLED
- 13 第12回:ダイナミック点灯
- 14 第13回:ピン配置と役割
- 15 第14回:割り込み
- 16 第15回:乱数
- 17 第16回:ブザー
- 18 第17回:プルアップ
- 19 第18回:時間計測と時間割り込み
- 20 番外編:テレビのリモコンの作り方
- 21 番外編:温湿度計の作り方
第0回:導入編
前準備としてArduinoで電子工作を行う流れの解説をしています。
- ブレッドボードに回路を組む
- プログラムを書く
- Arduinoにプログラムを書き込む
- 動作を確認する
C言語でプログラミングする場合はコンパイルと言って、プログラムを機械言語に変換してくれるソフトが必要です。Arduinoの公式サイトでエディタ機能やコンパイルしてくれる機能が1つになったArduino IDEがダウンロード可能です。
インストール方法についてはこちらの記事をご覧下さい。
Arduino IDEのダウンロード方法【画像付きで紹介】第1回:LEDの点滅
この動画ではArduinoのボード上にあるLEDとブレッドボードで赤色LEDを点滅させる方法について解説しています。
動画内で解説している関数は3つ
- pinMode関数
- digitalWrite関数
- delay関数
ボード上のLEDの点滅
ボード上のLEDはデジタルピン13を出力設定し、HIGHとLOWをdelay関数を挟みながら切り替えることで点滅します。
プログラムはこちらです。
void setup() {
pinMode(13, OUTPUT); //13ピンを出力に設定
}
void loop() {
digitalWrite(13, HIGH); //LEDを点灯
delay(500); //0.5秒待機
digitalWrite(13, LOW); //LEDを消灯
delay(500); //0.5秒待機
}
赤色のLEDの点滅
ブレッドボードにLEDと抵抗をつないで点滅させます。
使用する部品は
- LED(赤色)
- 抵抗(220Ω)
LEDは接続する向きが決まっています。足が長い方がアノードでプラス側、短い方がカソードでマイナス側に繋ぎます。反対に繋ぐとLEDが光らないので注意してください。
抵抗のLEDと繋がっていない方をArduinoの7ピンに接続します。
void setup() {
pinMode(7, OUTPUT); //7ピンを出力に設定
}
void loop() {
digitalWrite(7, HIGH); //LEDを点灯
delay(500); //0.5秒待機
digitalWrite(7, LOW); //LEDを消灯
delay(500); //0.5秒待機
}
第2回:スイッチによる条件分岐
この動画ではスイッチの状態を読み取り、LEDを点灯・消灯させる方法について解説しています。
第1回の回路にタクトスイッチを繋げればOKです。
動画内で解説している関数は1つ
- digitalRead関数
digitalRead関数を使うと指定したピンの状態(HIGHかLOW)を読みとることが可能です。
プログラムはこちら
void setup() {
pinMode(3, INPUT);
pinMode(7, OUTPUT);
}
void loop() {
if (digitalRead(3) == HIGH) {
digitalWrite(7, HIGH);
} else {
digitalWrite(7, LOW);
}
}
動画内ではdigitalWriteの引数(カッコの中)に0と1をそれぞれ代入していますが、HIGHとLOWはその定数になので同じ動作になります。
Arduinoでタクトスイッチの状態を読み込む方法【エンジニアが解説】第3回:サーボモーターを動かす
サーボモーターの動かし方を解説しています。
サーボモーターはPWM出力の周波数に応じた角度で停止してくれます。
この動画ではServoライブラリをインクルードし、クラスを用意。そのクラスのメソッドを使ってサーボの角度を制御しています。
#include "Servo.h"
Servo myservo;
void setup() {
myservo.attach(3);
}
void loop() {
myservo.write(0);
delay(1000);
myservo.write(90);
delay(1000);
myservo.write(180);
delay(1000);
}
ちなみに複数個のサーボを制御したいのであれば、その分のクラスを用意すれば可能です。
このプログラムだとmyservo1、myservo2、myservo3って感じですね。
Arduinoでサーボモーターを動かす方法【電子工作の入門講座】第4回:A/D変換
値に応じた電圧を出力するセンサーはA/D変換で処理します。
デジタルピンだとHIGHかLOWの2値だけですが、アナログピンだと2.7Vなど0Vから5Vの間をどこでも取り込むことができます。取り込むとその電圧にふさわしいデータになります。
#include "LiquidCrystal.h"
int data = 0;
float volt = 0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() {
lcd.begin(16, 2);
}
void loop() {
data = analogRead(1);
lcd.setCursor(0, 0);
lcd.print("A/D data=");
lcd.print(data);
lcd.print(" ");
volt = ((float)data * 5) / 1023;
lcd.setCursor(0, 1);
lcd.print("V=");
lcd.print(volt);
}
第5回:シリアル通信
Arduinoのシリアル通信を使いこなす【徹底解説】第6回:LCDの使い方
ArduinoでLCDを使う方法【文字列を表示可能】第7回:データを保存できるEEPROM
ArduinoのEEPROMの使い方【データを保存可能】第8回:加速度センサーとシリアルプロッタ
Arduinoで加速度センサを使う方法【傾きを検出できる】第9回:光センサー
第10回:超音波センサー
Arduinoで距離センサーを使う方法【超音波を利用する】第11回:7セグメントLED
Arduinoで7セグメントLEDを使う方法【数字や文字を表示】第12回:ダイナミック点灯
第13回:ピン配置と役割
Arduino UNOのピン配置と役割【使い方を理解しよう】第14回:割り込み
Arduinoの割り込み機能とは?【使い方を具体的に解説】第15回:乱数
Arduinoで乱数を使ったサイコロを作り方【解説あり】第16回:ブザー
Arduinoでブザーから音を出す方法【音程や音量を調整可能】第17回:プルアップ
Arduinoのプルアップ機能とは【どういった時に使うのか?】第18回:時間計測と時間割り込み
Arduinoで時間計測や割り込みを行う方法【ディレイなしで】番外編:テレビのリモコンの作り方
今まで解説してきた内容を組み合わせて作ったのが「テレビのリモコン」です。
作り方はテレビのリモコンのデータを解析し、それに沿ってプログラミングをしていくだけ。ただ、テレビによって動画で解説しているデータの送り方に違いがあるのでご注意を
まとめ記事を貼っておくので詳細はこちらをご覧ください。
Arduinoでテレビのリモコンを作る方法番外編:温湿度計の作り方
#include
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#define SENSOR 8
unsigned char Sensor_data[5];
void setup() {
lcd.begin(16, 2);
}
void loop() {
int i = 0;
int j = 0;
unsigned int time_data = 0;
pinMode(SENSOR, OUTPUT);
digitalWrite(SENSOR, LOW);
delay(20); //18ms以上
digitalWrite(SENSOR, HIGH);
pinMode(SENSOR, INPUT);
pulseIn(SENSOR, HIGH); //レスポンス
for (i = 0; i < 5; i++) {
for (j = 0 ; j < 8; j++) {
Sensor_data[i] = Sensor_data[i] << 1;
time_data = pulseIn(SENSOR, HIGH);
if (time_data > 50) {
Sensor_data[i] |= 1;
}
}
}
lcd.setCursor(0, 0);
lcd.print(Sensor_data[0]);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print(Sensor_data[2]);
lcd.print("F");
delay(2000);
}