Радар на ультразвуковом датчике

Информации о том, как подключить к Ардуино ультразвуковой датчик 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...


Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества