Автор Тема: Arduino за стрелки  (Прочетена 56350 пъти)

pavel75

  • КЖМ - България
  • Trade Count: (18)
  • Hero Member
  • *****
  • Публикации: 1812
  • Рейтинг: 264
  • HO; IV и V; BDZ, BG; София
Re: Arduino за стрелки
« Отговор #165 -: 31 Август 2018, 21:26:15 »
Цитат на: mitko0888 link=topic=4987.msg112560#msg112560 date=1535725863
Не те разбрах: опитваш се да качиш нова програма, т.е. да запишеш нов проект? И компютърът ти казва че не може?

Общо взето - ДА. Трябваше да кача нова програма, за да оправя грешката. Оправих се. Разкачих модула и ардуиното започна да "чува". Обаче май съм прецакал този модул. Докато дойде нов за сега спирам с тези опити.

mitko0888

  • Trade Count: (35)
  • Hero Member
  • *****
  • Публикации: 2385
  • Рейтинг: 970
  • H0, еп. I, II, III, IV, София
    • Снимките ми ...
Re: Arduino за стрелки
« Отговор #166 -: 31 Август 2018, 22:11:19 »
Когато защкачаш различни платки на USB порта, най-често те се виждат на различни COM портове. Т.е. като заредиш една програма на едното ардуино, след това като заредиш друга програма на другото ардуино, трябва за второто отново да си избереш ком порта. И така всеки път като сменяш платките с ардуиното.
Модул можеш да прецакаш с отверка, с чук, с поялник и т.н. Може и с грешно свързване, но обикновено като свържеш един път едни жици повече не се пипат и не може ад гръмне от програми.

pavel75

  • КЖМ - България
  • Trade Count: (18)
  • Hero Member
  • *****
  • Публикации: 1812
  • Рейтинг: 264
  • HO; IV и V; BDZ, BG; София
Re: Arduino за стрелки
« Отговор #167 -: 01 Септември 2018, 09:30:31 »
Проблемът е, че още не мога да разбера какви ги натворих.
Като разкача модула и ардуиното се държи нормално. Закачам му модулчето и ардуиното нито работи нито приема нова програма, само му мига постоянно вградения светодиод.
Трябва да го помисля малко. Сега отивам в клуба да поработя малко физическа работа, че нещо зациклих.

svetljjjo

  • Гост
  • Trade Count: (0)
Re: Arduino за стрелки
« Отговор #168 -: 02 Септември 2018, 22:15:35 »
Ако споделиш скрипта и схемата сигурно ще може повече да ти съдействаме евентуално  :good:

pavel75

  • КЖМ - България
  • Trade Count: (18)
  • Hero Member
  • *****
  • Публикации: 1812
  • Рейтинг: 264
  • HO; IV и V; BDZ, BG; София
Re: Arduino за стрелки
« Отговор #169 -: 03 Септември 2018, 10:33:42 »
Цитат на: svetljjjo link=topic=4987.msg112579#msg112579 date=1535915735
Ако споделиш скрипта и схемата сигурно ще може повече да ти съдействаме евентуално  :good:

За схемата използвам:

2 бр Ардуино Нано
1 бутон
1 серво моторче
2 бр допълнителен модул за Ардуино - НС 12

Свързани са по следния начин:

1. На първото ардуино на пинове 0 и 1 е включен модула НС 12, а на пин 4 бутона
2. На второто ардуино на пирове 0 и 1 е включен другият модул НС 12, на пин 4 е серво моторчето.

В началото направих съвсем проста програма, колкото да тествам комуникацията. /програмата е следващия пост/. При натискане на бутона от първото Ардуино, то изпраща код. Второто, когато приеме този код завърта сервото. Ето клипче как работеше:

https://www.dropbox.com/s/vqtozdnidxngv1x/VIDEO0015.mp4?dl=0

