SG90サーボモーターの配線
RFIDの信号を判定した後は、サーボモータを動かす。
ユニバーサル基板に取り付けるとき、最初からついている3つ口ソケットが邪魔になってしまう。
そこで、適切な長さに切ったのち、それぞれの線(赤5v、茶GND、黄色Signal)の被覆を剥いてArduino Nanoに接続しなくてはいけない。
購入したワイヤストリッパーでは、この線をうまく向けなかったのでニッパーで剥いた。初代ファミコンの同軸ケーブルを付けたり外したりという操作を何度も行い、何度も芯を折ってはハサミだけで被覆を剥くという経験がここにきて生きた。
中の線はまとまっていないばらばらの線だったため、まずはネジって1つの線のように変え、そこにごく少量のハンダを乗せて基板の穴に入れる際もばらけないようにした。
Arduino Nanoの5v,GNDに接続し、信号はD3に接続した。(D4などでもよいようだが)Arduino自体をSleepして、Wake Upのための信号を取り込むPinとしてD2やD3が使えるということらしいのだが、常時電源が接続されていないほうが好都合のため、それらは見送った。
SG90を動かすためのArduinoスケッチ
参考にしたのはこれ
https://www.arduino.cc/en/Tutorial/Sweep
#include <Servo.h> int pos = 0; // variable to store the servo position Servo myservo; // create servo object to control a servo void setup() { //Serial.begin(9600); // デバッグ用 SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 //Serial.println(F("This code scan the MIFARE Classsic NUID.")); //Serial.print(F("Using the following key:")); myservo.attach(SV_PIN); // attaches the servo myservo.write(servodegree); // deglee 180 is lock } |
必要なところのみ抜粋。
とりあえず、動かしたければServoでインスタンスを作って、attachで信号を送るPin番号を指定、writeで角度を入れることで動く。
でも、買ったSG90は個体差が結構あって、同じ90度を入れても若干ずれたりしていた。
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position |
これは、参考にした「Sweep」のスケッチの一部だけれど、myservo.write(pos)のあとに、delay(15)を入れている。
これは、実際に指定した角度に移動するまで待つというもの。
もしこれを入れなかったら、移動が終わる前に次の位置指定信号が到達してしまって、ピクリとも動けなくなる。