มีโค้ดทดลองควบคุมด้วยระบบ GPS ไหมครับ

อยากทราบว่าท่านใดมีโค้ดที่เกี่ยวกับการมาคตำแหน่งใน map แล้วให้เดินตามที่เรามาคได้ไหมครับ พอดีกำลังศึกษาอยู่ครับ ที่สามารถเชื่อต่อกับ blynk และควบคุมในแอพได้ โดยใช้ Blynk ไหมครับ

ขออนุญาติ ขอข้อมูลส่วนตัว เพิ่มซักนิดครับ

ตอนนี้ สามารถเขียน Code ได้ถึงระดับไหนแล้วครับ
ใช้ Blynk คล่อง ขนาดไหนครับ
เข้าใจการสื่อสารระหว่างอุปกรณ์ แต่ละแบบ อย่างไรบ้างครับ
จะใช้อุปกรณ์ ประเภทไหนบ้าง

พื้นฐานสำคัญมาก การได้รู้พื้นฐานของผู้ถาม มีผลอย่างมากในการตอบ

รู้น้อยตอบมาก รู้มากตอบน้อย ไม่รู้ไรเลย ก็เริ่มเรียนรู้ได้แล้ว รู้ไรไม่เท่า รู้งี้

1 Like
#include <ESP8266WiFi.h>         
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>    
#define BLYNK_PRINT Serial 
#include <BlynkSimpleEsp8266.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <Servo.h>

// ================= Motor ================
#define RightMotorSpeed 14 // D5 <-> IN1
#define RightMotorDir 12  // D7 <-> IN2
#define LeftMotorSpeed 13  // D6 <-> IN3
#define LeftMotorDir 15  // D8 <-> IN4
// =====================================

// ================= FIX PIN gps ================
static const int RXPin = 4, TXPin = 5;    
static const uint32_t GPSBaud = 9600;     
// ======================================

TinyGPSPlus gps;                          
WidgetMap myMap(V0);                     
Servo servo;
SoftwareSerial ss(RXPin, TXPin);          // RX=D1,TX=D2
BlynkTimer timer;

float spd;                                
float sats;                               
String bearing;                           

  //unsigned int move_index;                // moving index, to be used later
unsigned int move_index = 1;              // fixed location for now

// ================= CONNECT TO Server ================
char auth[] = "N6Stmxp7gR9JQxPqw9I-ams6cuFUGIHq"; //Token key
char server[] = "oasiskit.com";
int port = 8080;
// =================จบ ================

void setup() {
    servo.attach(0); // NodeMCU D3 pin
    Serial.begin(115200);
    Serial.println();
  ss.begin(GPSBaud);
  timer.setInterval(5000L, checkGPS);     // every 5s check if GPS is connected, only really needs to be done once
    pinMode(RightMotorSpeed, OUTPUT);
    pinMode(RightMotorDir, OUTPUT);
    pinMode(LeftMotorSpeed, OUTPUT);
    pinMode(LeftMotorDir, OUTPUT);

    
// ================= CONNECT TO WIFI ================
    WiFiManager wifiManager;
    //reset saved settings
    //wifiManager.resetSettings();
 // ==============================================
    
    wifiManager.autoConnect("AP_mower");
    Blynk.config(auth, "oasiskit.com", 8080);
    Serial.println("connected...yeey :)");
 
}

void checkGPS(){
  if (gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
      Blynk.virtualWrite(V4, "GPS ERROR");  // Value Display widget  on V4 if GPS not detected
  }
}

void loop() {

   while (ss.available() > 0) 
    {
                                            // sketch displays information every time a new sentence is correctly encoded.
      if (gps.encode(ss.read()))
        displayInfo();
  }
  Blynk.run();
  timer.run();
}

void displayInfo()
{ 
  
  if (gps.location.isValid() ) 
  {   
    // ================= กำหนด GPS ================ 
    double latitude = (gps.location.lat());      //Storing the Lat. and Lon. 
    double longitude = (gps.location.lng()); 
    // ===================================================
    
    Serial.print("LAT:  ");
    Serial.println(latitude, 12);                // float to x decimal places
    Serial.print("LONG: ");
    Serial.println(longitude, 12);
    Blynk.virtualWrite(V1, String(latitude, 12));   
    Blynk.virtualWrite(V2, String(longitude, 12));  
    myMap.location(move_index, latitude, longitude, "GPS_Location");
    spd = gps.speed.kmph();                     //get speed
       Blynk.virtualWrite(V3, spd);
       
       sats = gps.satellites.value();           //get number of satellites
       Blynk.virtualWrite(V4, sats);

       bearing = TinyGPSPlus::cardinal(gps.course.value()); // get the direction
       Blynk.virtualWrite(V5, bearing);                   
  }
  
 Serial.println();
}
    // ================= การทำงาน เดิน-ถอย ================ 
 void halt()
  {
   digitalWrite(RightMotorSpeed, LOW);
   digitalWrite(LeftMotorSpeed, LOW);
  }