Имаше малко ядове, че понякога като натиснех копчето, второто ардуино явно приемаше две команди и завърташе два пъти сервото. Това знаех как да го оправя - с функцията millis щях да следя дали е минало някакво време от последното натискане на бутона - примерно 500 мсек и тогава да може повторно да прати код. Понеже не очаквах тук да имам затруднения с това не се хванах сега, а реших програмата малко да я развия и на второто Ардуино като завърти сервото да прати сигнал в коя посока го е врътнало. Ето тук допуснах грешка, че този код го сложих извън IF-a. Качих програмата и Ардуиното започна да излъчва постоянно сигнал. Видях си грешката, оправих кода и се опитах да го кача пак. При компилиране ми казваше, че всичко е ОК, но при качване имаше драма - тръгва да качва и стои много време. След това долу вадеше съобщение, че е направило 10 опита да се свърже с ардуиното и не е могло. Някъде четох, че тази функция  е малко тегава, защото докато излъчва не може да прави нищо друго. Нещо като функцията delay. Посъветваха ме да разкача модула НС12 и да пробвам. Направих го и се получи. Върнах първоначалният вариант на програмата, но вече не работеше. Когато приема или изпраща присветват вградени диоди за RX и TX. Това вече не се случваше.
Открих и още нещо - ако НС12 е закачено за Ардуиното дава същата грешка, че не може да качи програмата. Когато го махна този модул програмата се качва без никакви проблеми.
Сега ще кача и кода.

pavel75

  • КЖМ - България
  • Trade Count: (18)
  • Hero Member
  • *****
  • Публикации: 1812
  • Рейтинг: 264
  • HO; IV и V; BDZ, BG; София
Re: Arduino за стрелки
« Отговор #170 -: 03 Септември 2018, 10:39:17 »
КОД НА ПЪРВОТО АРДУИНО:

#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial Ardo1 (0, 1); //Пиновете за НС12

const int butonpin = 4;

void setup() {
  Ardo1.begin(9600);
  pinMode (butonpin,INPUT);
  pinMode (led_pravo, OUTPUT);
  pinMode (led_otklonenie, OUTPUT);
 
}

void loop() {
 
       int buton_push = digitalRead(butonpin);

             if(buton_push ==HIGH){
             Ardo1.println(15);
              }
             delay(200);
               
            }
}

КОД НА ВТОРОТО АРДУИНО:

#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial Ardo2 (0, 1); //Пиновете за НС12

const int pravo = 0;
const int diasno = 90;

const int servopin = 4;

// константа за периода на забавяне на върнете на сервото
const int period = 100;

//декрарираме сервото
Servo Strelka1;

//променливи за запомняне позицията на сервото
int pos = pravo; // текуща позиция
int pos_old = diasno; // предишна позиция


void setup() {
 
   Ardo2.begin(9600);
    Strelka1.attach(servopin); // закача сервото на пин 5
    Strelka1.write(pos); //сервото се обръща в права позиция
    delay (1000);
    Strelka1.detach();
   }

void loop() {
 
       if(Ardo2.available ()>1){
       int input = Ardo2.parseInt();
 
       if (input == 15)  {
       pos_old = pos; //запазва текущата позиция
 
       if(pos==pravo)
      {pos=diasno;}
      else{pos=pravo;}
      Ardo2.flush();
       
     if(pos_old<pos){
            Strelka1.attach(servopin);
            for(int i = pos_old + 1; i <=pos; i++){
              Strelka1.write(i); // записва следващата позиция на сервото
              delay(period); // забавяне
              //Ardo2.println(16);
              }
             Strelka1.detach();
      }
     
      if(pos_old>pos){
        Strelka1.attach(servopin);
       
             for(int i = pos_old - 1; i >=pos; i--){
             Strelka1.write(i); // записва следващата позиция на сервото
             delay(period); // забавяне
             Ardo2.println(17);
              }
              Strelka1.detach();
                  }
                     
      }
       
}   
       
}
           

VladoC

  • Trade Count: (0)
  • Jr. Member
  • **
  • Публикации: 64
  • Рейтинг: 42
Re: Arduino за стрелки
« Отговор #171 -: 03 Септември 2018, 10:55:18 »
"...Открих и още нещо - ако НС12 е закачено за Ардуиното дава същата грешка, че не може да качи програмата. Когато го махна този модул програмата се качва без никакви проблеми..."
Павка, мисля, че точно това ти е проблема. Когато програмираш Ардуино, задължително изключващ комуникационнивя модул!

