SaintYGL

Лампа с беспроводным управлением на Arduino

3 сообщения в этой теме

SaintYGL    0

Здравствуйте!

Данная тема посвящена разработке устройства, имеющего название "Лампа с беспроводным управлением на Arduino".

Краткая предыстория: я - студент последнего курса техникума, а данная тема - мой дипломный проект. Выбран был в спешке, далеко не самое дальновидное решение, как показала практика, особенно с учётом того, что тема была взята здесь же, на сайте паяльник, в этой статье, и имела незаконченное состояние, из-за чего сейчас и возникают большие неприятности. 

Концепция: устройство имеет Bluetooth-модуль, по которому соединяется с телефоном, посредством чего и осуществляется беспроводное управление. Также к Arduino подключено двухканальное реле, которое переключает ток, идущий к патронам, в которые вкручены лампы. По команде, переданной по bluetooth, реле переключается в одно из положений (обе выкл.  / 1 вкл, 2 выкл. / 1 выкл, 2 вкл. / обе вкл.)

Загвоздки: 1) В статье всё осуществляется с помощью отдельного микроконтроллера ATMega 328p, расположенного на макетной плате, в то время как Arduino используется лишь как программатор. Мне же необходимо, чтобы данное устройство работало не с отдельным микроконтроллером, а с самой Arduino. Кварцевый резонатор в ней есть, кнопка есть, диоды есть, bluetooth-модуль и реле докуплены.

2) Если копировать код из статьи (а точнее перепечатать его со скриншота) и вставить в Arduino IDE, то появятся следующие ошибки: 

Lamp: 5: error: a function-definition is not allowed here before '{' token

D: \ Saint \ \ \ \ \ \ \ "\ \ \ \ \ \ \ \ \ Lamp \ Lamp.ino: In function 'void loop ()':

Lamp: 16: error: 'incomingInt' was not declared in this scope

Lamp: 27: error: 'class HardwareSerial' has no member named 'printIn'

Lamp: 30: error: expected '}' at end of input

 

Сам код, чтобы его не нужно было также перепечатывать со скриншота:

#include <Wire.h> 
int incomingInt = 0 
void setup ( ) 
{ 
Serial.begin (9600) ; 
Serial.setTimeout (1000) ; 
pinMode (7, OUTPUT) ; 
pinMode (5, OUTPUT) ; 
} 
void loop ( ) 
{ 
if (Serial.available ( ) > 0) 
{ 
incomingInt = Serial.parseInt (); 
if (incomingInt = 500) 
{ 
digitalWrite (5, HIGH) ; 
} 
else digitalWrite (5, LOW) ; 
if (incomingInt == 422) 
{ 
digitalWrite (7, HIGH) ; 
} 
else digitalWrite (7, LOW) ; 
Serial.printIn(incomingInt) ; 
} 
} 

 

На данный момент это всё, по мере развития проекта тема будет мной дополняться. Также я буду рад любому совету, который поможет разобраться с этим устройством. Связаться со мной можно через ВКонтакте: vk.com/sainty_gl

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    769
18 минут назад, SaintYGL сказал:

Лампа с беспроводным управлением на Arduino

18 минут назад, SaintYGL сказал:

устройство имеет Bluetooth-модул

Ардуйня там даром не нужна. Берем ESP8266, получаем Wi-Fi соединение. При желании подключаем к нему Bluetooth модуль, получаем Wi-Fi+Bluetooth (хотя синезубое управление нафиг никому не нужно). В итоге имеем гораздо более гибкую платформу по меньшей цене плюс на порядок меньшие габариты. А с ардуйней в качестве управления проект изначально мертворожденный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TranceSmile    5
#include <Wire.h> 
int incomingInt = 0 
void setup ( ) 
{ 
	Serial.begin(9600) ; 
	Serial.setTimeout(1000) ; 
	pinMode(7, OUTPUT) ; 
	pinMode(5, OUTPUT) ; 
} 
void loop ( ) 
{ 
	if (Serial.available ( ) > 0) 
	{ 
		incomingInt = Serial.parseInt (); 
		if (incomingInt == 500) 
		{ 
			digitalWrite(5, HIGH); 
		} 
		else digitalWrite(5, LOW); 
	if (incomingInt == 422) 
	{ 
		digitalWrite(7, HIGH) ; 
	} 
	else digitalWrite (7, LOW) ; 
	Serial.println(incomingInt) ; 
	} 
} 