void forward()
  {
   digitalWrite(RightMotorDir, HIGH);
   digitalWrite(LeftMotorDir, HIGH);
   digitalWrite(RightMotorSpeed, LOW);
   digitalWrite(LeftMotorSpeed, LOW);
  }
 
void reverse()
  {
   digitalWrite(RightMotorDir, LOW);
   digitalWrite(LeftMotorDir, LOW);
   digitalWrite(RightMotorSpeed, HIGH);
   digitalWrite(LeftMotorSpeed, HIGH);
  }
    // ===================================================

BLYNK_WRITE(V6)

{

   servo.write(param.asInt());

}


BLYNK_WRITE(V7)//ซ้าย//

{

   servo.write(param.asInt());



}

BLYNK_WRITE(V8)//ซวา//

{

   servo.write(param.asInt());
  
}
BLYNK_WRITE(V9)//หน้า//
{
 if (param[0])
 forward();
 else
 halt();
}
 
BLYNK_WRITE(V10)//หลัง//
{
 if (param[0])
 reverse();
 else
 halt();
}

นี่คือโค้ดที่กำลังทำอยู่ครับ ส่วน Blynk รู้แค่บางส่วนครับผม

เคสนี้ไม่เคสศึกษาเหมือนกัน แต่เข้าใจว่าทำได้ครับ เพราะ ใน widget map มันก็รับส่งค่าพิกัดเหมือนกัน

ตอนนี้ที่ผมทำได้คือระบุที่อยู่ตัวอุปกรณ์ GPS กับ โทรศัพท์ครับแต่ยังคิดไม่ออกว่าจะทำยังไงให้มันมาคจุดแล้วให้เดินตามที่เรามาคครับ

อันนี้ตามตำแหน่ง

image

โค้ต

ขอบคุณมากครับจะนำไปดัดแปลงดูนะครับ :smiley:

ลองทดสอบดูได้ผลอย่างไรเอามาอัพเดทกันครับ

ฮาร์ทแวร์เราใช้อะไรบ้าง มีรูปไหม

หน้าตาแอพที่ทดลองครับ

esp8266 + โมดูล GPS Ublox NEO-6M + L298N โมดูลมอเตอร์ไดรฟ์ DC + servo motor pdi-6221mg + มอเตอร์ เกียร์ 12v 30w





image

ขออภัยนะครับที่ถ่ายตอนต่อไม่ได้เลยเอารูปในเว็บมาอ้างอิงแทนครับ

เหลืออะไรตอนนี้

มาคจุดในแอพครับ แล้วให้เดินตาม ยังทำไม่ได้ครับ

น่าจะเป็นการยืนยันแล้วว่าใช้ widget gps เองทำไม่ได้แน่นอน แต่ผมก็คิกว่าเราใช้ input text 2 อันป้อน พิกัดเข้ามาอ้างอิงได้ลองทดสอบดูครับ

ขอบคุณที่แนะนำครับในส่วนนี้ผมขอศึกษาเพิ่มเติมก่อนนะครับถ้ามีความคืบหน้ายังไงจะมาอัพเดทให้นะครับ :grinning_face_with_smiling_eyes:

จัดไปครับ ได้หรือไม่ได้มันอยู่ที่ไอเดียที่เราจะปรับแก้มันอย่างไร

อ่านๆดู หัวข้อนี้ ความรู้ผมไม่ถึง ยอมครับ :confounded:

แต่ให้แนวทาง รูปแบบ ลักษณะที่คล้ายๆกันให้
ดูแนวทาง งานแสดง โดรน บนฟ้า มีการ ระบุตำแหน่ง ใน แผนที่ กำหนดให้ โดรน บินอยูในตำแหน่ง ได้
งานไร่นาน กำหนดพื้นที่ จากแผนที่ เพื่อฉีดยาให้ปุ๋ย โดยใช้ โดรน
งานแบบนี้ ต้อง ระบุตำแหน่งแบบ 3D แต่โปรเจ็กที่จะทำ น่าจะ 2D ก็น่าจะอาอยู่ แต่ไม่รู้ว่า ตัว Node ESP จะไหวไหม ค่อยๆ แยก โปรเจ็ก ที่ละอย่าง ให้ทำงานได้ก่อน แล้วค่อยเอามารวมกัน เพราะเวลามีปัญหา จะแก้ได้ง่ายกว่า

ส่วนไหนพอมีความรู้ก็จะแบ่งปันครับ เอาใจช่วยครับ และก็ขอเรียนรู้ไปกับเจ้าของกระทู้ด้วยครับ

1 Like