Система сбора данных atmega328

Система сбора данных atmega328
Система сбора данных atmega328
Anonim

Система сбора данных на основе ATMega328

В этой статье я покажу вам, как использовать внутреннюю EEPROM микроконтроллера ATMega 328P. Я буду использовать преобразователь USB-to-serial и датчик температуры LM35. Я также дам вам несколько советов и приемов при разработке печатной платы.

Требования

  • Компьютер под управлением Arduino IDE 1.6.5
  • Установлен компьютер с EagleCAD
  • Установлен компьютер с установкой FreeCAD или установлена еще одна программа 3D-моделирования
  • Установлен компьютер с установленной программой CURA или другой слайсер
  • Детали из списка запасных частей
  • Программист AVR MKII ISP
  • DHT11 / DHT22 или эквивалент
  • Конвертер USB-to-serial и USB-кабель
  • Терминальная программа, такая как Putty, hyperTerm или GtkTerm

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

Введение

В этой статье вы сможете найти точку росы поверхности, с которой датчик температуры LM35 находится в контакте. LM35 - это линейный датчик температуры, который поставляется в разных упаковках. В этой статье я использую формат TO-92.

Схема будет принимать меры от двух разных датчиков и хранить их в памяти. Когда я подключу устройство к компьютеру, я смогу извлечь данные, сохранить их в файл, импортировать их в LibreOffice Calc или Microsoft Excel и создать хорошую диаграмму влажности. С такими данными я смогу найти точку росы интересующего предмета, которая, оказывается, является куском пластика с зеркальной поверхностью.

Микроконтроллером, используемым в этой статье, является ATMega328P-PU. Он имеет размер EEPROM 1 кбайт. EEPROM является сокращением для программируемой пользователем памяти с возможностью чтения. Это своего рода энергонезависимая память для хранения небольших объемов данных при удалении питания. Данные могут быть все из конфигурации, калибровки или в этом примере, влажности и температуры. В техническом описании указано: «ATmega48A / PA / 88A / PA / 168A / PA / 328 / P содержит 256/512/512 / 1Kby данных памяти EEPROM. Он организован как отдельное пространство данных, в котором можно считывать одиночные байты и написано. EEPROM имеет выдержку не менее 100 000 циклов записи / стирания ». (Pg 20. п. 8.4). Байты, которые будут сохранены, - относительная влажность и температура. Микроконтроллер имеет датчик DHT11, LM35 и подключенный к нему USB-последовательный адаптер.

DHT11 - это датчик относительной влажности и температуры. Влажность измеряется в процентах и температуре по Цельсию. Это еще одна статья, в которой используется датчик DHT11. Он работает от 3, 5-5, 5 В постоянного тока.

LM35 - это точный датчик температуры в градусах Цельсия. Выход линейно пропорционален температуре Цельсия. 10, 0 мВ / 0 С масштабный коэффициент. Если mV увеличивается с 10, степень увеличивается с 1 0 C. Он работает на 5-30 В постоянного тока.

Чтобы подключить схему к компьютеру, я использую USB-последовательный преобразователь. У меня есть готовый модуль, основанный на чипе Silabs CD2102. Этот модуль является связующим звеном между микроконтроллерами USART RX / TX и USB-портом компьютеров.

аппаратные средства

Сначала я сделаю блок-схему, чтобы структурировать свою работу и лучше понять то, что я хочу, и как я ее хочу.

Image
Image

Мне нужно:

  • способ программирования микроконтроллера -> AVR MKII ISP
  • способ начать ведение журнала -> Начало регистрации
  • способ отправки данных EEPROM на ПК -> Отправить данные EEPROM
  • способ измерения температуры по Цельсию -> LM35
  • способ измерения влажности и температуры воздуха -> DHT11
  • способ увидеть, что происходит -> Светодиоды
  • способ подключения схемы к ПК -> USB-to-serial

Принципиальная схема

Image
Image

Одна моя привычка, когда я создаю прототип, заключается в том, что я подключаю все неиспользуемые контакты микроконтроллера к тестовой панели. Таким образом, если мне нужно добавить еще один датчик, кнопку или светодиод, я могу редактировать программное обеспечение и использовать уже размещенные прокладки. Мне не нужно создавать другую печатную плату. Очень важно, чтобы оборудование было построено правильно и работает должным образом. Помните: «Сначала идет аппаратное обеспечение - затем идет программное обеспечение». Когда я начинаю новый проект и схему, я всегда начинаю с входной мощности. Затем я обращаюсь к блок-схеме и добавляю компоненты по мере необходимости в соответствии с блоками. Когда я работаю, я использую EagleCADs ERC. Проверка электрического правила. Это проверяет, не были ли прокладки подключены и что у каждого компонента есть действительное имя и значение. Часто используйте ERC; это отличный инструмент. Обратите внимание на контакт 1 на JP7. Мой USB-к-последовательный преобразователь 1-штырьковый - 3, 3 В. Вот почему это не связано ни с чем. Я использую 5 вольт на цепи. Не забудьте добавить монтажные отверстия для схемы.