pavel75

  • КЖМ - България
  • Trade Count: (18)
  • Hero Member
  • *****
  • Публикации: 1812
  • Рейтинг: 264
  • HO; IV и V; BDZ, BG; София
Re: Arduino за стрелки
« Отговор #172 -: 03 Септември 2018, 11:23:35 »
Цитат на: VladoC link=topic=4987.msg112582#msg112582 date=1535961318
"...Открих и още нещо - ако НС12 е закачено за Ардуиното дава същата грешка, че не може да качи програмата. Когато го махна този модул програмата се качва без никакви проблеми..."
Павка, мисля, че точно това ти е проблема. Когато програмираш Ардуино, задължително изключващ комуникационнивя модул!

Да, така ме посъветваха. Вече така го правя, но явно съм го съсипал нещо, защото вече не работи.

mitko0888

  • Trade Count: (35)
  • Hero Member
  • *****
  • Публикации: 2385
  • Рейтинг: 970
  • H0, еп. I, II, III, IV, София
    • Снимките ми ...
Re: Arduino за стрелки
« Отговор #173 -: 03 Септември 2018, 13:01:16 »
Павка, първо:
При качване на програмите през USB порта не трябва да има нищо закачено на пинове 0 и 1, или ако има нещо то да не им пречи. Независимо дали е HC12 или каквото и да е.
Другото е малко заигравка, на мен не ми харесва и ако можеш го напиши по друг начин, защото не ми е ясно:
- Какво прави Ardo2.println(16)?
- кой ти каза че можеш да използваш функциите от Serial в SoftwareSerial? Гледам Ardo2.parseInt(). Не казвам че не става, ама не съм сигурен.
Освен това при четенето на бутончето според мен задължително използвай макар и най-простата проверка, напр.
четеш бутона, ако е HIGH -> правиш delay(50), четеш пак бутона. Ако пак е HIGH приемаш че е натиснат. Не е нужно да използваш debounce, но поне това сложи, върши работа.
А и на бутоните е добре единият край да е на минус, на маса, на земя или както се нарича. За да не гърми плюса при късо. Тогава при натиснат бутон ще четеш LOW. При инициализацията го правиш pinMode(5, INPUT_PULLUP);
Другото е добре да го оправиш във второто ардуино - като му дадеш една команда да не се бърка докато не я изпълни и дойде втора.

pavel75

  • КЖМ - България
  • Trade Count: (18)
  • Hero Member
  • *****
  • Публикации: 1812
  • Рейтинг: 264
  • HO; IV и V; BDZ, BG; София
Re: Arduino за стрелки
« Отговор #174 -: 03 Септември 2018, 14:03:18 »
Цитат на: mitko0888 link=topic=4987.msg112584#msg112584 date=1535968876
Павка, първо:
При качване на програмите през USB порта не трябва да има нищо закачено на пинове 0 и 1, или ако има нещо то да не им пречи. Независимо дали е HC12 или каквото и да е.
Другото е малко заигравка, на мен не ми харесва и ако можеш го напиши по друг начин, защото не ми е ясно:
- Какво прави Ardo2.println(16)?
- кой ти каза че можеш да използваш функциите от Serial в SoftwareSerial? Гледам Ardo2.parseInt(). Не казвам че не става, ама не съм сигурен.
Освен това при четенето на бутончето според мен задължително използвай макар и най-простата проверка, напр.
четеш бутона, ако е HIGH -> правиш delay(50), четеш пак бутона. Ако пак е HIGH приемаш че е натиснат. Не е нужно да използваш debounce, но поне това сложи, върши работа.
А и на бутоните е добре единият край да е на минус, на маса, на земя или както се нарича. За да не гърми плюса при късо. Тогава при натиснат бутон ще четеш LOW. При инициализацията го правиш pinMode(5, INPUT_PULLUP);
Другото е добре да го оправиш във второто ардуино - като му дадеш една команда да не се бърка докато не я изпълни и дойде втора.

