Автор Тема: помощ за код за Arduino + ултразвуков сензор + реле  (Прочетена 13131 пъти)

importante

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
Здравейте!Наскоро си купих Arduino Uno R3, а контролер Atmega328.Подкарах първата схемка, която е за мигане на светодиод, и сега закупих един ултразвуков сензор HC-SR04 и искам да включвам чрез него реле, когато засече обект примерно на 50 см.Някой може ли да ми помогне с кода понеже съм твърде бос да го направя сам  :-[ .Изчетох доста по различни форуми или клипове, но повечето са за измерване на разстояние или със зумер или пък мигащ с определена честота светодиод в зависимост от дистанцията между сензора и предмета.

Разбрах че на пин trigg се пуска импулс с продължителност 10 мили секунди, след което на пин Echo получавам импулс с продължителност равна на разстоянието измерено от сензора.Аз не искам да измервам разстояние или да включва различни неща в зависимост от разстоянието, само да задейства реленце на от около 50см.Разбрах и че е нужна схема да управлява релето, понеже на ардуино платката силата на тока е около 40mA.От много ровене по търсачките и къде ли не това научих.Ако може някой ако е правил нещо подобно да ми помогне, или да промениме вече някой готов код.  :)
Мартин Костадинов
Skype - Optixam

nikman

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #1 -: Март 05, 2014, 09:34:42 pm »
Щом си намерил програмка за мерена на разстояние, най лесния начин е да сравниш получения резултат от мереното с разстоянието на което изкаш да сработи релето, съответно задаваш на пина на коуто то е закачено 0 лил 1 в зависимост от конкратната схема.

importante

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #2 -: Март 05, 2014, 09:45:41 pm »
Благодаря! Сега намерих една програма.Пали 2 светодиода.На единия ще свържа реле схемата. Добре обаче не разбирам в програмата кое определя разстоянието за да го променя.
Ето и кода:
#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 4) {  // This is where the LED On/Off happens
    digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off
  digitalWrite(led2,LOW);
}
  else {
    digitalWrite(led,LOW);
    digitalWrite(led2,HIGH);
  }
  if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distance);
    Serial.println(" cm");
  }
  delay(500);
}
Мартин Костадинов
Skype - Optixam

ZiGi88

  • Робо-Новак
  • *****
  • Публикации: 13
    • Профил
    • http://www.cyber-point.net
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #3 -: Март 06, 2014, 07:52:30 am »
Цитат
Добре обаче не разбирам в програмата кое определя разстоянието за да го променя.

if (distance < 4)
Проверка дали разстоянието е по-малко от 4 см.

А това:

  if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distance);
    Serial.println(" cm");

прави проверка дали разстоянието е между 0 и 200 см включително.  Ако е, изписва на серийния порт разстоянието в сантиметри, а ако не е изписва "Извън обхват".

importante

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #4 -: Март 06, 2014, 11:15:23 am »
Благодаря Ви! Предполагам че ако променя това 4, на 50 см. ще стане.В даташийта го дават до 4 метра максимално, на мен точност пък и не ми е и нужна чак толкова.Когато направя нещо ще споделя!  :) :)
Мартин Костадинов
Skype - Optixam

importante

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #5 -: Март 07, 2014, 10:40:00 am »
Стана!Промених от 4 на 40 и сега прихваща на по-далече.
Сега имам друг въпрос.Ако издумкам чипа (atmega328) мога ли да сложа после atmega8 или друг? И как се качва bootloader-a на него? ???
« Последна редакция: Март 07, 2014, 10:42:07 am от importante »
Мартин Костадинов
Skype - Optixam

Radev6

  • Новодошъл
  • *****
  • Публикации: 2
    • Профил
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #6 -: Март 09, 2014, 06:04:17 pm »
Може да го смениш с АТМега168 или отново с АТМега328, но за АТМега8 не съм много сигурен дали ще стане.

Ето тук http://arduino.cc/en/Tutorial/ArduinoISP е описано как може да качиш бултлоудър

importante

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #7 -: Март 10, 2014, 04:52:35 pm »
Благодаря за отговорите! Ето клип как работи при мен: http://www.youtube.com/watch?v=2NTSBa9eyRs&feature=youtu.be
Мартин Костадинов
Skype - Optixam

importante

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
Re: помощ за код за Arduino + ултразвуков сензор + реле
« Отговор #8 -: Март 18, 2014, 05:41:07 pm »
Здравейте! Рових се тези дни на разни места из нета и изрових някой материали и сглобих един код за ардуино, само не знам правилно ли е!
Идеята е 3 ултразвукови сензора да управляват по двойка светодиоди.Имаме 3 сензора и общо 6 светодиода.Два от сензорите палят съответната за тях двойка светодиоди при засечен обект на разстояние от 10 см.Другият сензор от своя страна пали останалите 2 светодиода при засечен обект на разстояние от 20 до 50 см. Идеята ми е сензора да гаси светодиодите при по малко от 20 см, но ако се отдалечи обекта над 50 см, пак да ги загаси.

#define trigPin1 13
#define echoPin1 12
#define led1 11
#define led2 10
#define trigPin2 9
#define echoPin2 8
#define led3 7
#define led4 6
#define trigPin3 4
#define echoPin3 5
#define led5 3
#define led6 2

void setup() {
  Serial.begin (9600);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
}


void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2)
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  duration = pulseIn(echoPin1, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 10) {
    digitalWrite(led1,HIGH);
  digitalWrite(led2,HIGH);
}
  else {
    digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
  }

  long duration, distance;
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2)
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration = pulseIn(echoPin2, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 10) {
    digitalWrite(led3,HIGH);
  digitalWrite(led4,HIGH);
}
  else {
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
  }

long duration, distance;
  digitalWrite(trigPin3, LOW);
  delayMicroseconds(2)
  digitalWrite(trigPin3, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin3, LOW);
  duration = pulseIn(echoPin3, HIGH);
  distance = (duration/2) / 29.1;

if (distance > 20)
{
digitalWrite(led5,HIGH);
digitalWrite(led6,HIGH);
}
else if (distance >= 20;distance < 50)
{
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
}

delay(500);
}
Мартин Костадинов
Skype - Optixam