Список запчастей

Следующее изображение - скриншот от Eagle.

Image
Image

Проектирование печатной платы

Когда схема спроектирована и все ошибки ERC позаботятся, пришло время спроектировать печатную плату. Если печатная плата должна иметь определенный размер, я перемещаю контуры печатной платы в Board EagleCAD, поэтому размер правильный. Я изменяю толщину контура до 0, 2 мм. Это дает приличную линию для сокращения при резке печатной платы. Затем я помещаю все компоненты внутри прямоугольника и перемещаю коннекторы по краям. Здесь также я начинаю с входной мощности и прокладываю себе путь через компоненты. Когда все компоненты размещены, я нажимаю кнопку ratsnet. Это приведет к изменению немаршрутизированных трасс, поэтому у них будет самый короткий путь между соединениями. Если я вижу, что если я переместю этот компонент здесь и поместите этот компонент там, чтобы сократить трассировки, я делаю это. Итак, когда компоненты размещены, а трассировки являются такими короткими, как они могут быть, я создаю новый прямоугольник, следующий за внешним краем, с помощью инструмента многоугольника. Я называю этот многоугольник GND. Когда я снова нажал кнопку ratsnet, я сделал медный слой и подключил его к GND. Я стараюсь иметь большинство следов на нижней стороне печатной платы, но иногда это невозможно. Затем я использую сквозную и трассировку на верхнем слое и использую другую, чтобы снова добраться до нижней стороны. В этой печатной плате у меня есть один провод на верхней стороне. Я обнаружил, что если я использую размер трассы 0, 4 мм и имею пространство для просвета 0, 4 мм, я могу сделать довольно хорошие печатные платы с методом переноса тонера. Я думаю, что мой следующий шаг не является для всех фаворитом, но я использую инструмент autoroute. Когда инструмент автотрассировки закончен, я просматриваю каждую трассировку и изменяю большую часть углов и локтей до 45 градусов. Это может занять несколько часов, а часто и более одного вечера. Некоторые считают это искусством. И я должен признать, что хорошо спроектированная печатная плата - это удовольствие для глаз.

В EagleCAD Board есть инструмент под названием DRC или проверка правильности дизайна. Этот инструмент проверяет наличие пробелов и компонентов. Например, если два компонента слишком близки, вы будете уведомлены.

Image
Image

После того, как я доволен дизайном печатной платы, я распечатаю нижний слой на глянцевой фотобумаге и утюжку на печатную плату. Одна вещь, которая чрезвычайно важна для результата, заключается в том, что вы правильно очищаете печатную плату. Когда я чищу шахту, я сначала использую мелкую наждачную бумагу. P500 от 3M идеально подходит. Затем я использую каплю растительного крема, и, наконец, я промываю мыло горячей водой.

Я трачу в Ferric Chloride, и у меня нет травителя возле моих инструментов. Пары не подходят для инструментов.

Когда печатная плата вытравлена и просверлена, я проверяю шорты с помощью своего DMM или веб-камеры с дополнительной увеличительной линзой. В DMM я использую настройку непрерывного / диода и помещаю черный зонд на GND, а затем я проверяю вокруг сигналов следы красным. Если шортов нет, я припаиваю провода перемычек и проверяю их с помощью DMM.

Следующий шаг - начать с входной мощности, конденсаторов и регулятора. Я проверяю шорты или палочки, а затем подаю силу. Когда подано питание, я измеряю напряжение и проверяю, что правые вольт находятся в правильных местах. Если нет, я делаю два шага назад и начинаю проверять шорты. Если все хорошо, я перехожу к разъемам IC и остальным компонентам.

Когда все припаивается и хорошо выглядит, я подключаю программатор к заголовку ISP и включаю схему.

Программного обеспечения

Программа легко понятна, но я собираюсь объяснить несколько вещей. Чтобы использовать датчик DHT11, мне нужно импортировать библиотеку DHT. Вы можете найти его по ссылке ниже. Разархивируйте его и переместите в папку с библиотекой Arduino. Для использования библиотеки необходимо перезапустить среду разработки Arduino для IDE. Библиотеки SPI и EEPROM являются стандартными библиотеками, которые поставляются вместе с вашей установкой.

В функции setup () у меня есть строка: analogReference (EXTERNAL). Эта строка сообщает микроконтроллер, где найти опорное напряжение для датчика LM35. У меня есть несколько вариантов; DEFAULT, INTERNAL, EXTERNAL INTERNAL1V1 и INTERNAL2V56:

  • DEFAULT, стандартное аналоговое задание 5 В или 3, 3 вольта на плате Arduino.
  • ВНУТРЕННИЙ, встроенный опорный сигнал, равный 1, 1 вольтам на ATmega168 или ATmega328 и 2, 56 вольт на ATmega8 (не доступен на Arduino Mega)
  • EXTERNAL, напряжение, приложенное к выходу AREF. (От 0 до 5 вольт) используется как ссылка
  • INTERNAL1V1 и INTERNAL2V56 доступны только для платы Arduino Mega

Поскольку напряжение, приложенное к выходу AREF, составляет 5 вольт, регулируемое через конденсаторы и регулятор, я использую это.

Чтобы сохранить полученные байты из DHT11 и LM35, я использую команду EEPROM.write (). Эта команда принимает две переменные. Адрес EEPROM и байт, который необходимо сохранить. При первом запуске getDHTValues () addr устанавливается в 0 (ноль). После первого EEPROM.write () addr увеличивается с одним: addr +; Это сообщает программе, что в следующий раз, когда вызывается EEPROM.write (), он записывает данные в следующее место адреса. Вы можете думать о EEPROM как о таблице с диапазоном от 0 до 1023.

Программу считывают датчики каждые 15 минут.

… коробка, чтобы пойти …

Теперь, когда у меня есть печатная плата, и она успешно запрограммировала ее, настало время найти что-то, что можно было бы ее обойти. Для этого я использую FreeCAD и трехмерный принтер. FreeCAD - это именно то, что есть; бесплатный инструмент САПР. FreeCAD имеет крутую кривую обучения, но когда вы начинаете понимать, как это работает, вы можете построить с ним что угодно, в том числе экспортировать свою модель в STL.

Image
Image

Это стены коробки. Верх и низ - плоские квадраты.

Довольный своим новым дизайном, я экспортирую модель в виде файла STL, который импортируется в Cura. Cura - моя любимая программа slicer.

Image
Image

Я должен сделать то же самое для верхней и нижней частей коробки.

Что теперь?

Аппаратное обеспечение работает, программное обеспечение работает, и схема находится в хорошем поле. Теперь пришло время его использовать. Переключатель питания - это переключатель. Красная кнопка стирает EEPROM и начинает регистрировать и хранить данные. Зеленая кнопка отправляет данные в EEPROM на компьютер. Когда я нажимаю красную кнопку для начала регистрации, сначала стирается EEPROM, затем начинается ведение журнала. Если EEPROM заполнен до того, как отключить его, зеленый светодиод выключится. Затем пришло время перенести данные на компьютер. Для этого вам нужна последовательная программа, такая как Putty, hyperTerm или gtk-Term, как я здесь использую.

Когда регистратор подключен к ПК, используйте параметры 9600-8-N-1 в качестве настроек и нажмите зеленую кнопку. Не нажимайте красную кнопку, это приведет к стиранию EEPROM и запуску регистрации, помните? На экране вы увидите некоторые данные. Это данные, хранящиеся в EEPROM. Чтобы сохранить это как файл, я использую File -> Save RAW file. В hyperTerm это Transfer -> Capture text. Теперь у меня есть файл на моем компьютере с данными. Этот файл разделяется точкой с запятой и легко импортируется в Excel или LibreOffice Calc. Я сохраняю его с расширением файла CSV. Когда я открываю файл в LibreOffice Calc, мастера импорта запускаются автоматически.

Когда данные импортируются, они выглядят так:

Image
Image

У вас есть заголовок; Time, Hum, Temp и Optional. Столбец «Время» пуст. Здесь я ввожу время начала регистрации, и я увеличиваю с 15 минутами до последней строки. Если регистрация началась в 21:00. Я пишу 21:00 в ячейке A2 и 21:15 в A3, затем я использую мышь, чтобы выбрать A2: A3, и нажмите и удерживайте маленькую квадрат в правом нижнем углу и перетащите вниз. Затем столбец «Время» будет заполнен временем с шагом в 15 минут.

Image
Image

Используя инструменты в LibreOffice Calc, я вставляю столбчатый график на основе данных в столбце:

Image
Image

С помощью этих данных я могу найти точку росы объекта, подключенного к датчику температуры LM35. Чтобы увидеть, находится ли объект вблизи точки росы, я использую эту таблицу. Сначала я нахожу правильную температуру в левой колонке. Держа пальцем на этом, я нахожу ближайшее значение влажности. Затем я перемещаю первый палец влево, а другой вниз. Когда они встречаются, я нашел точку росы объектов. Если это значение близко к значению в моем столбце или таблице, объект находится под угрозой росы.

Скачать

Библиотека DHT11, Исходный код, EagleCAD-файлы и STL-файлы для 3D-печати корпуса.

Скачать CodeDownload CodeDownload CodeDownload Code

Вывод

Это была длинная статья и полный проект. Основной целью этого проекта было создание устройства, которое регистрирует влажность и температуру. Затем устройство сохраняет данные во внутренней EEPROM и делает данные доступными для компьютера. С данными, импортированными в LibreOffice Calc или Microsoft Excel, я могу увидеть, может ли объект попасть в росу.

Провод LM35 и провода питания соединены только с припоем. Вы должны осторожно обращаться с устройством или механически крепить провода. Завяжите узел на внутренней стороне коробки с небольшим запахом.

Следующая версия этого устройства может включать в себя модуль RTC.

Фото и видео

Image
Image

Попробуйте этот проект сами! Получить спецификацию.