2023-03-18

福井の会社、アフレルより発売された「C言語でレゴ SPIKEプライムを制御できる教材」を使ってLEGO SPIKE PrimeをC言語で開発。公式の対応環境は、WindowsとUbuntuですが、書き込み用のPythonプログラムをにちょっと手を入れ、Macでも開発できました。


「A robot by LEGO SPIKE Prime in C on Mac」
本体(Hub)のBluetoothボタンを押しながらUSBケーブルを接続して書き込みモード(DFU)に。Macで作ったプログラムをビルド(build.sh)して、書き込み(write.sh)すると動き出します。


モーター2つ、圧力センサー、距離センターを使ってロボット組み立て。テクニックシリーズは工具も接着剤も不要で簡単組み立てがいい感じ。ハードウェアができたらソフトウェア。圧力センサーを押したら動き出し障害物で曲がり、また押されたら止まるプログラムを作ってみました。デバッグ用も兼ねて、背中の5x5のディスプレイで文字も表示しています。

#include "test1.h" void Main(intptr_t exinf) { //dly_tsk(3000000); pup_motor_t* motorA = pup_motor_init(PBIO_PORT_ID_A, PUP_DIRECTION_COUNTERCLOCKWISE); pup_motor_t* motorB = pup_motor_init(PBIO_PORT_ID_B, PUP_DIRECTION_CLOCKWISE); //pup_device_t* colorSensor = pup_color_sensor_get_device(PBIO_PORT_ID_C); pup_device_t* forceSensor = pup_force_sensor_get_device(PBIO_PORT_ID_D); pup_device_t* ultraSonicSensor = pup_ultrasonic_sensor_get_device(PBIO_PORT_ID_E); //while (pup_color_sensor_reflection(ColorSensor) > 30) { for (;;) { hub_display_text("PUSH TO START", 200, 200); while (!pup_force_sensor_touched(forceSensor)); hub_display_text("GO", 200, 200); dly_tsk(500000); // .5sec int power = 400; pup_motor_set_speed(motorA, power); pup_motor_set_speed(motorB, power); for (;;) { int32_t res = pup_ultrasonic_sensor_distance(ultraSonicSensor); if (res >= 0 && res < 70) { hub_display_char('!'); pup_motor_stop(motorA); pup_motor_stop(motorB); dly_tsk(500000); // .5sec pup_motor_set_speed(motorA, power); dly_tsk(800000); // .8sec pup_motor_stop(motorA); hub_display_text("GO", 200, 200); dly_tsk(500000); // .5sec pup_motor_set_speed(motorA, power); pup_motor_set_speed(motorB, power); } if (pup_force_sensor_touched(forceSensor)) { hub_display_char('?'); pup_motor_stop(motorA); pup_motor_stop(motorB); dly_tsk(500000); // .5sec break; } } } } まずはほぼサンプル通りの実装ですが、関数名と変数が被って冗長なのが気になりますね。自由に設計できるのがC言語のいいところ。使いやすいライブラリを考えて実装してみましょう!


SPIKE Primeについてくるパーツ。いろいろ組み合わせてプロトタイピングにちょうど良さそうなセットです。

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS