ESP32シリーズの続きです。
その前に、Fritzingのパーツは、頑張ってGitHUBで公開して、Qiitaで他のESP32のパーツと合わせて紹介しました。
さて、前回、DHT11を使用した温度計、湿度計を試してました。ただ表示しているだけなんだけど、なんかうれしくて、ずっと電源入れっぱなしにしていたりして楽しんでいました。
そろそろ次に進まないと、と、DCモーターの制御を試してみます。
記事にはしていないけど、サーボモーターとかと一緒に以前試してみたのだけど、動作してもあまりうれしいことが無くて放置していました。で、今回は、DCモーターからやり直しです。
DCモーターの実験の目的は、マスコットロボ ハロの耳を動かすこと。
写真の通り、ハロの前側の下にモーターがついています。ここの制御をESP32からやってみるのが最終目標です。
DCモーターの制御ということで、モータードライバが必要となります。今回は、ArduinoのキットについていたL293D を使用します。
モータードライバが必要なのか?と思って調べてみると、モーターの回転の正方向、逆方向の制御や回転速度の制御、電源関連など苦労するものが多いということが分かったので、素直にモータードライバを使用することにしました。
プログラムはサンプルと、参考サイトのコードを利用しています。
DCモーターとL293Dのサンプル参考サイト:
https://randomnerdtutorials.com/esp32-dc-motor-l298n-motor-driver-control-speed-direction/
Webサーバの参考サイト:
http://mukujii.sakura.ne.jp/esp1.html
https://lastminuteengineers.com/esp32-dht11-dht22-web-server-tutorial/
接続図は下記のような感じ。
電源は両方投入しないといけない。
そして、まだ書きかけの汚いコードだけど、載せておきます。
モーターの frequency が良くわかっていない。
実際にマスコットロボ ハロの耳を動かすのは、次回。
その前に、Fritzingのパーツは、頑張ってGitHUBで公開して、Qiitaで他のESP32のパーツと合わせて紹介しました。
さて、前回、DHT11を使用した温度計、湿度計を試してました。ただ表示しているだけなんだけど、なんかうれしくて、ずっと電源入れっぱなしにしていたりして楽しんでいました。
そろそろ次に進まないと、と、DCモーターの制御を試してみます。
記事にはしていないけど、サーボモーターとかと一緒に以前試してみたのだけど、動作してもあまりうれしいことが無くて放置していました。で、今回は、DCモーターからやり直しです。
DCモーターの実験の目的は、マスコットロボ ハロの耳を動かすこと。
写真の通り、ハロの前側の下にモーターがついています。ここの制御をESP32からやってみるのが最終目標です。
DCモーターの制御ということで、モータードライバが必要となります。今回は、ArduinoのキットについていたL293D を使用します。
モータードライバが必要なのか?と思って調べてみると、モーターの回転の正方向、逆方向の制御や回転速度の制御、電源関連など苦労するものが多いということが分かったので、素直にモータードライバを使用することにしました。
プログラムはサンプルと、参考サイトのコードを利用しています。
DCモーターとL293Dのサンプル参考サイト:
https://randomnerdtutorials.com/esp32-dc-motor-l298n-motor-driver-control-speed-direction/
Webサーバの参考サイト:
http://mukujii.sakura.ne.jp/esp1.html
https://lastminuteengineers.com/esp32-dht11-dht22-web-server-tutorial/
接続図は下記のような感じ。
電源は両方投入しないといけない。
そして、まだ書きかけの汚いコードだけど、載せておきます。
モーターの frequency が良くわかっていない。
#include <WiFi.h> // WiFi const char* ssid = "ssid"; const char* password = "password"; // WiFi Server WiFiServer server(80); String header; // HTTPリクエストを格納する変数 // Motor Pin int motor1Pin1 = 27; int motor1Pin2 = 26; int enable1Pin = 14; // Setting PWM properties const int freq = 1000; const int pwmChannel = 0; const int resolution = 8; int dutyCycle = 200; void setup() { // sets the pins as outputs: pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enable1Pin, OUTPUT); // configure LED PWM functionalitites ledcSetup(pwmChannel, freq, resolution); // attach the channel to the GPIO to be controlled ledcAttachPin(enable1Pin, pwmChannel); Serial.begin(115200); // WiFi Connect Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // ローカルIPを表示(このIPにスマホなどからアクセスします) Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); } String SendHTML() { String ptr = "<!DOCTYPE html> <html>\n"; ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n"; ptr +="<title>ESP32 DCMoter</title>\n"; ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n"; ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n"; ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n"; ptr +="</style>\n"; ptr +="</head>\n"; ptr +="<body>\n"; ptr +="<div id=\"webpage\">\n"; ptr +="<h1>ESP32 DCMoter Web</h1>\n"; ptr +="<form method='get'>\ <input type='submit' name='le' value='耳停止' />\ <input type='submit' name='ri' value='耳動作' /><br>\ <input type='submit' name='st' value='停止' /><br>\ <br>\ </form></div>"; ptr +="</body>\n"; ptr +="</html>\n"; return ptr; } void MoterStop() { Serial.println("Motor stopped"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); } void Forward() { Serial.println("Moving Forward"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); delay(800); } void loop() { ledcWrite(pwmChannel, dutyCycle); // Motor(); // Forward(); WiFiClient client = server.available(); if (client) { Serial.println("New Client."); String currentLine = ""; // make a String to hold incoming data from the client while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor if (c == '\n') { // if the byte is a newline character if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.print(SendHTML()); client.println(); // break out of the while loop: break; } else { // if you got a newline, then clear currentLine: currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } // Check to see if the client request was "GET /H" or "GET /L": if (currentLine.endsWith("GET /?le")) { Forward(); MoterStop(); } if (currentLine.endsWith("GET /?ri")) { Serial.println(""); Serial.println("Moving Backwards"); digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); } if (currentLine.endsWith("GET /?st")) { Serial.println(""); MoterStop(); } } } // close the connection: client.stop(); Serial.println("Client Disconnected."); } }
実際にマスコットロボ ハロの耳を動かすのは、次回。
0 件のコメント:
コメントを投稿