Vol.763 15.Feb.2019

2019グアム旅行 高機能な8ビットPIC(2)〜ADC、LED明暗制御〜 ラズベリーパイ(26)〜リモコン戦車〜

G 2019グアム旅行

by TMX

1月11日(金)からJTBツアー3泊4日でグアムに行ってきました。目的はゴルフと観光、関空からの出発です。移動は車で、10日(木)午後7時に富山を出発。途中、高速道路近くのサウナで仮眠。関空集合は出発(10時45分)2時間前で、JTBの早期申込特典でJTBラウンジで出発までゆったり出来ました。近年グアム、サイパンは日本人観光客が少なく、サイパンは昨年、直行便がなくなりましたは。日本の航空便はなく、格安航空が主流です。グアムまでは韓国のTway航空(Lcc)3時間30分のフライトです。入国手続きに2時間近くかかり疲れました。  ホテルはReef&OliveSpa。無料ラウンジが利用出来き、朝の軽食や日中はドリンク飲み放題、夜はビールやワインが飲めます。部屋にはウォターディスペンサーがあり、お湯も出ます。
 夜はステーキ(T.G.I.フライデーズ)を食べました。人気店で店を出るときは待っている人がたくさんいましたが、私が食べたのは、口に合わず残念でした。

【12日(土)】
 岡本綾子監修のグアムインターナショナルでのゴルフです。朝、7時に迎えの車が来ました。コースは荒れていて、クラブハウスも古く、格安リゾートゴルフ場といった感じでした。しかし、昼に食べた冷やしうどんは美味しかったです。
 ホテルに帰ってビーチを散策、その後恋人岬まで観光に行きました。ツアーには赤いバスが乗り放題となっていましたが、恋人岬方面行きは有料でした。ホテルからタクシーで行きました。料金は往復$50(チップ込み)、見学中は待っていてくれました。
 夜はサンドキャッスルでディナーショウです。マジックショウで、ホワイトタイガーも出てきます。会場は冷房がきつく、寒くかったです。

【13日(日)】
 マンギラオでのゴルフ。朝、6時10分に迎えの車が来ました。海越えのショートホールが有名なゴルフ場です。料金は高いですが、カートに飲み物がついていたり、冷たいおしぼりがでたりとサービスも良く、クラブハウス、コースもきれい。昼に食べた冷やし中華も美味しかった。コースの中までカートが入れないのが残念でした。ドライバーは最高318ヤードも飛びました。日本では考えられません!
ホテルに戻ってからは、街中散策、インスタスポット巡り。買い物は中心街で買うより、郊外のKマートがおすすめです。

【14日(月)】
 朝7時にラウンジで朝食をとり、アトランティスサブマリンで水深40mの海中散歩です。珊瑚礁の中にえさ場があり、そこに集まってくる熱帯魚を見てまわります。潜水艦は揺れもなく、快適でした。
 ホテルの迎えは午後1時です。現地のBigなハンバーガーを食べる予定でしたが、時間がなく、ホテル前のマクドナルドでハンバーガーを買ってホテルのラウンジで食べました。空港では出国手続き後出発までは2時間ほどですが、待合室には椅子が少なく大変でした。
 関空には予定時刻より少し遅れ7時30分到着です。入国手続き、荷物もスムーズに受け取れ、到着ロービーに出ると車が前に持ってきてありました。
 関空では、車をターミナルで預け、帰りは到着ロービー前に車を回送してくれるサービスがあり、これを利用しました。
深夜、1時に帰宅、楽しかったグアム旅行は終わりました。
 帰ってからわかったのですが、グアムは飲食、買い物などはTポイントがつきますが、これを全く利用したかったのが残念です。2006年にグアムに行った時は蒸し暑く、良いイメージがなかったのですが、今回は日差しは強いが、湿度は低く感じられ、また行きたくなりました


P 高機能な8ビットPIC(2) 〜ADC、LED明暗制御〜

by fjk

前回(abc762)の回路を使って、可変抵抗器を回すとLEDの明るさが変化する(PWM利用)。

