roboforum.ru

Технический форум по робототехнике.

Вопросы новичка.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Вопросы новичка.

Сообщение uzz008 » 12 фев 2018, 15:01

Всем привет!
Я есть самый новичок, точнее вообще никогда ничего не делал на ардуино.
Смотрел несколько видео про ардуинку и вот пришла мысль автоматизировать один процесс.
Возник вопрос: реально ли реализовать? и в дальнейшем расширить функционал.
Суть заключается в измерении температуры жидкости, открывании (включении) и закрывании (выключении) электроклапана в зависимости от этой самой температуры.
Исходные данные: Temp1 (например 75С) < Temp2 (например 77С). Температура при включении контроллера будет еще больше, например 80С и клапан должен быть закрыт. Т.к. при открытом клапане температура растет, при закрытом наоборот падает, то изначально температура будет падать.
Алгоритм работы в приложении:
Untitled Diagram.jpg


Как расширить функционал? Например, иметь возможность корректировать T1 и T2 даже во время процесса, например при калибровке, пока не доведу до идеала. Возможность наблюдать температуру датчика (какой-нить жкд)?
uzz008
 
Сообщения: 1
Зарегистрирован: 12 фев 2018, 14:26

Re: Вопросы новичка.

Сообщение dimamichev » 14 фев 2018, 21:30

Зависли сервы где то меж Китаем и Москвой...
Пока жду, пробую вариант управления LED кубом через ПК как периферией. Есть готовый вариант - Glediator. Общего руководства по использованию нет,методом "така" осваиваю. Пока забавно.
Вложения
рабочая  панель программы — копия.jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Madf » 15 фев 2018, 13:32

Прога известная, инфа вся есть в инете.
А судя по кубу, не хватает производительности, как-то всё медленно работает.
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Вопросы новичка.

Сообщение dimamichev » 23 фев 2018, 12:30

Madf писал(а):Прога известная, инфа вся есть в инете.
А судя по кубу, не хватает производительности, как-то всё медленно работает.

Работает быстро, это просто настройки скорости в сцене минимальные, да и яркости тоже. Насчёт инфы по русски нашёл только https://www.youtube.com/watch?v=9JOQZcKlQS8
..Но фразы - сами поиграетесь не очень информативны...

Добавлено спустя 3 минуты 49 секунд:
uzz008 писал(а):Всем привет!
Я есть самый новичок, точнее вообще никогда ничего не делал на ардуино.
Смотрел несколько видео про ардуинку и вот пришла мысль автоматизировать один процесс.
Возник вопрос: реально ли реализовать? и в дальнейшем расширить функционал.
Суть заключается в измерении температуры жидкости, открывании (включении) и закрывании (выключении) электроклапана в зависимости от этой самой температуры.
Исходные данные: Temp1 (например 75С) < Temp2 (например 77С). Температура при включении контроллера будет еще больше, например 80С и клапан должен быть закрыт. Т.к. при открытом клапане температура растет, при закрытом наоборот падает, то изначально температура будет падать.
Алгоритм работы в приложении:
Untitled Diagram.jpg


Как расширить функционал? Например, иметь возможность корректировать T1 и T2 даже во время процесса, например при калибровке, пока не доведу до идеала. Возможность наблюдать температуру датчика (какой-нить жкд)?

Сюда Вам надо
http://arduino.ru/forum
Люди там добрые, отзывчивые - по быстрому :D
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 04 мар 2018, 21:45

Серв нету, грустно,переделал слегка ходуна и скетч к нему. Продавец с али всё на нашу почту России валит...заставить бы его (ходуна) не только ходить и поворачивать, но ещё и на месте разворачиваться...
Код: Выделить всёРазвернуть
#include <Servo.h> //используем библиотеку

