2012年12月14日

Raspberry PiでSPG20-1332を回す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Raspberry Piで秋月電子で売っている安いステッピングモーター(コパル製 SPG20-1332)を回す。
以前、Arduinoで二相励磁駆動させたものをRaspberry Piでやってみました。



回路は以下の様な感じで。


Raspberry PiのI/Oは3.3V系なので、トランジスタアレイ(TD62004APG)を入れてレベルシフトしています。

#include <stdio.h>

int main()
{
    int i;
    
    system("echo \"7\" > /sys/class/gpio/export");
    system("echo \"8\" > /sys/class/gpio/export");
    system("echo \"9\" > /sys/class/gpio/export");
    system("echo \"10\" > /sys/class/gpio/export");
    system("echo \"out\" > /sys/class/gpio/gpio7/direction");
    system("echo \"out\" > /sys/class/gpio/gpio8/direction");
    system("echo \"out\" > /sys/class/gpio/gpio9/direction");
    system("echo \"out\" > /sys/class/gpio/gpio10/direction");
    
    for (i=0; i<360; i++) {
            system("echo \"1\" > /sys/class/gpio/gpio7/value");
            system("echo \"1\" > /sys/class/gpio/gpio8/value");
            system("echo \"0\" > /sys/class/gpio/gpio7/value");
            system("echo \"1\" > /sys/class/gpio/gpio8/value");
            system("echo \"1\" > /sys/class/gpio/gpio9/value");
            system("echo \"0\" > /sys/class/gpio/gpio8/value");
            system("echo \"1\" > /sys/class/gpio/gpio9/value");
            system("echo \"1\" > /sys/class/gpio/gpio10/value");
            system("echo \"0\" > /sys/class/gpio/gpio9/value");
            system("echo \"1\" > /sys/class/gpio/gpio10/value");
            system("echo \"1\" > /sys/class/gpio/gpio7/value");
            system("echo \"0\" > /sys/class/gpio/gpio10/value");
    }
    
    system("echo \"7\" > /sys/class/gpio/unexport");
    system("echo \"8\" > /sys/class/gpio/unexport");
    system("echo \"9\" > /sys/class/gpio/unexport");
    system("echo \"10\" > /sys/class/gpio/unexport");
}
480ステップで1回転なので、120回ループしてあげれば1回転、上記では360回ループなので3回転します。

とりあえず動かすだけなので、system関数でシェルを呼び出す感じのへたれコード。
本格的に使うならレジスタを直で叩く方が良いと思います。(速度的に雲泥の差)

追記:PythonでRPi.GPIOを利用して上記をそっくりそのまま写すならこんな感じかな?(未検証)
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(8,GPIO.OUT)
GPIO.setup(9,GPIO.OUT)
GPIO.setup(10,GPIO.OUT)
    
for i in range(0,360):
      GPIO.output(7,GPIO.HIGH)
      GPIO.output(8,GPIO.HIGH)
      GPIO.output(7,GPIO.LOW)
      GPIO.output(8,GPIO.HIGH)
      GPIO.output(9,GPIO.HIGH)
      GPIO.output(8,GPIO.LOW)
      GPIO.output(9,GPIO.HIGH)
      GPIO.output(10,GPIO.HIGH)
      GPIO.output(9,GPIO.LOW)
      GPIO.output(10,GPIO.HIGH)
      GPIO.output(7,GPIO.HIGH)
      GPIO.output(10,GPIO.LOW)

GPIO.cleanup()
ループ部分は以前の記事に近い形で書き直せるはず。(放置)

2012年12月11日

電子工作フェスティバル2012

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

卓球玉に絵を描く「ピンポン玉お絵かきロボット」が電子工作コンテスト2012で学生賞とはんだづけカフェ賞を受賞したので、12月9日開催の電子工作フェスティバル2012に参加してきました。

こういうタイプの催し物は初参加で戸惑っているところ、ブースでお隣にいらっしゃった「無限音階オルガン"nanorgan"」の方に色々とサポートしてもらい助かりました...

説明に大忙しで展示ブースから離れられず、他の方々の作品はあまり見ることが出来なかったのが残念なところ。

熊本に帰ってきたら次は12/15のハードウェア・組み込み系勉強会向けの準備で忙しい(((( ;゚Д゚)))

追記
地味にアキバblogに載ってます... (記事中程)
http://blog.livedoor.jp/geek/archives/51374038.html