3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PrologでもGPIO制御

Last updated at Posted at 2022-12-17

PrologだってLチカしたいよ

Prologというと論理型の言語であり、どちらかというとアカデミック用途が多いです。PrologでラズパイのGPIO制御については応用例が少ないようなのですが、PrologでだってLチカしたいですよね。その方法についてご紹介します。

SWI-Prologの場合

Prolog処理系といいますとJanさんのSWI-Prologが有名です。事実上の世界標準だと思われます。とても高性能です。ところでSWI-PrologでGPIOを扱いにはどうしたらいいのでしょうか?ググってみるとJanさんが説明しているのが見つかりました。
https://discourse.swi-prolog.org/t/access-to-gpio-on-raspberry-pi/4438
CのライブラリをSWI-Prologから呼び出すようです。

N-Prologの場合

拙作のN-Prologはできるだけお手軽にGPIOを制御できるようにしてあります。ラズパイで処理系をコンパイルしますとハードがラズパイの場合には自動的にGPIO制御の述語を組込み述語として組み入れるようになっています。
拡張された述語は下記のとおりです。

N-Prolog <==================================> C
wiringpi_spi_setup(ch speed) <===> wiringPiSPISetup (SPI_CH, SPI_SPEED)
wiringpi_setup_gpio  <===> wiringPiSetupGpio()
pin_mode(n, 'output) <====> pinMode(n, OUTPUT) or 'input -> INPUT 'pwm-output -> PWM_OUTPUT
digital_write(n, v) <===> digitalWrite(n, v)
digital_write_byte(v) <===> digitalWriteByte(value)
digital_read(pin) <===> digitalRead(pin)
delay(howlong) <===> void delay(unsigned int howLong)
delay_microseconds(howlong) <===> void delay_microseconds(unsigned int howLong)
pull_up_dn_control(pin, pud) <===> pullUpDnControl(pin,pud)
pwm_set_mode('pwm_mode_ms) <===> pwmSetMode(PWM_MODE_MS); or 'pwm_mode_bal -> PWM_MODE_BAL
pwm_set_clock(n) <===> pwmSetClock(n)
pwm_set_range(n) <===> pwmSetRange(n)
pwm_write(pin, value) <===> pwmWrite(pin , value)


自律型ロボット

写真はPrologで制御のおもちゃロボットを作ろうとして途中になったままのものです。超音波センサーとLチカを仕込んであります。バッテリーは携帯電話用のバッテリー。欲がでて画像認識もとDeepLearning(以下「DL])にはまってしまいました。この後Elixir用のDLライブラリDeepPipe2の開発に没頭してしまい、ロボットは中途半端なままです。(苦笑)

IMG_1126.JPG
IMG_1127.JPG

夢は膨らむ

Prologは論理的推論ができます。これとDLを組み合わせると面白いことができそうです。そしてGPIOでセンサーやサーボモーターを制御したら面白そうです。といいつつ、Lisp処理系開発、Prolog処理系開発に没頭していたのでさっぱり進展していないのですが。

N-PrologはRUN/PROLOG互換のインタプリタ・コンパイラです。OSSとして無償提供しております。
https://github.com/sasagawa888/nprolog

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?