1.クロック、タイマー2、Peripheralの設定
 @MCCでHFINTOSC、32MHz、divider=4
 ATimer2でPostPre共に1:1、Timerを32us
 BADCでClockをFOWSC/4、Alignmentをright
  (TADが1〜9usの間になるように)
 CPWM5(or6)はdefaultのままでOK
2.ピンの設定(IOPin画面で)
 @ADCをAN2(ADC_A2)
 APWM6をRA4
3.Generateでファイルを作成
4.main.cを以下に追加・変更
 void main(void){
   SYSTEM_Initialize();
   unsigned int Duty;
   while (1)    {
     Duty = ADC_GetConversion(2);    
     PWM6_LoadDutyValue(Duty);
   }
  }
5.コンパイル
金槌アイコンをクリックし、コンパイルを実行。
・"BuildSuccessfull"が出ればコンパイル成功。
6.PicKit3で書込
 @File/Project PropertiesでPickit3を選ぶ
 APowerでPower.・・Pickit3をチェックし5Vに
 BMake‥アイコンをクリックしPICに書き込む
   "VeryfyComplete"と出れば書込成功
7.デバッグの実施
 @デバッグアイコンをクリック
  ・ポーズで一旦止める
  ・ブレークポイントをセット
  ・Widows/Debugginng/Valiablesで変数表示
 D再度実行し、ポーズで止め、変数値を確認
8.MPLAB X IPEの使い方
IDEで上手くPICに書き込めないときは、IPEを利用すると書き込める場合がある。
 @MPLAB X IPEを起動
 APICの種類を選択
 BSetting/AdvancedModeでアドバンスモードに
 Cパスワードを聴いてくるので”microchip”と入力
 D左のpowerアイコンをクリックしPicKitから電源供給に
 EFile/ImportでHexを選び、書き込みたいファイルを選ぶ
   (Project名/dist/default/production/にファイルがある)
 FProgramアイコンをクリックすると書き込まれる 

MCCでconfig設定 MCCでADC設定 MCCでPWM設定
PicKit3設定 デバッグモード IPEアドバンスモード


R ラズベリーパイ(27) 〜リモコン戦車〜

by fjk

FS90Rを使って戦車(タミヤ、タンク工作キット)の走行を制御。
@FS90Rは360度連続回転するローテーションサーボモータ(4.8−6V)
  ・最大トルク:1.3kgm、電流:700mA (4.8V)
  ・パルス幅:700〜1500(停止)〜2300μS
A工作キットの組立(モータ取り付け位置を確認するため)
  ・とりあえずマニュアルとおり作製
Bサーボモータマウントの作製(高さを合わせるため)
  ・モータマウントを3Dプリンタで作製
Cサーボモータの取付(スクリューネジ止めを推奨)
  ・キャタピラ動輪の改造、ホーン、キャタピラを取付け
DUSB電池(スイッチ付き)、ラズパイの搭載
  ・サーボ制御: abc760のhtmlおよびpythonスケッチを改造
Eラズパイ・pigpioデーモンの起動
  $ sudo pigpiod   ・・・pigipoデーモンを開始する
F【/etc/webiopi/config.txtの修正】(設定の詳細はabc760参照)
   myscript = /home/pi/webiopi/piservo2.py
   welcom-files = /home/pi/webiopi/piservo2.htm
Gwebiopiを起動する
  $ sudo systemctl start webiopi
Hwebブラウザからアクセス
   http://<IPアドレス>:8030
