Помогите научиться управлять двигателями, через интернет

Martin Swift
Offline
Зарегистрирован: 02.03.2018

Доброго времени суток, хотелось бы научиться управлять двигателями с помощью L293D или через Шильд L293D через интернет модуль HR911105A. Имеется три скетча (они представлены ниже): 

1) Для управления светодиодами через интернет модуль

#include <EtherCard.h>
 
static byte mymac[] = {0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A};
 
byte Ethernet::buffer[900];
BufferFiller bfill;
 
int LedPins[] = {2, 3, 4, 5};
 
boolean PinStatus[] = {1, 2, 3, 4};
 
const char http_OK[] PROGMEM =
  "HTTP/1.0 200 OK\r\n"
  "Content-Type: text/html\r\n"
  "Pragma: no-cache\r\n\r\n";
 
const char http_Found[] PROGMEM =
  "HTTP/1.0 302 Found\r\n"
  "Location: /\r\n\r\n";
 
const char http_Unauthorized[] PROGMEM =
  "HTTP/1.0 401 Unauthorized\r\n"
  "Content-Type: text/html\r\n\r\n"
  "<h1>401 Unauthorized</h1>";
 
void homePage()
{
  bfill.emit_p(PSTR("$F"
                    "<title>ArduinoPIN Webserver</title>"
                    "Relay 1: <a href=\"?ArduinoPIN1=$F\">$F</a><br />"
                    "Relay 2: <a href=\"?ArduinoPIN2=$F\">$F</a><br />"
                    "Relay 3: <a href=\"?ArduinoPIN3=$F\">$F</a><br />"
                    "Relay 4: <a href=\"?ArduinoPIN4=$F\">$F</a>"),
 
               http_OK,
               PinStatus[1] ? PSTR("off") : PSTR("on"),
               PinStatus[1] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[2] ? PSTR("off") : PSTR("on"),
               PinStatus[2] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[3] ? PSTR("off") : PSTR("on"),
               PinStatus[3] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[4] ? PSTR("off") : PSTR("on"),
               PinStatus[4] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"));
}
 
void setup()
{
  Serial.begin(9600);
 
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0);
 
  if (!ether.dhcpSetup());
 
  ether.printIp("My Router IP: ", ether.myip);
 
  for (int i = 0; i <= 4; i++)
  {
    pinMode(LedPins[i], OUTPUT);
    digitalWrite (LedPins[i], HIGH);
    PinStatus[i] = false;
  }
}
 
void loop()
{
  delay(1);
  word len = ether.packetReceive();   // check for ethernet packet
  word pos = ether.packetLoop(len);   // check for tcp packet
 
  if (pos) {
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    } else {
      data += 5;
      if (data[0] == ' ') {
        homePage(); // Return home page
        for (int i = 0; i <= 3; i++) {
          digitalWrite(LedPins[i], !PinStatus[i + 1]);
        }
      } else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
        PinStatus[1] = true;
        bfill.emit_p(http_Found);
      } else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
        PinStatus[2] = true;
        bfill.emit_p(http_Found);
      } else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
        PinStatus[3] = true;
        bfill.emit_p(http_Found);
      } else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
        PinStatus[4] = true;
        bfill.emit_p(http_Found);
      } else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
        PinStatus[1] = false;
        bfill.emit_p(http_Found);
      } else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
        PinStatus[2] = false;
        bfill.emit_p(http_Found);
      } else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
        PinStatus[3] = false;
        bfill.emit_p(http_Found);
      } else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
        PinStatus[4] = false;
        bfill.emit_p(http_Found);
      } else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
}

2) Для управления двигателем через L293D 

int IN1 = 8; // Input1 подключен к выводу 8 
int IN2 = 7;

