siroitori0413のアイコン画像
siroitori0413 2021年02月27日作成 (2021年12月20日更新)
製作品 製作品 閲覧数 1545
siroitori0413 2021年02月27日作成 (2021年12月20日更新) 製作品 製作品 閲覧数 1545

小4理科学校教材の車を前進・停止をリモート操作可能にする

小4理科学校教材の車を前進・停止をリモート操作可能にする

小学校の理科教材のモーターで走る車をラジコンにする

息子が貰ってきた小学校の理科教材のモーターで前進走行する車です。
スイッチを付けたら走り続ける仕様となっていますが、これを改造して前進・停止がリモート操作できるようにしようと思いました。

キャプションを入力できます

材料

  • 小4理科教材 ダイワ 電気と光F型(電源を入れたらモーターで前進する簡単な車であれば何でも良いと思います) × 1個
  • M5StickC× 1個
  • リレーモジュール× 1個

作り方

リレーモジュールとM5StickCの接続は以下のように接続します。

そしてリレーモジュールを理科教材のスイッチ(写真の黄色いパーツ)に繋がってた部分に差し替えます。スイッチに差し替える向きはどちらの向きでも大丈夫です。

車とリレーモジュールの接続

連結車両をLEGOで作りました。

キャプションを入力できます

キャプションを入力できます

プログラム

Arduino IDEでM5StickCに以下のコードを書きこみます。

#include <M5StickC.h> #include <WiFi.h> #include <WiFiClient.h> #include <WiFiAP.h> #include "time.h" const char *ssid = "M5StickCtrl"; const char *password = ""; bool CurrentValue = false; WiFiServer server(80); RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; int lastDrawTime = 0; void setup() { M5.begin(); M5.Lcd.setRotation(3); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextSize(1); M5.Lcd.setCursor(0, 10); pinMode(26,OUTPUT); Serial.println("Configuring access point..."); WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.begin(); M5.Lcd.println("Connect:"); M5.Lcd.println(ssid); M5.Lcd.println("Enter:"); M5.Lcd.println(myIP); delay(1000); M5.Lcd.qrcode(myIP.toString(), 80, 0, 80, 15); } void loop() { WiFiClient client = server.available(); if (client) { Serial.println("Client Connected."); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n') { if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html; charset=utf-8;"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head>"); client.println("<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />"); client.println("</head>"); client.println("<body>"); client.println("<form method=\"get\">"); client.println(String("<input name=\"control\" type=\"text\" value=\"") + (String(!CurrentValue ? "On" : "Off")) + (String("\" style=\"display:none;\" \\>"))); client.println(String("<button type=\"submit\">Turn ") + String(!CurrentValue ? "On" : "Off") + String("</button>")); client.println("</form>"); client.println("</body>"); client.println("</html>"); Serial.println("html Rendering"); break; } else if (currentLine.indexOf("GET /?") == 0) { int pos1 = 0; int pos2 = 0; String val = ""; pos1 = currentLine.indexOf('control=', pos2); pos2 = currentLine.indexOf(' ', pos1); val = currentLine.substring(pos1 + 1, pos2); if (val == "On") { CurrentValue = true; } else { CurrentValue = false; } if (CurrentValue) { digitalWrite(26,HIGH); } else { digitalWrite(26,LOW); } client.println("HTTP/1.1 302 Request Succsessful"); client.println("Location: /"); client.println(); client.println("Request was succsessful. redirect to <a href=\"/\"> here. </a>"); } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } } } client.stop(); Serial.println("Client Disconnected."); } }

実行する

上記プログラム書き込み後、M5StickCの画面にQRコードが表示されると思います。

まず、リモコン操作したい端末(スマホ/PC)から、WiFiの設定で「M5StickCtrl」というSSIDが登場しているはずなのでここにつなぎます。そのとき、4G回線とかに接続しているスマホなどであればそれもいったんオフ(機内モードなど)にしておいた方が良いみたいです。

キャプションを入力できます

その後、M5StickCの画面上のQRコードを読み取るか、リモコン操作したい端末のブラウザにIPアドレスをURLとして入力します。

キャプションを入力できます

上記の画面が出たらOKです。
「Turn On」を押すと、ラジコンカーが前進します。
ボタンの表記が「Turn Off」に変わり、そのボタンを押すと停止します。

ここに動画が表示されます

siroitori0413のアイコン画像
https://siroitori.hatenablog.com/
ログインしてコメントを投稿する