Форум программистов, компьютерный форум, киберфорум
Наши страницы

Arduino

Войти
Регистрация
Восстановить пароль
 
Alex Kireev
5 / 10 / 0
Регистрация: 21.11.2017
Сообщений: 108
#1

Автомобильный комплект для Arduino - Arduino

12.12.2017, 00:33. Просмотров 417. Ответов 10
Метки нет (Все метки)

Здравствуйте.
Кто нибудь работал с этим набором.
https://ru.aliexpress.com/item/Multi...311.0.0.41fVwD
Если да то расскажите пожалуйста где Вы нашли для него код.
В интернете искал но они с ошибками, а я только не давно начал изучать ардуино.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2017, 00:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Автомобильный комплект для Arduino (Arduino):

Автомобильный вольтметр - Электроника
Доброго всем дня. Давно вызревала идея сделать в машину вольтметр с точностью лучше чем 0.1 В В результате родилась Эта схема: ...

Arduino Nano для индустриальных применений - Электроника
Всем привет. Хочу сделать плату, совместимую с Arduino и пригодную для индустриальных приложений, т. е. способную корректно, без сбоев...

Делаем автомобильный парктроник - Электроника
Тема перекочевала со старого форума. Основная идея адаптируем существующие парктроники под свои цели, или все с нуля. Адаптация, можно...

Автомобильный преобразователь ±40В - Электроника
Автомобильный преобразователь ±40В Схема http://dl.dropbox.som/u/4198955/123/ap-2.png Детали ...

Подскажите по электронике для робота (Android+Arduino+etc) - Робототехника
Всем привет! Уважаемые форумчане, если не затруднит, пожалуйста подскажите по проектированию "начинки" робота. В роботе 2 двигателя по...

Макетная плата для AVR с загрузчиком типа Arduino - Электроника
Хочу замутить макетную плату для AVR с загрузчиком совместимым с Arduino с панельками под микросхемы на 28 и 40 ног. Важно составить...

10
marat_miaki
148 / 137 / 50
Регистрация: 08.04.2013
Сообщений: 549
13.12.2017, 03:12 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
По кусочкам собираем с интернета, пока освоили движение с серво+дальномер, отдельно есть варианты движения по линии, управление пультом под вопросом, слабая чувствительность, беспроводной на дисерт

Добавлено через 23 минуты
выложу что пока имею, функционал можно расширить. Надо бы еще сканирование в движении сделать, а то на выступы наскакивает. Есть по этому поводу план попробовать поставить еще инфракрасный дальномер по бокам, контроль оборотов моторов ну и т.д. как получится
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <Servo.h>
Servo myservo; 
 
int EN1 = 3;
int IN1 = 4; // Input1 подключен к выводу 4 
int IN2 = 5;
int IN3 = 6;
int IN4 = 7;
int EN2 = 11;
int echoPin = 13; 
int trigPin = 12; 
int arrDist[5] = {};
int arrTime[] = {400,250,0,250,400};
int Index     = 0;
 
#define STATE_FORWARD    0
#define STATE_RIGHT      1
#define STATE_LEFT       2
#define STATE_STOP       3
 
#define SPEED            150   // Скорость, с которой мы движемся вперёд (0-255)
// Коэффициент, задающий во сколько раз нужно затормозить одно из колёс для поворота
#define BRAKE_K          2
 
int  state = STATE_FORWARD;
unsigned long rightOnTime = 0;
unsigned long leftOnTime  = 0;
bool rightON = false;
bool leftON  = false;
 
void runForward() ;
void steerRight(int) ;
void steerLeft (int)  ;
void stopAll() ;
int triger();
void servoslow( Servo, int, int, int);  // *** Функция для управления скоростью сервопривода ***
  
void setup()
{
  pinMode (EN1, OUTPUT);
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);
  pinMode (EN2, OUTPUT);
 
 // Serial.begin (9600); 
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
 
  myservo.attach(9,700,2300); 
  delay(2000);
}
 
void loop()
{
   switch (state)  {
          case 0:  { if (triger() > 30) {  runForward(); 
                                          }
                       else {  state= STATE_STOP;  }
                       break;
          case 1: steerRight(arrTime[Index]);  break;
          case 2: steerLeft (arrTime[Index]);  break;  
          case 3: stopAll();  break;
          default: ;
       }
    }
}
 
void runForward() {
 
    digitalWrite (IN1, HIGH);
    digitalWrite (IN2, LOW); 
    digitalWrite (IN4, HIGH);
    digitalWrite (IN3, LOW); 
     // Для регулировки скорости `SPEED` может принимать значения от 0 до 255, чем болше, тем быстрее. 
    analogWrite(EN1, SPEED);
    analogWrite(EN2, SPEED);
}
 
void stopAll() {
    analogWrite(EN1, 0);
    analogWrite(EN2, 0);
 //   myservo.write(0); //можно заранее повернуть серво на 0
  //  delay(200);
    servoslow(myservo, 180, 200, 0);
    myservo.write(90);  
    delay(200);
    
}
 
  void servoslow( Servo num, int pos, int time, int start)  // *** Функция для управления скоростью сервопривода ***
{ 
  num.write(start);
  int j =  0;
  int maxi = 0;  
  for ( int i=start; i<=pos; i+=45) 
      {  num.write(i);
        delay(time);
        arrDist[j++]= triger();
        if (arrDist[j-1] > maxi) {maxi = arrDist[j-1]; Index = j-1;}
        
        }
       delay(200);
   switch (Index)  {
          case 0:
          case 1:   { state = STATE_RIGHT; rightON = true; break;}
          case 2:    state = STATE_FORWARD;  break;
          case 3:
          case 4:   { state = STATE_LEFT;  leftON  = true; break;} 
          default:   state = STATE_FORWARD;  break;
       }
    } 
 
void steerRight (int offTime) {
    
    if (rightON){rightON=false; rightOnTime =millis();}
  
    digitalWrite (IN1, HIGH);      // Меняем направление правого для быстрого поворота
    digitalWrite (IN2, LOW);     
    digitalWrite (IN3, HIGH);
    digitalWrite (IN4, LOW); 
    analogWrite (EN1, SPEED );     // analogWrite(EN1, SPEED / BRAKE_K);   // Замедляем правое колесо относительно левого,  чтобы начать поворот
    analogWrite (EN2, SPEED);
    if(millis() - rightOnTime > offTime) {   state = STATE_FORWARD;   }
 }
 
void steerLeft(int offTime)  {
 
    if (leftON){leftON=false; leftOnTime =millis();}
    digitalWrite (IN1, LOW);
    digitalWrite (IN2, HIGH); 
    digitalWrite (IN3, LOW);    // Меняем направление левого для быстрого поворота
    digitalWrite (IN4, HIGH) ; 
    analogWrite (EN1, SPEED);
    analogWrite (EN2, SPEED);    //analogWrite(EN2,SPEED / BRAKE_K);
    if(millis() - leftOnTime > offTime) {   state = STATE_FORWARD;   }
}
 
