Arduino15 channel
15 subscribers
32 photos
3 videos
21 links
Этот канал про проекты и уроки на Arduino, esp и т.д!

ЧАТ: @Arduino15Chat
Канал с библиотеками: https://t.me/Arduino15Libs
Download Telegram
Сначала расскажу про потенциометр. Это резистор, сопротивлением которого можно управлять. К ардуинке он подключается просто: одна крайняя нога на gnd, другая на 5в, а средняя на аналоговую ногу ардуины(А0, А1, А2 и т.д.). Прошивка для проверки этого всего тоже простая:
#define POT_PIN A0 // пин потенциометра
void setup() {
Serial.begin(9600); // настраиваем порт
pinMode(POT_PIN, 0); // настраиваем пин
}
void loop() {
// таймер на миллисе
static uint32_t tmr;
if(millis() - tmr >= 150) {
tmr = millis();
Serial.println(analogRead(POT_PIN)); // вывод в порт
}
}

Тут в порт выводятся числа от 0 до 1024, это значение с АЦП. Ещё можно открыть плоттер(ctrl+shif+l или через инструменты).
#начало
#уроки

П. С. Дополнение: в pinMode 0 можно поменять на INPUT, это то же самое
А так потенциометры выглядят и обозначаются
А теперь кнопки. Обычно у них 4 ноги, но они попарно соединены. Остаётся 2 контакта. Кнопку можно подключать по разному. Обычно одна нога идёт на пин, вторая на gnd или 5В. Если на 5В, то к пину надо подключить резистор(обычно на 10 или 4,7 кОм). Вот прошивка без библиотеки:
#define BTN 3  // кнопка на д3
void setup() {
Serial.begin(9600); // настройка порта
pinMode(BTN, 2); // настройка пина на подтяжку к +
}
void loop() {
static bool flg; // флаг состояния кнопки
bool s = !digitalRead(BTN); // текущее состояние кнопки
if (s && !flg) { // кнопка нажата
flg = true;
Serial.println("Click");
}
if (!s && flg) { // кнопка отпущена
flg = false;
Serial.println("Relase");
}
}

Это минимальная обработка нажатия, в которой нет антидребезга. Все не сенсорные кнопки дребезжат, т.е. нажатие происходит не сразу, т.е. на ардуину приходит много 0 и 1. Из-за этого будут ложные срабатывания. Потом пришлю прошивку с антидребезгом

#начало
#уроки
This media is not supported in your browser
VIEW IN TELEGRAM
Вот кнопки
А сейчас датчики. Они бывают простыми и сложными. Простые выдают цифровой(0 и 1, 0В и 5В(3,3В)) или аналоговый. А сложные связываются с ардуиной с помощью интерфейсов(I2C, I2S, UART, SPI и т.д.). Простые датчики могут работать и без микроконтроллера.
У простых цифровых или только аналоговых датчиков три ноги — gnd(-, знак земли), out(a0 или d0) и 5v(3,3v, vcc, +). Out подключается к любой ноге если датчик цифровой и к аналоговой, если аналоговый. Ещё есть простые цифроаналоговые датчики, у них 4 ноги — gnd, 5v, d0(цифровой) и a0(аналоговый). Подключать и a0, и d0 не обязательно. Прошивку для простых датчиков присылать не буду. Для аналоговых подойдёт прошивка потенциометра, а для цифровых там же можно заменить analogRead на digitalRead.
А со сложными датчиками всё сложнее. Потом будем разбирать самые популярные.
А потом пришлю фотографии разных датчиков.

#начало
#железки
А ещё я ввожу новый хэштег #уроки
Вот примеры простых датчиков

