Fox.Goldstar

Пикабушник
Дата рождения: 11 июня
114 рейтинг 1 подписчик 1 подписка 2 поста 0 в горячем
7

Приборка на RC-грузовике или полурукописный скетч

История всему этому такова: 30-летний мальчик понял, что может играть с модельками и радоваться жизни. И вот в его жизни появляется радиоуправляемый грузовик!

Я не буду рассказывать, что и у кого я покупал, я думаю, на меня и так выльют ушат помоев с моим подходом и заодно научат, как надо. Я просто хочу поделиться тем, что с большим трудом за полгода наконец-то родил скетч для Arduino с экраном, чтобы превратить его в приборку для грузовика. Да, никто не увидит, но я буду знать, что оно там есть. На этом все. Спасибо за внимание. Если нужен скетч, то он лежит тут.

P. S. Я хотел использовать ESP8266, но там совсем не получилось. Я не уверен, что оно будет корректно работать. Если решите меня ткнуть носом в мои ошибки, буду благодарен. Есть решение от Тамии, но 14 тысяч прям жаба душит на модель, которая была сама собрана за 10 тысяч. В скрипте реализовано то, что скорость и коробку он считывает из начального состояния при включении.

*значение нейтрали скачет из-за того что я использую крутилку без фиксации


#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>// можно добавить 2 слеша чтобы выключить
// Определяем размеры экрана
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32 //я использую 0.91 oled
// Создаём объект для OLED дисплея
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Определяем пины для DHT и создаем объект DHT
#define DHTPIN 2 // можно добавить 2 слеша чтобы выключить
#define DHTTYPE DHT11 // можно добавить 2 слеша чтобы выключить
DHT dht(DHTPIN, DHTTYPE); // можно добавить 2 слеша чтобы выключить
// Пин для считывания ШИМ-сигнала
const int speedPin = A3; //пин на arduino
// Переменные для начального значения и текущей скорости
float initialPwmValue = 0;
float currentSpeed = 0;
bool isInitialValueSet = false;
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C, -1);
dht.begin();// можно добавить 2 слеша чтобы выключить
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Выводим стартовое сообщение
display.setCursor(30, 0);
display.println("ZiL Dash Load"); // можно писать все чтот угодно
display.setCursor(0, 15);
display.println("Status CHECK! EBU_ok. err_14. START"); // можно писать все чтот угодно
display.display();
delay(5000); // можно менять в соответствии сколько вы хотите видеть этот экран
display.clearDisplay();
}
void loop() {
// Считывание ШИМ-сигнала
int pwmValue = pulseIn(speedPin, HIGH); // Считываем время импульса
float dutyCycle = map(pwmValue, 0, 10000, 0, 800); // Преобразуем в значения от 0 до 255
float speed = dutyCycle * (180.0 / 800.0); // максимальная скорость 88кмч подбирайте значения для себя
// Преобразование значения ШИМ в скорость (примерно 0-100 км/ч)
currentSpeed = dutyCycle * (180.0 / 100.0);
// Установим начальное значение ШИМ при первой итерации
if (!isInitialValueSet) {
initialPwmValue = dutyCycle;
isInitialValueSet = true;
}
// Вычисляем относительную скорость относительно начального значения

float relativeSpeed = dutyCycle - initialPwmValue;
if (relativeSpeed < 0) {
relativeSpeed = 0;
}
if (relativeSpeed < 0) { relativeSpeed = 0; //
}
// Очистка дисплея и вывод текущего состояния
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
// Сравниваем текущее значение с начальным и выводим соответствующие букву для симуляции акпп
if (dutyCycle < initialPwmValue) {
display.setTextColor(SSD1306_WHITE);
display.println("R");
display.setTextColor(SSD1306_BLACK);
display.setCursor(5, 0);
display.print("N");
display.setCursor(10, 0);
display.print("D");
} else if (dutyCycle == initialPwmValue) {
display.setTextColor(SSD1306_BLACK);
display.setCursor(5, 0);
display.print("R");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.print("N");
display.setTextColor(SSD1306_BLACK);
display.setCursor(15, 0);
display.print("D");
} else {
display.setTextColor(SSD1306_BLACK);
display.setCursor(5, 0);
display.print("R");
display.setCursor(10, 0);
display.print("N");
display.setTextColor(SSD1306_WHITE);
display.setCursor(15, 0);
display.print("D");
}
// Считывание температуры
float t = dht.readTemperature(); // Считываем температуру в Цельсиях// можно добавить 2 слеша чтобы выключить
float h = dht.readHumidity(); // Чтение влажности, // можно добавить 2 слеша чтобы выключить
if (isnan(h) || isnan(t)) {// можно добавить 2 слеша чтобы выключить
Serial.println("chek!");// можно добавить 2 слеша чтобы выключить
return;
}
// Отображаем температуру на дисплее
display.setTextColor(SSD1306_WHITE);
display.setCursor(30, 0); //положения по горизонтали и вертикали
display.println("URAL/Zil Dash");
display.setCursor(0, 10);// можно добавить 2 слеша чтобы выключить
display.print("T:");// можно добавить 2 слеша чтобы выключить
display.print(t);// можно добавить 2 слеша чтобы выключить
display.println("C");// можно добавить 2 слеша чтобы выключить
display.setCursor(60, 10);// можно добавить 2 слеша чтобы выключить
display.print("H: ");// можно добавить 2 слеша чтобы выключить
display.print(h);// можно добавить 2 слеша чтобы выключить
display.println(" %");// можно добавить 2 слеша чтобы выключить
display.setCursor(15, 20);
display.print("Speed: ");
display.print(currentSpeed - (initialPwmValue * (180.0 / 100.0)));
display.println(" km/h"); //если поменять на мили ничего не поменяется
display.display(); // Обновление дисплея
delay(10); // частота обновление данных
display.clearDisplay(); // Очищаем экран для перерисовки
}

