Studuino
久しぶりにロボットの話題です。以前アーテックのロボットをカスタマイズされたScratchで動かしました。
今回は、Arduinoで動かして見ました。
こういうプログラムをつくるときに時間がかかるのが、初期設定や入出力デバイスがきちんと接続されて使えるかという確認です。
ここではこのロボットで何かをするというより、動作確認済みのスケルトンとなるコードを作ることを目的としたメモです。
といっても動かさないと確認できませんので、シーケンスに従いモータを指定角度分動かしたり、LEDを発光させました。
入力は加速度センサとスイッチを使っていますが、その他のセンサ値もシリアル出力できます。
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 82 83 84 85 86 87 88 89 90 |
#include <Arduino.h> #include <Servo.h> #include <Wire.h> #include <MMA8653.h> #include <MPU6050.h> #include <IRremoteForStuduino.h> #include <ColorSensor.h> #include "Studuino.h" Studuino board; #define STMAX 8 int step = 0; void setup() { //サーボモータ board.InitServomotorPort(PORT_D9); board.InitServomotorPort(PORT_D10); board.InitServomotorPort(PORT_D11); //スイッチ board.InitSensorPort(PORT_A0, PIDPUSHSWITCH); //音 board.InitSensorPort(PORT_A3, PIDSOUNDSENSOR); //光 board.InitSensorPort(PORT_A6, PIDLIGHTSENSOR); //IR board.InitSensorPort(PORT_A7, PIDIRPHOTOREFLECTOR); //加速度 board.InitSensorPort(PORT_A4, PIDACCELEROMETER); //LED board.InitSensorPort(PORT_D2, PIDLED); board.InitSensorPort(PORT_D4, PIDLED); //ブザー board.InitSensorPort(PORT_A2, PIDBUZZER); //サーボ初期化 byte connector[] = {PORT_D9, PORT_D10, PORT_D11}; byte degree[] = {180, 90, 90}; board.AsyncServomotors(connector, degree, 3); board.Timer(3); //シリアル出力の初期化 Serial.begin(9600); } int seq[6][STMAX] = { {1, 0, 1, 0, 1, 0, 1, 0}, {0, 0, 1, 1, 0, 0, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0}, {180 ,120, 180, 180, 180, 180, 180, 180}, {90, 90, 45, 90, 90, 90, 45, 90}, {90, 90, 90, 45, 90, 90, 90, 90} }; void loop() { byte sw = board.GetPushSwitchValue(PORT_A0); int s = board.GetSoundSensorValue(PORT_A3); int r = board.GetIRPhotoreflectorValue(PORT_A7); int x = board.GetAccelerometerValue(X_AXIS); int y = board.GetAccelerometerValue(Y_AXIS); int z = board.GetAccelerometerValue(Z_AXIS); int l = board.GetLightSensorValue(PORT_A6); if(sw == 0){ board.LED(PORT_D2, ON); board.LED(PORT_D4, ON); board.BuzzerControl(PORT_A2, ON, BZR_G5); board.Servomotor(PORT_D9, 120); board.Servomotor(PORT_D10, 45); board.Servomotor(PORT_D11, 45); } else{ if(10 < x && x < 90){ board.Servomotor(PORT_D10, x*2); board.LED(PORT_D2, ON); } else{ //シーケンス処理 board.LED(PORT_D2, seq[0][step]); board.LED(PORT_D4, seq[1][step]); board.BuzzerControl(PORT_A2, seq[2][step], BZR_G5); board.Servomotor(PORT_D9, seq[3][step]); board.Servomotor(PORT_D10, seq[4][step]); board.Servomotor(PORT_D11, seq[5][step]); } } step ++; if(step >= STMAX){ step = 0; } delay(500); } |
今回は動画も載せました。規則正しく動く様子は工場のロボットを連想させてくれます。
Category: 未分類