Begemot911
Продолжение поста «Платформа на радиоуправлении»1
В продолжении развития самодельного ровера на радиоуправлении.
Изменена конструкция платформы, теперь клиренс выше и не застревает в глубоком снегу, плюс резиновые накладки на траки для лучшего сцепления. Ну и добавил питания, теперь 3 батареи 18650 и жрет три ампера, что позволяет стартовать бодро с места.
Корпус печатался частями и склеивался космофеном (опасно, пары ядовиты, а от пальцев не очищайте лезвием).
Радио модуль Nrf24L01 хорошо себя показал по стабильности передачи и дальности связи.
Платформа на радиоуправлении1
Имея в распоряжении 3Д принтер и желание прокрастинировать собрал вот такую платформу. Исходная модель www.thingiverse.com/thing:1906831 . Либо из-за не соответствия размеров, приведших к изменению деталей гусеницы, колесо плохо входило в зацепление и заедало, егоп ришлось модифицировать, сделав зубчики немного меньше и более скругленными.
Управление по радиоканалу с микросхемой nrf24l01+ , управление джойстиком. Недостатки - низкая посадка, застревал, траки слишком гладкие, снег не зацеплялся и в итоге буксовал. Источник питания 2 последовательно включенные батареи 18650, драйвер LN298, 4 DC мотора.
Вес примерно 500 грамм, ушло много на траки из АБС пластика.
Новогодняя игрушка
Напечатано на 3Д принтере, покрыто белой акриловой грунтовкой и раскрашено масляными красками кривыми руками художника от слова "худо"
И наконец, как это получается у людей с прямыми руками
https://www.thingiverse.com/thing:164804
Радар на ультразвуковом датчике
Информации о том, как подключить к Ардуино ультразвуковой датчик hc-sr04, как он работает навалом, даже как радар собрать. Чем отличается данный пост? Подключен цветной IPS экран 240 х 240 на контроллере ST7789 и выводится информация в виде графика в полярных координатах.
Проблема данного дисплея в том, что он подключается по SPI протоколу, но на плате отсутствует вывод CS chip select.
Кто-то припаивает дополнительные проводки, но благо нашлись люди, написавшие библиотеку для данного случая https://github.com/ananevilya/Arduino-ST7789-Library
и нам понадобится ещё для работы с дисплеем https://github.com/adafruit/Adafruit-GFX-Library
Библиотека для серво двигателя Servo.h но она есть при установке программы Arduino IDE.
Из железа: Arduino UNO, серво двигатель, УЗ датчик hc-sr04, дисплей ST7789. УЗ датчик крепится к серводвигателю и получаем аналог антенны. Свой радар печатал на 3Д принтере.
Алгоритм работы программы:
1. Подключить дисплей, сбросить экран.
2. Установить положение вала серводвигателя в начальное положение i=0
3. Провести измерение расстояния до объекта distance_sm .
4. Отобразить на экране расстояние в виде числа, построить линию с длинной пропорциональной расстоянию до объекта и углом, соответствующим углу вала сервы.
5. Повернуть "антенну" на шаг в 1 градус.
6. Повторить п.3-п.5 при изменении угла поворота от 0 до 180 градусов.
7. Повторить п.3-п.5 от 180 до 0 градусов.
Повтор организуется циклом при увеличении счетчика
Теперь про отрисовку: экран обладает своим контроллером, мы не пишем программу для непосредственной отрисовки пикселей на уровне железа, нам достаточно знать протокол передачи данных и использовать команды, используемые экраном, в библиотеке всё реализовано на естественном языке. Когда мы передаем в экран информацию, которую хотим отобразить, она там так и остается, пока ей на замену не придет новая. И вот тут интересный подводный камень: если мы выведем число "42", а затем "57", то пиксели второго числа наложатся на пиксели первого и будет каша. Можно очистить весь экран, сбросить, и отрисовать новый кадр изображения заново, но это займет кучу машинного времени и изображение будет мигать при смене информации. Делаем по другому: в начале выводим число "42" зеленого цвета, а перед отрисовкой "57" мы рисуем "42" цветом фона, например черным, а потом рисуем уже новое число. Также надо делать и с линиями.
Приведем основные команды, имеющиеся в библиотеке для работы с экраном:
tft.init(240, 240); //инициализация экрана, задаем его размер
tft.fillScreen(BLACK); //закрасить черным
tft.setCursor(0,0); //установить курсор
tft.setTextColor(GREEN); //цвет текста
tft.setTextSize(0); //размер от 1 до 5
tft.print("Angle:"); //вывод текста
tft.println("Angle:"); //вывод текста, новый текст будет с новой строки
tft.drawLine(x1, y1,x2, y2, color); //линия
tft.drawRect(x1, y1 ,x2, y2, color); //прямоугольник
tft.fillRect(x1, y1 ,x2, y2, color); //прямоугольник закрашенный
tft.drawCircle(x, y, radius, color); //круг
tft.fillCircle(x, y, radius, color); //круг заполненный
Цвета задаются в шестнадцетиричном код или десятичном от 0x0000 до 0xFFFF, либо по соответствующих в библиотеке именам: BLACK, BLUE, RED, GREEN, MAGENTA, YELLOW, WHITE.
Теперь небольшой пример программы для дисплея
#include <Adafruit_GFX.h> // библиотека для графики
#include <Arduino_ST7789.h> // бибилотека для ST7789 (с или без CS пина)
#include <SPI.h>
#define TFT_DC 8
#define TFT_RST 9
#define TFT_MOSI 11 // (sda вывод на экране)
#define TFT_SCLK 13 // (scl вывод на экране)
Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST); //для дисплеев без CS
void setup(void) {
Serial.begin(9600);
Serial.print("Hello! ST7789 TFT Test");
tft.init(240, 240); // инициализация чипа ST7789, размер экрана 240x240
Serial.println("Initialized");
// large block of text
tft.fillScreen(BLACK);
tft.setCursor(0,0);
tft.setTextColor(GREEN);
tft.setTextSize(3);
tft.println("TEST");
delay(1000);
}
void loop() {
tft.fillScreen(BLACK);
for (int x=0; x < tft.width(); x+=6) {
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, random(64000));
delay(100);
}
}
Итоговый код программы, используемой в проекте: https://www.dropbox.com/s/t1hu976zxwk6te7/radar_ekran.rar?dl...
Паркуюсь как могу
На фото запечатлен автомобиль, припаркованный на пешеходном переходе, загородивший часть прохода. Но всякое бывает, может места не было, а нужно срочно остановиться!?
А нет, все нормально, свободного места навалом на пол километра вперёд . И кстати, рядом есть придомовая парковка со свободными местами.
