Servo myservo1;  //указываем сервопривод передних конечностей
Servo myservo2;  //указываем сервопривод задних конечностей
int a1=125; //граничные углы для сервы 1
int a2=55;
int b1=125;// граничные углы для сервы 2
int b2=55;
int a;int b;//переменные для хранения значений текущих углов
int n=20; //временная задержка
int n1=20; //коэффициент "плавности хода"
int c=0;//переменная числа шагов
int v=1;int v1=1;
long Y1=0;long Y2=0;
void setup()
{
  pinMode (5,INPUT );//подключение оптического датчика
  myservo1.attach(7);//выводы для подключения 1 и 2 сервопривода
  myservo2.attach(6);
  myservo1.write(a1);//начальная установка положения конечностей
  myservo2.write(b1);
   delay(n);
  myservo1.detach();myservo2.detach();// пауза для установки робота после включения
  delay(200*n);myservo1.attach(7);myservo2.attach(6);
}

void loop()
{
metka0:v=1;
  while(c<10)//условие числа шагов
  {
  //////////////////  ШАГ ВПЕРЁД или НАЗАД С РАЗВОРОТОМ ///////////////////////
  /////////////////////   ТАКТ 1  //////////////////////
  myservo1.write(a1);//"положение вала статичной сервы"
  delay_(n);if(v==0){goto metka0;}
  b=b1;
  while(b>=b2)
  {
   myservo2.write(b);//"положение вала динамичной сервы"
   delay_(n);if(v==0){goto metka0;} b=b-(b1-b2)/n1;
  }
  /////////////////////   ТАКТ 2  //////////////////////
  myservo2.write(b2);//"положение вала статичной сервы"
  delay_(n);if(v==0){goto metka0;}
  a=a1;
  while(a>=a2)
  {
   myservo1.write(a);//"положение вала динамичной сервы"
   delay_(n);if(v==0){goto metka0;} a=a-(a1-a2)/n1;
  }
  /////////////////////   ТАКТ 3  //////////////////////
  myservo1.write(a2);//"положение вала статичной сервы"
  delay_(n);if(v==0){goto metka0;}
  b=b2;
  while(b<=b1)
  {
   myservo2.write(b);//"положение вала динамичной сервы"
   delay_(n);if(v==0){goto metka0;} b=b+(b1-b2)/n1;
  }
  /////////////////////   ТАКТ 4  //////////////////////
  myservo2.write(b1);//"положение вала статичной сервы"
  delay_(n);if(v==0){goto metka0;}
  a=a2;
  while(a<=a1)
  {
   myservo1.write(a);//"положение вала динамичной сервы"
   delay_(n);if(v==0){goto metka0;} a=a+(a1-a2)/n1;
  }
  c++;}c=0;v1=1;
  //Условие смены направления движения и темпа после разворачивания с псевдослучайным движением прямолинейно или криволинейно
  myservo1.detach();myservo2.detach();delay(100*n);  myservo1.attach(7);  myservo2.attach(6);
  if (random(0,2)==1){a1=125;a2=55;b1=125;b2=55;}else{a1=113;a2=47;b1=133;b2=67;}n1=20;

 
                                         
}
////////////////////////////////////////   ФУНКЦИИ ОПИСАНИЕ   //////////////////////////////////////////////////////
//Функция заменяет выполнение команды delay(n); в ней на время паузы  идёт опрос датчика

void delay_(int T1)
{
Y2=millis();metka:Y1=millis();if(Y1-Y2>=T1){}
else {if(digitalRead(5)==LOW&&v1==1){myservo1.detach();myservo2.detach();delay(100*n);
myservo1.attach(6);  myservo2.attach(7);a1=113;a2=47;b1=133;b2=67;n1=10;c=0;v=0;v1=0;}goto metka;}

}

Вложения
IMG_7259.JPG
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 19 мар 2018, 17:50

Пришла часть сервоприводов, попробую пока такого ходуна на 4.
Вложения
IMG_7281.JPG
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 22 мар 2018, 16:54

Рабочий вариант с ик приёмником для ДУ. В скетче никак не могу сделать поворот на месте.
Код: Выделить всёРазвернуть
//////////////////////////    скетч для управления 4 сервоприводами бипода   /////////////////
#include <Servo.h> //используем библиотеку

