Это кратчайшая история времени превращения робота-газонокосилки в DIY снегоуборщик с управлением по Bluetooth с Android телефона.
![](https://habrastorage.org/r/w780q1/files/4c1/71e/0f5/4c171e0f55984247bdbbbfbcd2ccbfe6.jpg)
Это уже третий вариант снегоуборщика. Первый вариант я сделал из боевого робота. Второй вариант из газонокосилки, которую я готовлю к конкурсу. Видео с краткой презентацией этих «изделий» уже было на Geektimes, так же в спойлере внизу поста.
Текущая конструкция робота очень простая. Верхний слой снега снимается скребком. Нижний слой выбрасывается из-под снегоуборщика вбок. Силовым агрегатом служит двигатель внутреннего сгорания от ручной газонокосилки мощностью 0.9 л.с. Ходовые двигатели — это мотор-редукторы от стеклоочистителей ВАЗ. ДВС крутит винт. Воздушный поток и механическое воздействие винта поднимает снег с поверхности и по воздуховоду отбрасывает в сторону. Юбка вокруг снегоуборщика не дает снегу разлетаться в стороны. Шурупованная резина существенно улучшает проходимость агрегата.
![](https://habrastorage.org/r/w780q1/files/eb8/cab/1cb/eb8cab1cba754753927306a6dcc26c3f.jpg)
Управлением по Bluetooth с Android телефона. Arduino nano+Monster Motor Shield+Bluetooth HC-06
![](https://habrastorage.org/r/w780q1/files/996/8ee/a11/9968eea1127648d089d41e45fef995eb.jpg)
Bluetooth HC-06 работает на 3.3В, т.е. необходимо для правильной работы сделать преобразование логических уровней. Без этого схема будет работать, но могут быть проблемы.
![](https://habrastorage.org/r/w780q1/files/ac8/7c0/6f5/ac87c06f59e444fd90a2f96c93d7e100.jpg)
По поводу Monster Motor Shield много спорных вопросов, кто-то утверждал, что большой процент брака. Мне данная плата очень нравится, потому что она держит ток до 30А.
Для получения данных от Bluetooth HC-06 я использовал Software Serial для того чтобы оставить возможность отладки через терминал по аппаратному Serial port. Это, в частности, понадобилось чтобы отслеживать какие данные мы получаем от Arduino. В простейшем скетче проверяем полученный символ по Bluetooth и включаем драйвер двигателей.
На Google Play огромное количество готовых приложений для удаленного управления. Из всех больше всего мне понравилось это приложение.
![](https://habrastorage.org/files/195/5ab/03d/1955ab03d7d04a88ab7c0c5dc4b9b9a6.gif)
Интерфейс
![](https://habrastorage.org/r/w1560/files/e8d/08d/b4f/e8d08db4ffe144b2960615c84204d689.png)
Логика работы приложения
Приложение отправляет каждую секунду код текущей комбинации нажатых кнопок по bluetooth.
Управление возможно как с помощью нажатия клавиш, так и с помощью гироскопа. Функциональность приложения достаточно тривиальный, но этого достаточно.
P.S.: Следующим проектом является автономный подводный робот. Я готовлюсь к конкурсу X-Prize. :).Ссылка. Осталось накопить 2000$.
![](https://habrastorage.org/r/w780q1/files/90c/bcb/121/90cbcb12117247a483200393842d6b76.jpg)
![](https://habrastorage.org/files/4c1/71e/0f5/4c171e0f55984247bdbbbfbcd2ccbfe6.jpg)
Это уже третий вариант снегоуборщика. Первый вариант я сделал из боевого робота. Второй вариант из газонокосилки, которую я готовлю к конкурсу. Видео с краткой презентацией этих «изделий» уже было на Geektimes, так же в спойлере внизу поста.
Текущая конструкция робота очень простая. Верхний слой снега снимается скребком. Нижний слой выбрасывается из-под снегоуборщика вбок. Силовым агрегатом служит двигатель внутреннего сгорания от ручной газонокосилки мощностью 0.9 л.с. Ходовые двигатели — это мотор-редукторы от стеклоочистителей ВАЗ. ДВС крутит винт. Воздушный поток и механическое воздействие винта поднимает снег с поверхности и по воздуховоду отбрасывает в сторону. Юбка вокруг снегоуборщика не дает снегу разлетаться в стороны. Шурупованная резина существенно улучшает проходимость агрегата.
![](https://habrastorage.org/files/eb8/cab/1cb/eb8cab1cba754753927306a6dcc26c3f.jpg)
Управление
Управлением по Bluetooth с Android телефона. Arduino nano+Monster Motor Shield+Bluetooth HC-06
![](https://habrastorage.org/files/996/8ee/a11/9968eea1127648d089d41e45fef995eb.jpg)
Bluetooth HC-06 работает на 3.3В, т.е. необходимо для правильной работы сделать преобразование логических уровней. Без этого схема будет работать, но могут быть проблемы.
![](https://habrastorage.org/files/ac8/7c0/6f5/ac87c06f59e444fd90a2f96c93d7e100.jpg)
По поводу Monster Motor Shield много спорных вопросов, кто-то утверждал, что большой процент брака. Мне данная плата очень нравится, потому что она держит ток до 30А.
Arduino
Для получения данных от Bluetooth HC-06 я использовал Software Serial для того чтобы оставить возможность отладки через терминал по аппаратному Serial port. Это, в частности, понадобилось чтобы отслеживать какие данные мы получаем от Arduino. В простейшем скетче проверяем полученный символ по Bluetooth и включаем драйвер двигателей.
Код Arduino
#include <SoftwareSerial.h>
#define BRAKEVCC 0
#define CW 1
#define CCW 2
#define BRAKEGND 3
#define CS_THRESHOLD 100
int inApin[2] = {7, 4}; // INA: Clockwise input
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {5, 6}; // PWM input
int statpin = 10;
SoftwareSerial mySerial(2, 3); // RX, TX
char a,b;
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
pinMode(statpin, OUTPUT);
// Initialize digital pins as outputs
for (int i=0; i<2; i++)
{
pinMode(inApin[i], OUTPUT);
pinMode(inBpin[i], OUTPUT);
pinMode(pwmpin[i], OUTPUT);
}
// Initialize braked
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() // run over and over
{
digitalWrite(statpin, HIGH);
if (mySerial.available()){
a=mySerial.read();
if(a=='F'){
motorGo(0, CW, 1023);
motorGo(1, CW, 1023);
}
if(a=='B'){
motorGo(0, CCW, 1023);
motorGo(1, CCW, 1023);
}
if(a=='L'){
motorGo(0, CW, 1023);
motorGo(1, CCW, 1023);
}
if(a=='R'){
motorGo(0, CCW, 1023);
motorGo(1, CW, 1023);
}
if(a=='I'){
motorGo(0, CW, 500);
motorGo(1, CW, 1023);
}
if(a=='G'){
motorGo(0, CW, 1023);
motorGo(1, CW, 500);
}
if(a=='H'){
motorGo(0, CCW, 1023);
motorGo(1, CCW, 500);
}
if(a=='J'){
motorGo(0, CCW, 500);
motorGo(1, CCW, 1023);
}
if(a=='S'){
motorOff(1);
motorOff(2);
}
Serial.write(a);
}else{
}
}
void motorOff(int motor)
{
// Initialize braked
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
analogWrite(pwmpin[motor], 0);
}
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
if (motor <= 1)
{
if (direct <=4)
{
// Set inA[motor]
if (direct <=1)
digitalWrite(inApin[motor], HIGH);
else
digitalWrite(inApin[motor], LOW);
// Set inB[motor]
if ((direct==0)||(direct==2))
digitalWrite(inBpin[motor], HIGH);
else
digitalWrite(inBpin[motor], LOW);
analogWrite(pwmpin[motor], pwm);
}
}
}
Andoid
На Google Play огромное количество готовых приложений для удаленного управления. Из всех больше всего мне понравилось это приложение.
![](https://habrastorage.org/files/195/5ab/03d/1955ab03d7d04a88ab7c0c5dc4b9b9a6.gif)
Интерфейс
![](https://habrastorage.org/files/e8d/08d/b4f/e8d08db4ffe144b2960615c84204d689.png)
Логика работы приложения
Приложение отправляет каждую секунду код текущей комбинации нажатых кнопок по bluetooth.
- «S» — стоп
- «F» — вперед
- «B» — назад
- «L» — влево
- «R» — вправо
- «I» — вперед и вправо
- «G» — вперед и влево
- «H» — назад и вправо
- «J» — назад и влево
Управление возможно как с помощью нажатия клавиш, так и с помощью гироскопа. Функциональность приложения достаточно тривиальный, но этого достаточно.
Видео
Видео Снегоуборщик 1.0 и 2.0
Время идет, а тренироваться в управлении роботами нужно. Я решил не терять времени до следующих боев Бронебот и до конкурса роботов-газонокосилок. К боевому роботу я прикрепил скребок, немного поработал над повышением трения колес, путем модификации протектора, поставил спец.сигнал.
P.S.: Следующим проектом является автономный подводный робот. Я готовлюсь к конкурсу X-Prize. :).Ссылка. Осталось накопить 2000$.
![](https://habrastorage.org/files/90c/bcb/121/90cbcb12117247a483200393842d6b76.jpg)
The registration deadline is 30 June, 2016 (11:59 PM UTC/4:59 PM PST). The registration fee is $2,000.00 USD.