При качване на програмите през USB порта не трябва да има нищо закачено на пинове 0 и 1, или ако има нещо то да не им пречи. Независимо дали е HC12 или каквото и да е. - Това го научих по трудния начин
Другото е малко заигравка, на мен не ми харесва и ако можеш го напиши по друг начин, защото не ми е ясно:
- Какво прави Ardo2.println(16)? - Това беше да праща сигнал към първото ардуино. Виж, че е в коментар сега. Забравил съм да го изтрия
- кой ти каза че можеш да използваш функциите от Serial в SoftwareSerial? Гледам Ardo2.parseInt(). Не казвам че не става, ама не съм сигурен. - Гледах примерите от този сайт - https://www.instructables.com/id/Long-Range-18km-Arduino-to-Arduino-Wireless-Commun/
Освен това при четенето на бутончето според мен задължително използвай макар и най-простата проверка, напр.
четеш бутона, ако е HIGH -> правиш delay(50), четеш пак бутона. Ако пак е HIGH приемаш че е натиснат. Не е нужно да използваш debounce, но поне това сложи, върши работа. - Да, това го знаех като проблем, но щях да го оправя по-натам. Сега исках да тествам нещата, който не съм правил никога.
А и на бутоните е добре единият край да е на минус, на маса, на земя или както се нарича. .... Бутона е вързан по следния начин - единият извод е на захранването, другият на пина на ардуиното, като самият пин през съпротивление 1 килоом е вързан на маса.
Другото е добре да го оправиш във второто ардуино - като му дадеш една команда да не се бърка докато не я изпълни и дойде втора.

Тъпото е, че не разбрах какво му направих на тоя модул. Ако знаех как и с какво съм го изгорил или каквото му се е случило щях следващият път да го избегна. Сега като не съм наясно може пак да свърша същата тъпотия.

mitko0888

  • Trade Count: (35)
  • Hero Member
  • *****
  • Публикации: 2385
  • Рейтинг: 970
  • H0, еп. I, II, III, IV, София
    • Снимките ми ...
Re: Arduino за стрелки
« Отговор #175 -: 03 Септември 2018, 17:24:36 »
Съйтът, който показа, според мен хич не е за гледане.

Не съм сигурен че си гръмнал модула. Най-вероятно си е жив и здрав. Не знам как го тестваш. Сложи си по едно бутонче и по един светодиод на всяка платка и си провери комуникацията с две кратки програмки, може и готови.

Според мен трябва да си преправиш всичко:
D0 и D1 да не ги използваш. Те сe използват от ардуиното за разни други неща.
println(16) пишеш че си го коментирал, ама същото стои по-долу. println(17) БИ ТРЯБВАЛО да изпрати ASCII поредицата "17" и след нея \r\n. По същия начин изпращаш "15" пък после се мъчиш да го превърнеш с функция от друг обект в integer и т.н. Съветвам те да гледаш официалната arduino страница - там ги има описани функциите, както и на какви чипове и платки работят (ако има разлика). Всичко друго може и някъде с нещо да стане, може и не. На мен ми хареса https://www.allaboutcircuits.com/projects/understanding-and-implementing-the-hc-12-wireless-transceiver-module/ за това НС12.

svetljjjo

  • Гост
  • Trade Count: (0)
Re: Arduino за стрелки
« Отговор #176 -: 04 Септември 2018, 00:00:41 »
Аз обаче не схващам това защо така сложно се прави
беше коментирано че едно ардуино може да управлява няколко серво
а ти ползваш две за едно и радио модули вместо прости жици .
Това има ли конкретна цели или ?!?

Иначе винаги ще има проблеми при качване на програмата когато към пиновете 0 и 1 които са RX и  TX  е закачен модул който също има процесор какъвто е твоя в случая .
Ако е закачен такъв без собствен процесор няма проблеми може да си стои .

Off-Topic:
Съйтът, който показа, според мен хич не е за гледане.

Защо бе Митко  кво му е на сайт аз съм доста доволен от него там всички проекти са работещи
няма да коментираме до колко са изпълнени най оптимално или функционално това е въпрос на умения и знания
А освен това можеш да правиш запитвания и да получиш отговори ако нещо не се получава на твоя бедбоард .

А и нещо важно за беглия поглед който хвърлих на проекта вижда се че автора ползва пинове 2 и 3 за RX и  TX на модула
а не 0 и 1  :)
« Последна редакция: 04 Септември 2018, 00:10:32 от svetljjjo »

pavel75

  • КЖМ - България
  • Trade Count: (18)
  • Hero Member
  • *****
  • Публикации: 1812
  • Рейтинг: 264
  • HO; IV и V; BDZ, BG; София