Servo myservoLS3 ;  //указываем сервопривод ЛЕВОЙ СТОПЫ
Servo myservoLB4;  //указываем сервопривод ЛЕВОГО БЕДРА
Servo myservoRB5 ;  //указываем сервопривод ПРАВОГО БЕДРА
Servo myservoRS6;  //указываем сервопривод ПРАВОЙ СТОПЫ
int n=20;// временнАя задержка
int n1=3; //коэффициент "плавности хода"
int a03=87;int a04=95;int a05=90;int a06=77;//переменные для углов начального положения конечностей
int da=10;//переменная амплитуды изменения угла в градусах для стоп
int db=25;//переменная амплитуды изменения угла в градусах для  бедра
int f=0;// переменная - флаг
int a3=a03;int a4=a04;int a5=a05;int a6=a06;// переменные для хранения значений текущих углов
////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "boarddefs.h"   //Добавочная библиотека
#include "IRremote.h"
#include "IRremoteInt.h" //Добавочная библиотека

int RECV_PIN = 2;        //Пин подключения выходного сигнала с ИК-приёмника
int N=0;                 //Счётчик номера нажатой кнопки
long Y1=0;long Y2=0;
//Создаём экземпляр класса IRrecv, в качестве параметра передаём пин подключения сигнала ИК-приёмника
IRrecv irrecv(RECV_PIN); 

decode_results results;   //Переменная для сохранения полученного кода нажатой кнопки
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
 
myservoLS3.attach(3);//выводы  для прямохождения и подключения 1-4 сервоприводов
myservoLB4.attach(4);
myservoRB5.attach(5);
myservoRS6.attach(6);
myservoLS3.write(a03); delay(25*n);// начальная установка-настройка углов поворота валов серв
myservoLB4.write(a04); delay(25*n);myservoLB4.detach();
myservoRB5.write(a05); delay(25*n);myservoRB5.detach();
myservoRS6.write(a06); delay(25*n);
irrecv.enableIRIn();     //Включение ИК-приёмника в работу
}
void loop()
{
  ///////////////////////////////////////////
  delay_(10*n);
  //////////////////////////////////////  ХОЖДЕНИЕ ПРЯМО //////////////////////////////////////
  metka1:
  if(N==1){if(f==1){myservoLS3.attach(3);myservoLB4.attach(4);myservoRB5.attach(5); myservoRS6.attach(6); }f=0;
  ////////////////////////////////   ТАКТ НАКЛОН ВПРАВО ///////////////////////////////////////
  myservoRS6.attach(6);
while((a3<=a03+da)||(a6<=a06+da))
  { myservoLS3.write(a3);myservoRS6.write(a6);a3=a3+n1;a6=a6+n1; delay_(n);}
  myservoLS3.detach();delay_(n);
 
   //////////////////////////// ТАКТ ПОВОРОТ КОРПУСА ОТН. ПРАВОЙ НОГИ  //////////////////////////
  myservoLB4.attach(4);myservoRB5.attach(5);
while((a4>=a04-db)||(a5>=a05-db))
  { myservoLB4.write(a4);myservoRB5.write(a5);a4=a4-n1;a5=a5-n1; delay_(n);}
myservoLB4.detach();myservoRB5.detach();delay_(n);

 
/////////////////////////////////   ТАКТ НАКЛОН ВЛЕВО  //////////////////////////////////////
myservoLS3.attach(3);
while ((a3>=a03-da)||(a6>=a06-da))
  { myservoLS3.write(a3);myservoRS6.write(a6);a3=a3-n1;a6=a6-n1; delay_(n);}
  myservoRS6.detach();delay_(n);
 
   //////////////////////////// ТАКТ ПОВОРОТ КОРПУСА ОТН. ЛЕВОЙ НОГИ  //////////////////////////
myservoLB4.attach(4);myservoRB5.attach(5);
while((a4<=a04+db)||(a5<=a05+db))
  { myservoLB4.write(a4);myservoRB5.write(a5);a4=a4+n1;a5=a5+n1; delay_(n);}
myservoLB4.detach();myservoRB5.detach();delay_(n);
  goto metka1;}
/////////////////////////////////////////  ОСТАНОВКА   ///////////////////////////////////////
metka2:
  if(N==0&&f==0){f=1;
myservoLS3.attach(3);
myservoLB4.attach(4);
myservoRB5.attach(5);
myservoRS6.attach(6);
myservoLS3.write(a03); delay_(5*n);
myservoLB4.write(a04); delay_(5*n);
myservoRB5.write(a05); delay_(5*n);
myservoRS6.write(a06); delay_(5*n);
myservoLS3.detach();myservoLB4.detach();myservoRB5.detach(); myservoRS6.detach();
  }

/////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////  ХОЖДЕНИЕ НАЗАД //////////////////////////////////////
  metka3:
  if(N==2){if(f==1){myservoLS3.attach(3);myservoLB4.attach(4);myservoRB5.attach(5); myservoRS6.attach(6); }f=0;
  ////////////////////////////////   ТАКТ НАКЛОН ВПРАВО ///////////////////////////////////////
  myservoRS6.attach(6);
while((a3<=a03+da)||(a6<=a06+da))
  { myservoLS3.write(a3);myservoRS6.write(a6);a3=a3+n1;a6=a6+n1; delay_(n);}
  myservoLS3.detach();delay_(n);
 
   //////////////////////////// ТАКТ ПОВОРОТ КОРПУСА ОТН. ПРАВОЙ НОГИ  //////////////////////////
  myservoLB4.attach(4);myservoRB5.attach(5);
while((a4<=a04+db)||(a5<=a05+db))
  { myservoLB4.write(a4);myservoRB5.write(a5);a4=a4+n1;a5=a5+n1; delay_(n);}
myservoLB4.detach();myservoRB5.detach();delay_(n);

 
/////////////////////////////////   ТАКТ НАКЛОН ВЛЕВО  //////////////////////////////////////
myservoLS3.attach(3);
while ((a3>=a03-da)||(a6>=a06-da))
  { myservoLS3.write(a3);myservoRS6.write(a6);a3=a3-n1;a6=a6-n1; delay_(n);}
  myservoRS6.detach();delay_(n);
 
   //////////////////////////// ТАКТ ПОВОРОТ КОРПУСА ОТН. ЛЕВОЙ НОГИ  //////////////////////////
   myservoLB4.attach(4);myservoRB5.attach(5);
while((a4>=a04-db)||(a5>=a05-db))
  { myservoLB4.write(a4);myservoRB5.write(a5);a4=a4-n1;a5=a5-n1; delay_(n);}
myservoLB4.detach();myservoRB5.detach();delay_(n);

  goto metka3;}
}

