fc2ブログ

ライントレースカー ソフト編 その2

Micro Pythonを使ったプログラミング
マイコンにRaspberry pi Picoを使い、Micro Python言語を使う場合の作成例です。
Thonnyのインストール方法は、過去記事「Thonny IDEを使ってラズピコをプログラミング」を参考にして下さい。

Thonny.jpg

注意点
①18行目からのIN1.duty_u16(256*75)のPWM値は0~65535を入力しますが、桁数が多いのでArduinoの
8ビットPWM値に合わせ、直感的に解り易くするために16ビットを半分に分けて256*xxxと記しています。
②42行目からの valueL = round(sensorL.read_u16()/256)IRセンサー読取り値をround関数でまとめ、更に
256で割り、見かけ上のしきい値をArduinoの場合と同様にしました。


  1. from machine import ADC, Pin ,PWM
  2. import utime
  3.  
  4. sensorL = machine.ADC(26) # Left GPIO 26
  5. sensorC = machine.ADC(27) # Center GPIO 27
  6. sensorR = machine.ADC(28) # right GPIO 28
  7. IN1 = PWM(Pin(6)) # GPIO 6
  8. IN1.freq(1000)
  9. IN2 = PWM(Pin(7)) # GPIO 7
  10. IN2.freq(1000)
  11. IN3 = PWM(Pin(8)) # GPIO 8
  12. IN3.freq(1000)
  13. IN4 = PWM(Pin(9)) # GPIO 9
  14. IN4.freq(1000)
  15. def forward(): # 前進
  16.     IN1.duty_u16(256*75)
  17.     IN2.duty_u16(0)
  18.     IN3.duty_u16(0)
  19.     IN4.duty_u16(256*75)
  20. def turnleft(): # 左旋回
  21.     IN1.duty_u16(0)
  22.     IN2.duty_u16(256*60)
  23.     IN3.duty_u16(0)
  24.     IN4.duty_u16(256*110)
  25. def turnright(): # 右旋回
  26.     IN1.duty_u16(256*110)
  27.     IN2.duty_u16(0)
  28.     IN3.duty_u16(256*60)
  29.     IN4.duty_u16(0)
  30. def stop(): # 停止
  31.     IN1.duty_u16(0)
  32.     IN2.duty_u16(0)
  33.     IN3.duty_u16(0)
  34.     IN4.duty_u16(0)
  35.     
  36. while True:
  37.     valueL = round(sensorL.read_u16()/256) # 左IRセンサー
  38.     valueC = round(sensorC.read_u16()/256) # 中央IRセンサー
  39.     valueR = round(sensorR.read_u16()/256) # 右IRセンサー
  40.     utime.sleep(0.05)
  41.     #print("L",valueL)
  42.     #print("C",valueC)
  43.     #print("R",valueR)
  44.     
  45.     if valueL <= 100: # しきい値 100以下は白(16ビットでは25600)
  46.         sensL = 0 # 白
  47.     else:
  48.         sensL = 1 # 黒
  49.     #print("L",sensL)
  50.     
  51.     if valueC <= 100: # しきい値 10以下は白0(16ビットでは25600)
  52.         sensC = 0 # 白
  53.     else:
  54.         sensC = 1 # 黒
  55.     #print("C",sensC)
  56.     
  57.     if valueR <= 100: # しきい値 100以下は白(16ビットでは25600)
  58.         sensR = 0 # 白
  59.     else:
  60.         sensR = 1 # 黒
  61.     #print("R",sensR)
  62.     
  63.     if sensL==0 and sensC==1 and sensR==0: # 前進
  64.         forward()
  65.     if sensL==1 and sensC==1 and sensR==1: # 前進
  66.         forward()
  67.     elif sensL==1 and sensC==1 and sensR==0: # 左旋回
  68.         turnleft()
  69.     elif sensL==0 and sensC==1 and sensR==1: # 右旋回
  70.         turnright()
  71.     elif sensL==0 and sensC==0 and sensR==0: # 停止
  72.         stop()



皆様の参考になれば幸いです。
by Paradise
スポンサーサイト



テーマ : 電子工作
ジャンル : 趣味・実用

コメントの投稿

非公開コメント

近況

ご無沙汰しています。

いくつかマイコンボードを使って工作いたしました。
しかし、プログラミング技術が低いのでなにかモノ足らない気分です。

そんなときに、別府 伸耕という方が設計・製作された「オール・トランジスタ4ビットCPU」の動画を見たことを思い出し、学習をはじめました。
https://www.youtube.com/watch?v=yfelmQOKYK4

近所の部品やに74LS181というALU(ロジックIC)が残っていたので、2個つないで8bitの加減算器をつくりました。
作ったといってもデータシート通りなので半田付けしただけです。
もともとハードが好きなので、ICが残っているあいだにロジックICによる時計や4bitのCPUができたらいいなぁと思っています。

4bit CPUでライントレスできればいいなぁなどと、子供のようなことを考えています。

それでは、また

No title

Chandlerさん、こんばんは。


近況のお知らせ有難うございます。
コメントに気付かず返信が遅くなり申し訳ありません。
ライントレースの続きに迷路解決ロボットを作ってましたが、中々手強くて思ったより時間が掛かりました。
一昨日やっと完成してブログの準備を進めているところです。

ロジックICは楽しいですね!74シリーズのチップを沢山並べて色々作った頃を思い出しました。
特にアマチュア無線の画像装置スキャンコンバータなどは100個ほど使った大作も有りました。
未だ、ICボックスの中にメモリーICなどと一緒に沢山残ってます。

Youtubeを拝見しました。凄い人が居ますね!
トランジスタ技術2020年5月号に発表されたそうで、検索したらCQ出版のYoutubeチャンネルに詳しく出てました。
CQ出版社は昔、アマチュア無線関係で歴代の編集長とお付き合いが有ったので懐かしいです。

長くなりましたが、有難うございました。


プロフィール

CNC_Paradise

Author:CNC_Paradise
木工・彫刻・機械工作・電子工作が
大好きで自作のCNCを使って工作を
楽しんでます。

最新記事
最新コメント
月別アーカイブ
カテゴリ
何でも工作室
検索フォーム
RSSリンクの表示
リンク
QRコード
QR