Re: Arduino за стрелки
« Отговор #177 -: 04 Септември 2018, 08:33:26 »
Цитат на: svetljjjo link=topic=4987.msg112591#msg112591 date=1536008441
Аз обаче не схващам това защо така сложно се прави
беше коментирано че едно ардуино може да управлява няколко серво
а ти ползваш две за едно и радио модули вместо прости жици .
Това има ли конкретна цели или ?!?
............

.........

Аз не съм си и помислял да слагам на всяко серво ардуино, ще си бъдат по няколко.
Гарата ще е с 10 модула. На тези със стрелки ще има по едно ардуино. От всяко ардуино трябва да има жици към таблото. Исках да пробвам с радио модула да си спестя жиците към таблото. Тук е едно серво докато разуча нещата.

mitko0888

  • Trade Count: (35)
  • Hero Member
  • *****
  • Публикации: 2385
  • Рейтинг: 970
  • H0, еп. I, II, III, IV, София
    • Снимките ми ...
Re: Arduino за стрелки
« Отговор #178 -: 04 Септември 2018, 10:28:14 »
Цитат на: svetljjjo link=topic=4987.msg112591#msg112591 date=1536008441
Защо бе Митко  кво му е на сайт аз съм доста доволен от него там всички проекти са работещи
няма да коментираме до колко са изпълнени най оптимално или функционално това е въпрос на умения и знания
А освен това можеш да правиш запитвания и да получиш отговори ако нещо не се получава на твоя бедбоард .

А и нещо важно за беглия поглед който хвърлих на проекта вижда се че автора ползва пинове 2 и 3 за RX и  TX на модула
а не 0 и 1  :)
Разгледах му сорсовете, затова не ми харесва. А дали едно нещо работи или не - аз предпочитем от начало да не тръгвам по грешен път, пък после да си троша главата как да се оправя.

То и в багажника на мерцедеса влизат торби с цимент, амо това не значи че ако ще возя цимент ще си купя мерцедес ... и след това да им пиша каква калъфка да си постеля.

Мисля че в официалня реф. на ардуиното достатъчно точно е казано какво и как се прави със софт серийните неща. Има си и примери, и всичко.

А пък пинове 0 и 1 не могат да се ползват, ако използавш Serial. Те се управляват директно от библиотеката.

svetljjjo

  • Гост
  • Trade Count: (0)
Re: Arduino за стрелки
« Отговор #179 -: 04 Септември 2018, 18:52:04 »
Значи може да се направи с жици няма да са от всяко ардуино към таблото
а ще са само две жици и всички ардуинута ще се закачат успоредно на тях така нареченото I2C
и управляващото ще е мастър всички останали са слейв има ги такива примери много

http://www.techbitar.com/how-to-network-many-arduinos-with-sensors-using-i2c.html
http://fab.academany.org/2018/labs/fablabopendot/students/laura-cipriani/assignment/week014.html

Разбира се и с радиомодулите или блутут те са същите по размер ще стане
както си го почнал .

Аз търся грешки в програмата така

за индикация ползвам сериал монитор на Ардуино средата
и на възлови точки от програмата след като си стартирал
Serial.begin(9600);

слагам   
Serial.println("..redy1");
Serial.println("..redy2");
Serial.println("..redy3");
И на сериал монитора ще ти излезе  ..redy1..redy2..redy3
и така разбирам къде забива програмата и ако не видя нещо грешно слагам на това място след всеки ред от програмата по едно
Serial.println("..redyххххх");
така се хваща точния ред .

Защото и аз както Митко каза по горе мисля че няма как да прецакаш модула софтоерно
може да се прецака при грешно захранване примерно.

Мисля че просто програмата забива някъде може би на някой IF
това което пращаш не отговаря на сравнението или нещо подобно

А и смени пиновете вместо
SoftwareSerial Ardo1 (0, 1); //Пиновете за НС12
ги смени с 2 и 3
SoftwareSerial Ardo1 (2, 3); //Пиновете за НС12
и закачи  НС12 на 2 и 3 пин
« Последна редакция: 04 Септември 2018, 18:56:28 от svetljjjo »