////////////////////////////////////////   ФУНКЦИИ ОПИСАНИЕ   //////////////////////////////////////////////////////
//Функция заменяет выполнение команды delay(n); в ней на время паузы  идёт опрос датчика

void delay_(int T1)
{
Y2=millis();metka:Y1=millis();if(Y1-Y2>=T1){}
else { if (irrecv.decode(&results))         //Если произошло событие/кнопка была нажата
  {
   // Serial.println(results.value, HEX);//Выводим в монитор порта код нажатой кнопки в шестнадцатиричном виде
    switch ( results.value )
    {
    case 0x88877://кнопка "вверх-вперёд"
       N=1;
        break;
    case 0x8A857://кнопка "вниз-назад"
        N=2;
        break;
    case 0x8C837://кнопка "ОК-стоп"
       N=0;
        break;
    case 0x848B7://кнопка "влево"
       N=3;
        break;
    case 0x828D7://кнопка "вправо"
       N=4;
        break;
    }
     //Serial.println(N);
     irrecv.resume();//Считываем следующую значение/кнопку
   } goto metka;}

}


Вложения
IMG_7305.JPG
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 23 мар 2018, 13:26

Завершил скетч.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение loox » 23 мар 2018, 14:03

dimamichev
круто..
посмотри здесь https://www.youtube.com/watch?v=sROeuKF_nog , очень давно делал похожую штучку

loox
loox
 
Сообщения: 326
Зарегистрирован: 26 мар 2008, 12:45