int triger()  {
    digitalWrite(trigPin, LOW); 
    delayMicroseconds(2); 
    digitalWrite(trigPin, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(trigPin, LOW); 
   return  (pulseIn(echoPin, HIGH)) / 58;
  }
1
Grey
Тутошний я
1593 / 784 / 58
Регистрация: 03.11.2009
Сообщений: 2,228
Записей в блоге: 1
14.12.2017, 15:22 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от alex_kireev Посмотреть сообщение
где Вы нашли для него код
там стоит Arduino UNO R3. большинство библиотек для него подходит.
поэтому тебе нужен код не для него, а для датчиков которые будешь подключать.
библиотеки в IDE уже есть. можно ещё скачать под нужные датчики.
в библиотеках бывает нужно настроить, например крайние положения для сервоприводов, или номера пинов.
на ютубе есть уроки про ардуино.
1
Alex Kireev
5 / 10 / 0
Регистрация: 21.11.2017
Сообщений: 108
15.12.2017, 15:26  [ТС] #4
Большое спасибо.
У меня есть не сколько сайтов про эту машину, но они на английском языке.
Они вам нужны?

Добавлено через 4 минуты
Цитата Сообщение от Grey Посмотреть сообщение
там стоит Arduino UNO R3. большинство библиотек для него подходит.
поэтому тебе нужен код не для него, а для датчиков которые будешь подключать.
библиотеки в IDE уже есть. можно ещё скачать под нужные датчики.
в библиотеках бывает нужно настроить, например крайние положения для сервоприводов, или номера пинов.
на ютубе есть уроки про ардуино.
Спасибо.
Я это знаю.
Просто я сейчас сесию сдаю и времени нет чтобы изучать ардуино, а брату купили машинку и он просил помочь её ему сделать.
0
Grey
Тутошний я
1593 / 784 / 58
Регистрация: 03.11.2009
Сообщений: 2,228
Записей в блоге: 1
15.12.2017, 20:51 #5
Цитата Сообщение от alex_kireev Посмотреть сообщение
У меня есть не сколько сайтов про эту машину, но они на английском языке.
оставь ссылки. может кому пригодиться.
а на тех сайтах готового кода нету?
и продавец при запросе ПО высылает. может он может онлайн выслать.
0
Alex Kireev
5 / 10 / 0
Регистрация: 21.11.2017
Сообщений: 108
16.12.2017, 00:29  [ТС] #6
Цитата Сообщение от Grey Посмотреть сообщение
оставь ссылки. может кому пригодиться.
а на тех сайтах готового кода нету?
и продавец при запросе ПО высылает. может он может онлайн выслать.
На некоторых есть, я сейчас историю всю просматриваю думаю завтра выложу ссылки.
Продавец не что не ответил по поводу ПО.
0
marat_miaki
148 / 137 / 50
Регистрация: 08.04.2013
Сообщений: 549
27.02.2018, 21:49 #7
Немного доработал код, добавил класс для сервопривода из "многозадачности в ардуино" (сканирует в движении) углы 45-90-135
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#include <Servo.h>
Servo myservo; 
 
int EN1 = 3;
int IN1 = 4; // Input1 подключен к выводу 4 
int IN2 = 5;
int IN3 = 6;
int IN4 = 7;
int EN2 = 11;
int echoPin = 12; 
int trigPin = 13; 
//int arrDist[5] = {};
int arrTime[] = {400,250,0,250,400};
int Index     = 0;
 
#define STATE_FORWARD    0
#define STATE_RIGHT      1
#define STATE_LEFT       2
#define STATE_STOP       3
 
#define SPEED            150   // Скорость, с которой мы движемся вперёд (0-255)
// Коэффициент, задающий во сколько раз нужно затормозить одно из колёс для поворота
#define BRAKE_K          2
 
int  state = STATE_FORWARD;
 
unsigned long rightOnTime = 0;
unsigned long leftOnTime  = 0;
bool rightON = false;
bool leftON  = false;
 
void goForward() ;
void steerRight(int) ;
void steerLeft (int)  ;
void stopAll() ;
int triger();
//void servoslow( Servo, int, int, int);  // *** Функция для управления скоростью сервопривода ***
 
class Sweeper
{
  Servo servo;              // сервопривод
  int pos = 90;             // текущее положение сервы  устанавливаем на 90
  int increment;            // увеличиваем перемещение на каждом шаге
  int updateInterval;       // промежуток времени между обновлениями
  unsigned long lastUpdate; // последнее обновление положения 
  int fromPos = 0;          // начальная точка сервы ( минимальное знач. 0)
  int toPos =180;           // конечное положение сервы ( максимальное знач. 180)
  int arrDist[5] = {};      // массив для данных дистанции
  public: 
  Sweeper(int interval)
  {
    updateInterval = interval;
    increment = 45;
  }
 
  void Attach(int pin )
  {
    servo.attach(pin, 700, 2300);
  }
 
  void Detach()
  {
    servo.detach();
  }
 
  void UpdateFW()
  {
    if (state == STATE_FORWARD){fromPos = 45; toPos =135;}
     // else {fromPos = 0; toPos =180;}
     
    if((millis() - lastUpdate) > updateInterval) // время обновлять
    {
      lastUpdate = millis();
      pos += increment;
      servo.write(pos);
      
      if (triger() < 30)  {  state= STATE_STOP;  } // обнаружено препятствие
    //  Serial.println(pos);
      
      if ((pos >= toPos) || (pos <= fromPos))       // достигли концевых значении вращения
      {
        // обратное направление
        increment = -increment;
      }
   }
 }
  void UpdateStop( )  // *** Функция для управления серво. когда остонавились ***
{ 
  servo.write(0);
  int j =  0;
  int maxi = 0;  
  for ( int i = 0; i <= 180; i += 45) 
      {  servo.write(i);
        delay(175);
        arrDist[j++]= triger();
        if (arrDist[j-1] > maxi) {maxi = arrDist[j-1]; Index = j-1;}
     
        }
       delay(100);
   
   switch (Index)  {
          case 0:
          case 1:   { state = STATE_RIGHT; rightON = true; break;}
          case 2:    state = STATE_FORWARD;  break;
          case 3:
          case 4:   { state = STATE_LEFT;  leftON  = true; break;} 
          default:   state = STATE_FORWARD;  break;
       }
       servo.write(90);
       delay(100);
    } 
};
 
Sweeper sweeper1(175);
 
void setup()
{
  pinMode (EN1, OUTPUT);
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);
  pinMode (EN2, OUTPUT);
 
 // Serial.begin (9600); 
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
 
 // myservo.attach(9,700,2300);
  sweeper1.Attach(9);
  
  delay(2000);
}
 
