RaspberryPIとFETによるモーター制御回路
RaspberryPIでモーター制御を行う。
モーターと一言で言っても色々あるのですが、今回は通称マブチ130モーター
型番は「FA-130RAL」と書いてあります。DC5Vで9000RPM。
知らない人は普通のプラモデル用のモーターだと思ってください。
これを回すのはarduinoの場合はPWM出力してその先にFETで電力を増幅してモーターが回るわけですが、
RaspberryPIで行うには・・・と調べてみたところ、例によって「wiringPi」で実施可能です。
しかし、それで判ったんですが。arduino-UNOにはPWM出力が6本付いていたんですが、
Raspberry-PIには1本しか付いていません。
なぜだRaspberryPI。それが出来るのがGPIO18だけなんです。
他のピンに置き換えて実験してみたけど動きませんでした。悪しからず。
ちなみに、アナログでの電圧入力端子は無いし。電子工作的にはちょっと苦労するかもね。
映像

回路図です。
RaspberryPIとFETによるモーター制御-回路
プログラム解説
簡単ですね。
5000000ナノセックsleepしながらスイッチのUPが押されていたらPower(モーターへの電力)を足す。
DOWNが押されていたらPowerを引く。
「pwmWrite( PIN_MOTOR ,nPower );」で18番ピンに電力する電力を制御する。
といった具合です。
プログラム
 

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <wiringPi.h>
      5
      6
      7 #define PIN_UP 15
      8 #define PIN_DOWN 14
      9 #define PIN_MOTOR 18
     10
     11 int main()
     12 {
     13     wiringPiSetupGpio();
     14
     15     pinMode( PIN_MOTOR, PWM_OUTPUT );
     16     pinMode( PIN_UP, INPUT );
     17     pinMode( PIN_DOWN, INPUT );
     18     pwmSetMode( PWM_MODE_MS );
     19     pwmSetClock( 400 );
     20     pwmSetRange( 1000 );
     21
     22     //
     23     //
     24     //
     25     struct timespec req, rem;
     26     req.tv_sec = 0;
     27     req.tv_nsec = 5000000;  //
     28     //
     29     int nPower = 0;
     30     //
     31     while(1){
     32         if(digitalRead(PIN_UP)){
     33 printf("PIN_UP¥n");
     34             nPower++;
     35         }
     36         if(digitalRead(PIN_DOWN)){
     37 printf("PIN_DOWN¥n");
     38             nPower--;
     39         }
     40         if(nPower<0){
     41             nPower=0;
     42         }
     43         if(nPower>1000){
     44             nPower=1000;
     45         }
     46 printf("nPower = %d¥n", nPower);
     47         pwmWrite( PIN_MOTOR ,nPower );
     48         nanosleep(&req, &rem);
     49         //sleep(1);
     50     }
     51     return 0;
     52 }