void setup()
{
  pinMode (IN2, OUTPUT);
  pinMode (IN1, OUTPUT);
}
void loop()
{
  digitalWrite (IN2, HIGH);
  digitalWrite (IN1, LOW); 
  delay(4000);
  digitalWrite (IN2, LOW); 
  delay(500);
  digitalWrite (IN1, HIGH);
  delay(4000);
  digitalWrite (IN1, LOW); 
  delay(5000);
  }

3) Для управления двигателями через Шильд L293D

#include <AFMotor.h>  // Подключаем библиотеку для работы с шилдом 
#include <Servo.h>  // Подключаем библиотеку для работы с сервоприводами, можно не подключать

// Подключаем моторы к клеммникам M1, M2, M3, M4
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void setup() {
  // Задаем максимальную скорость вращения моторов (аналог работы PWM) 
  motor1.setSpeed(255);
  motor1.run(RELEASE);
  motor2.setSpeed(255);
  motor2.run(RELEASE);
  motor3.setSpeed(255);
  motor3.run(RELEASE);
  motor4.setSpeed(255);
  motor4.run(RELEASE);
}

int i;

void loop() {
  // Двигаемся условно вперед одну секунду 
  motor1.run(FORWARD); // Задаем движение вперед
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  motor1.setSpeed(255); // Задаем скорость движения
  motor2.setSpeed(255); 
  motor3.setSpeed(255); 
  motor4.setSpeed(255); 
  delay(1000);
  
  // Останавливаем двигатели
  /* Очень не рекомендуем резко переключать направление вращения двигателей.
  Лучше дать небольшой промежуток времени.*/
  
  motor1.run(RELEASE); 
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
  delay(500);
  
  // Двигаемся в обратном направлении
  motor1.run(BACKWARD);  // Задаем движение назад
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  motor1.setSpeed(255);  // Задаем скорость движения 
  motor2.setSpeed(255); 
  motor3.setSpeed(255); 
  motor4.setSpeed(255); 
  delay(1000);
  
  // Останавливаем двигатели  
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
  delay(500);
  
  // Разгоняем двигатели в одном направлении
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  for (i=0; i<255; i++) {
    motor1.setSpeed(i); 
    motor2.setSpeed(i); 
    motor3.setSpeed(i); 
    motor4.setSpeed(i); 
    delay(10);
 }
 
 // Останавливаем двигатели  
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
  delay(500);
  

Насколько я понимаю, нужно объеденить первый с каким-нибудь из этих двух скетчей. Не очень представляю как это сделать и насколько моя идея реальна. Буду рад любым советам и комментариям!

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Реальнее купить магический жезл на ибее. 

Martin Swift
Offline
Зарегистрирован: 02.03.2018

Так же буду рад рассмотреть другие варианты управления двигателем через интернет модуль!

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И чо, вот эта палочка повзоляет свет в сортире выключать через эти ваши интернеты? Ахренеть, дайте две!

sadman41
Offline
Зарегистрирован: 19.10.2016

Martin Swift пишет:

Не очень представляю как это сделать и насколько моя идея реальна. Буду рад любым советам и комментариям!

Идея реальна. Это единственное, что можно сказать.

Давать бесплатные советы тому, кто не представляет - дело неблагодарное. Я тут одному советовал-советовал, а оказалось, что нужно было целиком скетч написать и объяснить куда совать провода. Так что воздержусь. Но сделать можно - будьте уверены.

vvadim
Offline
Зарегистрирован: 23.05.2012

ЕвгенийП пишет:

И чо, вот эта палочка повзоляет свет в сортире выключать через эти ваши интернеты? Ахренеть, дайте две!

только если в пачпорте прописано Гарри Поттер)))

nik182
Offline
Зарегистрирован: 04.05.2015

Для затравки. Восьмидесятая строка первого скетча это конкретно исполнение желаемого.

Martin Swift
Offline
Зарегистрирован: 02.03.2018

Возьмётесь за оплату доделать скетч?

sadman41
Offline
Зарегистрирован: 19.10.2016

Для этого есть специальный раздел "Ищу исполнителя". Создайте тему, поместите задание, оставьте координаты...