Arduino: различия между версиями
Artem (обсуждение | вклад) |
Artem (обсуждение | вклад) |
||
(не показаны 44 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
Ардуино - это контроллер с программатором и возможностью подключить датчики/исполнительные элементы. | |||
[[Файл:IMG_20170129_124526.jpg|400px]] | |||
= Ссылки = | |||
* Сайт https://www.arduino.cc/ | |||
* IDE https://www.arduino.cc/en/Main/Software | |||
* Форум https://forum.arduino.cc/ | |||
* wokwi Наглядный сервис эмуляции ардуино - https://wokwi.com/ | |||
* photopea редактор изображений - https://www.photopea.com/ | |||
* [https://www.youtube.com/watch?v=JXmw1xOlBdk Turbo pressure gauge with Arduino and OLED display --- tutorial for beginners, u8g, Arduino UNO] | |||
* AlexGyver https://www.youtube.com/channel/UCgtAOyEQdAyjvm9ATCi_Aig | |||
* Электроника в объективе https://www.youtube.com/channel/UChButpZaL5kUUl_zTyIDFkQ | |||
* DIY Perks https://www.youtube.com/channel/UCUQo7nzH1sXVpzL92VesANw | |||
* TOP 10 Arduino Projects Of All Time | 2019 https://www.youtube.com/watch?v=9ItEPmwfBqg | |||
* How to Make your own Arduino UNO https://www.youtube.com/watch?v=IUAFODI1Wg0 | |||
= Что такое Arduino? = | |||
Ардуино - это открытая программно-аппаратная платформа для прототипирования. | |||
Чтобы понять как это круто, пройдем по шагам как это было до ардуины: | |||
# Вы выбираете микроконтроллер. Читаете к нему документацию. | |||
# Вы берете текстолит покрытый медью. Проектируете плату. Вытравливаете по трафарету дорожки, чтобы соединить микроконтроллер и выводы. | |||
# Вы лудите и паяете. | |||
# Вы собираете программатор. | |||
# Пишете код и выбираете нужный компилятор. Компилируете код. | |||
# Прошиваете программатором контроллер. Если все ок - он работает. Если нет - отлаживаете. | |||
# Начинаете как-то пользоваться им. | |||
Теперь: | |||
# Ардуина собрана и отлажена на заводе | |||
# У Ардуины встроенный программатор. Подключается по USB. | |||
# Eсть IDE с компилятором. Работает во всех ОС(в том числе Linux) | |||
# Все что вам нужно это просто взять код и сразу ее прошить как вам нужно | |||
# Соединяете датчики и моторчики - все работает сразу. | |||
# Это интересно и без рутины. | |||
= Операционные системы реального времени = | |||
Базовые скрипты Ардуины очень примитивны и не позоволяют работать параллельно и поэтому нужна RTOS. Вот некоторые из них. | |||
{| class="wikitable" | |||
|- | |||
! Название !! Популярность !! Поддержка платформ !! Сайт !! Исходный код !! Документация | |||
|- | |||
| FreeRTOS || высокая || свыше 40 архитектур, включая AVR (Arduino Uno, Nano, Leonardo и Mega). Также поддерживаются платформы MCU, которых нет у Arduino || https://www.freertos.org/ || [https://github.com/feilipu/Arduino_FreeRTOS_Library github] || [https://www.freertos.org/FreeRTOS-quick-start-guide.html Quick start] | |||
|- | |||
| CoopThreads || низкая || широкий диапазон MCU, включая AVR, ESP32 и ESP8266. || [https://www.arduino.cc/reference/en/libraries/coopthreads/ arduino.cc] || [https://github.com/pstolarz/CoopThreads github] || -- | |||
|- | |||
| HeliOS || средняя || широкий диапазон платформ MCU || -- || [https://github.com/MannyPeterson/HeliOS github] || [https://github.com/MannyPeterson/HeliOS/blob/master/extras/HeliOS_Programmers_Guide.md github] | |||
|- | |||
| Simba || высокая || многие основные платы Arduino, плюс широкий диапазон других плат. || -- || [https://github.com/eerimoq/simba github] || [https://simba-os.readthedocs.io/en/latest/ Docs] | |||
|- | |||
| TaskManagerIO || высокая || объявлена совместимость с широким диапазоном плат и операционных систем. || -- || [https://github.com/davetcc/TaskManagerIO github] || [https://www.thecoderscorner.com/products/arduino-libraries/taskmanager-io/ Docs] | |||
|- | |||
|} | |||
* https://www.arduino.cc/reference/en/libraries/freertos/ | |||
* https://circuitdigest.com/microcontroller-projects/arduino-freertos-tutorial1-creating-freertos-task-to-blink-led-in-arduino-uno | |||
* https://github.com/heliosproj/HeliOS/blob/master/examples/Blink/Blink.ino | |||
= LVGL = | |||
* https://docs.lvgl.io/8.1/get-started/arduino.html | |||
= ISCP = | |||
= ISCP2 = | |||
= I2C = | |||
= Базовые компоненты = | |||
* MicroSD (4 pins) | |||
* WiFi (2 pins) | |||
* bluetooth (2 pins) | |||
* Display (2 pins) | |||
* Speaker (1 pin) | |||
* Arrows(4) / OK / Cancel buttons (6 pins) | |||
* Diode indicator (3 pins) | |||
* Clock (2 pins) | |||
- | |||
22 pins | |||
= Проекты = | |||
* 8bitcade - Мини игровая консоль на ардуино https://8bitcade.com/ | |||
* Радио | |||
* mp3 плеер | |||
* gsm телефон | |||
* водонагреватель | |||
* ... | |||
== Как проверить Arduino == | == Как проверить Arduino == | ||
Я работаю в Ubuntu Linux. | Я работаю в Ubuntu Linux. Скачать последнюю версию IDE можно тут [https://www.arduino.cc/en/Main/Software]. Запустите ./install.sh чтобы установить ярлыки для быстрого запуска. | ||
<pre> | <pre> | ||
sudo usermod -a -G dialout <username> | sudo usermod -a -G dialout <username> | ||
</pre> | </pre> | ||
Строка 68: | Строка 163: | ||
3 - +5 вольт | 3 - +5 вольт | ||
Далее качаем либу [https://github.com/z3t0/Arduino-IRremote] | Далее качаем либу [https://github.com/z3t0/Arduino-IRremote] в zip и ставим ее через IDE (Скетч - Подключить библиотеку - добавить ZIP библиотеку). | ||
'''ВНИМАНИЕ''' удалите библиотеку <путь к IDE>/libraries/RobotIRremote т.к. они конфликтуют. | |||
Прошиваем скетчем, открываем Инструменты и монитор порта - смотрим результат. | |||
<pre> | |||
#include "IRremote.h" | |||
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 | |||
IRrecv irrecv(receiver); // create instance of 'irrecv' | |||
decode_results results; // create instance of 'decode_results' | |||
void setup() | |||
{ | |||
Serial.begin(9600); | |||
Serial.println("IR Receiver Raw Data + Button Decode Test"); | |||
irrecv.enableIRIn(); // Start the receiver | |||
} | |||
void loop() | |||
{ | |||
if (irrecv.decode(&results)) | |||
{ | |||
Serial.println(results.value, HEX); | |||
translateIR(); | |||
irrecv.resume(); | |||
} | |||
} | |||
void translateIR() // Car MP3 IR | |||
{ | |||
switch(results.value) | |||
{ | |||
case 0xFFA25D: | |||
Serial.println(" CH- "); | |||
break; | |||
case 0xFF629D: | |||
Serial.println(" CH "); | |||
break; | |||
case 0xFFE21D: | |||
Serial.println(" CH+ "); | |||
break; | |||
case 0xFF22DD: | |||
Serial.println(" PREV "); | |||
break; | |||
case 0xFF02FD: | |||
Serial.println(" NEXT "); | |||
break; | |||
case 0xFFC23D: | |||
Serial.println(" PLAY/PAUSE "); | |||
break; | |||
case 0xFFE01F: | |||
Serial.println(" VOL- "); | |||
break; | |||
case 0xFFA857: | |||
Serial.println(" VOL+ "); | |||
break; | |||
case 0xFF906F: | |||
Serial.println(" EQ "); | |||
break; | |||
case 0xFF6897: | |||
Serial.println(" 0 "); | |||
break; | |||
case 0xFF9867: | |||
Serial.println(" 100+ "); | |||
break; | |||
case 0xFFB04F: | |||
Serial.println(" 200+ "); | |||
break; | |||
case 0xFF30CF: | |||
Serial.println(" 1 "); | |||
break; | |||
case 0xFF18E7: | |||
Serial.println(" 2 "); | |||
break; | |||
case 0xFF7A85: | |||
Serial.println(" 3 "); | |||
break; | |||
case 0xFF10EF: | |||
Serial.println(" 4 "); | |||
break; | |||
case 0xFF38C7: | |||
Serial.println(" 5 "); | |||
break; | |||
case 0xFF5AA5: | |||
Serial.println(" 6 "); | |||
break; | |||
case 0xFF42BD: | |||
Serial.println(" 7 "); | |||
break; | |||
case 0xFF4AB5: | |||
Serial.println(" 8 "); | |||
break; | |||
case 0xFF52AD: | |||
Serial.println(" 9 "); | |||
break; | |||
default: | |||
Serial.println(" other button "); | |||
} | |||
delay(500); | |||
} | |||
</pre> | |||
== Ультразвуковой датчик hc sr04 == | |||
<pre> | |||
const int Trig = 8; | |||
const int Echo = 9; | |||
const int ledPin = 11; // 13 – если будете использовать встроенный в Arduino светодиод | |||
void setup() | |||
{ | |||
pinMode(Trig, OUTPUT); | |||
pinMode(Echo, INPUT); | |||
pinMode(ledPin, OUTPUT); | |||
Serial.begin(9600); | |||
} | |||
unsigned int time_us=0; | |||
unsigned int distance_sm=0; | |||
void loop() | |||
{ | |||
digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера | |||
delayMicroseconds(10); // Удерживаем 10 микросекунд | |||
digitalWrite(Trig, LOW); // Затем убираем | |||
time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса | |||
distance_sm=time_us/58; // Пересчитываем в сантиметры | |||
Serial.println(distance_sm); // Выводим на порт | |||
if (distance_sm<50) // Если расстояние менее 50 сантиметром | |||
{ | |||
digitalWrite(ledPin, 1); // Зажигаем светодиод | |||
} | |||
else | |||
{ | |||
digitalWrite(ledPin, 0); // иначе тушим | |||
} | |||
delay(100); | |||
} | |||
</pre> | |||
== Сервопривод == | |||
<pre> | |||
#include <Servo.h> //используем библиотеку для работы с сервоприводом | |||
Servo servo; //объявляем переменную servo типа Servo | |||
int deg = 0; | |||
void setup() //процедура setup | |||
{ | |||
servo.attach(10); //привязываем привод к порту 10 | |||
} | |||
void loop() //процедура loop | |||
{ | |||
servo.write(deg); //ставим вал под 0 | |||
delay(2000); //ждем 2 секунды | |||
deg = deg + 10; | |||
if (deg > 360) { | |||
deg = 0; | |||
} | |||
} | |||
</pre> | |||
== Шаговый двигатель 28BYJ-48 == | |||
Power: GND => -, +5V => + | |||
Control: IN1 => 8, IN2 => 9, IN3 => 10, IN4 => 11 | |||
<pre> | |||
#include <Stepper.h> | |||
// указываем количество шагов нашего мотора - в нашем случае 64 | |||
#define STEPS 64 | |||
// Создаем экземпляр класса Stepper, и указываем | |||
// количество шагов и пины подключния | |||
Stepper stepper(STEPS, 8, 9, 10, 11); | |||
// переменная для запоминания предыдущего значения | |||
int previous = 0; | |||
void setup() { | |||
// Устанавливаем скорость вращения в об/мин | |||
stepper.setSpeed(100); | |||
} | |||
void loop() { | |||
// новое значение полученное с датчика | |||
int val = analogRead(0); // При подключении датчика, 0 заменить на пин датчика | |||
// Прокрутить на разницу шагов между новым полученным значением и предыдущим | |||
stepper.step(val - previous); | |||
// Запоминаем новое полученное значение | |||
previous = val; | |||
} | |||
</pre> |
Текущая версия от 18:58, 26 мая 2024
Ардуино - это контроллер с программатором и возможностью подключить датчики/исполнительные элементы.
Ссылки
- Сайт https://www.arduino.cc/
- IDE https://www.arduino.cc/en/Main/Software
- Форум https://forum.arduino.cc/
- wokwi Наглядный сервис эмуляции ардуино - https://wokwi.com/
- photopea редактор изображений - https://www.photopea.com/
- Turbo pressure gauge with Arduino and OLED display --- tutorial for beginners, u8g, Arduino UNO
- AlexGyver https://www.youtube.com/channel/UCgtAOyEQdAyjvm9ATCi_Aig
- Электроника в объективе https://www.youtube.com/channel/UChButpZaL5kUUl_zTyIDFkQ
- DIY Perks https://www.youtube.com/channel/UCUQo7nzH1sXVpzL92VesANw
- TOP 10 Arduino Projects Of All Time | 2019 https://www.youtube.com/watch?v=9ItEPmwfBqg
- How to Make your own Arduino UNO https://www.youtube.com/watch?v=IUAFODI1Wg0
Что такое Arduino?
Ардуино - это открытая программно-аппаратная платформа для прототипирования.
Чтобы понять как это круто, пройдем по шагам как это было до ардуины:
- Вы выбираете микроконтроллер. Читаете к нему документацию.
- Вы берете текстолит покрытый медью. Проектируете плату. Вытравливаете по трафарету дорожки, чтобы соединить микроконтроллер и выводы.
- Вы лудите и паяете.
- Вы собираете программатор.
- Пишете код и выбираете нужный компилятор. Компилируете код.
- Прошиваете программатором контроллер. Если все ок - он работает. Если нет - отлаживаете.
- Начинаете как-то пользоваться им.
Теперь:
- Ардуина собрана и отлажена на заводе
- У Ардуины встроенный программатор. Подключается по USB.
- Eсть IDE с компилятором. Работает во всех ОС(в том числе Linux)
- Все что вам нужно это просто взять код и сразу ее прошить как вам нужно
- Соединяете датчики и моторчики - все работает сразу.
- Это интересно и без рутины.
Операционные системы реального времени
Базовые скрипты Ардуины очень примитивны и не позоволяют работать параллельно и поэтому нужна RTOS. Вот некоторые из них.
Название | Популярность | Поддержка платформ | Сайт | Исходный код | Документация |
---|---|---|---|---|---|
FreeRTOS | высокая | свыше 40 архитектур, включая AVR (Arduino Uno, Nano, Leonardo и Mega). Также поддерживаются платформы MCU, которых нет у Arduino | https://www.freertos.org/ | github | Quick start |
CoopThreads | низкая | широкий диапазон MCU, включая AVR, ESP32 и ESP8266. | arduino.cc | github | -- |
HeliOS | средняя | широкий диапазон платформ MCU | -- | github | github |
Simba | высокая | многие основные платы Arduino, плюс широкий диапазон других плат. | -- | github | Docs |
TaskManagerIO | высокая | объявлена совместимость с широким диапазоном плат и операционных систем. | -- | github | Docs |
- https://www.arduino.cc/reference/en/libraries/freertos/
- https://circuitdigest.com/microcontroller-projects/arduino-freertos-tutorial1-creating-freertos-task-to-blink-led-in-arduino-uno
- https://github.com/heliosproj/HeliOS/blob/master/examples/Blink/Blink.ino
LVGL
ISCP
ISCP2
I2C
Базовые компоненты
- MicroSD (4 pins)
- WiFi (2 pins)
- bluetooth (2 pins)
- Display (2 pins)
- Speaker (1 pin)
- Arrows(4) / OK / Cancel buttons (6 pins)
- Diode indicator (3 pins)
- Clock (2 pins)
- 22 pins
Проекты
- 8bitcade - Мини игровая консоль на ардуино https://8bitcade.com/
- Радио
- mp3 плеер
- gsm телефон
- водонагреватель
- ...
Как проверить Arduino
Я работаю в Ubuntu Linux. Скачать последнюю версию IDE можно тут [1]. Запустите ./install.sh чтобы установить ярлыки для быстрого запуска.
sudo usermod -a -G dialout <username>
Убедитесь, что группа есть командой
groups
Иначе перелогиньтесь.
Присоедините Ардуину
ls -l /dev/ttyACM*
Должна быть в списке.
командой arduino запустите IDE. В примерах есть Blink.
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
Прошейте примером, и встроенный диод замигает, или же присоедините диод через резистор 200 кОм на землю и 13 пин.
Реле
Примером Blink можно проверить и реле. Питание +5 вольт, земля и сигнал на 13 пин.
Remote Control
С Ардуино кит поставляется пульт дистанционного управления HX1838 и датчик 1838B. К пульту необходимо приобрести батарейку CR2025.
1 - на 11 пин 2 - земля 3 - +5 вольт
Далее качаем либу [2] в zip и ставим ее через IDE (Скетч - Подключить библиотеку - добавить ZIP библиотеку).
ВНИМАНИЕ удалите библиотеку <путь к IDE>/libraries/RobotIRremote т.к. они конфликтуют.
Прошиваем скетчем, открываем Инструменты и монитор порта - смотрим результат.
#include "IRremote.h" int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' void setup() { Serial.begin(9600); Serial.println("IR Receiver Raw Data + Button Decode Test"); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); translateIR(); irrecv.resume(); } } void translateIR() // Car MP3 IR { switch(results.value) { case 0xFFA25D: Serial.println(" CH- "); break; case 0xFF629D: Serial.println(" CH "); break; case 0xFFE21D: Serial.println(" CH+ "); break; case 0xFF22DD: Serial.println(" PREV "); break; case 0xFF02FD: Serial.println(" NEXT "); break; case 0xFFC23D: Serial.println(" PLAY/PAUSE "); break; case 0xFFE01F: Serial.println(" VOL- "); break; case 0xFFA857: Serial.println(" VOL+ "); break; case 0xFF906F: Serial.println(" EQ "); break; case 0xFF6897: Serial.println(" 0 "); break; case 0xFF9867: Serial.println(" 100+ "); break; case 0xFFB04F: Serial.println(" 200+ "); break; case 0xFF30CF: Serial.println(" 1 "); break; case 0xFF18E7: Serial.println(" 2 "); break; case 0xFF7A85: Serial.println(" 3 "); break; case 0xFF10EF: Serial.println(" 4 "); break; case 0xFF38C7: Serial.println(" 5 "); break; case 0xFF5AA5: Serial.println(" 6 "); break; case 0xFF42BD: Serial.println(" 7 "); break; case 0xFF4AB5: Serial.println(" 8 "); break; case 0xFF52AD: Serial.println(" 9 "); break; default: Serial.println(" other button "); } delay(500); }
Ультразвуковой датчик hc sr04
const int Trig = 8; const int Echo = 9; const int ledPin = 11; // 13 – если будете использовать встроенный в Arduino светодиод void setup() { pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } unsigned int time_us=0; unsigned int distance_sm=0; void loop() { digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера delayMicroseconds(10); // Удерживаем 10 микросекунд digitalWrite(Trig, LOW); // Затем убираем time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=time_us/58; // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт if (distance_sm<50) // Если расстояние менее 50 сантиметром { digitalWrite(ledPin, 1); // Зажигаем светодиод } else { digitalWrite(ledPin, 0); // иначе тушим } delay(100); }
Сервопривод
#include <Servo.h> //используем библиотеку для работы с сервоприводом Servo servo; //объявляем переменную servo типа Servo int deg = 0; void setup() //процедура setup { servo.attach(10); //привязываем привод к порту 10 } void loop() //процедура loop { servo.write(deg); //ставим вал под 0 delay(2000); //ждем 2 секунды deg = deg + 10; if (deg > 360) { deg = 0; } }
Шаговый двигатель 28BYJ-48
Power: GND => -, +5V => + Control: IN1 => 8, IN2 => 9, IN3 => 10, IN4 => 11
#include <Stepper.h> // указываем количество шагов нашего мотора - в нашем случае 64 #define STEPS 64 // Создаем экземпляр класса Stepper, и указываем // количество шагов и пины подключния Stepper stepper(STEPS, 8, 9, 10, 11); // переменная для запоминания предыдущего значения int previous = 0; void setup() { // Устанавливаем скорость вращения в об/мин stepper.setSpeed(100); } void loop() { // новое значение полученное с датчика int val = analogRead(0); // При подключении датчика, 0 заменить на пин датчика // Прокрутить на разницу шагов между новым полученным значением и предыдущим stepper.step(val - previous); // Запоминаем новое полученное значение previous = val; }