第2回 Arduino+モーター
ステッピングモーター
一定の角度ずつ回転するモーター
モーターを回転させる
Copy!!
const int DIR = 8;
const int STEP = 9;
void setup() {
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
digitalWrite(DIR, LOW);
digitalWrite(STEP, LOW);
}
void loop() {
for (int i=0; i <= 50; i++){ //1.8°*50(i)
clockwise(5000); //5000=5秒
}
for (int i=0; i <= 50; i++){
counter_clockwise(5000);
}
}
void clockwise(int delaytime){
digitalWrite(DIR, HIGH);//HIGHは時計回り
digitalWrite(STEP, HIGH);
delayMicroseconds(delaytime);
digitalWrite(STEP, LOW);
delayMicroseconds(delaytime);
}
void counter_clockwise(int delaytime){
digitalWrite(DIR, LOW);//はLOWは反時計回り
digitalWrite(STEP, HIGH);
delayMicroseconds(delaytime);
digitalWrite(STEP, LOW);
delayMicroseconds(delaytime);
}
センサーやモーターを使って何か作る
一定の暗さになる
↓
LED(NeoPixel)の色がランダムにつく
↓
色がそろったら点滅し、モーターが回る
↓
LED(NeoPixel)の色がランダムにつく
↓
色がそろったら点滅し、モーターが回る
Copy!!
#include <Adafruit_NeoPixel.h>
#define PIN 6 // NeoPixel
#define NUMPIXELS 5 // LEDの数
#define CDS_PIN A1 // センサー
#define MOTOR_PIN 3 // モーター
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int order[NUMPIXELS];
uint32_t colors[NUMPIXELS];
uint32_t palette[5];
void setup() {
Serial.begin(9600);
pixels.begin();
pixels.setBrightness(50);
pinMode(MOTOR_PIN, OUTPUT);
digitalWrite(MOTOR_PIN, LOW);
randomSeed(analogRead(0)); // ランダムの種を初期化
// 色
palette[0] = pixels.Color(255, 0, 0); // 赤
palette[1] = pixels.Color(255, 255, 0); // 黄
palette[2] = pixels.Color(0, 255, 0); // 緑
palette[3] = pixels.Color(0, 0, 255); // 青
palette[4] = pixels.Color(255, 0, 255); // 紫
}
void loop() {
int val = analogRead(CDS_PIN);
Serial.print("Sensor Value: ");
Serial.println(val);
// 暗い時
if (val <= 200) {
pixels.clear();
pixels.show();
digitalWrite(MOTOR_PIN, LOW);
delay(500);
return;
}
// 抽選
pixels.clear();
// 点灯させる順番
order[0] = 0;
order[1] = 4;
order[2] = 1;
order[3] = 3;
order[4] = 2;
// 当たり判定(30%)
bool isHit = (random(0, 100) < 30);
if (isHit) {
// 当たりの場合:ランダムに選んだ1色で全LEDを統一
uint32_t hitColor = palette[random(0, 5)];
for(int i = 0; i < NUMPIXELS; i++) {
colors[i] = hitColor;
}
} else {
// ハズレの場合:各LEDをバラバラの色にする
for(int i = 0; i < NUMPIXELS; i++) {
colors[i] = palette[random(0, 5)];
}
}
//1つずつ点灯
for(int i = 0; i < NUMPIXELS; i++) {
int ledIndex = order[i];
pixels.setPixelColor(ledIndex, colors[ledIndex]);
pixels.show();
delay(200);
}
//当たりの動作
if (isHit) {
Serial.println("--- HIT! ---");
//点滅
for(int k = 0; k < 3; k++) {
pixels.clear();
pixels.show();
delay(200);
for(int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, colors[i]);
}
pixels.show();
delay(200);
}
//モーター回転
pixels.clear();
pixels.show();
delay(100);
Serial.println("Motor Rotating...");
digitalWrite(MOTOR_PIN, HIGH);
//回転する時間
delay(500);
digitalWrite(MOTOR_PIN, LOW);
Serial.println("Motor Stopped");
delay(2000);
} else {
Serial.println("MISS...");
delay(1000);
}
pixels.clear();
pixels.show();
delay(300);
}
まとめ
色がそろったら点滅までは上手くいったが、モーターが回転しないことが多々あった。
それ以外は、想像した感じにできたので良かった。
それ以外は、想像した感じにできたので良かった。