Re: Вопросы новичка.

Сообщение dimamichev » 24 мар 2018, 09:03

Интересная добавка... к голове.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 24 мар 2018, 16:13

Три сервы вместо четырёх - добавка к голове :)
https://www.youtube.com/watch?v=DWSbFfW3lC4
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 28 мар 2018, 17:40

Дошли сервы, собрал платформу. Решил побаловаться через блютуз с управлением, примерно так - http://remotexy.com/ru/examples/cardboardrobot/, заказал модуль НС05, опять ждать.
Вложения
IMG_7317.JPG
IMG_7316.JPG
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 31 мар 2018, 14:10

Проба ходьбы прямо.

Код: Выделить всёРазвернуть
//////////////////////////    скетч для управления 8 сервоприводами квадропода   /////////////////
#include <Servo.h> //используем библиотеку

Servo myservoK3 ;  //указываем сервопривод заднего левого колена
Servo myservoB4;  //указываем сервопривод  заднего левого бедра
Servo myservoK5 ;  //указываем сервопривод переднего левого колена
Servo myservoB6;  //указываем сервопривод  переднего левого бедра
Servo myservoK7 ;  //указываем сервопривод заднего правого колена
Servo myservoB8;  //указываем сервопривод  заднего правого бедра
Servo myservoK9 ;  //указываем сервопривод переднего правого колена
Servo myservoB10;  //указываем сервопривод переднего правого бедра
int n=17;
int a03=110;int a04=75;int a05=55;int a06=97;int a07=80;int a08=75;int a09=73;int a010=85;//переменные для углов начального положения конечностей
int da=10;//переменная амплитуды изменения угла в градусах для колен
int db=15;//переменная амплитуды изменения угла в градусах для бёдер
int i;
int a3=a03;int a4=a04;int a5=a05;int a6=a06;int a7=a07;int a8=a08;int a9=a09;int a10=a010;// переменные для хранения значений текущих углов
//////при увеличении значения угла сервоприводы движут лапы :B4,B6-вперёд B8,B10-назад K3,K9-вниз K5,K7-вверх ////////
void setup()
{

myservoK3.attach(3);//выводы  для подключения 1-8 сервоприводов
myservoB4.attach(4);
myservoK5.attach(5);
myservoB6.attach(6);
myservoK7.attach(7);
myservoB8.attach(8);
myservoK9.attach(9);
myservoB10.attach(10);

myservoK3.write(a03); delay(n);// начальная установка-настройка углов поворота валов серв
myservoB4.write(a04); delay(n);
myservoK5.write(a05); delay(n);
myservoB6.write(a06); delay(n);
myservoK7.write(a07); delay(n);
myservoB8.write(a08); delay(n);
myservoK9.write(a09); delay(n);
myservoB10.write(a010); delay(n);


delay(250*n);
}

void loop()
{
  /////////////////////////////////////////////  ПРЯМОХОЖДЕНИЕ  /////////////////////////////////////////////
  ///////////// K5,K7 вверх///////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5+i);
  myservoK7.write(a7+i);
  delay(n);}
  ///////////// B6,B8- вперёд B4,B10- назад ////////
   for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6+i);
  myservoB8.write(a8-i);
  myservoB4.write(a4-i);
  myservoB10.write(a10+i);
  delay(n);}
  /////////////K5,K7 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5-i);
  myservoK7.write(a7-i);
  delay(n);}
  ////////////K3,K9 вверх /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3-i);
   myservoK9.write(a9-i);
  delay(n);}
  ///////////// B6,B8- назад B4,B10- вперёд ////////
  for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6-i);
  myservoB8.write(a8+i);
  myservoB4.write(a4+i);
  myservoB10.write(a10-i);
  delay(n);}
  //////////////K3,K9 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3+i);
   myservoK9.write(a9+i);
  delay(n);}
  /////////////////////////////////////////////////////////////////////////////////////////
 
}

Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 16 апр 2018, 22:21


Блютуз управление попробовал.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Madf » 17 апр 2018, 15:02

а одновременно прямо+влево? :)
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Пред.След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2