void loop()
{
   switch (state)  {
          case 0:  { sweeper1.UpdateFW();
                     if (triger() > 30) {  goForward(); }
                       else {  state= STATE_STOP;  }        break;
                       
          case 1: steerRight(arrTime[Index]);               break;
          
          case 2: steerLeft (arrTime[Index]);               break;  
          
          case 3: stopAll();                                break;
          
          default: ;
       }
    }
}
 
void goForward() {
 
    digitalWrite (IN1, LOW);
    digitalWrite (IN2, HIGH); 
    digitalWrite (IN4, LOW);
    digitalWrite (IN3, HIGH); 
     // Для регулировки скорости `SPEED` может принимать значения от 0 до 255, чем болше, тем быстрее. 
    analogWrite(EN1, SPEED);
    analogWrite(EN2, SPEED);
}
 
void stopAll() {
    analogWrite(EN1, 0);
    analogWrite(EN2, 0);
   // myservo.write(0); //можно заранее повернуть серво на 0
    delay(200);
   // servoslow(myservo, 180, 200, 0);
   // myservo.write(90);  
   sweeper1.UpdateStop();
    delay(200);
    
}
 
void steerRight (int offTime) {
    
    if (rightON){rightON=false; rightOnTime =millis();}
  
    digitalWrite (IN2, HIGH);      
    digitalWrite (IN1, LOW);     // Меняем направление правого для быстрого поворота
    digitalWrite (IN4, HIGH); 
    digitalWrite (IN3, LOW); 
    
    analogWrite (EN1, SPEED );     // analogWrite(EN1, SPEED / BRAKE_K);   // Замедляем правое колесо относительно левого,  чтобы начать поворот
    analogWrite (EN2, SPEED);
    if(millis() - rightOnTime > offTime) {   state = STATE_FORWARD;   }
 }
 
void steerLeft(int offTime)  {
 
    if (leftON){leftON=false; leftOnTime =millis();}
    digitalWrite (IN2, LOW);
    digitalWrite (IN1, HIGH);    
    digitalWrite (IN4, LOW);    // Меняем направление левого для быстрого поворота
    digitalWrite (IN3, HIGH) ; 
 
    analogWrite (EN1, SPEED);
    analogWrite (EN2, SPEED);    //analogWrite(EN2,SPEED / BRAKE_K);
    if(millis() - leftOnTime > offTime) {   state = STATE_FORWARD;   }
}
 