#железки
А теперь расскажу про светодиод. У него обычно 2 ноги, анод и катод, + и -. Для диодов нужен определённый ток. Если диод напрямую подключить к 5в, то он сгорит. Чтобы этого не произошло, используют резистор (обычно на 220ом). Программа для моргания диодом тут уже есть (см. урок про нанку). Так что вот прошивка для управления светодиодом с помощью кнопки:
#define BTN 3  // кнопка на д3
#define LED_PIN 2 // диод на д2
void setup() {
Serial.begin(9600); // настройка порта
pinMode(BTN, 2); // настройка пина на подтяжку к +
pinMode(LED_PIN, 1); // настройка пина диода на выход
}
void loop() {
static uint32_t tmr;
static bool flg; // флаг состояния кнопки
bool s = !digitalRead(BTN); // текущее состояние кнопки
if (s && !flg && millis() - tmr > 100) { // кнопка нажата
flg = true;
tmr = millis();
Serial.println("Click");
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
if (!s && flg && millis() - tmr > 100) { // кнопка отпущена
flg = false;
tmr = millis();
Serial.println("Relase");
}
}

Тут уже есть антидребезг
А чуть позже пришлю схему подключения и как выглядят светодиоды

#начало
#уроки
также схемы можно рисовть в тингеркаде:
Кстати не у всех простых датчиков 3/4 ноги. Вот у такого микрофона на max9814 5 ног, но выдаёт он аналоговый сигнал. А ещё этот микрофон работает лучше всех остальных, так что если вам нужен микрофон, покупайте его.

#железки
А теперь коротко про вайфай в еспшках.
1.
Режим АР — точка доступа от самой еспшки, запускается так:
WiFi.mode(WIFI_AP);  // настройка режима вифи
WiFi.softAP("ssid", "pass"); // имя и пароль точки доступа

2. Подключение к роутеру, режим STA:

Serial.begin(115200);  // открываем порт
WiFi.mode(WIFI_STA); // настройка режима вифи. Тут необязательно
WiFi.begin("ssid", "pass"); // ssid и пароль от роутера
while(WiFi.status() != WL_CONNECTED) { // если не подключились, пишем в порт .
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP()); // вывод айпи адреса

Скоро будет интересный урок про вифи!

#вифи
#espшки
#уроки
А щас фоторезистор! Фоторезистор это резистор который изменяет сопротивление в зависимости от освещения. Код писать не буду, подойдёт и от потенциометра.
П. С чуть позже будут схемы
#начало
#уроки
#железки
#резисторы
#espшки
Схема №1, кстати фоторезистор бывает не только голый но и в виде модуля. Завтра будет вторая схема.
#начало
#уроки
#железки
#резисторы
Какой урок выпустить сегодня или завтра?
Final Results
0%
Условия
0%
Циклы
0%
Библиотеки
100%
Gyverhub
Гайверхуб так гайверхуб.
Иногда бывает надо управлять железками удалённо, но заморачиваться с самостоятельной реализацией не хочется. Или просто надо управлять чем-то из интернета. Для этого Гайвер сделал гайверхаб.

1. Структура программы
В сетупе подключается вифи, настраивается mqtt, запускается хаб и подключается билдер:
hub.mqtt.config("test.mosquitto.org", 1883);
hub.onBuild(build);
hub.begin();

2. Билдер
В нём настраиваютя компоненты и записываются значения в переменные. Билдер обычно делают перед сетупом
void build(gh::Builder& b) {
GH_ROW(b, 1,
b.Button().size(2);
b.Button(););
}

3. Компоненты
b.Название(параметры);
Ещё параметры можно задавать в цепочку, как в прошлом пункте
.size(x) — размер виджета в долях
.label(s) — подпись к виджету
.color(c) — цвет
.attach(&flg) — подключить флаг
.attach(func) — подключить функцию

Все виджеты описывать не буду, есть документация

4. Установка
Надо зайти на гитхаб, тыкнуть на old, переключить. на dev, потом code и download zip. Скачается архив с библиотекой. Потом надо зайти в скетч->подключить библиотеку->добавить .zip библиотеку, выбрать файл гайверхаба и подождать.
Ещё надо установить другие библиотеки, всё подробно расписано там.

5. Документация
Там написано как пользоваться гайверхабом. Хоть там и про старую версию, но некоторые вещи пересекаются. А вообще рекомендую посмотреть примеры

Это далеко не всё, так что будет ещё один хэштег #гайверхаб
Гайверхаб работает не только с еспшками, но это уже совсем другая история


#уроки
#вифи
#espшки
#библиотеки
Я решил сделать 2 урока так что условия.
Чтобы код выполнялся в зависимости от каких-то данных, есть условия. Это работает так:
bool a = 1, b = 0;
if (a) { // выполнится, если а = 1. Если бы а была типа инт, то выполнится и от любого другого числа (в том числе отрицательного), кроме 0
// что-то сделать
}
if (!b) { // выполнится, если б = 0
// что-то сделать
}
if (a && b) { // выполнится, если и а, и б = 1
// что-то сделать
}
if (a || b) { // выполнится, если а или б равны 1
// что-то сделать
}
Кроме иф ещё есть else
bool a;
if (a) {
// не выполнится
} else { // если !a
// выполнится
}

Проще говоря внутри скобок пишется переменная или выражение. Можно использовать операторы:
&& — И. Можно использовать and
|| — ИЛИ. Можно использовать or
== — равно
! — меняет 0 на 1 и наоборот.

Кстати. Скобку лучше писать на той же строке, где иф/else/объявление функции. Так код будет занимать меньше строчек.
А ещё в конце каждой строки(если она не пустая и не заканчивается { или } ) надо писать ;

#начало
#уроки
Не пойму почему можно несколько ответов выбирать, ну ладно.