найдите пару отличий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: AronIIStone
      Добрый день
      Возникла ситуация: имеется ноутбук IBM ThinkPad t20 с запароленым Bios. Пароль никто не помнит, но он зашит в 24rf08. Его можно прочитать програмкой для считывания данной микросхемы, но для этого нужен программатор. Можно ли использовать в качестве такого программатора Ардуино, чтобы он вопринимался этой программой как надо, и если можно, то как нужно подключить их и какой скетч залить в ардуинку? 
      Саму программу выложу чуть позже, если необходимо - с мобильника сижу. 
      Спасибо 
    • Гость Кирилл
      Автор: Гость Кирилл
      Здравствуйте.
      Дальше много букв, но они необходимы для полной картины.
      У меня есть генератор прямоугольных импульсов с переменной частотой. Питается он на 2х батарейках типа L1154 соединенных последовательно. напряжение этих батареек - 1,5 в а вот силу тока нет возможности измерить, знаю только то, что питает два светодиода средней яркости(параллельно соединены), и то что ёмкость каждой из батареек L1154 около 300мАч. Кнопка стоит между минусом батареек и микропроцессором(скорее всего от батарей ещё идёт провод на процессор напрямую, но это неточно). С процессора выходит один контакт, к которому подключены минусы светодиодов, а плюсы уже идут к плюсу батарей. При первом нажатии на кнопку диоды загораются, при втором начинают часто мигать (4гц), при третьем нажатии мигают реже(2гц), а четвертое нажатие отключает.
      Нужно было усилить ток, при помощи двух NiMH аккумуляторов 1,2в, 850мАч для подключения дополнительных светодиодов... Горе-электрики посоветовали мне подключить аккумуляторы напрямую, вместо тех батареек. Микросхема после 10 секунд яркого горения светодиодов благополучно перестала работать. Осталась ещё одна такая же микросхема, я не хочу её сжечь. Помогите пожалуйста разработать схему для усиления силы тока на вывод для подключения светодиодов. Я думаю взять управляющий сигнал с одного из светодиодов(убрать один из них для экономии заряда L1154, а второй оставить для индикации выхода сигнала с микропроцессора) и его уже усиливать.
      Читать схемы умею. Но понятия о характеристиках необходимых элементов(резисторов, транзисторов, светодиодов), разве что светодиоды должны быть соответствовать аккумуляторам, дабы светить всю ночь(4-5ч) без подзарядки. Как понимаете усилитель тоже должен быть энергоэффективным. 

      Спасибо.
      З.Ы. мне показалось или вместо слова "микропроцессор"  мне нужно было использовать слово "таймер"(?)

    • Автор: myhhyk
      Всем здравствуйте. Захотелось считать,в целях саморазвития, информацию с чипа DS2430A и заодно освоить способ связи по однопроводной шине. Посмотрел даташит, много гуглил, вроде более менее понял.С чипом можно связаться по интерфейсу 1-wire. И я решил попробовать это провернуть с помощью ардуины. Написал скетч. Пока получается только считать сигнал присутствия ведомого на шине,а считать из памяти ничего не получается,выдаются одни единицы.Пробовал менять РОМ команды,начинать со старшего бита,младшего,всё равно ничего не получается .Нужна хэлпа, подскажите пожалуйста, где мог допустить ошибку в скетче. И еще если можно мб какую нибудь литературу.
      /*Подключить пин Мастера надо через полевой транзистор, чтобы отпускать линию было проще   для прерывания будет использоваться пин №2 на плате(0 по обозначению)   Подключаемся к DS2430A*/ unsigned long save;//переменная для хранения времени byte pinMas = 5;//пин мастера volatile byte pinRead = 6;// пин для чтения линии volatile boolean infa = 1;//пин для хранения состояния линии byte adr[256] = {};//массив для хранения данных int i; /***********************************************************/ void reader() //для записи состояния линии {   infa = digitalRead (pinRead);//  считвываем состояние линии } /***********************************************************/ void pulseReset() {   delayMicroseconds(480);//заряжаем линию, ждём 500 мкс   /*___________________________________________________________________*/   digitalWrite(pinMas, 0); //подаем 0, открываем полевик=опускаем линию на ноль   delayMicroseconds(480);//ждём 480 мкр   digitalWrite (pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию   infa = 1;//чтобы в значение линии не сохранился ноль, когда линию дёргает ведущий   delayMicroseconds (15);//ждём переходный процесс 15 мкр   /*___________________________________________________________________*/   save = micros();   while (micros() - save < 240) {};//Здесь должно сработать прерывание и сохранение значения переменной   Serial.print("Presence = ");//выводим состояние линии, если ведомый опустит линию, то   Serial.println(infa);       //в infa запишется ноль } void comWr0()//передача нуля { digitalWrite(pinMas, 0); //подаем 0, открываем полевик=>опускаем линию на ноль   delayMicroseconds(80);//ждём 80 мкc   digitalWrite(pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию   delayMicroseconds(20);//ждём переходный процесс 15 мкр } void comWr1()//передача единицы {   digitalWrite(pinMas, 0); //подаем 0, открываем полевик=>опускаем линию на ноль на 2 мкс   delayMicroseconds(3);//ждём 3 мкc   digitalWrite(pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию   delayMicroseconds(90);//ждём переходный процесс 90 мкc } int comRead() {   digitalWrite(pinMas, 0); //подаем 0, открываем полевик=>опускаем линию на ноль на 2 мкс   delayMicroseconds(2);//ждём 2 мкc   digitalWrite(pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию   delayMicroseconds(15);   infa = digitalRead(pinRead);//читаем линию   return infa;//возвращаем значение переменной infa   delayMicroseconds(48);//ждём переходный процесс 48 мкc } void setup() {   Serial.begin(9600);   attachInterrupt(0, reader, FALLING);   pinMode(pinMas, OUTPUT);   pinMode (pinRead, INPUT);   pulseReset();   /*******************************/   //comWr1(); comWr1(); comWr0(); comWr0(); comWr1(); comWr1(); comWr0(); comWr0();    comWr0(); comWr0(); comWr1(); comWr1(); comWr0(); comWr0(); comWr1(); comWr1();//SKIP ROM CCh с младшего бита   /*******************************/   comWr0(); comWr0(); comWr0(); comWr0(); comWr1(); comWr1(); comWr1(); comWr1();   //comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); comWr1();   //comWr1(); comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); //поcылаем AAh с младшего бита   /*******************************/   comWr0(); comWr0();  comWr0();  comWr0(); comWr0(); comWr0(); comWr0();  comWr0(); //посылаем адрес   for ( i = 0; i < 256; i++) //записываем значение состояний линии в массив   { comRead();     adr[i] = comRead();     /* Serial.print("Bit");       Serial.print(i);       Serial.print(" = ");       Serial.println(adr[i]);*/   }   for (i = 0; i < 256; i++) {     Serial.print("Bit");     Serial.print(i);     Serial.print(" = ");     Serial.println(adr[i]);   } } void loop() { }
    • Автор: Kudich
      Всех приветствую!
      Сам я программирую на стандартной среде ардуинки, и в одном проекте потребовалось увеличить частоту ШИМ на портах 5,6,9,10,11,13 Arduino Micro. На этой ардуино стоит Atmega32u4, есть тут знатоки avr? Как повысить частоту на этих пинах?