int triger()  {
    digitalWrite(trigPin, LOW); 
    delayMicroseconds(2); 
    digitalWrite(trigPin, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(trigPin, LOW); 
   return  (pulseIn(echoPin, HIGH)) / 58;
  }
0
venom877
0 / 0 / 0
Регистрация: 06.05.2018
Сообщений: 18
14.06.2018, 06:13 #8
я прошу прощения, но почему при использовании кода у меня не работает?( все подключил по схеме, но ехать не хочет
0
marat_miaki
148 / 137 / 50
Регистрация: 08.04.2013
Сообщений: 549
14.06.2018, 19:35 #9
Цитата Сообщение от venom877 Посмотреть сообщение
почему при использовании кода у меня не работает?
Чтобы ответить надо для начала ваш код, и каким драйвером пользуетесь, схема соединения тоже бы не помешала

Добавлено через 1 минуту
У вас комплект тот же что с первого поста?

Добавлено через 6 минут
Питание драйвера какое, откуда?

Добавлено через 11 минут
У меня драйвер работает на 7.4 V ( 2 аккумулятора по 3.7 v) + подсоединен на WMS
0
venom877
0 / 0 / 0
Регистрация: 06.05.2018
Сообщений: 18
14.06.2018, 22:41 #10
Цитата Сообщение от marat_miaki Посмотреть сообщение
Чтобы ответить надо для начала ваш код, и каким драйвером пользуетесь, схема соединения тоже бы не помешала

Добавлено через 1 минуту
У вас комплект тот же что с первого поста?

Добавлено через 6 минут
Питание драйвера какое, откуда?

Добавлено через 11 минут
У меня драйвер работает на 7.4 V ( 2 аккумулятора по 3.7 v) + подсоединен на WMS
Драйвер у меня WB291111. Код тот, что самый последний. Питание - 4 АА по 1.2 прямо на драйвер, земля uno, на uno от USB.
0
Миниатюры
Автомобильный комплект для Arduino  
marat_miaki
148 / 137 / 50
Регистрация: 08.04.2013
Сообщений: 549
15.06.2018, 07:13 #11
Конечно немного смущает питание 4 мя АА по 1.2 v, напряжение будет всего 4,8 v. Вернее всего кэйс это для батареек по 1.5 v. итого будет 6v. И еще на драйвере есть перемычка, Перемычка «5V_EN» — оставляем ее, если «драйвер» будет питаться от напряжения питания моторов. Если хотите «драйвер» питать 5 вольтами от ARDUINO, то уберите данную перемычку и подсоедините к драйверу 5 вольт от ARDUINO. У меня перемычка осталась на плате.
Питание прямо на драйвер это понятно, но там можно как я и говорил подсоединять + на 2 разбема , один из них 5 v, другой wms для подсоединения напряжения более 5 v. И про перемычку 5V_EN не забываем.
Для начала стоит только поиграть с драйвером и ардуино и питать драйвер от ардуины 5v. Эсли все нормально можно продолжить.
C++
1
2
3
4
5
6
int EN1 = 3;
int IN1 = 4; // Input1 подключен к выводу 4 
int IN2 = 5;
int IN3 = 6;
int IN4 = 7;
int EN2 = 11;
Этот участок кода надеюсь понятен.

Добавлено через 7 минут
В принципе это и есть весь код отвечающий за движение.
Не забыть отдельно протестировать дальномер. Я вот не знаю не рабочий дальномер какие данные выдает, если около 0
то факт движения вперед не будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void loop()
{
   switch (state)  {
          case 0:  { sweeper1.UpdateFW();
                     if (triger() > 30) {  goForward(); }  // если ультрозвуковой дальномер не работает робот не поедет
 
                       else {  state= STATE_STOP;  }        break;
                       
          case 1: steerRight(arrTime[Index]);               break;
          
          case 2: steerLeft (arrTime[Index]);               break;  
          
          case 3: stopAll();                                break;
          
          default: ;
       }
    }
}
Добавлено через 6 минут
C++
1
2
3
4
5
6
int echoPin = 12; 
int trigPin = 13;
 
setup()
 pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);
В моем случае дальномер подсоединен так, можете свои пины прописать
0
15.06.2018, 07:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2018, 07:13
Привет! Вот еще темы с ответами:

Автомобильный прикуриватель вместо паяльного фена - Электроника
Автомобильный двенадцативольтовый прикуриватель отлично паяет BGA и вообще SMD. Я опасался, что он будет давать кольцевую зону...

Комплект министанков от HobbyKing - Электроника
Интересная вещь: http://www.hobbyking.som/hobbyking/store/catalog/6-in-1.jpg Продается: тут:...

Автомобильный 3G/ 4G комплект - Wi-Fi
Здравствуйте, форумчане. У меня на работе начальник, часто в разъездах на машине. Попросил разузнать про автомобильные антенны улучшающие...

Arduino uno + arduino ethernet + delphi для чайников - Arduino
Доброго времени суток. У меня такая задача нужно реализовать программу на Delphi которая будеуправлять платой, не знаю с какого бока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru