RSS блога
Подписка
Очередная Arduino машинка + сборка простейшего варианта
- Цена: $9.50
- Перейти в магазин
Купил зарядку для ума в виде популярного конструктора arduino и понял одну простую вещь: не все там так гладко, как хочется. Одна покупка тянет за собой другую и так далее и далее, пока сам себе не стукнешь по рукам и не скажешь хватит. Поэтому, чтобы сэкономить вам время, нервы и финансы хочу поделиться опытом сборки простейшей машинки, которая будет объезжать препятствия.
2. Драйвер двигателя, например L9110s=1,22$
3. Датчик, который будет определять препятствие, я остановился на самом популярном и дешевом варианте дальномере HC-SR04=0,94$
Однако, никто не мешает воспользоваться более дорогими аналогами или чем-то подобным
4. Крепление датчика,синий, не самый лучший, но жизнеспособный вариант. =1,08$
В качестве аналогов: прозрачный, еще существует неуловимый желтый, наиболее прошаренный, но ссылку так и не нашел. Кто будет искать на вид он похож на синий, но имеет нормальные отверстия под винт м3 и 4 шурупа для крепления дальномера.
5. Плата arduino, которая будет обрабатывать данные с датчика и выдавать решение, куда ехать дальше. Остановился на UNO, как на самой удобной для моделирования на «лету» =5.88$
Эта плата выбрана из-за возможности заменить микроконтроллер в случае фатальной неудачи, так что можно купить версию в два раза дешевле
Итого я потратил примерно 19$ на самое основное
Однако дальше больше:
набор латунных стоек для удобства сборки =8,90$, провода =7,10$, дюпон разъемы (покупал давно, дешевле и для других целей, ссылка для понимания о чем речь),клищи для обжимки разъемов =13,21$, повербанк=1,15$ + по мелочи винты, шайбы, отвертки, аккумуляторы…
Парочка фото на закуску
Провода и терминалы
Стойки, болты, гайки, шайбы
Первым делом сверлим в синем кронштейне отверстие под болт м3, потому как иного варианта крепления я не нашел
на термоклей сажаем дальномер.
Собираем шасси и крепим наш датчик. Чтобы он располагался как можно ниже, пришлось закрепить его не сразу на шасси, а с помощью стойки опустить на несколько сантиметров вниз. Нижний край кронштейна получился на одном уровне с моторами.
Крепим драйвер двигателя, подключаем моторы.
Приспосабливаем повербанк вместо батарейного отсека.
Для этого делаем два отверстия под винты м3 для крепления на шасси, припаиваем два проводка "+" и "-" к USB на плате и выводим провода через еще одно просверленное отверстие. К сожалению у меня не было под руками подходящего выключателя, так что эту функцию будет выполнять отключение проводков от ардуины. Далее крепим это дело на шасси.
Ставим ардуину, подключаем провода
Удобно, что заряжается аккумулятор через повербанк.
Вставляем аккумулятор прошиваем (воспользовался средой atmel studio 6), переворачиваем, чтобы не убежала, и тестируем, что получилось.
На первый взгляд все норм, если появляется препятствие машинка отворачивает в сторону, проверяет наличие препятствия и в случае повторного обнаружения поворачивает в другую сторону. Что получилось на практике: препятствия обнаруживает на ура, поворачивает неплохо, опытным путем поставил нужные задержки, но практически не способна ехать по прямой из-за заднего направляющего колеса. Скорее всего это мне попался такой «тугой» вариант, но из-за этого машинка всегда едет по диагонали, мелочь, а неприятно.
P.S. Проблему движения по дуге решала замена моторов, спасибо за совет. При покупке шасси не спешите подтверждать, сначала испытайте его в деле. Больше косяков нет, все работает.
мой первый обзор ^_^
Вот похожий обзор на готовый набор для сборки, а не с злостный хэндмэйд со сверлением, пайкой и термоклеем.
Что нам понадобится:
1. Шасси для робота, я взял это =9,50$2. Драйвер двигателя, например L9110s=1,22$
3. Датчик, который будет определять препятствие, я остановился на самом популярном и дешевом варианте дальномере HC-SR04=0,94$
Однако, никто не мешает воспользоваться более дорогими аналогами или чем-то подобным
4. Крепление датчика,синий, не самый лучший, но жизнеспособный вариант. =1,08$
В качестве аналогов: прозрачный, еще существует неуловимый желтый, наиболее прошаренный, но ссылку так и не нашел. Кто будет искать на вид он похож на синий, но имеет нормальные отверстия под винт м3 и 4 шурупа для крепления дальномера.
5. Плата arduino, которая будет обрабатывать данные с датчика и выдавать решение, куда ехать дальше. Остановился на UNO, как на самой удобной для моделирования на «лету» =5.88$
Эта плата выбрана из-за возможности заменить микроконтроллер в случае фатальной неудачи, так что можно купить версию в два раза дешевле
Итого я потратил примерно 19$ на самое основное
Однако дальше больше:
набор латунных стоек для удобства сборки =8,90$, провода =7,10$, дюпон разъемы (покупал давно, дешевле и для других целей, ссылка для понимания о чем речь),клищи для обжимки разъемов =13,21$, повербанк=1,15$ + по мелочи винты, шайбы, отвертки, аккумуляторы…
!!! терминалы, разъемы, клещи можно заменить набором проводов
вышеперечисленное мне понадобится позже и не раз, не обязательно так разгонятьсяПарочка фото на закуску
Провода и терминалы
Стойки, болты, гайки, шайбы
Сборка
Переходим к самому интересному — к созданию Франкенштейна!Первым делом сверлим в синем кронштейне отверстие под болт м3, потому как иного варианта крепления я не нашел
на термоклей сажаем дальномер.
Собираем шасси и крепим наш датчик. Чтобы он располагался как можно ниже, пришлось закрепить его не сразу на шасси, а с помощью стойки опустить на несколько сантиметров вниз. Нижний край кронштейна получился на одном уровне с моторами.
Крепим драйвер двигателя, подключаем моторы.
Приспосабливаем повербанк вместо батарейного отсека.
Ставим ардуину, подключаем провода
Удобно, что заряжается аккумулятор через повербанк.
Вставляем аккумулятор прошиваем (воспользовался средой atmel studio 6), переворачиваем, чтобы не убежала, и тестируем, что получилось.
На первый взгляд все норм, если появляется препятствие машинка отворачивает в сторону, проверяет наличие препятствия и в случае повторного обнаружения поворачивает в другую сторону. Что получилось на практике: препятствия обнаруживает на ура, поворачивает неплохо, опытным путем поставил нужные задержки, но практически не способна ехать по прямой из-за заднего направляющего колеса. Скорее всего это мне попался такой «тугой» вариант, но из-за этого машинка всегда едет по диагонали, мелочь, а неприятно.
Подведем итоги
Для начала, тем, кто решит делать что-то подобное, стоит обратить внимание на шасси с четырьмя моторами. Такой шаг, в теории, исключит вероятность движения по дуге, но может добавить головной боли при подборе драйвера двигателя. Но не спешите ломать голову, можно оставить этот, все должно отлично работать, по токам проходит впритык — два мотора на канал. А вот однобаночного повербанка не хватит точно. На мой взгляд это уже повод рискнуть. Так же придется покупать шайбы, т.к. при креплении к пластмассе могут быть неприятные вещи. Еще было бы отлично разделить питание ардуины и моторов, либо воспользоваться стабилизатором, на худой конец впаять конденсатор большой емкости, но это для истинных ценителей, у меня работает и так. На практике я уложился в цену примерно 2000 руб, можно было и дешевле, но это была моя зарядка для ума и первый опыт в программировании (для чего собственно все и затевалось), особо экономить не стал. Появится время прикручу радиоуправление и выключатель.P.S. Проблему движения по дуге решала замена моторов, спасибо за совет. При покупке шасси не спешите подтверждать, сначала испытайте его в деле. Больше косяков нет, все работает.
мой первый обзор ^_^
Вот похожий обзор на готовый набор для сборки, а не с злостный хэндмэйд со сверлением, пайкой и термоклеем.
Самые обсуждаемые обзоры
+57 |
3721
97
|
Можете добавить в обзор код проекта?
Насчёт v.2.0 — это вряд ли, поскольку я занят другим проектом, где не задействовано ничего из комплектующих из вашего обзора, кроме самой Ардуино.
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>
//состояние измерения
#define START 0 //запуск
#define MEAS 1 //в процессе
#define END 2 //окончено
unsigned int i;
volatile int status=0;
volatile unsigned int timer;
unsigned int sm=0,sm1=0,sm2=0;
void preset()
{
DDRD = 0b11111000;
PORTD = 0x00;
//настройка внешнего прерывния INT0 на срабатывание по обоим фронтам
MCUCR |= (0<<ISC01)|(1<<ISC00);
//разрешаем внешнее прерывание INT0
GICR |= (1<<INT0);
//настройка таймера 1
TCCR1B = (0<<CS12)|(1<<CS11)|(0<<CS10); //предделитель 8
}
void start()
{
status = START;
//генерируем импульс >10 мкс на входе trig
PORTD |= _BV(PD3);
_delay_us( 15 );
PORTD &= ~_BV(PD3);
}
//обработка прерывания INT0
ISR (INT0_vect)
{
//проверяем уровень сигнала PD2(ECHO)
if( PIND & _BV(2))
{ //PD2=1 передний фронт — сбрасываем в 0 таймер
TCNT1 = 0;
status = MEAS;
}
else
{ //PD2=0 задний фронт — конец измерения, запоминаем значение таймера
timer = TCNT1;
status = END;
_delay_ms( 50 );
}
}
void ostanovka()
{
PORTD &= ~_BV(PD4); // установить «0» на линии 0 порта
PORTD &= ~_BV(PD5); // установить «0» на линии 1 порта
PORTD &= ~_BV(PD6); // установить «0» на линии 2 порта
PORTD &= ~_BV(PD7); // установить «0» на линии 3 порта
}
void forward()
{
PORTD |= _BV(PD5); // установить «1» на линии 0 порта
PORTD &= ~_BV(PD4); // установить «0» на линии 1 порта
PORTD |= _BV(PD7); // установить «1» на линии 2 порта
PORTD &= ~_BV(PD6); // установить «0» на линии 3 порта
}
void back()
{
PORTD &= ~_BV(PD5); // установить «0» на линии 0 порта
PORTD |= _BV(PD4); // установить «1» на линии 1 порта
PORTD &= ~_BV(PD7); // установить «0» на линии 2 порта
PORTD |= _BV(PD6); // установить «1» на линии 3 порта
}
void left()
{
PORTD &= ~_BV(PC5); // установить «0» на линии 2 порта
PORTD |= _BV(PC4); // установить «1» на линии 3 порта
}
void right()
{
PORTD &= ~_BV(PD7); // установить «0» на линии 0
PORTD |= _BV(PC6); // установить «1» на линии 1
}
void izmerenie()
{
start();
while (status != END) //ожидание конца измерения
{ }
}
int main(void)
{
preset();
forward();
while(1)
{
sei();
izmerenie();
if (timer<1680)
{
ostanovka();
_delay_ms(500);
left();
_delay_ms(300);
ostanovka();
_delay_ms(500);
izmerenie();
if (timer>1680)
{
forward();
}
else
{
ostanovka();
_delay_ms(100);
right();
_delay_ms(600);
ostanovka();
_delay_ms(500);
izmerenie();
}
}
else
{
forward();
}
}
}
А шасси действительно не фонтан, приехало с некомплектом винтов, пришлось докупать, хоть продавец и выслал недостающее, после сборки выяснилось, что оно еще и ездит по дуге… В общем накололся с шасси, но для первого блина потянет.
А повороты осуществлять с дополнительным вращением второго колеса в обратном направлении, если конечно это легко реализовать.
banggood.com/4Pcs-DIY-Car-Model-TT-Motor-Encoder-Wheel-p-979886.html
Следующим планирую все таки начать ардуино. Какую взять для первых потех? Сейчас осваиваю мегу8.
Для меня платформа ардуино стала именно базой для обучения, дальше буду пытаться разводить платы. В качестве дополнения советую обратить внимание на датчики под ардуино, ничего запредельного в них нет, все микросхемы можно найти на том же алиэкспрессе, схемы в интернете. Следовательно, после покупки готовых модулей и отладки программы, всегда можно сделать и собрать свой компактный вариант. (если есть опыт монтажа смд компонентов, qfp корпус уже не каждый запояет) Вопрос в желании и удобстве, каждому свое.
Из похожего набора, как у любезного автора данной статьи.