Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control
Arduino за стрелки
emilchaushev:
Ето и каталожния номер на крайния изключвател:
http://www.tme.eu/ro/details/msm-22/microcomut-cu-lama-cu-mont-prin-apas/ninigi/msw-22/
emilchaushev:
Та да подхванем контролера.
ето му схемата на всички варианти на пиновете
Ето и описанието на пиновете, както и възможните позиции и функции, които могат да изпълняват:
https://www.arduino.cc/en/uploads/Main/ArduinoNanoManual23.pdf
Всички лилавки портове могат да бъдат използвани, т.е. имаме 18/19 порта, на които трябва да включим серво, ключета за указване на посоката на сервото, и ако искаме светлинна индикация индикация. Тъй като всичко е въпрос на програмиране имаме няколко възможности:
1. да използваме ЦК ключе с което да задаваме посоката на езика на стрелката- при този вариант ще имаме 3 пина за стрелка (2 за посока и един за серво) или 5 пина ако искаме да имаме и индикация.... при този вариант на един контролер ще съберем 3 стрелки
2. ако изполваме маршрути и с един бутон оказваме маршрут, тогава с един бутон ще управляваме всички стрелки по маршрута. При този вариант може да имаме 8 серво машинки и 10 маршрута, но без обратна индикация. Индикацията можем да я вземем от например крайните изключватели (напомням, че е забранено да се захранват принадлежности от DCC верига). Така можем да покрием едната гърловина на поне 7 коловозна гара.
3. Има и трети вариант в който може да се закачат 6 сервота, 6 управляващи вериги и 6 индикатора за посоката на стрелката.
mitko0888:
--- Цитат на: emilchaushev link=topic=4987.msg108453#msg108453 date=1500639703 ---...
1. да използваме ЦК ключе с което да задаваме посоката на езика на стрелката- при този вариант ще имаме 3 пина за стрелка (2 за посока и един за серво) или 5 пина ако искаме да имаме и индикация.... при този вариант на един контролер ще съберем 3 стрелки
...
--- Край на цитат ---
Ако на ЦК ключетата едниният края е на „-“ - GND, ти трябват само по ЕДИН пин за управление на стрелка, и на него ще подаваш “-“ (GND) ако искаш да преместиш стерлката в “минусовото“ и положение, или няма да подаваш нищо (резистор към плюса) ако искаш стралката да отиде в нормалното си “плюсово“ положение (например). И още един пин за сервото.
emilchaushev:
Започвам стъпка по стъпка да опитам да обясня как се конфигурира контролера. Споменатото от Митко ще го обяснявам с конкретни примери при разглеждане вариантите на реализиране.
За да конфигурирате Ардуино ви е необходим безплатен софтуер (IDE). Чрез него пишете кода и го уплоудвате на контролера. Наличен е софтуер за windows, Linux, Mac OS X.
https://www.arduino.cc/en/Guide/HomePage
Инсталационната процедура за Windows: https://www.arduino.cc/en/Guide/Windows
Писането на кода е много подобен на С++
Първата стъпка ще е само едно серво свързано към Ардуино, за да тестваме различни комбинации:
Постановка И ЗА ДВАТА ПРИМЕРА:
Пример 1: Свързваме сервото към порт 9, караме сервото да се позиционира на 90 градуса
===================================
Кода:
#include <Servo.h> // compiler directive to get the servo library
Servo myservo; // създаваме обект серво, а с ПРОМЕНЛИВАТА "MYSERVO" ЩЕ ДОСТЪПВАМЕ И КОНТРОЛИРАМЕ ОБЕКТА
void setup() // setup функцията се изпълнява веднъж при стартиране
{
myservo.attach(9); // СВЪРЗВАМЕ СЕРВОТО КЪМ ПИН 9
myservo.write(90); // ПОЗИЦИОНИРАМЕ СЕРВОТО НА 90 ГРАДУСА
}
void loop() // функцията се изпълнява постоянно и последователно докато не се изключи захранването
{
// в случая не правим нищо
}
====================================
Пример 2: Свързваме сервото към порт 9, караме сервото да се завърта от 0 до 180 градуса и обратно на стъпки през един градус
====================================
Кода
#include <Servo.h> // compiler directive to get the servo library
Servo myservo; // създаваме обект серво
int pos=0 // променлива за съхранение на позицията на сервото
void setup() // setup функцията се изпълнява веднъж при стартиране
{
myservo.attach(9); // СВЪРЗВАМЕ СЕРВОТО КЪМ ПИН 9
}
void loop() //функцията се изпълнява постоянно и последователно
{
for(pos=0;pos,180;pos+=1) //преминава от 0 до 180 градуса през един градус
{
myservo.write(pos); //казва на сервото да се позиционира на позиция равна на pos
delay(15) //чака 15 ms сервото да достигне позицията
}
for(pos=180;pos>=1;pos-=1)// преминава от 180 до 0 градуса през един градус
{
myservo.write(pos); //казва на сервото да се позиционира на позиция равна на pos
delay(15) //чака 15 ms сервото да достигне позицията
}
}
emilchaushev:
Пример 3 със същата постановка: Сервото се върти от 0 до 180 и обратно с пауза от 2 секунди.
В този пример ще сменя умишлено името на обекта
#include <Servo.h> // compiler directive to get the servo library
Servo Servo1; // създаваме обект серво
void setup() // setup функцията се изпълнява веднъж при стартиране
{
myservo.attach(8); // СВЪРЗВАМЕ СЕРВОТО КЪМ ПИН 8
}
void loop() //функцията се изпълнява постоянно и последователно
{
Servo1.write(180); //казва на сервото да се позиционира на позиция равна на 180
delay(2000) //чака 2000 ms
Servo1.write(0); //казва на сервото да се позиционира на позиция равна на 0
delay(2000) //чака 2000 ms
}
Навигация
[0] Списък на темите
Премини на пълна версия