Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control

Arduino за стрелки

<< < (2/38) > >>

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] Списък на темите

[#] Следваща страница

[*] Предходна страница

Премини на пълна версия