memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Arduinoを使ったおみくじマシーン

昨日は共通テストでしたね。受験生の皆さん、お疲れさまでした。

日曜日は福岡でも最高気温が5℃と予報が出ていたので、換気すると相当に寒いだろうな。。。と思ったのですが、そこまで冷えずに済みました。

転職して大学教員になってからセンター試験の入試監督を担当してきました。これまでずーっと1日目の担当でしたが、今回は2日目でした。リスニングの対応がないというだけで気持ちはかなり楽でした。

本日はそんな日曜出勤明けの月曜ですが、2限目から授業がありました。

3Dプリンタやレーザーカッターやマイコンなどの使用技術を学び、自分なりの作品つくりをしてもらう授業でした。

シラバス的には3Dプリンタ・レーザーカッターをいれていましたが、Zoom授業だったため、それらはナシになりましたが、マイコンについては、後期はじめにマイコン・ブレッドボード・センサー等をいれたキットを作り渡していました。

今日はこの授業の最終回で、それぞれで何か作品を作って発表してもらう回でした。

Zoom越しですので、特に指導することもなかったため、私も何か作ろうとおもって30分くらいゴニョゴニョして作ったのが以下のシステムになります。

学生さんらのシステムを紹介したいところでしたが、音声がはいったりしますので本人らの同意も必要になりますのでやめました。

ちなみに、このシステムを作るのに一番、時間がかかったのはおみくじの文字盤だったりします。

Webサービススマホアプリもゲーム開発もそれぞれで面白いですが、実体があって手で触れる(タンジブル)なモノづくりって楽しいなぁ。。。と思います。

ちなみにですが、動画でもしゃべっていますが、使っているサーボは0〜180度までしか回転しません。つまり「凶」がでないんですね。。。😁 

せっかくなので、汚いですが、コードも載せておきますね😁

ハッピー、モノづくり!

#include "Servo.h"



Servo servo;

int pre_btn = HIGH;



void setup() {

 pinMode(2, INPUT_PULLUP);

 pinMode(11, OUTPUT);

 pinMode(12, OUTPUT);

 servo.attach(3);

 Serial.begin(115220);

}



void loop() {

 int btn = digitalRead(2);

 if (pre_btn == HIGH && btn == LOW) {

   for (int i = 0; i < 15; i++) show(50);

   for (int i = 0; i < 7; i++) show(80);

   for (int i = 0; i < 5; i++) show(120);

   long v = random(0, 3);

   Serial.println(v);

   switch(v) {

     case 0: //小吉

       servo.write(0);

       music0();

       break;

     case 1: //大吉

       servo.write(90);

       music1();

       break;

     case 2: //中吉

       servo.write(180);

       music2();

       break;

   }

 }

 pre_btn = btn;

}



void music0() {

 delay(500);

 int d = 100;

 tone(12, 1046); delay(d); noTone(12);  

 tone(12, 1046); delay(d*3); noTone(12);  

}



void music2() {

 delay(500);

 int d = 80;

 tone(12, 783); delay(d); noTone(12);

 delay(d);  

 tone(12, 783); delay(d); noTone(12);  

 tone(12, 783); delay(d); noTone(12);  

 tone(12, 1046); delay(d*3); noTone(12);  

}



void music1() {

 delay(500);

 int d = 80;

 tone(12, 1046); delay(d); noTone(12);  

 tone(12, 987); delay(d); noTone(12);  

 tone(12, 880); delay(d); noTone(12);  

 tone(12, 783); delay(d); noTone(12);  

 tone(12, 1046); delay(d); noTone(12);  

 tone(12, 987); delay(d); noTone(12);  

 tone(12, 880); delay(d); noTone(12);  

 tone(12, 783); delay(d); noTone(12);  

 tone(12, 1046); delay(d*2); noTone(12);  

 tone(12, 1318); delay(d*2); noTone(12);  

 tone(12, 1174); delay(d*4); noTone(12);  

}



void show(int t) {

 digitalWrite(11, HIGH);

 tone(12, 880);

 delay(50);

 digitalWrite(11, LOW);

 noTone(12);

 delay(t);

}