IID(webiopi)、パスワード(raspberry)を入力
<piservo2.html>   <piservo2.py>
<html>
<head>
    <meta http-equiv="Content-Type"content="text/html;charset=UTF-8">
    <title>WebIOPi Test2</title>
    <!-- WebIOPiのJavascriptの使用宣言 -->
    <script type="text/javascript" src="/webiopi.js"></script>
    <!-- ボタンの生成、機能の設定と名称設定 -->
    <script type="text/javascript">
        IOPI = webiopi();
        IOPI.ready(function(){
            var StopBtn = IOPI.createButton("Stop", "Stop",
                   function(){IOPI.callMacro("stop"); } );
            var CcwBtn = IOPI.createButton("CCW", "CCW",
                   function(){IOPI.callMacro("ccw"); } );
            var CWBtn = IOPI.createButton("CW", "CW",
                   function(){IOPI.callMacro("cw"); } );
            var ForBtn = IOPI.createButton("Fored", "For",
                   function(){IOPI.callMacro("fored"); } );
            var BackBtn = IOPI.createButton("Back", "Back",
                   function(){IOPI.callMacro("back"); } );
            $("#stopbtn").append(StopBtn);
            $("#ccwbtn").append(CcwBtn);
            $("#cwbtn").append(CWBtn);
            $("#forbtn").append(ForBtn);
            $("#backbtn").append(BackBtn);
       });
    </script>
    <!-- スタイルシート定義 ボタンの形状指定 -->
    <style type="text/css">
        button{
            font-size:2em;
            width:110px;
            height:70px;
            margin-left:20px;
            float:left;
        }
    </style>
</head>
<!-- ページの生成 -->
<body> <br>
    <p style="text-align:left;  margin-left:100px;">
    <font size=6>[Tank-Conrole Test]</font><br></p>
    <p style="align:center">
    <table border=0 cellspacing="10">
      <tr><td> </td>
        <td><div id="forbtn"></div></td><td> </td></tr>
      <tr>
         <td><div id="ccwbtn"></div></td>
         <td><div id="stopbtn"></div></td>
         <td><div id="cwbtn"></div></td>
      </tr>
      <tr><td> </td>
        <td><div id="backbtn"></div></td><td> </td></tr>
    </table>
    </p>
</body>
</html>
 
import webiopi
import pigpio
webiopi.setDebug()
GPIO = webiopi.GPIO
pi    = pigpio.pi()

Rmt   = 17      	# 右サーボ接続ピン
Lmt   = 18      	# 左サーボ接続ピン
R_hm  = 1455 	# 右停止パルス幅※
L_hm  = 1450 	# 左停止パルス幅※
Speed  = 75  	# 標準速度(低速)
RpSpd  = Speed * 2 	# 高速

#初期化関数 GPIOを出力モードに設定
def setup():
    GPIO.setFunction(Rmt, GPIO.PWM)
    GPIO.setFunction(Lmt, GPIO.PWM)
    pi.set_servo_pulsewidth(Rmt, R_hm)
    pi.set_servo_pulsewidth(Lmt, L_hm)

#マクロ関数
@webiopi.macro
def stop():
    pi.set_servo_pulsewidth(Rmt, R_hm)
    pi.set_servo_pulsewidth(Lmt, L_hm)

@webiopi.macro
def cw():
    pi.set_servo_pulsewidth(Rmt, R_hm + Speed)
    pi.set_servo_pulsewidth(Lmt, L_hm + Speed)

@webiopi.macro
def ccw():
    pi.set_servo_pulsewidth(Rmt, R_hm - Speed)
    pi.set_servo_pulsewidth(Lmt, L_hm - Speed)

@webiopi.macro
def back():
    pi.set_servo_pulsewidth(Rmt, R_hm + Speed)
    pi.set_servo_pulsewidth(Lmt, L_hm - Speed)

@webiopi.macro
def fored():
    pi.set_servo_pulsewidth(Rmt, R_hm - Speed)
    pi.set_servo_pulsewidth(Lmt, L_hm + Speed)

#終了関数 GPIOのPWMモードを解除
def destory():
    GPIO.setup(Rmt, GPIO.IN)
    GPIO.setup(Lmt, GPIO.IN)

キットをそのまま組み立て モータマウント(stl) 動輪の改造(ボスを取る)
ホーンの取付(ネジで) モータの取付(木ベースに) キャタピラの取付
電源はUSB電池(+SW) 走行テスト中 web制御画面


2019グアム旅行 高機能な8ビットPIC(2)〜ADC、LED明暗制御〜 ラズベリーパイ(26)〜リモコン戦車〜