RSS блога
Подписка
Набор-конструктор для сборки "умной" машинки на Arduino.
- Цена: 52.19 $. На момент покупки была выше.
- Перейти в магазин
Как-то раз возникло у меня желание на практике узнать что такое Arduino и был заказан данный набор. Он предназначен для сборки машинки с ультразвуковым сенсором, которая объезжает препятствия.
Покупать можно, хотя набор и не без недостатков.
Подробнее под катом.
Да, тем кто не в курсе, что такое Arduino, рекомендую почитать сдесь, а также заглянуть сюда.
В квартире мне автоматизировать нечего, а сваять что-нибудь интересное хотелось, поэтому заказал этот конструктор.
Это не самое выгодное предложение на Али, но самое недорогое, которое было на тот момент с возможностью доставки почтой Сингапура(быстрее доставка).
На пластиковые площадки наклеена бумага, чтобы они не царапались при транспортировке.
В комплекте присутствовало всё, что было указано в описании лота:
— два мотора с редукторами,
— пара колес,
— ролик (типа мебельного, только маленький),
— две пластиковых площадки,
— сервопривод,
— поворотный кронштейн для крепления датчика расстояния,
— набор латунных стоек и винтиков-гаечек,
— ультразвуковой датчик расстояния,
— электронная плата управления двигателями,
— маленькая макетная плата,
— держатель для 6 батарей формата АА,
— держатель для батареи типа «Крона»,
— плата с микроконтроллером, Arduino-совместимая Funduino. Версия Duemilanove с небольшими доработками.
— интерфейсный USB-кабель для подключения к ПК,
— комплект соединительных проводков типа мама-мама.
Вот полезное содержимое посылки, нет только поломанной верхней площадки:
При сборке мне дополнительно понадобилось около десятка проводков типа папа-мама.
В глубине души я надеялся, что добрый китаец положит в коробочку хотя бы инструкцию по сборке, или может даже диск с программным кодом для контроллера, но мои надежды не оправдались.
Машинка изначально была частично собрана, верхняя и нижняя площадки были скреплены между собой с помощью стоек и винтиков, были установлены редукторы с двигателями.
Качество изготовления электронных компонентов особых нареканий не вызывает, качество скажем так «хорошее китайское».
А вот качество изготовления пластиковых площадок могло бы быть получше — размечены кривовато. Есть смещение крепежных отверстий одной площадки относительно другой.
Кроме того стойки для крепления площадок между собой были разной длины.
Идущий в комплекте кронштейн для крепления ультразвукового датчика не предназначен для крепления этого самого датчика, он предназначен для использования вместе с парой сервоприводов для крепления камеры. Не беда — применим стальную проволоку и все будет ОК:
Также пришлось подрезать-подточить пластиковую крестовину крепления сервопривода (думаю сервопривод тоже должен быть другой модели).
Но все эти недостатки не мешают собрать вполне работоспособное устройство.
Идущие в комплекте держатели для батареек я использовать не стал — запитал всю схему от пары литиевых аккумуляторов типа 18650. Также добавил в схему вольтметр и кнопку запуска программы.
Вот что получилось в итоге:
Поскольку, как я уже упоминал, продавец не вложил никаких инструкций, пришлось всю информацию искать в интернете самому. Готовые библиотеки для управления сервоприводом и УЗ-датчиком я не использовал, все писал сам. Вот немного ссылок, которые могут помочь разобраться в работе этих устройств:
Плата управления двигателями.
УЗ-сенсор.
Сервопривод.
Алгоритм работы машинки простой:
— едем вперед, УЗ-сенсор отслеживает расстояние до препятствия,
— если препятствие близко останавливаемся и отъезжаем назад,
— вертим УЗ-сенсором по сторонам и определяем где до препятствий наибольшее расстояние,
— разворачиваемся в ту сторону и едем,
— все повторяется.
Несмотря на то, что после сборки остались лишние винтики все работает. Вот видео с демонстрацией работы устройства:
Видно, что машинка не очень хорошо определяет наличие препятствий, особенно если плоскость препятствия находится не перпендикулярно направлению движения машинки. Это связано с тем, что во-первых звук может отражаться от препятствия и сенсор неверно определяет расстояние до предмета, во-вторых у сенсора достаточно узкий рабочий угол — 15 градусов. Также звук может просто поглощаться некоторыми предметами, например мягкими игрушками. Частично эту проблему можно решить установкой спереди машинки дополнительных датчиков, направленных под углом к направлению движения.
В общем игрушкой я доволен, мозг размял и вообще.
Если вдруг кто-то хочет приобщить своих чад к занятию электроникой, думаю такой конструктор может быть полезен.
Ссылка на скетч (программу для контроллера) — вот.
Благодарю за внимание.
Покупать можно, хотя набор и не без недостатков.
Подробнее под катом.
Да, тем кто не в курсе, что такое Arduino, рекомендую почитать сдесь, а также заглянуть сюда.
В квартире мне автоматизировать нечего, а сваять что-нибудь интересное хотелось, поэтому заказал этот конструктор.
Это не самое выгодное предложение на Али, но самое недорогое, которое было на тот момент с возможностью доставки почтой Сингапура(быстрее доставка).
О нелегкой судьбе посылки
Оформлен заказ был 22.07.2013г., прибыло в почтовое отделение 14.08.2013г.
Это моя первая посылка, которая пришла в таком состоянии:
Хотя продавец не поскупился на «пупырку», это не спасло некоторые детали воздействия почты России — сломалась одна из пластиковых площадок для крепления электроники:
Ну не беда, клей в доме есть.
Это моя первая посылка, которая пришла в таком состоянии:
Хотя продавец не поскупился на «пупырку», это не спасло некоторые детали воздействия почты России — сломалась одна из пластиковых площадок для крепления электроники:
Ну не беда, клей в доме есть.
На пластиковые площадки наклеена бумага, чтобы они не царапались при транспортировке.
В комплекте присутствовало всё, что было указано в описании лота:
— два мотора с редукторами,
— пара колес,
— ролик (типа мебельного, только маленький),
— две пластиковых площадки,
— сервопривод,
— поворотный кронштейн для крепления датчика расстояния,
— набор латунных стоек и винтиков-гаечек,
— ультразвуковой датчик расстояния,
— электронная плата управления двигателями,
— маленькая макетная плата,
— держатель для 6 батарей формата АА,
— держатель для батареи типа «Крона»,
— плата с микроконтроллером, Arduino-совместимая Funduino. Версия Duemilanove с небольшими доработками.
— интерфейсный USB-кабель для подключения к ПК,
— комплект соединительных проводков типа мама-мама.
Вот полезное содержимое посылки, нет только поломанной верхней площадки:
При сборке мне дополнительно понадобилось около десятка проводков типа папа-мама.
В глубине души я надеялся, что добрый китаец положит в коробочку хотя бы инструкцию по сборке, или может даже диск с программным кодом для контроллера, но мои надежды не оправдались.
Машинка изначально была частично собрана, верхняя и нижняя площадки были скреплены между собой с помощью стоек и винтиков, были установлены редукторы с двигателями.
Качество изготовления электронных компонентов особых нареканий не вызывает, качество скажем так «хорошее китайское».
А вот качество изготовления пластиковых площадок могло бы быть получше — размечены кривовато. Есть смещение крепежных отверстий одной площадки относительно другой.
Кроме того стойки для крепления площадок между собой были разной длины.
Идущий в комплекте кронштейн для крепления ультразвукового датчика не предназначен для крепления этого самого датчика, он предназначен для использования вместе с парой сервоприводов для крепления камеры. Не беда — применим стальную проволоку и все будет ОК:
Также пришлось подрезать-подточить пластиковую крестовину крепления сервопривода (думаю сервопривод тоже должен быть другой модели).
Но все эти недостатки не мешают собрать вполне работоспособное устройство.
Идущие в комплекте держатели для батареек я использовать не стал — запитал всю схему от пары литиевых аккумуляторов типа 18650. Также добавил в схему вольтметр и кнопку запуска программы.
Вот что получилось в итоге:
Еще немного фото
Поскольку, как я уже упоминал, продавец не вложил никаких инструкций, пришлось всю информацию искать в интернете самому. Готовые библиотеки для управления сервоприводом и УЗ-датчиком я не использовал, все писал сам. Вот немного ссылок, которые могут помочь разобраться в работе этих устройств:
Плата управления двигателями.
УЗ-сенсор.
Сервопривод.
Алгоритм работы машинки простой:
— едем вперед, УЗ-сенсор отслеживает расстояние до препятствия,
— если препятствие близко останавливаемся и отъезжаем назад,
— вертим УЗ-сенсором по сторонам и определяем где до препятствий наибольшее расстояние,
— разворачиваемся в ту сторону и едем,
— все повторяется.
Несмотря на то, что после сборки остались лишние винтики все работает. Вот видео с демонстрацией работы устройства:
Видно, что машинка не очень хорошо определяет наличие препятствий, особенно если плоскость препятствия находится не перпендикулярно направлению движения машинки. Это связано с тем, что во-первых звук может отражаться от препятствия и сенсор неверно определяет расстояние до предмета, во-вторых у сенсора достаточно узкий рабочий угол — 15 градусов. Также звук может просто поглощаться некоторыми предметами, например мягкими игрушками. Частично эту проблему можно решить установкой спереди машинки дополнительных датчиков, направленных под углом к направлению движения.
В общем игрушкой я доволен, мозг размял и вообще.
Если вдруг кто-то хочет приобщить своих чад к занятию электроникой, думаю такой конструктор может быть полезен.
Ссылка на скетч (программу для контроллера) — вот.
Благодарю за внимание.
Самые обсуждаемые обзоры
+77 |
3935
147
|
+57 |
4112
73
|
Вспомнилось почему-то.
все хотел его взять, но взял лего
Но из виш листа еще не удаляю
Хотя в описании, по моей ссылке, значиться «2 x Speed Encoder», но как это работает не понимаю, может отдельно надо оптический датчик крепить?
Одной деталью на Ebay:
ebay.com/itm/230982155813 :)
некоторые варианты от DX:
dx.com/p/hc-020k-double-speed-measuring-module-w-photoelectric-encoders-black-green-2-pcs-219416
dx.com/ru/p/smart-car-speed-detecting-sensor-module-for-arduino-149108
dx.com/p/speed-detection-encoder-pcb-module-for-arduino-green-152665
А на aliexpress, есть полная(для 2-х сервоприводов) версия кронштейна https://aliexpress.com/item/item/Freeshipping-FPV-aerial-camera-micro-nylon-plastic-FPV-biaxial-servo-pan-tilt/1065792469.html за 3,85 (в данной комплектации servo в комплект не входят, в оригинале называется FPV aerial camera micro nylon plastic FPV biaxial servo pan-tilt, встречается еще и на ebay, причем существует и в более дорогой комплектации, включающей 2 servo)
Или вот (для экономии энергии): постоянно мониторим только прямолинейное направление, если появляется препятствие, то смещаемся, к примеру, градусов на 30 в обе стороны. Где расстояние больше, туда и правим. Если одинаково или разница не значительна либо еще чего, то увеличиваем угол, скажем уже 60 градусов в обе стороны и т.д.
int EchoPin=10; //Echo-пин на УЗ-датчике
int TrigPin=9; //Trig-пин на УЗ-датчике
float DIST=0; //Дистанция
int CRS=0; //Курс (угол поворота машинки).
int ServoPin=11; //Сигнальный контакт сервопривода
int POS=0; //Необходимое значение угла поворота.
int OLDPOS=0; //Предыдущее значение угла поворота.
//далее идет назначение номеров выводов в соответствии с
//подключением к плате управления двигателями
int ENA=5;
int IN1=6;
int IN2=7;
int ENB=3;
int IN3=4;
int IN4=2;
//установка максимального и минимального значения ШИМ
//для ограничения напряжения питания двигателей.
//минимальные значения подбираем опытным путем,
//необходимо чтобы при этих значениях машинка смогла двигаться
int MinPWML=0;
int MinPWMR=0;
int MaxPWML=150;
int MaxPWMR=125;
int CD[9];
int DT=0;
void setup()
{
pinMode(SlPin, INPUT);
digitalWrite(SlPin, HIGH);
pinMode(13, OUTPUT);
pinMode(ServoPin, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
digitalWrite(EchoPin, LOW);
}
void loop()
{//Проверка нажатия кнопки исполнения алгоритма.
if(digitalRead(SlPin))
{
// — // Начало кода основной программы.
// — DIST=sonar();
//Serial.print(«DIST = „);
//Serial.println(DIST);
if (DIST<20){
roll('stp');
roll('bck');
delay(200);
roll('stp');
CRS=course();
rotate(CRS);
ServoPos(90);
}else{roll('fwd');;}
// — // Конец кода основной программы.
// — }else{
OLDPOS=0;
roll('stp');
ServoPos(90);
}
}
//----------------------------------------------
// Процедуры управления движением конструкции.
//----------------------------------------------
void steer(int l, int r) //установка направления вращения колес и скорости
{
//задаем направление движения колес
if(l>0)
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}else{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}
if(r>0)
{
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}else{
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
//рассчитываем абсолютные значения параметров скорости
l=abs(l);
r=abs®;
//ограничиваем значения входных параметров
if(l>254){l=254;}
if(r>254){r=254;}
//подгоняем значения входных параметров под нужный диапазон
l=map(l, 0, 254, MinPWML, MaxPWML);
r=map(r, 0, 254, MinPWMR, MaxPWMR);
// ограничиваем значения входных параметров, иначе при их низких значениях
// на двигатели будет подаваться ток меньше, чем требуется для вращения колес.
if(l<=MinPWML){l=0;}
if(r<=MinPWMR){r=0;}
analogWrite(ENA, l);
analogWrite(ENB, r);
}
void roll(char c) //указываем направление движения.
{
switch©
{
case 'fwd':
steer(254, 254);
break;
case 'bck':
steer(-254, -254);
break;
case 'stp':
steer(0, 0);
break;
}
}
void rotate(int a) //поворот конструкции на заданный угол
{
int t=0;
int s=254; //скорость вращения колес.
if (a<90)
{
t=(90-a)*4,16; //Число 4,16 — время поворота конструкции на 1 градус при данных аргументах steer(), подобрано опытным путем.
steer(-s, s);
delay(t);
steer(0, 0);
}else{
t=(a-90)*4,16;
steer(s, -s);
delay(t);
steer(0, 0);
}
}
//--------------------------------------
// Процедуры управления сервоприводом.
//--------------------------------------
void ServoPos(int angle)
{
//Функция выставления движка сервопривода на заданный угол.
//Параметр-значение угла.
int PD; //длительность управляющего импульса
PD=2560-(angle)*11,11;
//Производим рассчет количества циклов позиционирования.
float DAN; //Разность предыдующего и устанавливаемого значений угла.
DAN=OLDPOS-angle;
DAN=abs(DAN);
OLDPOS=angle;
int CP; //Количество циклов позиционирования
CP=DAN/1.8; //Оптимальное значение 1.8. Подбирается опытным путем.
//посылаем управляющие импульсы
//Обеспечиваем сервопривод работой в зависимости
//от количаства циклов позиционирования.
for(int i=0; i<CP; i++) //i=100 for 180 degree
{
digitalWrite(ServoPin, HIGH);
delayMicroseconds(PD);
digitalWrite(ServoPin, LOW);
delayMicroseconds(23000);
}
}
//------------------------------------------
// Процедуры работы с датчиком расстояния.
//------------------------------------------
float sonar() //Измерение расстояния до обьекта.
{
int cnt=0; //Значение счетчика количества запросов. 2 запроса.
float c1=0; //Переменные для хранения результатов замеров.
float c2=0;
repson:
cnt++;
//Посылаем стартовый импульс 10 мкс.
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
//Принимаем ответ
float c=0;
for(long t=0; t<40000; t=t+10)
{
if(digitalRead(EchoPin)){c=c+10;}
delayMicroseconds(10);
}
if(cnt==1){c1=c; goto repson;}
if(cnt==2){c2=c;}
if(abs(c1-c2)>35000){c=38000;}else{c=(c1+c2)/2;}
//Рассчитываем расстояние.
float d=0;
d=2*c/58;
return d;
}
int course()
{
int d=0;
int dt=0;
int cs=0;
int p=0;
for (p=0; p<7; p++)
{
ServoPos(p*30);
dt=sonar();
if (dt>d){d=dt; cs=p*30;}
}
return cs;
}
У меня во такой набор https://aliexpress.com/item/snapshot/256403144.html
Продублировал на почту.