1. Контроллер своими руками

<< 12 45678910 >>

Посетитель





78 2
Palestinian Territory Ramallah
5 г. назад
1. Контроллер своими руками
В данной теме я постараюсь изложить материал так, чтобы он был доступен самому неопытному в части электроники и программирования пользователю.
Позже тема будет развиваться. В итоге я расскажу как изготовить устройство, которое по своим характеристикам не уступает тому, что можно преобрести в готовом исполнении. Точнее в готовом ничего даже близко подходящего Вы не найдете.

В качестве платформы будем использовать Arduino. Это устройство может работать как автономно (запитав его любым адаптером 7-12V или батарейкой), так и подключенным к компьютеру. Имеет 20 цифровых вводов/выводов, 6 из которых могут быть использованы как аналого-цифровые преобразователи, еще 6 могут работать в режиме широтно-импульсной модуляции. Встроенные интерфейсы I2C и SPI. И много чего еще. Более подробно: http://arduino.ru/Hardware/ArduinoBoardUno. Такая организация позволяет подключить к Arduino практически любое электронное приспособление. Простой язык программирования и наличие в сети готовых библиотек для популярных устройств позволяет без труда реализовать на базе Arduino любой проект.

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

Что нам понадобиться:
1. Контроллер Ардуино. Arduino на E-bay
Вариант Nano удобнее всего использовать в итоговом устройстве (стоит около 450р, есть варианты и дешевле, но по USB они напрямую не подключаются, поэтому лучше немного переплатить, и использовать более удобное). Для прототипирования лучше использовать UNO (цена ~600р)
2. Датчик влажности и температуры. Датчики DHT* на E-bay
Цена от 100р в зависимости от точности. Желательно использовать DHT21 или DHT22. У DHT11 погрешность измерения температуры +-2 градуса, что существенно.
3. Релейный модуль. Релейный модуль (цена от 100р)
Такие модули бывают от 1, 2, 4, 8 до 16 (видел и 32 для маньяков) выводов, т.е. чем больше устройств надо заюзають, тем больше модуль.
4. Резистор на 10 kOm 1шт. Купить можно в ближайшем магазине радиодеталей. Цена 3р (не в ближайшем 60коп ).
5. Провода. Удобные шнуры для датчика и соединений.

Не буду рассказывать об Arduino. Вот ссылка, где о нем есть несколько статей Амперка, которые позволят быстро подружить это устройство с компьютером (см. видео Первые шаги). Кстати кто не хочет связываться с E-bay по тем или иным причинам, практически все причендалы можно купить в их интернет магазине (не сочтите за рекламу).
Но поверьте, в покупках на E-bay нет ничего сложного. Правда ждать посылку придется около месяца, но зато бюджет устройства будет в разы меньше.

Так же нам понадобится библиотека для работы с датчиком, взять ее можно здесь: https://github.com/adafruit/DHT-sensor-library. Папку поместить в каталог libraries\ установленной программы Arduino

Вот прототип (его я собрал и запрограммировал за 5 минут из того, что валялось под рукой):


Подключение датчика (Подробно тут):
1-й пин датчика подключаем к 5v от Arduino
2-й пин датчика к 8-му (или любому понравившимуся) пину Arduino. Так же через резистро 10 кOm этот пин надо подтянуть к 5v.
3-й никуда не подключаем.
4-й пин к Земле.

Подлюкчаем Реле (все еще проще чем с датчиком).
1. Соединяем с питанием. На модуле будет указано, какой пин отвечает за 5v (VCC) и Землю (GND)
2. Цифровые пины Arduino подключаем к управляющим пинам модуля (In1, In2 и т.д.). В данном случае к 6 и 7.

Железо готово! Через реле подлючаем необходимые устройства и доставляем радость животному.


Мы использовали всего 3 из 18-ти возможных управляющих пинов. Это значит, что мы уже знаем как к тому же самому контроллеру подлючить еще 5 террариумов с независимым управлением (обладая более углубленными знаниями мы бы знали, как подлючить еще не один десяток...).

Чуть не забыл, вот текст программы, который надо загрузить в устройство, чтобы все заработало (программа максимально упрощена, для удобства восприятия и возможности внесений изменений. Используем простой принцип, если температура опустилась ниже указанной отметки, то включаем обогрев; с влажностью аналогично):

#include <DHT.h> // Подключаем библиотеку для работы с датчиком

#define DHTPIN 8 // Считывающий пин с датчика
#define DHTTYPE DHT11 // Модель датчика
#define tPIN 7 // Пин управления температурой
#define hPIN 6 // Пин управления влажностью

DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht

int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
int temp = 28; // Желаемая температура в градусах Цельсия (изменить на нужную)
int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
int hum = 45; // Желаемая влажность (изменить на нужную)

void setup() // инициализация основных данных
{
Serial.begin(9600); // Инициализируем COM-порт
dht.begin(); // Инициализируем датчик
pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
digitalWrite(tPIN, tStatus); // Притягиваем пин к начальному статусу (Выкл)
}

void loop() // зацикливание (код управляющей программы)
{
int h = dht.readHumidity(); // Считываем влажность
int t = dht.readTemperature(); // Считываем температуру
tStatus = (t < temp) ? LOW:HIGH; // Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл
digitalWrite(tPIN, tStatus);
if (h < hum) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл
digitalWrite(hPIN, hStatus);
delay(1000); // Задержка в 1 секунду
Serial.print("t="); Serial.print(t); Serial.print(" h="); Serial.println(h); // Отправляем информацю о климате на COM-порт
}


Примечание (бонус ). При подключении к компютеру с COM порта можно будет считать информацию о температуре и влажности в цифрах. В самой программе Arduino можно открыть COM-монитор с помощью меню Tools/Serial Monitor и с периодичность в 1 сек будет обновляться инфа о температуре и влажности

Итого: Мы потратили около 700р. Получив контроллер с возможностью расширения до 6 терров. Устройство работает как подключенное к компьютеру, так и без него при наличии питания.

Если тема будет интересна то:
1. В следующий раз я расскажу, как наше устойство "научить" работать со времененем. И в зависимости от времени суток менять характеристики климата, а так же к реле подключить Освещение, которое будет включаться утром и выключаться вечером (если у Вас останутся свободные каналы...).
2. И по нарастающей... LCD-Дисплей с информацией; эффект рассвета и заката; управление с пульта ДУ, ПК или сенсорной панели; использование транзисторов вместо реле для устройств работающих от малого постоянного тока; и пр.

С вопросами и пожеланиями не стесняемся. Кому интересно, помогу чем смогу.

Изменено 27-4-2012 автор CiberRus
2012-03-26 добавлено 26/03/2012 13:37:26#365640
Нравится DragonNagaina

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus


Спасибо большое. С пробелами разобрался.
Датчики еще в пути. Наверное пока оставлю как есть.

Кстати в скетче пришлось закоментировать
lcd.backlight(true); // Указываем использование подсветки экрана.
С этой строкой не компилируется. Это только у меня или еще у кого-нибудь?

Изменено 21-10-2012 автор Rust
2012-10-21 добавлено 21/10/2012 20:06:40#384751

Посетитель





78 2
Palestinian Territory Ramallah
5 г. назад
сообщение Rust
CiberRus

Кстати в скетче пришлось закоментировать
lcd.backlight(true); // Указываем использование подсветки экрана.
С этой строкой не компилируется. Это только у меня или еще у кого-нибудь?

Изменено 21-10-2012 автор Rust


Зависит от библиотек. Т.к. у меня были свободные выводы в сдвиговом регистре, то я решил задействовать возможность отключать подсветку экрана. Данная функция была добавлена энтузиастом в библиотеку LiquidCrystalExt, которую я заимствовал. Действительно в базовой библиотеке функция отсутствует.
Первоначальная статья скорректирована.
2012-10-23 добавлено 23/10/2012 23:36:57#384970

Новенький





46
Russian Federation Perm
5 г. назад
CiberRus


Спасибо,что не забываете тему.
Попробовал скомпилировать скорректированный вариант,но пока выдает ошибки. Хотя новую библиотеку добавил.
Т.к. еще не пришли все компоненты решил пока остановится. Учу матчасть. Продолжу уже в полной схеме,чтобы потом не возвращаться к отдельным узлам. Если Вам,конечно,не надоели мои вопросы.

Кстати, у меня часы это - "I2C RTC DS1307 AT24C32 Real Time Clock Module for arduino AVR PIC 51 ARM"

Там стоит 24C32N-SMD - Память: EEPROM; 32 Кб; I2C.
Выше уже писали,что энергонезависимая память EEPROM Ардуинки имеет
ограниченный ресурс перезаписи. Интересно можно ли её использовать в этом устройстве?

И еще один вопрос - если вместо сдвигающего регистра использовать готовую платку типа:
"IIC/I2C/TWI/SPI Serial Interface Board Module For Arduino 5V 1602 LCD Display"


сильно изменится скетч подключения LCD?
2012-10-25 добавлено 25/10/2012 18:41:59#385133

Посетитель





78 2
Russian Federation Moscow
5 г. назад
сообщение Rust
Там стоит 24C32N-SMD - Память: EEPROM; 32 Кб; I2C.
Выше уже писали,что энергонезависимая память EEPROM Ардуинки имеет
ограниченный ресурс перезаписи. Интересно можно ли её использовать в этом устройстве?

Конечно можно, она там для этого и добавлена.
При наличии подходящей библиотеки не сложнее чем с памятью в arduino.
Я сам не использовал, хотя такая приблуда имеется в загажнике. Но судя по обсуждениям все просто:
arduino.cc/forum/index.php?topic=90594.0


И еще один вопрос - если вместо сдвигающего регистра использовать готовую платку типа:
"IIC/I2C/TWI/SPI Serial Interface Board Module For Arduino 5V 1602 LCD Display"
сильно изменится скетч подключения LCD?

Такой вопрос уже поднимался. Изменится только строка инициализации, которую можно подсмотреть в примере библиотеки к девайсу.
2012-10-26 добавлено 26/10/2012 20:15:00#385232

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus


Добрый день.
Пока мои датчики и платы зависли на таможне в Пулково, решил попробовать подключить LCD через сдвигающий регистр.Но так как это мой первый опыт в таком деле, сразу к Ардуинке и LCD подключиться боюсь. Вдруг спалю. Подстветка будет включаться и отключаться кнопкой. Нарисовал предпологаемое подключение в Fritzing посмотрите пожалуйста правильно ли?

Пожалуйста сильно не ругайте. Повторяюсь, это первый опыт работы микропроцессорами.
2012-10-29 добавлено 29/10/2012 13:07:49#385513

Посетитель





78 2
Russian Federation Moscow
5 г. назад
сообщение Rust
CiberRus


Добрый день.
Пока мои датчики и платы зависли на таможне в Пулково, решил попробовать подключить LCD через сдвигающий регистр.Но так как это мой первый опыт в таком деле, сразу к Ардуинке и LCD подключиться боюсь. Вдруг спалю. Подстветка будет включаться и отключаться кнопкой. Нарисовал предпологаемое подключение в Fritzing посмотрите пожалуйста правильно ли?

Пожалуйста сильно не ругайте. Повторяюсь, это первый опыт работы микропроцессорами.


На первый взгляд все ровно (если не считать кнопку).
Попробуйте, не бойтесь, сколько я не мучил UNO, она до сих пор жива. Раз 10 точно ловил короткое замыкание, и ничего. Т.к. устройство разрабатывалось для школьников и студентов, то в нем изначально заложен запас прочности.


Теперь по поводу кнопки. В таком исполнении экран будет подсвечен только в момент нажатия и удержания кнопки, что конечно же не удобно. Даже если использовать кнопку-переключатель, то все равно не универсально. Нужно соединить контакт подсветки экрана с 7-ой ногой сдвигового регистра, а кнопку убрать к пину ардуино. Тогда у Вас будет возможность управлять подсветкой программно (к примеру отключать на ночь), а так же иметь возможность включить и отключить ее с помощью нажатия на кнопку.

Из рекомендаций:
1. Желательно подтянуть контакт SCLR к 5v и G к земле не напрямую, а через резисторы 10K (как в ссылке http://robocraft.ru/blog/arduino/541.html).
2. Если подсветку подключить напрямую к 5v, то она светит слишком ярко. Снизить ее яркость можно, подключив ее через резистор. Точно не помню, но что-то порядка 2-4КОм влияет на интенсивность.
3. Так же из схемы можно исключить потенциометр, заменив его подходящим резистором.

Примечание. По поводу коротких замыканий: Если вдруг во время очередного теста на arduino погас индикатор питания, это может быть следствием короткого замыкания. Следует как можно скорее отсоединить ее от сети детально перепроверить схему на предмет корректности. (Кратковременное замыкание 5v точно выдержит, но будьте предельно внимательны, когда в схеме будет участвовать большее напряжение, если контакт ардуино встретит 12v, то придется заказывать новую)
2012-10-29 добавлено 29/10/2012 20:01:53#385566

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus


Спасибо.


Из рекомендаций:
1. Желательно подтянуть контакт SCLR к 5v и G к земле не напрямую, а через резисторы 10K (как в ссылке http://robocraft.ru/... ).

Так и сделаю.

2. Если подсветку подключить напрямую к 5v, то она светит слишком ярко. Снизить ее яркость можно, подключив ее через резистор.
Точно не помню, но что-то порядка 2-4КОм влияет на интенсивность.

Хотел это сделать в окончательном варианте схемы.
3. Так же из схемы можно исключить потенциометр, заменив его подходящим резистором.

Я подумал,если со временем контрастность измениться, всегда можно будет подкорректировать.


Теперь по поводу кнопки. В таком исполнении экран будет подсвечен только в момент нажатия и удержания кнопки, что конечно же не удобно. Даже если использовать кнопку-переключатель, то все равно не универсально. Нужно соединить контакт подсветки экрана с 7-ой ногой сдвигового регистра, а кнопку убрать к пину ардуино. Тогда у Вас будет возможность управлять подсветкой программно (к примеру отключать на ночь), а так же иметь возможность включить и отключить ее с помощью нажатия на кнопку.

Здесь имелась ввиду кнопка с фиксацией положения вкл/выкл. Конечно это не универсально. Но я программно уж точно не смогу это сделать. Поэтому и пошел по пути наименьшего сопротивления. А к какому пину надо убрать кнопку,чтобы управлять подсветкой?


(Кратковременное замыкание 5v точно выдержит, но будьте предельно внимательны, когда в схеме будет участвовать большее напряжение, если контакт ардуино встретит 12v, то придется заказывать новую)

Спасибо за предупреждение. Пока питаюсь через USB. Но скоро придется переходить на внешний БП.

Изменено 29-10-2012 автор Rust

Изменено 31-10-2012 автор Rust
2012-10-29 добавлено 29/10/2012 22:56:34#385586

Посетитель





78 2
Palestinian Territory Ramallah
5 г. назад
сообщение Rust
А к какому пину надо убрать кнопку,чтобы управлять подсветкой?


Подробно изучите статью о кнопках. Если Вы встроите код с кнопками в общий скетч, то для управления подстветкой достаточно добавить пару строк.

1. Определяем глобальную переменную (перед блоком setup()), в которой будем хранить состояние подсветки. Установим начальное состояние подстветки экрана во вкл.

boolean backlight = true; // состояние подсветки
void setup()
{
...
lcd.backlight(backlight); // включаем подсветку при начале работы контроллера
...
}


2. Далее определяем действие, по нажатию на кнопку 2. В статье было специально отведено место под данную функцию

else if (lastButton2 == LOW && currentButton2 == HIGH) // Если было короткое нажатие на Кнопку №2 не в режиме редактирования, то можно выполнить какое либо действие, если описать его в фигурных скобках ниже
{
backlight = !backlight; // меняем значение переменной на противоположное.
lcd.backlight(backlight); // изменяем состояние подсветки экрана

}


Примечание. При прямом подключении lcd подсветкой тоже можно управлять. Если подключить контакт, отвечающий за подсветку на экране не к 5v, а к любому свободному пину arduino, то при подтягиванием его к 5v или к Земле соответственно включаем и отключаем подсветку.

Изменено 1-11-2012 автор CiberRus
2012-11-01 добавлено 01/11/2012 09:20:31#385764

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus



Подробно изучите статью о кнопках.

Спасибо,обязательно это сделаю.

Пока возникла другая проблема. Вчера получил датчики DHT22 подключил.Заработало на COM-порт,только после смены пина на Ардуино и без LCD. При подключении LCD, по схеме без сдвигающего регистра, все сбивается и виснет. На COM-порту тоже ничего не вижу. Сегодня вечером еще раз попробую. С регистром схему еще не собирал,хотя все уже подготовил. Что-то я засомневался по пинам в Ардуино подключаемым к DS; SH_CP; ST_CP; в схеме приведенной выше.
2012-11-02 добавлено 02/11/2012 09:11:14#385899

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus


Добрый день.
Устав бороться с пропаданием контактов на Breadboard, решил спаять макетку, в которую бы легко вставлялись LCD,микросхемы и т.д.
Спаял. Подключил регистр,LCD,DHT22. Заработало сразу. Опять поправил скетч с учетом Ваших замечаний. Еще раз спасибо большое.
Результат:



Только для входа с датчика пришлось использовать 9-й пин Ардуинки. Стало интересно почему же с восьмого не считывает?
Контакт проверил-есть. Т.к. у меня была еще одна UNO, решил проверить работает ли 8-й пин на ней. Вот тут и началось самое интересное.

А точнее - загружаю скетч и все. Не на LCD ничего, не на UNO диод не моргает. Вообщем тишина. Но скетч- то 100% рабочий.
Переключаюсь на старую UNO все работает. Такое впечатление,что не считывается данные с модуля RTC I2C DS1307. Может я конечно ошибаюсь,но загрузив один из первых скетчев где мы организовывая время используя системный таймер устройства. На COM порт выводятся данные с датчика и время.

До испытаний эта не работающая нормально Ардуинка прошла нормально тест на "Hello World" c LCD KeypadShieeld v.2.0.
Там ведь тоже подключение по "Two wire I2C" (А4 и А5 в нашем варианте), а следовательно данные с RTC I2C DS1307 должны считываться. Или я ошибаюсь?

Какие у знатоков есть мнения? Где искать дальше?
2012-11-04 добавлено 04/11/2012 15:02:56#386131

Посетитель





65
Russian Federation Moscow
10 г. назад
сообщение CiberRus
Предыдущий вариант устройства имел существенный недостаток. Он не умел хранить текущее время, и при любой манипуляции к нему необходимо было подносить компьютер, чтобы заново его установить.
Сегодня мы устраним его, добавив микросхему DS1307. Купить ее можно к примеру тут: DS1307 module, по цене от 200р. Ну или собрать самостоятельно из микросхемы и деталей ненужной материнской платы (батарейка пара резисторов и кварцевый резонатор)...
Библиотеку можно скачать тут: http://arduino.cc/forum/index.php?topic=93077.0

Подключение (на фото отсутствует батарейка, представим, что она там есть):

Модуль подключается к питанию контроллера, Vcc к 5v Gnd к земле.
SDA - к аналоговому входу А4 (линия данных)
SCL - к аналоговому входу А5 (линия тактирования)


Модуль может содержать еще несколько контактов, в зависимости от дополнительных функций, это пока не важно.

Осталось немного модифицировать скетч:
#include <DHT.h> // Подключаем библиотеку для работы с датчиком
#include <DS1307.h> // Подключаем библиотеку управления модулем реального времени

#define DHTPIN 8 // Считывающий пин с датчика
#define DHTTYPE DHT11 // Модель датчика
#define tPIN 7 // Пин управления температурой
#define hPIN 6 // Пин управления влажностью
#define lPIN 5 // Пин управления светом
#define sdPIN 3 // Пин управления светодиодной лентой

DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht

int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
int tempDay = 28; // Желаемая дневная температура в градусах Цельсия
int tempNight = 25; // Желаемая ночная температура в градусах Цельсия
int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
int humDay = 45; // Желаемая дневная влажность
int humNight = 40; // Желаемая ночная влажность

void setup() // инициализация основных данных
{
Serial.begin(9600); // Инициализируем COM-порт
dht.begin(); // Инициализируем датчик
pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
pinMode(hPIN, OUTPUT);
pinMode(lPIN, OUTPUT);
}

void loop() // зацикливание (код управляющей программы)
{
if (Serial.available() > 0) SetTime(); // Если на COM-порт поступила информация, то изменим системное время
float h = dht.readHumidity(); // Считываем влажность
float t = dht.readTemperature(); // Считываем температуру
int Hour = RTC.get(DS1307_HR,true); // Получаем значение текущего часа
int Minute = RTC.get(DS1307_MIN,false); // Получаем значение минут
int Second = RTC.get(DS1307_SEC,false); // Получаем значение секунд

boolean Day = (Hour >= 8 & Hour <20); // Если текущий час находится в промежутке от 8 до 20, то действуют дневные параметры
tStatus = (t < ((Day) ? tempDay : tempNight)) ? LOW:HIGH; // Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл
digitalWrite(tPIN, tStatus);
if (h < ((Day) ? humDay : humNight)) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл
digitalWrite(hPIN, hStatus);
digitalWrite(lPIN, (Day) ? LOW:HIGH); // Если дневное время, то включим подсветку
switch(Hour) // в зависимости от времени меняем яркость светодиодной ленты
{
case 7:analogWrite(sdPIN, map(Minute, 0, 59, 0, 255)); break;
case 20:analogWrite(sdPIN, map(Minute, 0, 59, 255, 0)); break;
default:analogWrite(sdPIN, (Day) ? 255:0);
}
Serial.print("t="); Serial.print(t, 1); Serial.print(" h="); Serial.println(h, 1); // Отправляем информацю о климате на COM-порт
Serial.print(addZero(Hour));Serial.print(":");Serial.print(addZero(Minute));Serial.print(":");Serial.println(addZero(Second)); // Отправляем информацию о времени на COM
delay(1000); // Задержка в 1 секунду
}

void SetTime() // установка времени из шаблона tчч:мм
{
if (Serial.read() == 't' // Если первый символ t, то установим указанное время
{
int h = (Serial.read() - '0' * 10 + (Serial.read() - '0';
Serial.read();
int m = (Serial.read() - '0' * 10 + (Serial.read() - '0';
RTC.stop();
RTC.set(DS1307_SEC,0); //set the seconds
RTC.set(DS1307_MIN,m); //set the minutes
RTC.set(DS1307_HR,h); //set the hours
RTC.start();

}
Serial.flush();
}

String addZero(int val) // Добавим 0 перед значением часа/минуты/секунды, если оно меньше 10
{
if (val<10) return "0" + String(val);else return String(val);
}


За одно немного улучшим функциональность:
1. Изменим тип переменных, хранящих текущую температуру и влажность с целочисленных, до вещественных. (int меняем на float). Для датчика DHT11 это не принципиально, для более точных это важно.
2. Добавим функцию addZero(), которая поможет оформить вывод времени в более "красивом" формате, т.е. вместо 9:12:5 будет возвращаться строка 09:12:05.
3. Сигнальный светодиод нам более не нужен, уберем его из функционала.

Мы добились большей автономности от устройства. DS1703 самостоятельно считает время, причем за счет батарейки не зависит от подключения контроллера к сети. Теперь его можно установить один раз, и не волноваться что оно собьется или сбросится.

Изменено 18-10-2012 автор CiberRus

У меня не получается прошить данный скетч
выдает вот такие ошибки
D:\arduino-1.0.1\libraries\DS1307/DS1307.cpp:32: undefined reference to `Wire'
D:\arduino-1.0.1\libraries\DS1307/DS1307.cpp:32: undefined reference to `Wire'
D:\arduino-1.0.1\libraries\DS1307/DS1307.cpp:32: undefined reference to `TwoWire::begin(
2012-11-04 добавлено 05/11/2012 00:47:34#386179

Посетитель





78 2
Russian Federation Moscow
5 г. назад
aleksjet


Проблема связана с тем, что Вы используете библиотеки для IDE 0.23 в более новой платформе 1.0.
Если нет особых необходимости, то лучше использовать старую версию платформыhttp://arduino.googlecode.com/files/arduino-0023.zip, с новой большинство библиотек будет несовместимо.

Если Вы все же настаиваете на использовании 1.0, то проблему совместимости решил Alex1503. Часть из них обсуждалась здесь, остальные детали можно у него уточнить.

Изменено 4-11-2012 автор CiberRus
2012-11-04 добавлено 05/11/2012 00:56:09#386180

Посетитель





78 2
Russian Federation Moscow
5 г. назад
сообщение Rust


Только для входа с датчика пришлось использовать 9-й пин Ардуинки. Стало интересно почему же с восьмого не считывает?
Контакт проверил-есть. Т.к. у меня была еще одна UNO, решил проверить работает ли 8-й пин на ней. Вот тут и началось самое интересное.

А точнее - загружаю скетч и все. Не на LCD ничего, не на UNO диод не моргает. Вообщем тишина. Но скетч- то 100% рабочий.
Переключаюсь на старую UNO все работает. Такое впечатление,что не считывается данные с модуля RTC I2C DS1307. Может я конечно ошибаюсь,но загрузив один из первых скетчев где мы организовывая время используя системный таймер устройства. На COM порт выводятся данные с датчика и время.

До испытаний эта не работающая нормально Ардуинка прошла нормально тест на "Hello World" c LCD KeypadShieeld v.2.0.
Там ведь тоже подключение по "Two wire I2C" (А4 и А5 в нашем варианте), а следовательно данные с RTC I2C DS1307 должны считываться. Или я ошибаюсь?

Какие у знатоков есть мнения? Где искать дальше?


Я не знаток, остальные знатоки пока обходят тему стороной.
Причин может очень много, начиная от брака платы или микроконтроллера. Раз у Вас есть 2 arduino, то чтобы наверняка удостовериться можно перебросить микроконтроллер с одной на другую и в зависимости от результата вынести вердикт.

Я как то раз столкнулся с проблемой не рабочего контакта, вернее он не выдавал цифровой сигнал на плате NANO. Китайцы, что с них взять... (кстати сказать, что это был как раз контакт №8, но это просто совпадение). Меня это особо не огорчило, т.к. свободных контактов было достаточно.

Почему не взлетает схема на одной из плат. Надо пробовать исключать из схемы различные узлы, либо менять управляющие контакты (кроме A4, A5, 13,11) и смотреть что получиться.

Предупреждение. Важно так же помнить, что после подачи питания на arduino нельзя разъединять, а тем более соединять контакты (т.е. менять схему на "живую"). Т.к. в момент соединения формируется скачек напряжения, что может неблагоприятно сказаться контакте, или даже вывести МК полностью из строя.

Предупреждение. Если Вы не уверены, что текущий скетч безопасен для новой схемы, то лучше сначала закачать новый скетч, а потом собрать схему и включить питание. Иначе можно столкнуться с неработоспособностью загрузчика, или того хуже, с коротким замыканием. (К примеру по старой логике контакт 2 был притянут к 5v, а контакт 3 к земле, если в новой схеме эти контакты соединены каким либо образом, то они образуют короткое замыкание. Это банальный пример, замыкание может быть не очевидным на первый взгляд)

Если arduino в результате экспериментов выходит из строя, то по хорошему не стоит ее выбрасывать, достаточно заменить на ней МК, стоит он около 100р. Поиск на EBay Я их взял штук 5, чтоб не париться в случае чего.
Кстати можно обойтись данным МК без использования arduino в конечном устройстве. Т.к. arduino всего лишь добавляет ему интерфейс USB, стабилизатор питания и кварцевый резонатор, но это возможно тема для будущей статьи.
2012-11-04 добавлено 05/11/2012 01:48:44#386182

Посетитель





65
Russian Federation Moscow
10 г. назад
CiberRus

Ладно буду пробовать
2012-11-05 добавлено 05/11/2012 12:07:59#386204

Новенький





46
Russian Federation Kazan
5 г. назад
aleksjet


Извините,что влезаю. Я тоже только,только учусь. Я в этом скетче добавил библиотеку `Wire.h'.
И все заработало.
2012-11-05 добавлено 05/11/2012 16:23:26#386212

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus



Раз у Вас есть 2 arduino, то чтобы наверняка удостовериться можно перебросить микроконтроллер с одной на другую и в зависимости от результата вынести вердикт.

Я первым делом решил проверить контакты МК в панельке. Один был (как раз плохо работающий) запихан просто ужасно. Четыре ножки были просто согнуты по 90 градусов. Жаль не запомнил их номера. Ведь 4 и 5 как раз находятся с краю. Я их очень осторожно выпрямил, но теперь боюсь лишний раз трогать,чтобы не отломились.Поэтому и не менял местами. Хотя это в любом случае надо сделать.
Я вчера попытался найти МК328PU-PU для замены у нас в городе,не нашел.Вчера заказал 5 штук в Китае и 3 шт нано(делать буду на них)
- размер имеет значение. Правда там еще с контактами придется разбираться (например, какому пину в NANO соответствует пин13 UNO?)


Надо пробовать исключать из схемы различные узлы, либо менять управляющие контакты (кроме A4, A5, 13,11) и смотреть что получиться.

Я уже уже писал,что затык на этой UNO происходит при подключении RTC платы. Т.к.без неё я на COM порту вижу и могу регулировать время, мы тогда впервые используем системный таймер устройства. Подключаю на А4 и А5 плату RTC и все молчок. Прочитал,что можно подключить к другим пинам Я так понял к цифровым? И надо программно сделать аналоговами?

Кстати когда для проверки подключал новую плату с DS1307,она никак не хотела правильно запоминать время,то помнила то нет.
Оказалось,что китайцы поставили почти дохлую батарейку. Хотя пишут,что все новое.


Кстати можно обойтись данным МК без использования arduino в конечном устройстве. Т.к. arduino всего лишь добавляет ему интерфейс USB, стабилизатор питания и кварцевый резонатор, но это возможно тема для будущей статьи.

Было бы очень интересно.Но это наверное посложнее,чем с Arduino.
2012-11-05 добавлено 05/11/2012 17:17:14#386220

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus


Вообщем еще раз все проверил. Менял МК. Не работает сама плата. Да и то как-то странно. Тест блинк проходит. загружаю скетч и все, ничего не видно. Не на экране, не на COM. Завтра еще попытаю. Но думаю уже бесполезно.
Жаль,что сама плата. МК я уже заказал.
2012-11-06 добавлено 06/11/2012 02:49:27#386265

Посетитель





65
10 г. назад
а куда подключаются кнопки управления или все регулируется и настраивается с компа ?
2012-11-06 добавлено 06/11/2012 08:54:53#386274

Посетитель





65
10 г. назад
И еще вопрос
можно ли подключить несколько датчиков к UNO или не хватит пинов ?
просто надо подключить несколько террариумов ?
2012-11-06 добавлено 06/11/2012 08:58:07#386276

Посетитель





65
Russian Federation Moscow
10 г. назад
CiberRus


у меня что то не получается скомпилировать
SPI_Bus shreg(_8bit, 10); // Подключаем сдвиговый регистр
LiquidCrystal lcd(1, 2, 3, 4, 5, 6, &shreg, 7); // Инициализируем дисплей
выделяет вот эту строчку
C:\Documents and Settings\Алексей\Рабочий стол\arduino-1.0.2\libraries\SPIBus/SPI_Bus.h:95: error: ISO C++ forbids declaration of 'LineDriver' with no type
C:\Documents and Settings\Алексей\Рабочий стол\arduino-1.0.2\libraries\SPIBus/SPI_Bus.h:95: error: expected ';' before '*' token
C:\Documents and Settings\Алексей\Рабочий стол\arduino-1.0.2\libraries\SPIBus/SPI_Bus.h:107: error: 'LineDriver' has not been declared
sketch_nov11a:27: error: 'LiquidCrystal' does not name a type
sketch_nov11a.ino: In function 'void setup()':
sketch_nov11a:36: error: 'lcd' was not declared in this scope
sketch_nov11a.ino: In function 'void loop()':
sketch_nov11a:61: error: 'lcd' was not declared in this scope
2012-11-07 добавлено 07/11/2012 23:36:21#386566

Посетитель





78 2
Palestinian Territory Ramallah
5 г. назад
сообщение aleksjet
CiberRus


у меня что то не получается скомпилировать
SPI_Bus shreg(_8bit, 10); // Подключаем сдвиговый регистр
LiquidCrystal lcd(1, 2, 3, 4, 5, 6, &shreg, 7); // Инициализируем дисплей
выделяет вот эту строчку
Cocuments and SettingsАлексейРабочий столarduino-1.0.2librariesSPIBus/SPI_Bus.h:95: error: ISO C++ forbids declaration of 'LineDriver' with no type
Cocuments and SettingsАлексейРабочий столarduino-1.0.2librariesSPIBus/SPI_Bus.h:95: error: expected ';' before '*' token
Cocuments and SettingsАлексейРабочий столarduino-1.0.2librariesSPIBus/SPI_Bus.h:107: error: 'LineDriver' has not been declared
sketch_nov11a:27: error: 'LiquidCrystal' does not name a type
sketch_nov11a.ino: In function 'void setup()':
sketch_nov11a:36: error: 'lcd' was not declared in this scope
sketch_nov11a.ino: In function 'void loop()':
sketch_nov11a:61: error: 'lcd' was not declared in this scope


Все скетчи писались и тестировались в среде IDE 0.23. Я уже неоднократно отмечал что если необходимо использовать среду IDE 1.0.*, то придется решить вопрос совместимости библиотек. Вы пытаетесь компилировать скетч в IDE 1.0.2, для которой представленные библиотеки по большей части не подходят.

сообщение aleksjet
а куда подключаются кнопки управления или все регулируется и настраивается с компа ?


Ограничивается фантазией. Можно реализовать как угодно, с компьютера, кнопками, пультом ДУ, сенсорной панелью, через интернет, SMS с мобильного.
В примерах рассмотрены протые способы комуникации, при помощи компьютера; при помощи кнопок.

сообщение aleksjet
И еще вопрос
можно ли подключить несколько датчиков к UNO или не хватит пинов ?
просто надо подключить несколько террариумов ?


Можно подключить сколько угодно и каких угодно датчиков.

Изменено 8-11-2012 автор CiberRus
2012-11-08 добавлено 08/11/2012 07:22:29#386577

Посетитель





78 2
Palestinian Territory Ramallah
5 г. назад
сообщение Rust

Прочитал,что можно подключить к другим пинам Я так понял к цифровым? И надо программно сделать аналоговами?


Кстати можно обойтись данным МК без использования arduino в конечном устройстве. Т.к. arduino всего лишь добавляет ему интерфейс USB, стабилизатор питания и кварцевый резонатор, но это возможно тема для будущей статьи.

Было бы очень интересно.Но это наверное посложнее,чем с Arduino.


Вот распиновка МК (в данном случае 168, но 328 от нее не отличается):



Из нее следует:
1. Интерфейсы I2C, SPI, ICSP и пр. реализованы на уровне чипа AtMega и от arduino не зависят. А значит I2C не может быть реализован ни на каких контактах, кроме как на A4, A5.
2. Arduino является лишь посредником между МК, и никакой дополнительной логикой ее не наделяет, т.е. транслирует выводы контроллера к выводам на плате. (Если не считать реализацию USB интерфейса). Т.о. если запрограммировать чип, а потом вынуть его из arduino, добавить кварцевый резонатор (можно и без, т.к. atmega имеет внутренний резонатор, но немоного сложнее), запитать 5v, то он будет функционировать так же как и arduino.

Подробности:
http://arduino.cc/en/Tutorial/ArduinoToBreadboard

Т.о. arduino удобно использовать для прототипов, а так же для программирования МК, а в готовых устройствах обходиться микроконтроллером.

Изменено 8-11-2012 автор CiberRus
2012-11-08 добавлено 08/11/2012 07:43:21#386578

Посетитель





65
10 г. назад
CiberRus

я пытался компилировать и там и там но результат один и тот же не работают библиотеки часов и экрана
2012-11-08 добавлено 08/11/2012 08:29:30#386580

Новенький





46
Russian Federation Kazan
5 г. назад
CiberRus


Спасибо за информацию.
Я только подумал о том, исходя из Вашего раннего поста, что можно использовать Ардуинку, как программатор. Хотел спросить об этом после командировки. Приехал, а тут готовый ответ.
Только вот пара вопросов:
1.Зачем программироавть Ардуинку вне платы (вторая схема) если у тебя целый вootloader?
2. Там написано "not the Arduino Uno (or older Arduino boards w/ an ATmega168)." У меня, как раз UNO, хотя МК ATmega328P-PU.
Будет ли с ним эта схема работать?
2012-11-08 добавлено 08/11/2012 15:28:38#386631

Посетитель





78 2
Palestinian Territory Ramallah
5 г. назад
сообщение Rust
CiberRus


Спасибо за информацию.
Я только подумал о том, исходя из Вашего раннего поста, что можно использовать Ардуинку, как программатор. Хотел спросить об этом после командировки. Приехал, а тут готовый ответ.
Только вот пара вопросов:
1.Зачем программироавть Ардуинку вне платы (вторая схема) если у тебя целый вootloader?
2. Там написано "not the Arduino Uno (or older Arduino boards w/ an ATmega168)." У меня, как раз UNO, хотя МК ATmega328P-PU.
Будет ли с ним эта схема работать?


1. В общем случае AtMega не сможет хавать скетчи из IDE (т.е. если купить AtMega в магазине радиодеталей и вставить в arduino, то она не "взлетит"), поэтому предварительно необходимо залить в нее загрузчик. В первом случае arduino выступает в качестве "прошивателя". Т.е. в нее заливается специальный скетч, который позволяет по указанной схеме подключения залить загрузчик в другую AtMega. Во втором случае плата используется в качестве FTDI. При указанном подключении она считает, что это ее чип. Если бы при этом в гнезде стоял МК, то был бы конфликт.
(Если плата UNO и загрузчик на МК UNO, то МК можно программировать вставляя ее в гнездо платы, но это частный случай, и не всегда удобный)

2. Честно говоря, я на это предупреждение внимание не обращал. Но благополучно прошил с помощью UNO прошивкой "ATmega328 on a breadboard (8 MHz internal clock)". А после благополучно использовал в качестве FTDI. Возможно это предупреждение относится к появлению ошибки, с которой я столкнулся, она легко лечится (описано здесь http://arduino.cc/forum/index.php?topic=58670.0)

Изменено 8-11-2012 автор CiberRus
2012-11-08 добавлено 08/11/2012 16:18:44#386632

<< 12 45678910 >> Создать новую темуБыстрый ответ