MAU電子工作講習資料(2019/08/22 10:00 – 17:00)
コピーペーストをしやすいように、MAU電子工作講習のコードを載せています。手を動かすことのほうが多いので、特にプログラムの解説はしていません。今回は実際に手を使って組むので、前回のプログラミング講習よりもミスが増えると思います。分からないことがあれば遠慮なく周りに質問してください。
アンケートのご回答
今回の講習のアンケートはここをクリック
- Teamsに参加していない方は、アンケートの回答をお願いします。
質問について
-
直接の質問ももちろん受け付けておりますが、匿名での質問をご希望の方はSlidoというサイトを利用して質問することができます。
https://app.sli.do/event/suxhhvjr/live/questions
本日の講習スライド
本日の講習スライドは1パートのみです。
- Arduino入門
マイコン内蔵LEDの点灯
Processingではsetupとdrawでしたが、Arduinoではsetupとloop関数からなります。名前がdrawからloopに変わっていますが、役割は一緒です。
int PIN_LED = 13; //内蔵LEDは13番のPIN
void setup() {
pinMode(PIN_LED, OUTPUT); //内蔵LEDのPINを出力モードにする
}
void loop() {
digitalWrite(PIN_LED, HIGH); //内蔵LEDのPINをHIGHにして電流を流し、点灯
delay(1000); //そのまま1秒待つ
digitalWrite(PIN_LED, LOW); //内蔵LEDのPINをLOWにして、電流を止め、消灯
delay(1000);
}
GPIOピンの入力・出力モードの切り替え
int inputPinNo= 10;// ピンはピン番号で指定する
int outputPinNo= 2;// ピン番号は変数(定数)にし、分かり易い名前をつけよう
int highOrLow;
void setup(){
pinMode( outputPinNo, OUTPUT);// ピンを出力モードに切り替え
pinMode( inputPinNo, INPUT);// ピンを入力モードに切り替え
}
void loop(){
digitalWrite(outputPinNo, HIGH);// ピンに出力
highOrLow= digitalRead(inputPinNo);// ピンから入力
}
シリアル通信でhello worldを出力
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("hello world");
delay(1000);
}
HIGHかLOWかを見る。HIGHなら1,LOWなら0
int inputPinNo= 10;// ピンはピン番号で指定する
int outputPinNo= 2;// ピン番号は変数(定数)にし、分かり易い名前をつけよう
int highOrLow;
void setup(){
pinMode( outputPinNo, OUTPUT);// ピンを出力モードに切り替え
pinMode( inputPinNo, INPUT);// ピンを入力モードに切り替え
Serial.begin(9600);
}
void loop(){
digitalWrite(outputPinNo, HIGH);// ピンに出力
highOrLow= digitalRead(inputPinNo);// ピンから入力
Serial.println(highOrLow);
}
LEDの点灯
1秒ごとに点滅します。
int PIN_LED = 7;
void setup() {
pinMode(PIN_LED, OUTPUT);
}
void loop() {
digitalWrite(PIN_LED, HIGH);
delay(1000);
digitalWrite(PIN_LED, LOW);
delay(1000);
}
PWM制御を用いたLEDの点灯
途中のfor文の()内の最後、 led_value += 10は、led_value = led_value + 10と同じで、10ずつ増やしていくループになります。
その次のfor文の()内の最後、led_value -= 10は、led_value = led_value – 10と同じで、10ずつ減らしていくループになります。
最初のループで徐々に明るくなり、次のループで徐々に暗くなっていきます。
int PIN_LED = 3;
void setup() {
pinMode(PIN_LED, OUTPUT);
}
void loop() {
for ( int led_value = 0; led_value < 256; led_value += 10 ) {
analogWrite(PIN_LED, led_value );
delay( 30 );
}
for ( int led_value = 255; led_value > -1; led_value -= 10 ) {
analogWrite(PIN_LED, led_value );
delay( 30);
}
}
フォトリフレクタを使う
int analogPin = 3; //受信側をアナログピンの3番に接続
int val = 0; //読み取った値を格納する変数
void setup()
{
Serial.begin(9600); //シリアルの設定
}
void loop()
{
val = analogRead(analogPin); //入力ピンの読み取り
Serial.println(val); //値の表示(0~1024)
}
フルカラーLEDの点灯
NeoPixelライブラリをインストールすることを忘れないでください。
- 「スケッチ」->「ライブラリをインクルード」->「ライブラリを管理」の順にクリック
- 右上の「検索をフィルタ・・・」の欄に「NeoPixel」と入力する
- Adafruit NeoPixelを選んで「インストール」をクリックする
- インストールが終わったら「ライブラリマネージャ」を閉じる
#include <Adafruit_NeoPixel.h> // NeoPixelを接続したPIN番号を設定
#define PIN 9
#define NUMPIXELS 1
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800);
void setup() {
pixels.begin(); //NeoPixelの初期化
}
void loop() {
pixels.clear(); // 接続しているすべてのLEDを消灯
pixels.show(); //LEDに色情報を送る(消灯の場合も)
pixels.setPixelColor(0, pixels.Color(255, 0, 255));//明るい紫色(ピンク色,赤+青)
pixels.show(); //LEDに色情報を送る
delay(100); //遅延時間
}
フルカラーLED複数個の点灯
このコードは2個の場合です。3個ならば #define NUMPIXELS 2 の「2」を「3」に変えればOKです。
#include <Adafruit_NeoPixel.h>
#define PIN 6 // NeoPixelを接続したPIN番号を設定
#define NUMPIXELS 2 // NeoPixelのLEDの数を設定
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin(); //NeoPixelの初期化
}
void loop() {
pixels.clear(); // 接続しているすべてのLEDを消灯
pixels.show();
for (int i = 0; i < NUMPIXELS; i++) {//接続されているLEDの個数だけ色情報を送る(NUMPIXELSで指定、NUMPIXELSよりもLEDが少なくてもエラーは起こらない)
pixels.setPixelColor(i, pixels.Color(255, 0, 255));//明るい紫色(ピンク色,赤+青)
pixels.show(); //LEDに色情報を送る
delay(100); //遅延時間
}
}
おまけ:フルカラーLED複数個の順番点灯
#include <Adafruit_NeoPixel.h>
#define PIN 6 // NeoPixelを接続したPIN番号を設定
#define NUMPIXELS 2 // NeoPixelのLEDの数を設定
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin(); //NeoPixelの初期化
}
void loop() {
pixels.clear(); // 接続しているすべてのLEDを消灯
pixels.show();
for (int i = 0; i < NUMPIXELS; i++) {//接続されているLEDの個数だけ色情報を送る(NUMPIXELSで指定、NUMPIXELSよりもLEDが少なくてもエラーは起こらない)
pixels.setPixelColor(i, pixels.Color(255, 0, 255));//明るい紫色(ピンク色,赤+青)
pixels.show(); //LEDに色情報を送る
delay(50); //遅延時間
pixels.clear();
pixels.show();
}
}