calendar

   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>

categories

archives

ロリポップレンタルサーバ

カラーミー

グーペ

お名前.com

ANA ToMeCard

◆ Rasberrypi2 サーボモータを雲台に設置

0
    サーボモータ(SG90)用の雲台が届いたので、組み立ててみた。しかしながら、ネジが沢山付属しているが、組み立ての説明書が付属してないので、野生の感で組み立ててみた。
    まず。サーボモータに付属しているサーボホーンが大き過ぎで雲台の所定の箇所に入らない。SG90用と銘打ってあるのに...さすが中国製である。しかたないのでニッパで少し大き目のサイズにカットして、あとはキッチリ入るサイズまでヤスリで削ってサイズを整えた。さらにこれが動いてしまうとまずいので、接着剤で貼り付け、裏から付属の極小のネジでホーンを固定した。2番目の写真は、台座になるところだがここも同様に、削って接着剤で張りつけてネジ止めで固定した。

    上下に動作して、カメラを載せる台にサーボモータを設置する為のビスは、下記の写真のような長いビス、ナットしか付属していない。もっと短いビスは付属していたのだがここにサーボモーターを固定するには短すぎて使えない。ほんとうにいい加減なキットなので最初驚いて、最後は呆れてしまった。
    日本のTAMIYA製プラモデル等では、こんなことは決してなく完璧な説明書とサイズがピッタリのビス・ナット等が付属するので如何に日本製がスゴイかを改めて痛感してしまった。

    だから日本製は、価格が高くなるんですよね


    完成したのがこれです。  

    ◆ 妙義山 紅葉の石門巡りハイキング

    0
      妙義山は、岩山で標高こそ1000mチョイで低いのだが、上級者向けの山域で頂上に立つのは難しい山だと思っていた。従って過去、一度もこの山域には足を 踏み入れたことはなかった。しかし、頂上の尾根ルートは上級者向けだが、石門巡りの中間道というハイキングルートがあるのを知り、コースタイムも5時間程 度で手ごろであり、11月に入って紅葉もそろそろ見頃らしいので11/7の土曜日に、この石門巡りコースに行ってみた。

      都内を5時半に発ち関越自動車道から信越自動車道に入り、下仁田で下車して中の岳神社前の駐車場には8時過ぎに到着した。石門巡りの入口は道路を5分程度歩いた所にある。石門は4つのあり、登山道にはクサリが設けられているが難しい箇所はなく、足場を確保する箇所は足形で岩をくりぬいてあってビックリした。おそらく初めてクサリ場を通過する人のためと思われる。右の写真は第2石門でこの石門の通過だけは、アップダウンのクサリ場を通過する必要がある。
      他の石門は、大きくて普通の登山道として通過可能である。

      右の写真では結構急な鎖場風だがそんなことはない!

      右の写真は第4石門で、ここは休憩所となっていてベンチもあり沢山の人が休んでいた。石門めぐりだけの人はここから入り口に戻ることになる。ハイキングコース(妙義中間道)はこの後、妙義神社まで続いており、今回は神社まで歩いて帰りは車道を引き返すコースをとる予定である。第4石門の先に天狗の評定と大砲岩なる岩峰があり、頂上に立つと眺めもよく立ち寄るといいと思う。但し鎖場もありちょっぴりスリリングが場所なので、高所恐怖症の人は無理かな?

      右の写真は、「大砲岩」である。やはり観光地なのか岩に名前の看板が貼り付けてあるのには驚いた。この岩の上に立っていた人がいたが、私はビビって止めました。さて、この岩峰を過ぎると後は妙義神社までは普通の登山道で紅葉を眺めながらの道となる。今回ちょっぴり紅葉は早いようだったが、それでも当日は暑くも寒くもなく気持ちよく歩くことができた。

      今回の行程は以下の通り、但しメモ用のペンを途中でなくしてしまったので、おおよそのタイムです。
       2015/11/7 のち

      中の岳神社前駐車場 :08:20
      第二見晴:11:30
      妙義神社:13:00
      中の岳神社前駐車場   :14:30


      ◆ Raspberrypi2 IC2デバイスを使ってみる

      0
         I2C(Inter-Integrated Circuit)は、フィリップス社が提唱する周辺デバイスとのシリアル通信の方式である。raspiもこのインターフェイスを持っており、たくさんの周辺機器が発売されている。今回は安価な16bitの温度センサー(ADT7410)を接続して使い方を把握しようと思い購入してみた。
        まずは、i2c関連のツールをインストールします。
        sudo apt-get install i2c-tools libi2c-dev ・・・I2Cのインストール
        

        インストールが終わったら、i2c機器の接続アドレスの確認をします。
        i2cdetect -y 1 ・・・接続機器のアドレスを表示
             0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
        00:          -- -- -- -- -- -- -- -- -- -- -- -- --
        10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
        50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        70: -- -- -- -- -- -- -- --
        

        実際の温度データを読み込んでみる。
        i2cget -y 1 0x48 0x00 w ・・・word単位でデータを読み込む
        0x280c ・・・16進表示
        

        上記の例では0x48に温度センサーがマッピングされているので、i2cgetコマンドで 値を取得して表示した結果が0x280cである。このままではエンディアンが逆転しているので、上位バイトと下位バイトを入れ替えて読む必要がある。またデフォルトでは解像度13ビットで読んでいるので、下位3ビットは捨てて(3bitシフト)、4ビット目から16ビット目を有効な値として扱います。この うち(4bit目)が1ならマイナスの気温をあらわします。ここで4bit目を除いた12bitの値を16で割った値(0.0625を掛けた値)が実際の温度になります。たとえば上記の0x280c場合、まずエンディアン入れ替えで0x0c28となり、これを下位3ビット捨てて(3bitシフト)0x0185、10進数に直して389、0.0625を掛けると、24.3125℃となります。
        右の写真はraspiに秋月電子通商で販売している「ブレッドボード接続キット」を繋いで動作確認をしている様子である。変換基盤にgpio番号等が記述されていてわかり易い。
        これを、pythonのプログラムで記述すると以下のようになります。プログラムはwiringpiの[wiringPiI2CReadReg16]を使用して温度データを読みだしている。

        # -*- coding: utf-8 -*-
        import wiringpi2 as pi
        
        ADRS = 0x48	# I2Cのバスアドレス(デフォルト)
        TREG = 0x00	# 温度レジスタアドレス
        
        def temp_read():
            word = pi.wiringPiI2CReadReg16(fd,TREG)
            print(hex(word))                               #debug
            data = (word & 0xff00)>>8 | (word & 0xff)<<8   #上位・下位バイトを逆転
            print(hex(data))                               #debug
            data = data>>3                         # 13ビットデータ取得(3bitシフト)
            print(hex(data))                               #debug
            if (data & 0xf000) == 0:                      # 温度が正の場合
                temp = data*0.0625
            else:
                 temp = (data - 8192)*0.0625               # 温度が負の場合
            return temp
        
        fd = pi.wiringPiI2CSetup(ADRS)                     # wiringpiのi2cの初期化
        
        try:
            while True:
        	nowtemp = temp_read()
        	print(nowtemp)
        	pi.delay(1000)
        
        except KeyboardInterrupt:
            pass
        
        き[temp_read]内のprint文は内容を確認(デバッグ用)のものです。
        プログラムの記述でWiringpiの関数を使用しているが、smbusで[read_word_data]を使用しても同様である。

        ◆ Raspberrypi2 PWMでサーボモータを動かす

        0
          PWMでLEDの輝度を変化させるプログラムを作ったが、やはりPWMでサーボモータを動かしてカメラのパン(左右)、チルト(上下)の制御をやってみたくなり、とりあえず安価なサーボモータ(SG-90:400円)を購入して動作確認をしてみた。
          実際の物を見ると、写真のように非常に小さなサーボモータであることがわかる。
          このサーボモータの仕様は以下の通りである。
          外形寸法:22.2x11.8x31mm
          重量:9g
          動作電圧:4.8V(〜5V)
          PWM 周期(周波数) : 20ms(50Hz)
          ポジション 周期 Duty比 pwmWriteで設定するDuty比
          1.45ms 7.25% 7.25*1024/100=74.24
          90° ~2.4ms 12% 12*1024/100=122.88
          -90° ~0.5ms 2.5% 2.5*1024/100=25.6

          wiringPiでの[pwmWrite()]のDuty比の設定は0〜1024なのでこの点を踏まえて以下の プログラムでは、事前に値を計算して値を保持している。(上記の表参照)
          以下のpythonのプログラムは、サーボモータの動作確認プログラムである。
          # -*- coding: utf-8 -*-
          import wiringpi2
          
          PWM_PIN = 18   # GPIOの18番ピン
          DUTY_MAX = 123 # 90°の時
          DUTY_MIN = 26  # -90°の時
          DUTY_HOME= 74  # 0°の時
          duty = 0       # Duty比の値(0から1024)
          
          wiringpi2.wiringPiSetupGpio()   #winringPiの初期設定
          wiringpi2.pinMode(PWM_PIN, wiringpi2.GPIO.PWM_OUTPUT)
          #「Balanced」→「mark:space」Modeに変更
          wiringpi2.pwmSetMode(wiringpi2.GPIO.PWM_MODE_MS)
          # 周波数を50Hzにすると、18750/周波数=375
          wiringpi2.pwmSetClock(375)
          
          wiringpi2.pwmWrite(PWM_PIN, DUTY_HOME)        # 0°の位置に移動
          wiringpi2.delay(100) #0.1sec
          
          for duty in range(DUTY_HOME, DUTY_MAX+1, 1):  # 0°から90°まで動かす
              wiringpi2.pwmWrite(PWM_PIN, duty)
              wiringpi2.delay(100) #0.1sec
          wiringpi2.delay(500)    #0.5sec
          for duty in range(DUTY_MAX, DUTY_MIN-1, -1):  # 90°から-90°まで動かす
              wiringpi2.pwmWrite(PWM_PIN, duty)
              wiringpi2.delay(100)
          wiringpi2.delay(500)
          
          wiringpi2.pwmWrite(PWM_PIN, DUTY_HOME)        # 0°の位置に移動
          
          

          ひらめき pwmSetModeの変更は周波数を固定にする設定である。デフォルトのwiringpiでは
           DUTY比を変更すると周波数も変更されてしまう。

          ひらめき pwmSetClockの値の設定についてだが、調べたところ以下の条件式が成立するらしい。
           pwm周波数=raspiのPWMが持つベースクロックの周波数/clock×range
           pwm周波数:50Hz
           raspiのPWMが持つベースクロックの周波数:19.2MHz
           range:1024
           clock:pwmSetClockで設定する値
          従ってclockを求める式は、clock=19.2×10^6/pwm周波数×1024となる。
          clock=18750/pwm周波数

          ひらめきGPIOの18番はハードウェアでのPWMをサポートしているが、他に使用可能なのは
           GPIO12,13,19の3つのポートだけである。試しに他のポートを設定したらサーボは
           全く動作しなかった!(あたりまえ)

          ◆ Raspberrypi2 wiringPiをpythonから使ってみる

          0
            wiringPiをpythonで使えるようにするには、以下のものをINSTALLする必要がある。
            sudo apt-get install python-dev python-setuptools
            git clone https://github.com/Gadgetoid/WiringPi2-Python.git
            cd WiringPi2-Python
            sudo python setup.py install
            

            wiringPiを使用してpythonで、LEDの輝度を変更するプログラムを記述してみた。PWMを使ったことがなかったので、PWMを使用してDuty比を変える事でLEDの輝度を変更するプログラムにしてみた。関数名はCでの記述の名称と同じなので、「wiringpi2.関数名」とすればいいので簡単である。
            き関数の詳細はwiringpiのサイトを参照の事!
            # -*- coding: utf-8 -*-
            import wiringpi2
            
            PWM_PIN = 18   # GPIOの18番ピン
            DUTY = 0       # Duty比の値(0から1024)
            
            wiringpi2.wiringPiSetupGpio()   #winringPiの初期設定
            # PWM出力として18番pinを設定
            wiringpi2.pinMode(PWM_PIN, wiringpi2.GPIO.PWM_OUTPUT)
            #「Balanced」→「mark:space」Modeに変更
            wiringpi2.pwmSetMode(wiringpi2.GPIO.PWM_MODE_MS)
            # Clockを50Hzにする。18750/周波数=375
            wiringpi2.pwmSetClock(375)
            
            try:
                while True:
                    for DUTY in range(0, 1025, 1): #ファードイン
                        wiringpi2.pwmWrite(PWM_PIN, DUTY)
                  wiringpi2.delay(10) #0.01sec
                wiringpi2.delay(500)    #0.5sec
                    for DUTY in range(1024, 1, -1): #フェードアウト
                        wiringpi2.pwmWrite(PWM_PIN, DUTY)
                  wiringpi2.delay(10)
                wiringpi2.delay(500)
            
            except KeyboardInterrupt:
                pass
            wiringpi2.pwmWrite(PWM_PIN, 0)  # LEDを消灯 
            

            ひらめき最終行の命令は、CTRL+Cで実行を中断するとLEDが点灯したままになるのを避けるために挿入してある。また今回GPIO18を使用しているが、Raspi2のPWM出力できるpinは、GPIO18の他にGPIO12,13,19も対応しているとの事である。 その他のピンを使用する場合は、softPwmCreate()、softPwmWrite()を使用すれば可能である。但しサーボモータの制御等の精度が高いPWMが必要な場合はこれは使用できない。上記のLEDの輝度を変更するようなプログラムの場合は、SoftwarePWMで全く問題ない!

            ◆ 風車のブレード(羽)が破損

            0
              10/2(金)の早朝は、雨風が強く自分のマンションのベランダに取り付けている太陽パネルも、風で飛ばされてしまうのではないかと心配して、午前3時頃起きて確認したくらいである。そして10/3(土)に実家に行って驚いたのは、写真のように風車は無残な姿に変貌していた事である。ハブダイナモの前方にブレードを支えるための円盤が引きちぎられていたのだ!この円盤は加工が容易で安価なMDFで作って塗装をしたものなので、やはり強度的に問題があったようである。
              調べると、MDFは湿気に弱く水分を吸収しやすく屋外のものに使用するには不向きなようである。実際引きちぎれた断面は湿気を含んでおり手でも引きちぎれるほど水分を含んでいた。シナベニヤの合板で作ったブレードはまだ使えそうだったのだが、この機会に塩ビ管のブレードに変更しようと思っている。約1年間まわり続けたブレードは役目を終えることになった。ごくろうさまでした!

              今度作るブレードを固定するための円盤は、5.5mmのシナベニヤで作るつもりである。本当はステンレス板で作ったほうがいいのだろうが、加工がしやすいシナベニヤで作成し、防水のために塗装して仕上げるつもりである。また100均で買ったブレード固定用ステンレス金具だが、1年使ってわかったのだが、厚さが2mmでは強風で曲がってしまうこともあった。そこで今度は2枚重ねて4mmの金具として使うつもりである。
              MDF(Medium Density Fiberboard)とは...
              木材を繊維状にほぐし、接着剤などを配合してボードに成型した「繊維板」の一種です。

              ◆ Raspberrypi2 WiringPiの導入

              0
                WebIOPiの他にもwiringPiというライブラリが存在して、これはC言語のライブラリであるが他の言語用のラッパーも用意されているので、他言語でも利用可能であるらしい。またwiringPiにはコマンドラインから実行出来るgpioユーティリティも付属しているとのことなので簡単にgpioの操作が可能となるらしいのだ! これは面白そうなので早速インストールしてみることにした。まずは、IC2用のライブラリをインストールしてから、wiringPiのソースをダウンロードしてコンパイルする。
                注)wiringPiはコマンド操作時にPだけ大文字なので間違えないように!
                $sudo apt-get install libi2c-dev ・・・・・・I2Cのライブラリをインスト−ル
                $git clone git://git.drogon.net/wiringPi・・・gitを使ってソースを取得
                $cd wiringPi
                $./build ・・・・ ソースのコンパイル
                
                $gpio -v ・・・・ バージョンの確認
                gpio version: 2.29
                Copyright (c) 2012-2015 Gordon Henderson
                  :
                

                インストールが終了したら、早速gpioユーティリティを試してみよう。GPIO24にLEDを接続して以下の コマンドを実行すれば、LEDの点灯を確認できる。
                $gpio export 24 out  ・・・ GPIOポート24番を出力として使用開始
                $gpio -g mode 24 out ・・・ 上記と同様
                $gpio -g write 24 1 ・・・ GPIOポート24番の値を1にする ==> LED点灯 
                $gpio -g write 24 0 ・・・ GPIOポート24番の値を0にする ==> LED消灯  
                $gpio unexport 24  ・・・・ GPIOポート24番の使用を終了する
                
                gpioユーティリティの[-g]はGPIOのポート番号で指定の意味である。export/unexportは[-g]が不要で 統一性で欠けると思うのだが...

                wiringPiはC言語のライブラリなので、以前Pythonで書いたのLED点滅プログラムをwiringPiを使ってC言語で書くと下記のようになる。
                #include <wiringPi.h>
                #LED 24                              /* GPIO24 */
                
                int main (void) {
                	wiringPiSetupGpio();
                	pinMode(LED, OUTPUT);
                	while (1) {
                		digitalwrite(LED, HIGH);
                		delay(500);      /* 500msec */
                		digitalwrite(LED, LOW) ;
                		delay(500);
                	}
                }
                

                ひらめきバージョン管理ツール(git:ギット)がインストールされていない場合は、以下のようにinstallを行う。
                $sudo apt-get install git-core ・・・・gitのインストール
                

                きwiringPiの詳細はWiringPi.comを参照してください。

                ◆ 両神山・登山

                0
                  両神山の八丁峠からのコースに行ってきた。9/20の早朝に都内を出発して、練馬から関越自動道を経由して目的の両神山へ向かった。今回は秩父を経由するルートでなく、神流湖を経由する462号線を通って八丁トンネル手前の駐車場に向かった。最後の299号線から分岐する林道は舗装はしてあるものの、かなり荒れており走行には注意が必要である。朝方の走行であったので無事八丁トンネル手前の駐車場に到着した。

                  駐車場には、すでに10台を超える車が駐車しており我々が今日の最終登山者と思われた。本当は夜中に出発して早朝から歩き始める予定だったのだが、私が前日の仕事で遅くなり深夜の出発が困難になったので、早朝発になってしまった。それ故、登山靴に履き替えて歩き始めたのは8:50とかなり遅くなってしまった。ここから両神山まではコースタイムで片道3.5時間程度かかるので、帰ってくるのは5時頃になってしまうと思われた。

                  このルートの特徴は、30を超えるクサリ場を超えて両神山に向かう尾根ルートである。クサリ場が多く楽しい登山ができると思っていたのだが... 最初は天気もいいしスリリングも味わえて楽しい登山だったのだが、今回は両神山への同じ道を往復したので、60を超えるクサリ場を超えての登山となり、最後は楽しさより、「またクサリ場!、もういい!」という感じであった。このルートの登山者は、ほとんどがヘルメットをした人が多く、右の写真のようなほぼ垂直の壁も何か所かあり、ここはクサリ無しでの上り下りは困難であり、登山の初心者や高所恐怖症のような人はちょっぴり困難なルートかもしれない。


                  遅い時間からの登山スタートであり、体力もにも欠けるオジさん登山者なので、結局駐車場に帰ってきたのは、日が落ちる少し前の5時半になってしまい、なんとか暗くなる前に駐車場にたどり着くことができた。よかった、ヨカッタ!
                  今回のルートは、八丁峠からクサリ場がある上り・下りの繰り返しが何か所もあり、駐車場からの標高差は少ないが結構体力を消耗するルートであった。また標識は完備されているものの場所によってはルートファインディングが必要な箇所もあり中級者向けのルートと思われる。

                  今回のコースタイムは以下の通りである。

                  場所 行き 帰り
                  駐車場八丁峠駐車場 1220m 08:50 17:30
                  山八丁峠  1516m 09:42 16:45
                  山行蔵峠 10:32 15:15
                  山西岳   1613m 10:45 15:00
                  山東岳   1660m 11:30 14:05
                  山両神山  1723m 13:15 13:30

                  ◆ Raspberrypi2 WebからのLEDコントロール

                  0
                    respi2にwebiopiもインストールできたので、まずは手始めにLEDの点灯を制御するHTMLを作成してwebiopiの使い方に慣れようと思う。

                    ■Python側の記述は以下のように行う。
                    import webiopi
                    GPIO = webiopi.GPIO

                    変数の定義
                    ...
                    def setup():
                    webiopiが起動時に呼ばれる関数を記述する
                    ...
                    def loop():
                    webiopiが起動している間に常時呼ばれる関数を記述する
                    ...
                    def destroy():
                    webiopiが終了時に呼ばれる関数を記述する
                    ...
                    @webiopi.macro
                    Webブラウザ(javascript)からの要求時の処理をマクロ関数として記述する。
                    ...

                    ■実際のPythonでのLEDの点滅プログラム
                    import webiopi
                    GPIO = webiopi.GPIO
                    
                    LED = 24
                    LED_SW = 0
                    
                    def setup():
                        GPIO.setFunction(LED, GPIO.OUT)
                    
                    def loop():
                        if LED_SW == True:
                    	    GPIO.digitalWrite(LED, True)
                        webiopi.sleep(0.5)
                        GPIO.digitalWrite(LED, False)
                        webiopi.sleep(0.5)
                    
                    def destroy():
                        GPIO.digitalWrite(LED, False)
                    
                    @webiopi.macro
                    def switchLED(sw):
                        global LED_SW
                        LED_SW = int(sw)
                    
                    ひらめきSwitchLED()の引数が1のときは点灯、0のときは消灯となり、引数をGLOBAL変数にセットしloop():でこの値を判断してLEDを点灯している。

                    ■HTMLファイル

                    ◆ Raspberrypi2 RPi.GPIOとWebIOPi

                    0
                      raspi2の標準OSであるRasbianに、デフォルトでインストール済みのpythonライブラリがRPi.GPIOである。(RPiはRaspberryPiの略)
                       pythonのプログラムでは、このライブラリを使用することで、容易にGPIOを制御するプログラムを作成することが可能となる。またこれとは別のWebIOPiは、RaspberryPi用のIOT( Internet of Things )のフレームワークという位置づけに当たり、こちらを使うとGPIOの制御をブラウザから実現可能となる。詳細はwebiopi.trouch.comを参照してください。RPi.GPIOはpythonのプログラムだけを作って実行すればいいのに反して、WebIOPiは、webからアクセスするのでhtml、JavaScript、cssといったものも作る必要があり、さらにpythonのプログラムの作り方も異なるので、若干ハードルが高い。そこで二つの違いを理解するために、今回はまずwebからのアクセスは行わず、同じ機能のプログラムを2つのライブラリ(フレームワーク)を使用して記述してみた。
                       
                      RPi.GPIOを使用したLED点滅プログラム
                      import RPi.GPIO as GPIO
                      import time
                      
                      LED = 24 
                      
                      GPIO.setmode(GPIO.BCM)
                      GPIO.setup(LED, GPIO.OUT)
                      
                      while True:
                          GPIO.output(LED, True)
                          time.sleep(0.5)
                          GPIO.output(LED, False)
                          time.sleep(0.5)
                      
                      programの実行はコマンド画面から直接実行する。
                      $sudo python ファイル名
                      

                      WebIOPiを使用したLED点滅プログラム
                      import webiopi
                      GPIO = webiopi.GPIO
                      
                      LED = 24
                      
                      GPIO.setFunction(LED, GPIO.OUT)
                      
                      while True:
                          GPIO.digitalWrite(LED, True)
                          webiopi.sleep(0.5)
                          GPIO.digitalWrite(LED, False)
                          webiopi.sleep(0.5)
                      
                      programの実行はサービスの起動で行う。
                      $sudo /etc/init.d/webiopi start
                      

                      ひらめきwebiopiの起動では、以下の箇所を事前に更新しておく必要がある。今回のプログラムはwebを介さないので、下記の[HTTP]の記述は不要である。
                      ▲/etc/webiopi/config
                      [SCRIPTS]
                      myproject = /home/pi/webiopi/python/script.py   .pyファイルの場所を指定
                      ...
                      [HTTP]
                      doc-root = /home/pi/webiopi/              .htmlのフォルダを指定
                      ...
                      welcome-file = index.html			  htmlファイル名を指定
                      ...
                      

                      << | 2/30PAGES | >>