Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 11
1

Управление магнитофоном через Arduino Nano

09.04.2017, 20:32. Показов 4545. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть идея сопрячь телевизор и музыкальный центр. При включении телевизора, на порте USB появляется напруга, эту напругу регистрирует Нано, и подает короткий импульс на реле, которое в свою очередь соединена с кнопкой на центре. Когда телевизор выключается, 5 вольт пропадают и Нано снова дает короткий импульс, имитируя нажатие кнопки. По технической части все сделано, 5 вольт для питания ардуинки нашел, реле поставил, может кто подскажет по части кода?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2017, 20:32
Ответы с готовыми решениями:

Проблема с ответами от Arduino Nano через com порт
Добрый день, давно написал UI на WinForms для отправки команд на контроллер шаговых двигателей, все...

Прошивка Atmega 2560 через arduino nano v3
Всем привет! Возникла такая ситуация: полетел bootloader на atmega 2560 . Программатора у меня нет....

Отправка данных с АПЦ Arduino Nano в Hiasm через COM-порт
Здравствуйте! У меня имеется готовая программа в Hiasm и АЦП для нее (на микроконтроллере Atmega8)...

Как залить бутлоадер в китайскую копию arduino nano v3.0(CH340) через копию UNO
Пришли 2 контроллера, китацские копии arduino nano 3 и UNO. Обе на CH340. Драйвера встали...

Управление Arduino через COM-port
Доброго времени суток! Решил освоить управление COM портом на ардуино и столкнулся с проблемкой....

31
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
14.04.2017, 10:07 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Ilnaz911 Посмотреть сообщение
Может не хватает напряжения что бы логический HIGH достичь?
Понятия не имею. Вы схему так и не показали. +5В подключили, а земля в воздухе болтается?
Цитата Сообщение от Ilnaz911 Посмотреть сообщение
если ардуинку от 3.3 В запитать
3.3 В это выход. Ардуину можно запитать тремя способами: от USB (стабилизированные 5 В), вывод "+5" (стабилизированные 5 В), вывод VIN (+7...+15 В). Напряжение 3.3 появится только тогда, когда ардуина запитана от USB.
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 11
14.04.2017, 23:24  [ТС] 22
Сергей 190,
Миниатюры
Управление магнитофоном через Arduino Nano  
0
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
15.04.2017, 10:16 23
Возможно не хватает питания от МузЦентра. На 13 пине есть светодиод. Он должен включаться параллельно с реле.
Отключите реле и посмотрите, моргает ли светодиод.
Отключите питание от МузЦентра и оставьте питание USB от компьютера.
Проверьте сработает ли реле напрямую от питания МузЦентра.
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 11
15.04.2017, 17:08  [ТС] 24
Сергей 190, сделал как Вы сказали, даже без реле светодиод не включается. Вообще как будто сгорела эта Нано. Но есть запас из ардуинок, проверил, залил, нет реакции. Может выводить значение в serial для мониторинга порта?
0
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
15.04.2017, 20:17 25
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int Control_voltage = 2;  // Пин контроля напряжения
int Rele = 13;    // Пин реле
int Pause = 500;  // время удержания реле
int Voltage = 0;  // Значение напряжения
int Status = 0;   // предыдущее значение напряжения
 
void setup() {
  pinMode(Control_voltage, INPUT); // инициализируем как вход
  pinMode(Rele, OUTPUT); // инициализируем как вЫход
  Serial.begin(9600);
}
 
void loop() {
  Voltage = digitalRead(Control_voltage);
 
  if (Control_voltage == HIGH && Status == 0) {
    Status = 1;
    digitalWrite(Rele, HIGH); //Включаем реле
    Serial.println("Relay On.");
    delay(Pause); //ждем
    digitalWrite(Rele, LOW); //вЫключаем реле
    Serial.println("Relay Off.");
  }
 
  if (Control_voltage == LOW && Status == 1) {
    Status = 0;
    digitalWrite(Rele, HIGH); //Включаем реле
    Serial.println("Relay On..");
    delay(Pause); //ждем
    digitalWrite(Rele, LOW); //вЫключаем реле
    Serial.println("Relay Off..");
  }
 
}
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 11
15.04.2017, 20:27  [ТС] 26
Сергей 190, тишина...
0
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
15.04.2017, 20:31 27
После строки 10
C++
1
Serial.begin(9600);
пишем
C++
1
Serial.println("Arduino works");
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 11
15.04.2017, 21:22  [ТС] 28
Сергей 190, он вывел эту надпись ведь

Добавлено через 18 минут
Сергей 190, сделал через analogRead, с костылями, но работает вроде бы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int Control_voltage = A2;  // Пин контроля напряжения
int Rele = 13;    // Пин реле
int Pause = 500;  // время удержания реле
int Voltage = 0;  // Значение напряжения
int Status = 0;   // предыдущее значение напряжения
int val = 0;      
 