Не судите строго, всем хорошего дня!
В оптимизации скетча помогала мне нейронка от "нереклама"

Показать полностью
9

Яндекс Лампочки на самом деле не то за что себя выдают

Доброго времени суток!
моя история будет не то чтобы длинной или запутанной, но крайне интересной, параллельно я просто задамся вопросами, а почему так собстна.
Думаю стоит перейти к делу.
А дело собстна вот в чем:
Есть небезызвестная ГИГО-компания "ЯНДЕКС"(далее "корпораты"), и есть у нее много умных устройств.
И устройства эти все позиционируют себя как произведенные в России. В основном устройства умного дома и голосового помощника.

  • Я сам пользуюсь "коробочкой с Алисой"(далее "коробченка"), и штука удобная, но со временем в 2 года она успешно оглохла на одно ухо видимо, но вопрос даже не в этом. Собрал я значит пару устройств на ESP-8266(далее просто esp), но подключить на прямую к алисе не смог. Пришлось идти сначала на один MQTT брокер, потом случились "КОЕ ЧТО, О ЧЕМ Я НЕСКЕМ НЕ ГОВОРЮ И МОЕ МНЕНИЕ НИКОГО НЕ ИНТЕРЕСУЕТ" и брокер ушел из России, в итоге перешел на другой брокер и поселился на нем, продолжая искать библиотеку подключения esp напрямую к "Алисе". но как итог результатов ровно НУЛЬ!
    Потихонечку оброс лампочками от яндекса и а именно вот такими красавицами в количестве "очень несколько штук".

Вот кстати и они, слева на право, все что были, а так как не реклама модели писать не буду

Со временем одна лампочка сначала перестала гореть "зеленым" светом, но ничего, я все равно особо не пользую именно этот свет. затем погас "синий" а вот это уже сильный недостаток, так как именно она стояла в режиме "1%" освещения для прогулок ночью по квартире чтобы не споткнуться о кота, и не разбудить мою сокровенную жену. Ну собстна тоже жить как бы можно наверное, белый то свет все еще работает.
И вот утром в режиме будильника "Коробченка" не включила "белый" свет, а была красная.
Ну, моему огорчению предела не было, от слова "не было". Да к тому же надо же посмотреть че там за фиксики дергают за рубильники, т почему горят(в моем случае больше не горят) разноцветные огни.

Кровожадным образом, скрутив голову светорассеивателя, и добравшись до светодиодной зоны, на меня посмотрел штырек белой платы, с надписью YEELIGHT(что-то знакомое), а с другой стикер "Yandex Lemon3". далее был вынута пластина с светодиодами(за чем то на разъеме), и узрел я черный компаунд. Кстати достаточно хороший, так как пытливый ум сразу решил его поджечь, дабы проверить горит ли эта черная, резинообразная субстанция. Не горит)
Недолго думая было принято решение избавится от компаунда, и все же взглянуть на фиксиков которых прячет эта субстанция. И ВОТ Я БАЛБЕС ЧТО НЕ ФОТОГРАФИРОВАЛ "ДО". но в итоге мне предстало это:

Шутка про BTS


В последствии расчекрыживания компауда, моему взору предстал очень знакомый модуль, уж больно сильно похожий на ESP-01/ESP8266. И при дальнейшем изучении выяснилось, что это он и есть, хотя я и раньше замечал что уж больно много ESP видит мой роутер когда я ищу то или иное устройство дабы узнать его IP-адрес.

Опять шутка, ну вы знаете...

только модуль не совсем размечен, явно не для того чтобы в него залазал шаловливые ручонки, да и площадочки для пайки в один ряд вместо двух как на ESP-01.
Да и эмблемка на текстолите тоже знакомая, но к ней позже.

Сейчас же первый вопрос:
Раз в фирменных устройствах яндекса используют ESP то почему они не выкатят библиотеку, пусть даже ограниченную? Можете сказать безопасность, и все дела. но нет, можно было бы как в брокере принудительно заставлять писать логин/пароль/WIFI, и по нему уже устройства цеплять к алисе без посредников. Если в ответ поступит не выгодно, тогда можно просто на внутреннем уровне запретить бесплатное использовать более ___ устройств в аккаунте на устройстве, что облегчает задачу, да и энтузиазм к коробченке подрастет, и принесет корпоратам деняг.
А теперь второй вопрос YEELIGHT

AGAIN

Знакомьтесь XIAOMI YEELIGHT, наши пациенты(буду покупать лучше их, ибо у яндекса дороже), и из чего второй вопрос, который меня интересует сильнее:
ЯНДЕКС, ТЫ ВООБЩЕ ЗА КОГО? КАКОГО КИТАЙЦЫ МОГУТ ШТАМПОВАТЬ ARDUINO ПРОЕКТЫ С ВОЗМОЖНОСТЬЮ ПОДКЛЮЧЕНИЯ К ТЕБЕ НАПРЯМУЮ, А ТВОИ ПОЛЬЗОВАТЕЛИ ОБЯЗАНЫ КОМУ ТО ТАМ ОТПРАВЛЯТЬ СВОИ ДАННЫЕ ИСПОЛЬЗОВАНИЯ КОМУ-ТО ТАМ?

Соглашусь что воды может быть много, но я пытался сделать весело. Спасибо за прочтение

ЗЫ: Чуствую себя киберпанком, что гонит на корпоратов.

ЗЫы: ничего не имею против коллабораций компаний, ровно до тех пор пока это не срет на пользователя.

ЗЫыы: Если такой пост уже был киньте в меня ссылкой в комментариях.

Показать полностью 15
Отличная работа, все прочитано!