Arduino 電子工作
前にラズベリーパイで電子工作をした記事を書きましたが、今回はArduinoで同様のことをやってみました。
http://decode.red/ed/archives/202
もともとArduinoの方が以前から電子工作でよく話題になっていたのは知っていましたが、使うきっかけがなかなかありませんでした。プログラミング環境の勉強ととラズバイの電子工作が入口となり、遠回りしてArudinoにたどりついた感じです。
Arduinoのプログラミング環境ってProcessingのものと同じなのですね。知りませんでした。
http://decode.red/ed/archives/168
初期処理とループ処理の二つからなるCライクな言語で、とても扱いやすいです。
今回作ったもののテーマは、Arduino互換機とセットで販売されたキットを使ってできるだけたくさんのインターフェイスをブレッドボードに乗せてプログラミングしてみようというものです。
入力は、赤外線リモコン、可変抵抗器、ボタン。
出力は、ブザー、LED、サーボモータです。
(まだPINが空いているので部品がもう少しあればもっと可)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
#include <IRremote.h> #include <Servo.h> int pin_ir = 10; int pins_led[] = {4, 5, 6, 7}; int pin_beep = 12; int pin_ana = 0; int pins_btn[] = {2, 3}; IRrecv irrecv(pin_ir); decode_results res; Servo servo; void setup() { Serial.begin(9600); irrecv.enableIRIn(); for(int i = 0; i < 4 ; i++){ pinMode(pins_led[i], OUTPUT); } pinMode(pin_beep, OUTPUT); servo.attach(8); // pin 7 for(int i = 0; i < 2; i++){ pinMode(pins_btn[i], INPUT); } } void loop() { if (irrecv.decode(&res)) { if(res.value != 0xFFFFFFFF){ Serial.println(res.value, HEX); switch(res.value){ case 0xFF30CF: digitalWrite(pins_led[0], HIGH); break; case 0xFF18E7: digitalWrite(pins_led[1], HIGH); break; case 0xFF7A85: digitalWrite(pins_led[2], HIGH); break; case 0xFF10EF: digitalWrite(pins_led[3], HIGH); break; case 0xFFE01F: servo.write(90); break; case 0xFFA857: servo.write(0); break; default: for(int i=0; i < 20; i++){ digitalWrite(pin_beep, HIGH); delay(1); digitalWrite(pin_beep, LOW); delay(1); } for(int i=0; i < 4 ; i++){ digitalWrite(pins_led[i], LOW); } } } irrecv.resume(); } int v = map(analogRead(pin_ana), 0, 1023, 0, 9); if(v > 1){ Serial.println(v, DEC); for(int i=0 ; i<10 ; i++){ digitalWrite(pin_beep, HIGH); delay(v-1); digitalWrite(pin_beep, LOW); delay(v-1); } for(int i=0 ; i<2 ; i++){ digitalWrite(pins_led[i], digitalRead(pins_btn[i])); } } } |
動きとしては、
1) 可変抵抗器がゼロでないとき、ボタンで近くのLEDを点灯
2) リモコンの1,2,3,4でLEDを左から順に点灯、-,+でモータを回転、これら以外でLED消灯とブザー音
3) 可変抵抗器で、ブザーの音のピッチを変更(ピッチを上げるために、ちょっとノイズがはいりますがその場で10回ループしています)
です。
使ってみて思ったのは、Linuxのネットワークやその他の機能を使うならラズパイですが、電子回路メインに使うなら電源投入時にすぐ動作するArduinoの方が向いています。
とても手軽で、Arudinoが好まれる理由がわかった気がしました。
電子工作ちょっと本気モードになってきました。
Category: 未分類