void setup() {
  pinMode(Control_voltage, INPUT); // инициализируем как вход
  pinMode(Rele, OUTPUT); // инициализируем как вЫход
  Serial.begin(9600);
Serial.println("Arduino works");
}
 
void loop() {
  Voltage = analogRead(Control_voltage);
 
  if (Voltage > 300  & Status == 0) {
    Status = 1;
    digitalWrite(Rele, 1); //Включаем реле
    Serial.println("Relay On.");
    delay(Pause); //ждем
    digitalWrite(Rele, 0); //вЫключаем реле
    Serial.println("Relay Off.");
  }
 
  if (Voltage < 300 & Status == 1) {
    Status = 0;
    digitalWrite(Rele, 1); //Включаем реле
    Serial.println("Relay On..");
    delay(Pause); //ждем
    digitalWrite(Rele, 0); //вЫключаем реле
    Serial.println("Relay Off..");
  }
 
}
Добавлено через 14 минут
Сергей 190,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int Control_voltage = 2;  // Пин контроля напряжения
int Rele = 13;    // Пин реле
int Pause = 500;  // время удержания реле
int Voltage = 0;  // Значение напряжения
int Status = 0;   // предыдущее значение напряжения
 
void setup() {
  pinMode(Control_voltage, INPUT); // инициализируем как вход
  pinMode(Rele, OUTPUT); // инициализируем как вЫход
  Serial.begin(9600);
}
 
void loop() 
{
  Voltage = digitalRead(Control_voltage);
 
  if (Voltage == HIGH && Status == 0) {
    Status = 1;
    digitalWrite(Rele, HIGH); //Включаем реле
    Serial.println("Relay On.");
    delay(Pause); //ждем
    digitalWrite(Rele, LOW); //вЫключаем реле
    Serial.println("Relay Off.");
  }
 
  if (Voltage == LOW && Status == 1) {
    Status = 0;
    digitalWrite(Rele, HIGH); //Включаем реле
    Serial.println("Relay On..");
    delay(Pause); //ждем
    digitalWrite(Rele, LOW); //вЫключаем реле
    Serial.println("Relay Off..");
  }
  
}
исправил Control_voltage на Voltage, тоже работает, но как то без пауз, постоянно включает и выключает при наличии напряжения. А насчет общего минуса, музЦентр и телевизор соединены тюлпанами для виделсигнала и AUXом от телека к входу МЦ.
0
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
15.04.2017, 21:35 29
Цитата Сообщение от Ilnaz911 Посмотреть сообщение
исправил Control_voltage на Voltage
Не понял. "Control_voltage" это номер пина. "Voltage" это имя переменной.
Цитата Сообщение от Ilnaz911 Посмотреть сообщение
постоянно включает и выключает...
странно... строка 16 напишите
C++
1
Serial.println(Voltage );
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 11
15.04.2017, 22:25  [ТС] 30
Сергей 190, вот что выдало

Не по теме:

Relay On..
Relay Off..
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
Relay On.
Relay Off.
0
Relay On..
Relay Off..
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
Relay On.
Relay Off.


Нужно код остановить и в режим ожидания переводить

Добавлено через 32 минуты
Сергей 190, нашел в чем проблема. Нужно что то вроде debounce что бы от плохого контакта на проводах значение напряжения не гуляло. А причину многократного выполения команды решил просто отключив монитор порта
0
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
16.04.2017, 11:51 31
Судя по скриншоту, программа выполняет то, что от нее требуется.
Как только «Voltage ==1», должно быть выполнено «Relay On. Relay Off.»
Как только «Voltage ==0», должно быть выполнено «Relay On.. Relay Off..».
Но изначально подразумевалось, что после «Relay On. Relay Off.» должны быть единицы. У Вас нули.
Напишите сразу после
C++
1
void loop() {
или в самом конце
C++
1
delay(2000);
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 11
17.04.2017, 22:19  [ТС] 32
Сергей 190, Все отлично работает, благодарю
0
17.04.2017, 22:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2017, 22:19
Помогаю со студенческими работами здесь

Управление Микротиком с радиобрелка через Arduino
Добрый день! Есть задача отключения ipsec канала на Mirotik с помощью радиобрелка. Для решения...

Управление светодиодом Arduino через браузер
Уважаемые програмисты кто подскажет Делаю кнопку через client.println(&quot;&lt;button...

Управление двумя платами Easydriver с Arduino через HC-05
Здраствуйте.Помогите новичку.Имеются 2а шаговых шилда easydriver v44, arduino r3, блютус hc-05 и 2а...

Arduino Nano
Всем привет, прикупил себе китайскую ардуино нано и возникли проблемы с установкой драйверов, хотя...

Arduino Nano, I2C
Привет бойцы невидимого фронта. Проблема такова, у меня есть часы реального времени DS1307, и...

Тестировщик на Arduino Nano
Доброго времени, нужен элементарный скетч на тестировщик, однако по алгоритму и уточнить ряд...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru