ロボットをつくろう 後編 第1回 ロボットの走行実験2 http://cms.db.tokushima-u.ac.jp/dav/person/s1723/ 川上 博 214/1/25
2 今日のテーマ 前回の復習 前進 後退 左折 右折 停止 ロボットの周辺部品を使う IRリモコン LED5 ロボットの走行実験 IRリモコンで操縦する
3 JJ2の運動 前進 後退 前進運動 左 後退運動 右 左 右 基準 逆回転 正回転 void fwd(int tau){ servol.write(32);//3 servor.write(15); 正回転 逆回転 void bwd(int tau){ servol.write(145); //15 servor.write(3);
void ccw(int tau){ servol.write(9); servor.write(15); void cw(int tau){ servol.write(15); servor.write(9);
void stp(int tau){ servol.write(9); servor.write(9);
6 速度 x 時間 距離 void fwd(int tau){ servol.write(3); servor.write(15); 時間 tau を調節して距離を得る void rot(int tau){ servol.write(15); servor.write(15); 時間 tau を調節して回転角度を得る
7 復習 IRリモコンとLED5 IRリモコン 第6回のスケッチExample62Aを実行 #include <FastLED.h> #include <IRremote.h> const int ledpin=4; CRGB leds[1]; const int irrecvpin = 11; IRrecv irrecv(irrecvpin); decode_results results; void setup(){ delay(2); LEDS.setBrightness(127); FastLED.addLeds<WS2811, ledpin, GRB>(leds, 1); Serial.begin(96); irrecv.enableirin(); int ledstate = ; void loop(){ if (irrecv.decode(&results)){ delay(2); Serial.println(results.value, HEX); ledstate = 1-ledState; if(ledstate){ leds[]= CRGB(,, 255); else{ leds[]= CRGB(,, ); LEDS.show(); irrecv.resume(); シリアル モニター 押されたボタンの情報を返す
results.value(32bits) Apple remote Sharp TV remote
res2 = getbits(results.value, 15,4); 19 18 17 16 15 14 13 12 11 1 9 8 7 6 5 4 3 2 1 1 1 1 1 1 1 1 A 4 6 77E1A46 HEX binary 1 1 2 1 3 11 4 1 5 11 6 11 7 111 HEX binary 8 1 9 11 A 11 B 111 C 11 D 111 E 111 F 1111
1 2つのスケッチを合併する Example11A: Example62A + Example 92A リモコンのボタン 何でも が押される毎に 前進と停止を繰返す
11 // Example11A:IRremote: Example62A + Example 92A #include <IRremote.h> #include <FastLED.h> #include <Servo.h> 2つのスケッチを合併する const int servol_pin = 9; const int servor_pin = 5; Servo servol; // left servo: 153-1543:1536 Servo servor; // right servo:149-153:1496 int centerr=151, centerl=1541, pw=8; const int irrecvpin = 11; const int ledpin=4; CRGB leds[1]; IRrecv irrecv(irrecvpin); decode_results results; void setup(){ delay(2); LEDS.setBrightness(127); // -255 FastLED.addLeds<WS2811, ledpin, GRB>(leds, 1); // Serial.begin(96); irrecv.enableirin(); servol.attach(servol_pin, centerl-pw, centerl+pw); // D9 servor.attach(servor_pin, centerr-pw, centerr+pw); // D5
void fwd(int tau){ servol.write(3); servor.write(15); void stp(int tau){ servol.write(9); servor.write(9); int ledstate = ; void loop(){ if (irrecv.decode(&results)){ delay(2); ledstate = 1-ledState; if(ledstate){ leds[]= CRGB(,, 255); fwd(2); LEDS.show(); else{ leds[]= CRGB(,, ); stp(1); LEDS.show(); irrecv.resume();
13 復習 IRリモコンで操縦する Example12A を参考にして ボタン毎に前進 後退 右折 左折 停止などを定義し リモコンで操縦できる プログラムをつくる Example12A Example63A Example92A
/* * Example63A: JJ2-LED5-Demo * H. kawakami July 8, 214 */ #include <IRremote.h> #include <FastLED.h> const int ledpin=4; const int irrecvpin = 11; CRGB leds[1]; IRrecv irrecv(irrecvpin); decode_results results; unsigned getbits(unsigned long x, int p, int n){ return (x>>(p+1-n))&~(~<<n); void setup(){ delay(2); LEDS.setBrightness(127); // -255 FastLED.addLeds<WS2811, ledpin, GRB>(leds, 1); Serial.begin(96); irrecv.enableirin();
unsigned res2; void loop() { if (irrecv.decode(&results)) { delay(2); res2=getbits(results.value, 15,4); if(res2==x5){ leds[]=crgb(1,, ); if(res2==x9){ leds[]=crgb(, 1, ); if(res2==x6){ leds[]=crgb(,, 1); if(res2==x3){ leds[]=crgb(1, 1, ); if(res2==xa){ leds[]=crgb(1, 1, 1); if(res2==xc){ leds[]=crgb(,, ); LEDS.show(); Serial.println(results.value, HEX); Serial.println(res2, HEX); irrecv.resume();
16 /* * Example12A: JJ2servo-Demo * H. kawakami October 22, 214 */ #include <IRremote.h> #include "FastLED.h" #include <Servo.h> Example63A Example92A const int servol_pin = 9; const int servor_pin = 5; Servo servol; Servo servor; unsigned getbits(unsigned long x, int p, int n){ return (x>>(p+1-n))&~(~<<n); const int NUM_LEDS=1; const int DATA_PIN=4; CRGB leds[num_leds]; int centerr=151, centerl=1541, pw=8; int RECV_PIN = 11; IRrecv irrecv(recv_pin); decode_results results; unsigned res2; void setup(){ delay(2); LEDS.setBrightness(64); // -255 FastLED.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS); Serial.begin(96); irrecv.enableirin(); // Start the receiver delay(1); servol.attach(servol_pin, centerl-pw, centerl+pw); servor.attach(servor_pin, centerr-pw, centerr+pw); stp(1);
void fwd(int tau){ servol.write(3); servor.write(15); void bwd(int tau){ servol.write(15); servor.write(3); void cw(int tau){ servol.write(3); servor.write(9); void ccw(int tau){ servol.write(9); servor.write(15); void stp(int tau){ servol.write(9); servor.write(9); unsigned res2; void loop() { if (irrecv.decode(&results)) { delay(2); res2=getbits(results.value, 15,4); if(res2==x5){ leds[]=crgb(1,, ); LEDS.show(); fwd(2); if(res2==x9){ leds[]=crgb(, 1, ); LEDS.show(); ccw(2); if(res2==x6){ leds[]=crgb(,, 1); LEDS.show(); cw(2); Serial.println(results.value, HEX); Serial.println(res2, HEX); irrecv.resume();