Arduino и ЧПУ на Portal-PK.ru http://portal-pk.ru/ Arduino проекты, уроки, а также самоделки и самодельные ЧПУ станки на Portal-PK.ru ru Создайте собственное уникальное устройство с помощью генератора иконок и фонов! http://portal-pk.ru/news/377-sozdaite-sobstvennoe-unikalnoe-ustroistvo-s-pomoshchyu.html Константин Portal-PK 2023-06-29T13:04:32+03:00 Хотите создать свое собственное пользовательское устройство, которое полностью соответствует вашим потребностям и предпочтениям? Теперь это стало возможным благодаря доступным инструментам и ресурсам в Интернете.


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

Не знаете, с какой электроникой начать? Не беда! Мы предлагаем использовать плату WeMos D1, адресные светодиоды ws2812b и дисплей DWIN структуры COF с резистивным сенсором. Эти компоненты обеспечат функциональность и удобство использования вашего устройства.

Мы предлагаем использовать плату WeMos D1, адресные светодиоды ws2812b и дисплей DWIN структуры COF с резистивным сенсором.

Что делать после создания иконок и выбора электроники? Создайте проект в среде DGUS и загрузите прошивки на дисплей DWIN и плату WeMos D1. В наших материалах вы найдете ссылки на полезные уроки, которые помогут вам разобраться в этом процессе.

Что делать после создания иконок и выбора электроники?Как только ваше устройство будет готово, пришло время проверить его возможности и функционал. Убедитесь, что иконки и плашки отображаются корректно, а управление подсветкой и переключение цвета работают безупречно.

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

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

Не упустите возможность осуществить свои творческие идеи и превратить их в реальность! Создайте собственное уникальное устройство уже сегодня с помощью генератора иконок и фонов!

Понравилась новость Создайте собственное уникальное устройство с помощью генератора иконок и фонов? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Как создать интерфейс управления реле с помощью бесплатного Онлайн-конструктора? http://portal-pk.ru/news/375-kak-sozdat-interfeis-upravleniya-rele-s-pomoshchyu.html Константин Portal-PK 2023-04-14T09:20:33+03:00 Программирование и создание интерфейса управления реле для HMI дисплея DWIN больше не является сложной задачей благодаря новому уроку. Урок "Как создать интерфейс управления реле для HMI дисплея DWIN с помощью бесплатных инструментов" предназначен для новичков и не требует опыта программирования.


Урок позволяет создавать качественный интерфейс управления реле для HMI дисплея DWIN с помощью бесплатных программных инструментов, таких как Онлайн-конструктор, Pinta и DGUS_V7.642. Этот урок шаг за шагом показывает, как использовать каждый из этих инструментов, чтобы создать управляющий интерфейс на HMI дисплее DWIN.

с помощью бесплатных программных инструментов, таких как Онлайн-конструктор, Pinta и DGUS_V7.642.

В результате этого урока вы научитесь создавать простой, но функциональный интерфейс управления реле на HMI дисплее DWIN без использования дорогостоящего программного обеспечения. Вы сможете создавать кнопки, фоны, иконки и другие графические элементы в бесплатном Онлайн-конструкторе, затем использовать Pinta для создания страницы интерфейса и загрузить прошивку на HMI дисплей DWIN с помощью среды разработки DGUS_V7.642.

использовать Pinta для создания страницы интерфейса и загрузить прошивку на HMI дисплей DWIN с помощью среды разработки DGUS_V7.642.

Этот урок - отличная возможность для новичков и тех, кто хочет научиться создавать интерфейсы управления реле для HMI дисплея DWIN быстро и легко, не тратя много денег на дорогостоящее программное обеспечение. Создавайте качественные интерфейсы управления реле для HMI дисплея DWIN прямо сейчас, следуя шагам в этом уроке!"

Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась новость Как создать интерфейс управления реле с помощью бесплатного Онлайн-конструктора? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Экономьте время и силы на создании элементов для HMI дисплеев с нашим Конструктором графических элементов! http://portal-pk.ru/news/374-ekonomte-vremya-i-sily-na-sozdanii-elementov-dlya-hmi.html Константин Portal-PK 2023-04-11T07:15:53+03:00 Уважаемые пользователи! Мы рады сообщить вам, что на нашем сайте появился новый замечательный инструмент - Конструктор графических элементов для HMI дисплеев!

 Конструктор графических элементов для HMI дисплеев!

Этот онлайн-генератор позволит вам создавать уникальные графические элементы для вашего HMI дисплея, такие как кнопки, фоны, иконки и многое другое. С его помощью вы можете легко и быстро создавать элементы любой сложности, которые будут точно соответствовать вашим потребностям и требованиям.

Этот онлайн-генератор позволит вам создавать уникальные графические элементы

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

Кроме того, наш Конструктор графических элементов обеспечивает совместимость с различными моделями HMI дисплеев, включая DWIN, Nextion и многие другие. Вы можете быть уверены, что элементы, созданные в нашем конструкторе, будут работать без сбоев и соответствовать всем вашим требованиям.

моделями HMI дисплеев, включая DWIN, Nextion и многие другие

Мы уверены, что наш Конструктор графических элементов станет незаменимым инструментом для всех, кто занимается созданием интерфейсов для HMI дисплеев. Это простой и доступный способ создания элементов, который позволяет сэкономить время и усилия при разработке.

Экономьте время и силы на создании элементов для HMI дисплеев с нашим онлайн-генератором!

Используйте наш Конструктор графических элементов для HMI дисплеев уже сегодня и создавайте уникальные и привлекательные элементы для своего HMI дисплея!

]]>
Из HTML в изображения: сохранение контента вашего сайта. http://portal-pk.ru/news/373-iz-html-v-izobrazheniya-sohranenie-kontenta-vashego-saita.html Константин Portal-PK 2023-04-06T09:04:53+03:00 Сохранение фрагмента HTML-страницы в виде изображения с помощью JavaScript и библиотеки html2canvas.

Шаг 1: Подключение библиотеки html2canvas

Первым шагом является подключение библиотеки html2canvas. Это можно сделать, вставив следующую строку в тег <head> вашей HTML-страницы:

<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>

Эта строка подключает минифицированную версию библиотеки html2canvas.

Шаг 2: Создание кнопки для сохранения изображения

Создайте HTML-код для кнопки, при нажатии на которую будет происходить сохранение изображения. Например:

<button id="save-button">Сохранить изображение</button>

Здесь мы создаем кнопку с идентификатором save-button.

Шаг 3: Написание JavaScript-кода для сохранения изображения

Создайте блок JavaScript-кода, который будет вызываться при нажатии на кнопку. Для этого добавьте следующий код в тег <script>:

// Получение кнопки по ее идентификатору и добавление обработчика событий
document.getElementById("save-button").addEventListener("click", function() {
  // Код для сохранения фрагмента HTML-страницы в виде изображения
  html2canvas(document.querySelector("#id-of-element-to-be-saved")).then(canvas => {
    var link = document.createElement("a");
    document.body.appendChild(link);
    link.download = "filename.png";
    link.href = canvas.toDataURL();
    link.target = '_blank';
    link.click();
  });
});

Здесь мы используем метод addEventListener() для добавления обработчика событий на кнопку с идентификатором save-button. При нажатии на эту кнопку вызывается функция, которая содержит код для сохранения фрагмента HTML-страницы в виде изображения.

Внутри функции мы используем метод html2canvas(), чтобы создать изображение на основе элемента, выбранного с помощью его идентификатора id-of-element-to-be-saved.

Затем мы создаем ссылку на скачивание изображения с помощью создания элемента <a>, устанавливаем его свойства download и href, чтобы определить имя файла и URL-адрес для скачивания. Наконец, мы используем метод click() для запуска загрузки файла.

Шаг 4: Завершение урока

Теперь вы можете сохранять фрагмент HTML-страницы в виде изображения на свой компьютер, нажимая на кнопку, которую вы создали.

Обратите внимание, что вы можете изменить и данный код, чтобы сохранять изображение с разными свойствами и настройками. Например, вы можете изменить формат файла, используя расширение файла в свойстве download, а также изменить размер изображения, указав ширину и высоту элемента, который вы сохраняете.

Например, если вы хотите сохранить изображение в формате JPG, вы можете изменить свойство download следующим образом:

link.download = "filename.jpg";

Если вы хотите изменить размер изображения, вы можете добавить свойства width и height в элемент, который вы сохраняете, таким образом:

<div id="id-of-element-to-be-saved" style="width: 800px; height: 600px;"></div>

Использование библиотеки html2canvas позволяет сохранять фрагмент HTML-страницы в виде изображения с помощью нескольких строк кода JavaScript. Это может быть полезным для создания скриншотов или отчетов на основе содержимого веб-страницы.

<!DOCTYPE html>
<html>
<head>
  <title>Сохранение фрагмента HTML-страницы в виде изображения</title>
  <meta charset="utf-8">
</head>
<body>
  <h1>Пример сохранения фрагмента HTML-страницы в виде изображения</h1>
  <p>Нажмите на кнопку, чтобы сохранить фрагмент HTML-страницы в виде изображения:</p>
  <button onclick="saveAsImage()">Сохранить как изображение</button>
  <div id="element-to-be-saved" style="width: 400px; height: 300px; font-size: 30px; border: 5px solid rgb(181, 185, 117); border-radius: 20px; background-color: rgb(241, 250, 215);padding: 15px; margin: 5px;">
    <p>Этот фрагмент HTML-страницы будет сохранен в виде изображения.</p>
    <button  style="width: 160px; color: beige; height: 60px; border: 3px solid rgb(219, 214, 214); font-size: 30px; border-radius: 20px; background-color: rgb(89, 146, 129);padding: 5px; margin: 5px;">Кнопка</button>
  </div>
  <script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
  <script>
    function saveAsImage() {
      var element = document.getElementById("element-to-be-saved");
      html2canvas(element).then(function (canvas) {
        var link = document.createElement("a");
        document.body.appendChild(link);
        link.download = "filename.jpg";
        link.href = canvas.toDataURL("image/png");
        link.target = '_blank';
        link.click();
      });
    }
  </script>
</body>
</html>

Обратите внимание на использование библиотеки html2canvas, а также на настройку размера и свойств элемента, который мы сохраняем в виде изображения. Также обратите внимание на добавление кнопки и вызов функции saveAsImage(), когда пользователь нажимает на кнопку. Когда изображение генерируется, оно сохраняется как PNG-файл с помощью метода toDataURL() и открывается в новом окне браузера, используя свойство target.

При загрузке страницы вы увидите простую HTML-страницу с заголовком и фрагментом контента. Нажатие на кнопку «Сохранить как изображение» запустит функцию saveAsImage(), которая использует библиотеку html2canvas для создания изображения из фрагмента HTML-страницы.

Обратите внимание на использование библиотеки html2canvas, а также на настройку размера и свойств элемента

Функция saveAsImage() сначала находит элемент, который мы хотим сохранить в виде изображения, используя document.getElementById(). Затем мы используем библиотеку html2canvas, чтобы создать изображение из этого элемента. Функция html2canvas() возвращает промис, который разрешается в canvas, представляющий фрагмент HTML-страницы в виде изображения.

Когда промис разрешается, мы создаем новый элемент ссылки (<a>), добавляем его в DOM, задаем свойства download, href и target этой ссылки, и вызываем метод click() этой ссылки, чтобы сохранить изображение на локальном компьютере.

Свойство download задает имя файла, под которым будет сохранено изображение. В нашем примере мы используем имя "screenshot.png".

Свойство download задает имя файла, под которым будет сохранено изображение. В нашем примере мы используем имя "screenshot.png". Свойство href задает URL-адрес изображения в формате base64. Мы используем метод toDataURL() canvas, чтобы получить base64-кодированную строку, представляющую изображение в формате PNG. Свойство target задает, что изображение будет открыто в новом окне браузера.

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


]]>
ЧПУ на Arduino. Что нужно знать чтобы собрать ЧПУ станок самостоятельно? http://portal-pk.ru/news/372-chpu-na-arduino-chto-nuzhno-znat-chtoby-sobrat-chpu-stanok.html Константин Portal-PK 2023-04-01T18:47:24+03:00 Числовое программное управление, или ЧПУ, является ключевым элементом в производственном процессе многих современных станков и обрабатывающих центров. Оно позволяет точно управлять движением инструмента во время обработки материалов, что увеличивает точность и эффективность производства. Сегодня мы рассмотрим, как собрать ЧПУ станок на базе Arduino и что нужно знать для успешной реализации этого проекта.

Arduino представляет собой небольшую плату с собственным процессором и памятью

Что такое Arduino?

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

Что нужно для сборки ЧПУ станка на Arduino?

Прежде чем приступать к сборке ЧПУ станка на Arduino, вам понадобится следующее оборудование и компоненты:

  1. Arduino плата управления - плата, которая будет управлять движением станка.
  2. Шаговые моторы - двигатели, которые будут управлять движением станка.
  3. Драйверы шаговых моторов - компоненты, которые будут управлять шаговыми моторами.
  4. Инструменты для обработки материалов - такие как фрезы, сверла, резаки и т.д.
  5. Материалы для конструкции станка - такие как алюминиевые профили, гайки, болты и т.д.

Как собрать ЧПУ станок на Arduino?

  1. Соберите базовую конструкцию станка, используя алюминиевые профили, гайки и болты.
  2. Установите шаговые моторы в нужных местах на конструкции станка.
  3. Подключите шаговые моторы к драйверам шаговых моторов.
  4. Подключите драйверы шаговых моторов к Arduino.
  5. Напишите программу управления движением станка на Arduino с использованием специальной библиотеки для ЧПУ.
  6. Подключите инструменты для обработки материалов к станку.
  7. Начните работу с ЧПУ станком, используя программу управления движением.

Что нужно знать для успешной сборки ЧПУ станка на Arduino?

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

  1. Изучите основы электроники и программирования на Arduino. На моем канале YouTube и мой сат ЧПУ технологии, которые помогут вам освоить эти темы.
  2. Проанализируйте требования вашего проекта. Различные типы материалов и инструментов требуют различных параметров управления движением, таких как скорость и точность. Изучите характеристики инструментов и материалов, которые вы планируете обрабатывать, и убедитесь, что вы выбираете соответствующие компоненты.
  3. Разберитесь в технологии ЧПУ. Узнайте, как управлять движением шаговых моторов с помощью драйверов шаговых моторов, а также как использовать специальную библиотеку для ЧПУ на Arduino.
  4. Подберите правильные компоненты. Убедитесь, что вы выбираете компоненты, которые совместимы между собой и подходят для вашего проекта.
  5. Тестируйте свою систему. После того, как вы собрали ЧПУ станок на Arduino, тестируйте его, чтобы убедиться, что все работает правильно. Запустите несколько пробных обработок и отрегулируйте параметры, если это необходимо.

 калибровка фрезерного ЧПУ станка

В заключении, сборка ЧПУ станка на Arduino может быть достаточно сложной задачей, но с правильными знаниями, компонентами и тестированием, вы сможете создать устройство, которое позволит вам обрабатывать материалы с высокой точностью и эффективностью. Не стесняйтесь обращаться за помощью к специалистам в области электроники и механики, если у вас возникнут трудности в процессе сборки.


Понравилась статья ЧПУ на Arduino. Что нужно знать чтобы собрать ЧПУ станок самостоятельно? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Знакомство с jQuery. Cинтаксис jQuery, его API и основные функции. http://portal-pk.ru/news/371-znakomstvo-s-jquery-cintaksis-jquery-ego-api-i-osnovnye.html Константин Portal-PK 2023-04-01T08:36:43+03:00 Введение в jQuery.

jQuery - это библиотека JavaScript, которая упрощает работу с DOM и облегчает создание динамических веб-страниц. Она предоставляет простой, но мощный API для работы с элементами HTML и CSS, обработки событий и многого другого.

Для начала работы с jQuery, вам нужно скачать библиотеку или использовать ее с помощью ссылки на CDN. Для примера, давайте использовать ссылку на CDN для загрузки jQuery на страницу:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

После того, как мы загрузили jQuery, мы можем начать использовать его функции. Давайте рассмотрим несколько примеров.

Использование селекторов jQuery.

Одна из самых мощных функций jQuery - это селекторы, которые позволяют выбирать элементы на веб-странице. Для выбора элементов мы используем функцию $, которая принимает селектор в качестве параметра.

Давайте рассмотрим несколько примеров:

// выбираем все элементы <p> на странице
var paragraphs = $('p');
// выбираем все элементы с классом "box"
var boxes = $('.box');
// выбираем элемент с id "my-element"
var myElement = $('#my-element');

Здесь мы используем $ для выбора элементов на странице. Селекторы в jQuery работают аналогично CSS-селекторам, поэтому вы можете использовать все те же правила для выбора элементов.

Изменение содержимого элементов.

jQuery позволяет легко изменять содержимое элементов на странице. Для этого мы можем использовать функции html() и text().

html() позволяет задавать содержимое элемента в виде HTML, а text() - в виде текста.

html:

<div id="my-div"></div>

js:

// устанавливаем HTML содержимое для элемента с id "my-div"
$('#my-div').html('<p>Привет, мир!</p>');
// устанавливаем текстовое содержимое для элемента с id "my-div"
$('#my-div').text('Привет, мир!');

Здесь мы использовали функции html() и text() для установки содержимого элемента с id "my-div". Обратите внимание, что функция html() принимает строку, содержащую HTML-код.

Изменение атрибутов элементов.

jQuery также позволяет изменять атрибуты элементов на странице. Для этого мы можем использовать функцию attr().

html

<img id="my-image" src="old-image.jpg">

js

// изменяем атрибут "src" у элемента с id "my-image"
$('#my-image').attr('src', 'new-image.jpg');

Здесь мы использовали функцию attr() для изменения атрибута "src" у элемента с id "my-image". Обратите внимание, что первый параметр функции - это имя атрибута, а второй параметр - новое значение.

Обработка событий.

jQuery также упрощает обработку событий на странице. Для этого мы можем использовать функцию on().

html

<button id="my-button">Нажми на меня</button>

js

// обрабатываем клик на кнопке с id "my-button"
$('#my-button').on('click', function() {
  alert('Вы нажали на кнопку!');
});

Здесь мы использовали функцию on() для обработки события клика на кнопке с id "my-button". Когда пользователь кликает на кнопку, вызывается функция, которая выводит сообщение.

HTML код страницы изменения содержимого элементов + Обработка событий.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Прямоугольники</title>
    <style>
        body {
            margin: 100;
            padding: 20;
            background-color: #f5f5f5;
        }
    </style>

</head>
<body>
    <div id="my-div"></div>
    <button id="my-button">Нажми на меня</button>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
    // устанавливаем текстовое содержимое для элемента с id "my-div"
    $('#my-div').text('Привет, мир!');
    
    // обрабатываем клик на кнопке с id "my-button"
    $('#my-button').on('click', function() {
    // устанавливаем HTML содержимое для элемента с id "my-div"
    $('#my-div').html('<p><b>Привет, мир!</b></p>');

  alert('Вы нажали на кнопку!');
});
</script>
</body>
</html>

HTML код страницы изменения содержимого элементов + Обработка событий.

HTML код страницы изменения содержимого элементов.

Заключение

В этом уроке мы познакомились с jQuery и рассмотрели его синтаксис, API и основные функции. Мы использовали селекторы для выбора элементов на странице, функции html() и text() для изменения содержимого элементов, функцию attr() для изменения атрибутов элементов и функцию on() для обработки событий.

jQuery - мощная библиотека, которая упрощает работу с DOM и делает создание динамических веб-страниц проще и быстрее. Если вы еще не использовали jQuery, я настоятельно рекомендую начать изучение этой библиотеки прямо сейчас!

]]>
Как скопировать текст в буфер обмена с помощью jQuery? http://portal-pk.ru/news/370-kak-skopirovat-tekst-v-bufer-obmena-s-pomoshchyu-jquery.html Константин Portal-PK 2023-03-25T08:17:23+03:00 Копирование текста в буфер обмена - это часто используемая функция в веб-приложениях. Она позволяет пользователям быстро скопировать нужную информацию без необходимости выделять и копировать текст вручную. В этой статье мы рассмотрим, как реализовать копирование текста в буфер обмена с помощью jQuery.

Пример копирование текста в буфер обмена:

Предположим, у вас есть тег <div> с некоторым текстом, который вы хотите скопировать в буфер обмена при нажатии кнопки "Копировать". Вот как вы можете сделать это с помощью jQuery:

HTML:

<button id="copy-button">Копировать</button>
<div id="text-to-copy">Некоторый текст для копирования</div>

jQuery:

$(document).ready(function() {
  $('#copy-button').click(function() {
    var text = $('#text-to-copy').text();
    var input = $('<textarea>').val(text).appendTo('body').select();
    document.execCommand('copy');
    input.remove();
    alert("Текст успешно скопирован в буфер обмена!");
  });
});

Объяснение копирование текста в буфер обмена.

Давайте разберемся, как работает этот код.

Первым шагом мы используем jQuery, чтобы найти элемент <div>, содержащий текст, который мы хотим скопировать, и сохраняем его содержимое в переменной text с помощью метода .text().

Затем мы создаем временный элемент <textarea>, который будет содержать текст для копирования. Мы устанавливаем значение этого элемента равным значению переменной text, добавляем его на страницу и выбираем текст внутри него с помощью метода .select().

После этого мы вызываем команду document.execCommand('copy'), которая копирует выбранный текст в буфер обмена.

Наконец, мы удаляем временный элемент <textarea> с помощью метода .remove() и выводим сообщение об успешном копировании в alert().

HTML код страницы, который демонстрирует, как скопировать текст в буфер обмена при нажатии кнопки "Копировать".

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Копирование текста в буфер обмена с помощью jQuery</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
      $(document).ready(function() {
        $('#copy-button').click(function() {
          var text = $('#text-to-copy').text();
          var input = $('<textarea>').val(text).appendTo('body').select();
          document.execCommand('copy');
          input.remove();
          alert("Текст успешно скопирован в буфер обмена!");
        });
      });
    </script>
  </head>
  <body>
    <h1>Копирование текста в буфер обмена с помощью jQuery</h1>
    <button id="copy-button">Копировать</button>
    <div id="text-to-copy">Некоторый текст для копирования</div>
  </body>
</html>

Этот код включает в себя все необходимые элементы, включая заголовок страницы, подключение jQuery, кнопку "Копировать", тег <div>, содержащий текст для копирования, и скрипт jQuery, который реализует копирование текста в буфер обмена.

HTML код страницы, который демонстрирует, как скопировать текст в буфер обмена при нажатии кнопки

Когда пользователь нажимает на кнопку "Копировать", скрипт jQuery получает текст из тега <div>, создает временный элемент <textarea>, копирует в него текст и вызывает команду document.execCommand('copy'), чтобы скопировать текст в буфер обмена. После успешного копирования, скрипт удаляет временный элемент <textarea> и выводит сообщение об успешном копировании в alert().

Когда пользователь нажимает на кнопку "Копировать", скрипт jQuery

Заключение:

Копирование текста в буфер обмена - это простой и полезный функционал, который можно легко реализовать с помощью jQuery. В этой статье мы рассмотрели пример, который демонстрирует, как скопировать текст в буфер обмена при нажатии кнопки "Копировать". Это может быть полезным во многих случаях, где необходимо быстро и удобно скопировать текст, например, при работе с формами или таблицами данных.


Понравилась статья Как скопировать текст в буфер обмена с помощью jQuery? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Селекторы, методы и события в jQuery. http://portal-pk.ru/news/369-selektory-metody-i-sobytiya-v-jquery.html Константин Portal-PK 2023-03-24T07:26:23+03:00 Селекторы, методы и события в jQuery являются важными концепциями, которые нужно освоить, чтобы эффективно работать с этой библиотекой. Вот список некоторых основных селекторов и методов:

Селекторы jQuery.

  • $("element") - выбор элемента по имени тега
  • $("#id") - выбор элемента по id
  • $(".class") - выбор элемента по классу
  • $("[attribute=value]") - выбор элемента по атрибуту и его значению
  • $("parent > child") - выбор потомков определенного родителя
  • $("selector1, selector2, ...") - выбор нескольких элементов

Методы jQuery.

  • addClass(className) - добавление класса к элементу
  • removeClass(className) - удаление класса из элемента
  • toggleClass(className) - добавление или удаление класса из элемента в зависимости от его наличия
  • css(propertyName, value) - установка CSS-свойства элемента
  • text(text) - установка текста элемента
  • html(html) - установка HTML-содержимого элемента
  • attr(attributeName, value) - установка значения атрибута элемента
  • removeAttr(attributeName) - удаление атрибута у элемента
  • append(content) - добавление содержимого в конец элемента
  • prepend(content) - добавление содержимого в начало элемента
  • after(content) - добавление элемента после выбранного элемента
  • before(content) - добавление элемента перед выбранным элементом
  • remove() - удаление элемента

События jQuery.

  • click() - обработчик клика на элементе
  • mouseenter() - обработчик наведения курсора на элемент
  • mouseleave() - обработчик выхода курсора за пределы элемента
  • keydown() - обработчик нажатия клавиши на клавиатуре
  • keyup() - обработчик отпускания клавиши на клавиатуре
  • submit() - обработчик отправки формы
  • change() - обработчик изменения значения элемента

Это далеко не полный список селекторов и методов в jQuery, но эти концепции представляют основу для работы с этой библиотекой.

Основные концепции jQuery: селекторы, методы и события.

Основные концепции jQuery: селекторы, методы и события.

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

Селекторы.

Селекторы в jQuery позволяют выбирать элементы на странице с помощью CSS-подобного синтаксиса. Вот пример, который выбирает все элементы p на странице и изменяет их фоновый цвет на красный:

$("p").css("background-color", "red");

Здесь $ - это функция jQuery, которая принимает селектор в качестве аргумента. Метод css() используется для изменения CSS-свойств выбранных элементов.

Методы.

Методы в jQuery используются для взаимодействия с выбранными элементами на странице. Например, вот пример кода, который выбирает все кнопки на странице и добавляет обработчик события click, который скрывает все элементы p:

$("button").click(function() {
  $("p").hide();
});

Здесь метод click() используется для добавления обработчика события click на все элементы button. Когда пользователь нажимает на кнопку, вызывается функция обработчика, которая использует метод hide() для скрытия всех элементов p на странице.

События.

События в jQuery отслеживают действия пользователя на странице. Вот пример кода, который отслеживает наведение курсора на элемент p и изменяет его фоновый цвет на желтый:

$("p").hover(function() {
  $(this).css("background-color", "yellow");
});

Здесь метод hover() используется для добавления обработчика события mouseover и mouseout на все элементы p. Когда пользователь наводит курсор на элемент p, вызывается функция обработчика, которая использует метод css() для изменения фонового цвета этого элемента на желтый. Обратите внимание, что this внутри функции обработчика ссылается на текущий элемент, на который было наведено мышью.

Комбинация концепций.

Часто концепции селекторов, методов и событий используются вместе для выполнения сложных задач на странице. Вот пример, который выбирает все кнопки на странице, добавляет обработчик события click, который скрывает все элементы p, а затем плавно показывает их с использованием метода fadeIn():

$("button").click(function() {
  $("p").hide().fadeIn("slow");
});

Здесь метод hide() используется для скрытия всех элементов p, а метод fadeIn() используется для плавного появления этих элементов после их скрытия. Обратите внимание, что здесь метод hide() и метод fadeIn() вызываются последовательно с использованием цепочки методов.

Заключение.

Это только несколько примеров использования концепций селекторов, методов и событий в jQuery. Однако, эти концепции представляют основу для работы с этой библиотекой, и хорошее понимание их работы поможет вам стать более продуктивным при работе с jQuery.


Понравилась статья Селекторы, методы и события в jQuery? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Новый HMI дисплей на базе ESP32 http://portal-pk.ru/news/368-novyi-hmi-displei-na-baze-esp32.html Константин Portal-PK 2023-03-23T13:57:06+03:00 Хотите создавать интерфейсы и управлять устройствами с помощью новых технологий? HMI дисплей на базе ESP32 может быть вашим решением! В статье мы исследуем этот дивайс, его функционал и настройку, а также покажем, как можно использовать HMI дисплей для различных проектов. Вы узнаете о прошивке, беспроводной связи, управлении через веб-интерфейс и многом другом. Присоединяйтесь к нам и узнайте больше о новом HMI дисплее на базе ESP32!


HMI дисплей на базе ESP32 с резистивным сенсором доступен по цене всего 1030 рублей, что делает его очень привлекательным для создания различных проектов.

HMI дисплей на базе ESP32 с резистивным сенсором доступен по цене всего 1030 рублей

Купить HMI дисплей на ESP32 можно на AliExpress.

Несмотря на то, что для данного дисплея нет готовых решений интерфейса, будут написаны уроки для создания своих проектов. Мы поделимся с вами своим опытом и советами, которые помогут вам максимально эффективно использовать HMI дисплей на базе ESP32 в своих проектах. Следите за нашими обновлениями и не пропустите новые видеоуроки!

HMI дисплей на базе ESP32 в своих проектах

Понравилась новость Новый HMI дисплей на базе ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Информер криптовалют своими руками на ESP8266 и матрице MAX7219. http://portal-pk.ru/news/367-informer-kriptovalyut-svoimi-rukami-na-esp8266-i-matrice.html Константин Portal-PK 2023-03-14T11:00:54+03:00 Мир криптовалют набирает обороты и становится все более популярным, и неудивительно, что многие люди признают потенциал этой технологии и вкладывают свои заработанные деньги в цифровые валюты. Торговля криптовалютами стала прибыльным делом.


Что такое информер криптовалют?

Однако один из самых важных аспектов торговли криптовалютами - оставаться в курсе последних изменений цен и состояния рынка. Именно здесь на помощь приходят криптовалютные информеры.

Информер криптовалют - это устройство, которое позволяет пользователям отслеживать текущие рыночные цены на различные цифровые валюты. Обычно он оснащен дисплеем, на котором в режиме реального времени отображаются цены на различные монеты, а также другие показатели, такие как объем рынка и многое другое.

В этой статье рассмотрим, как сделать свой собственный криптовалютный информер

В этой статье рассмотрим, как сделать свой собственный криптовалютный информер, используя популярный микроконтроллер ESP8266 и светодиодную матрицу 8x32. Этот проект довольно прост в сборке и должен обеспечить вам отличный способ следить за последними изменениями на криптовалютном рынке.

Собираем информер.

Мы начнем с подключения компонентов друг к другу. Начните с подключения ESP8266 к модулю матрицы. Убедитесь, что контакты DIN, CS и CLK ESP8266 подключены к соответствующим контактам на матричном модуле.

Мы начнем с подключения компонентов друг к другу. Начните с подключения ESP8266 к модулю матрицы. Убедитесь, что контакты DIN, CS и CLK ESP8266

Далее нам нужно будет написать код для информера. Для этого мы будем использовать Arduino IDE. Основные библиотеки, которые нам понадобятся, это библиотеки ESP8266 и Adafruit_GFX, Max72xxPanel. После установки всех библиотек мы можем приступить к написанию кода.

 библиотеки ESP8266 и Adafruit_GFX, Max72xxPanel

Начнем с настройки. Этот код будет использоваться для установления соединения между ESP8266 и модулем матричного дисплея.

Также нужно произвести дополнительные настройки работы устройства.

Нам также потребуется написать код для связи с биржами и получения последних цен на монеты. Получать данные будем с сервиса Coinlore. Для этого будем использовать запрос:

Запрос имеет вид: https://api.coinlore.net/api/ticker/?id=90 (BTC),

  • где id – номер цифровой валюты.

Нам также потребуется написать код для связи с биржами и получения последних цен на монеты.

Как только стоимость, мы сможем вывести их на матричный дисплей.

Как только стоимость, мы сможем вывести их на матричный дисплей.

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

Как только напишем весь код, его можем загрузить в ESP8266 и начать использовать наш информер.

Как только напишем весь код, его можем загрузить в ESP8266 и начать использовать наш информер. Теперь наш информер сможет отображать последние цены на различные криптовалюты в режиме реального времени.

информер сможет отображать последние цены на различные криптовалюты в режиме реального времени.

Более подробное описание устройства вы можете прочитать на моем основном сайте.

Создание собственного криптовалютного информера может стать отличным способом оставаться в курсе последних изменений на рынке. С помощью этого руководства вы сможете создать свой собственный информер и начать торговать криптовалютами как профессионал.

Купить MAX7219 можно на AliExpress.


Понравилась новость Информер криптовалют своими руками на ESP8266 и матрице MAX7219? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Создание забавных и впечатляющих проектов для дома с помощью адресных светодиодов. http://portal-pk.ru/news/366-sozdanie-zabavnyh-i-vpechatlyayushchih-proektov-dlya-doma-s.html Константин Portal-PK 2023-03-09T09:10:06+03:00 Вы ищете уникальный и забавный DIY-проект для себя или для подарка кому-то особенному? Тогда подумайте о создании чего-нибудь с использованием адресных светодиодов! Они универсальны, подходят для всех уровней мастерства и становятся все более популярными для использования как в практических, так и в декоративных проектах.


Адресные светодиоды, также называемые программируемыми светодиодами или WS2812, представляют собой массив индивидуально адресуемых светодиодов, то есть каждый светодиод может управляться отдельно от другого. Это открывает мир творчества и открывает двери для множества впечатляющих проектов.

Одним из самых популярных проектов с использованием адресуемых светодиодов является создание часов.

Одним из самых популярных проектов с использованием адресуемых светодиодов является создание часов. Это отличный способ добавить забавный личный штрих в ваш дом или офис, который позволяет творчески подойти к дизайну. Часы можно сделать практически из любого материала - дерева, ПВХ, пластика или даже 3D-печати. Благодаря адресуемым светодиодам вы сможете создать индивидуальные часы, которые будут действительно выделяться.

Пример работы светодиодного ночника.

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


Адресные светодиоды также отлично подходят для создания праздничных украшений. Вы можете сделать праздничную гирлянду на Рождество или завораживающее световое шоу на Новый год. Проявив немного творчества, можно сделать световой дисплей, которым можно управлять с панели с дисплеем DWIN.

Купить HMI DWIN можно на AliExpress.

Как видите, адресуемые светодиоды - это отличный способ сделать уникальные проекты для себя или для кого-то особенного. Они не только просты в использовании, но и доступны по цене и открывают двери для множества возможностей. Так почему бы не попробовать их и не воплотить свои идеи в жизнь!

Купить ws2812 можно на AliExpress.


Понравилась новость Создание забавных и впечатляющих проектов для дома с помощью адресных светодиодов? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
DWIN Box – самый простой способ сделать проект на Arduino и сенсорном дисплее. http://portal-pk.ru/news/365-dwin-box---samyi-prostoi-sposob-sdelat-proekt-na-arduino-i.html Константин Portal-PK 2023-02-17T12:34:10+03:00 Мной был разработан небольшой конструктор, который позволяет написать код для Arduino или ESP32 и вывести интерфейс на сенсорный дисплей. В последствии данный конструктор был интегрирован в проект Петрова Виталия Николаевича «ESP Block 2.0. и ArduBlock 2.0


Как создавать интерфейс?

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

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

После чего сохранить интерфейс для дальнейшего дополнения или редактирования блоков в ESP Block или ArduBlock.

После чего сохранить интерфейс для дальнейшего дополнения или редактирования блоков в ESP Block или ArduBlock.

Тут можно добавить исполнительные механизмы, которыми можно управлять с дисплея. А также вывести показания с датчиков и сенсоров.

Тут можно добавить исполнительные механизмы, которыми можно управлять с дисплея. А также вывести показания с датчиков и сенсоров.

Загружаем проект на ESP32 или Arduino.

Тут можно добавить исполнительные механизмы, которыми можно управлять с дисплея. А также вывести показания с датчиков и сенсоров.

Проект готов!

Достаточно просто, не правда ли?

Изменить оформление интерфейса.

На сайте Arduino-tex.ru вы найдёте скины, которые можно приобрести за символическую стоимость и тем самым сменить оформление интерфейса.

На сайте Arduino-tex.ru вы найдёте скины,

Все наборы имеют подробное описание и нумерацию элементов, что позволит сориентироваться, как будет выглядеть будущий проект на дисплее от компании DWIN.

На сайте Arduino-tex.ru вы найдёте скины,

Подробное описание конструктора DWIN Box читайте на моём основном сайте.

Подробное описание конструктора DWIN Box читайте на моём основном сайте.


Понравилась новость DWIN Box – самый простой способ сделать проект на Arduino и сенсорном дисплее? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Arduino и дисплей DWIN работа по RS232. http://portal-pk.ru/news/364-arduino-i-displei-dwin-rabota-po-rs232.html Константин Portal-PK 2023-01-16T07:22:34+03:00 Часто сталкиваюсь с вопросом: «Купил дисплей DMG80480T050_A5WTC, а он не работает с Arduino. Всё делаю, как у вас на сайте, но ничего не работает. В чём причина?».


Когда отвечаешь, что данный дисплей не предназначен для работы с Arduino и ESP, у людей начинается ступор. Или реакция: «но у дисплея есть UART! Как он может не работать?»

Да. UART есть, но он работает по RS232 и по RS485. Дисплеи в корпусе не поддерживают TTL.

Да. UART есть, но он работает по RS232 и по RS485. Дисплеи в корпусе не поддерживают TTL. Данные дисплеи промышленного класса и предназначены для работы на предприятиях, где используются микроконтроллеры, которые общаются в основном по RS485.

Как же быть?

Самый простой способ — это использовать RS232 конвертор в TTL. Достаточно подключить дисплей к Arduino, ESP8266 или к ESP32. И дальше можно пользоваться всеми моими примерами и уроками без лишних проблем.

Самый простой способ — это использовать RS232 конвертор в TTL. Достаточно подключить дисплей к Arduino, ESP8266 или к ESP32.

Подробнее о подключении TTL - RS232 конвертора к ESP8266 (NodeMCU) и дисплею DWIN читайте на моём основном сайте.

Подробнее о подключении TTL - RS232 конвертора к ESP8266 (NodeMCU) и дисплею DWIN



Понравилась новость Arduino и дисплей DWIN работа по RS232? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Гирлянда для ёлки версия 2023. http://portal-pk.ru/news/363-girlyanda-dlya-elki-versiya-2023.html Константин Portal-PK 2022-12-29T11:48:25+03:00 И вот уже Новый 2023 год у порога, и пора позаботиться об украшении главного символа нового года - Ёлки. В этом году учёл все минусы предыдущих версий (в плане удобства управления). В первую очередь они связанны с тем, что гости, которые приходят в новогодние праздники, имеют неподдельный интерес и желание поиграть с управлением гирляндой. Но когда управление происходит с приложения, это не удобно, ведь каждому желающему не установишь приложение на телефон. В праздники не до этого! Поэтому сделал управление гирляндой со своей панели управления, которая не зависит ни от интернета, ни от Wi-Fi. Каждый желающий может подойти и выбрать нужный режим подсветки для ёлки.


Особенности новой гирлянды 2023.

Первая особенность — это управление с панели, которая сделана на базе дисплея DWIN и микроконтроллере ESP32.

управление с панели, которая сделана на базе дисплея DWIN и микроконтроллере ESP32.


Вторая особенность — добавлена возможность настраивать скорость эффектов гирлянды и звезды. Добавлена шкала для выбора 255 цветов статического свечения гирлянды.

Добавлена шкала для выбора 255 цветов статического свечения гирлянды.

Третья особенность — переделал управление звездой и добавил возможность выбора 4 режимов работы звезды.

переделал управление звездой и добавил возможность выбора 4 режимов работы звезды


Подробнее про новогоднюю гирлянду читайте на моём основном сайте Arduino-tex.ru.


Понравилась новость Гирлянда для ёлки версия 2023? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Компания DWIN Technology приняла участие в выставке «Российский промышленник 2022». http://portal-pk.ru/news/362-kompaniya-dwin-technology-prinyala-uchastie-v-vystavke.html Константин Portal-PK 2022-12-09T07:41:37+03:00 Компания DWIN Technology продолжает продвижение свой продукции на Российском рынке. В конце ноября 2022 года компания приняла участие в международном форуме-выставке «Российский промышленник» со своей продукцией.

 В конце ноября 2022 года компания приняла участие в международном форуме-выставке «Российский промышленник» со своей продукцией.

Оформление стенда и подготовка дисплеев DWIN для выставки «Российский промышленник».

Подготовкой дизайна графических элементов стенда и подготовкой дисплеев для выставки занималась команда Arduino-Tex.Ru. Стенд после монтажа и оклейки баннерами выглядел следующим образом.

Подготовкой дизайна графических элементов стенда и подготовкой дисплеев для выставки занималась команда Arduino-Tex.Ru.

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

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

Также расставили экспонаты на витрину и подключили их, чтобы они привлекали внимание. За время проведения выставки мы не однократно слышали такую фразу: «Как у вас тут ярко и красиво!».

Интерес к продукции DWIN.

Первые два дня на выставке было большое количество посетителей, и заинтересованных посетителей было очень много. К сожалению, мы не могли сделать фото в самые оживлённые моменты, так как рассказывали о продукции DWIN. На третий день ажиотаж спал, и мы смогли сделать фото с посетителями нашего стенда.

Интерес к продукции DWIN.

Мы раздали много печатных материалов (буклеты, визитки, каталоги), под конец у нас закончились визитки, так как мы даже не рассчитывали, что будет так много заинтересованных посетителей.


Проведение форумов.

Для проведения форумов было несколько зон: основная трибуна, где собиралось большое количество слушателей.

Для проведения форумов было несколько зон: основная трибуна

И небольшие локальные пространства, где рассказывали про локальные темы.

И небольшие локальные пространства, где рассказывали про локальные темы.

Технический руководитель компании DWIN на территории России Константин Сергеевич также засветился на трибуне.

Технический руководитель компании DWIN на территории России Константин Сергеевич также засветился на трибуне.


Посещаемость выставки «Российский промышленник».

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

Посещаемость выставки «Российский промышленник».

Утром и вечером посетителей было не так много, в последний день выставки активность посетителей также снизилась.

Утром и вечером посетителей было не так много, в последний день выставки активность посетителей также снизилась.

Что ещё интересного было на выставке.

На выставке было представлено большое количество экспонатов.

  • Специализированная техника;

Специализированная техника;

  • Станки;

Станки;

  • Оборудование различного назначения;

Оборудование различного назначения;

  • Медицинское оборудование;

Медицинское оборудование;

  • Лифты;

Лифты;

  • Роботы-манипуляторы;

Роботы-манипуляторы;

  • Оборудования и устройства для автотранспортной сферы и многое другое.

Оборудования и устройства для автотранспортной сферы и многое другое.

Итог выставки.

Выставка прошла достаточно хорошо. Результаты буду видны через 2-3 месяца после проведения мероприятия.

Выставка прошла достаточно хорошо. Результаты буду видны через 2-3 месяца после проведения мероприятия.


Понравилась новость Компания DWIN Technology приняла участие в выставке «Российский промышленник 2022»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Спидометр для электросамоката или велосипеда своими руками на Arduino. http://portal-pk.ru/news/361-spidometr-dlya-elektrosamokata-ili-velosipeda-svoimi.html Константин Portal-PK 2022-09-29T14:12:59+03:00 Электросамокаты сегодня стали достаточно популярными, поэтому многие пытаются выделиться и сделать свой самокат уникальным. Недавно делал урок по созданию спидометра на дисплее DWIN и Arduino. И в социальных сетях много комментариев было посвящено как раз тому, что данный спидометр можно использовать для электросамокатов. Поэтому, если у вас есть электросамокат, вы можете сделать данную фишку для своего транспортного средства.


Как сделать спидометр для электросамоката или велосипеда.

Как писал выше, у меня есть отдельный урок, в котором подробно расписано, как можно сделать спидометр на дисплее DWIN и Arduino. Подключаем всё вот по такой схеме.

Подключаем всё вот по такой схеме.

Как же это всё применить на практике?

Подключаем всё вот по такой схеме.

Для этого достаточно использовать вместо потенциометра делитель напряжения, который позволит получить значения от контроллера замера скорости.

Для этого достаточно использовать вместо потенциометра делитель напряженияЧтобы запитать дисплей и Arduino, нужно питание 5 V. Для этого в схему нужно добавить Dc-Dc преобразователь.

Понятно, что данная инструкция только даёт направление, но не предусматривает все мелочи реализации. Если вам интересен данный проект, вы можете написать мне, и я рассмотрю ваше предложение.

Пример реализованного спидометра на дисплее DWIN и Arduino.

Для данного урока делал несколько примеров интерфейсов спидометров.

Пример реализованного спидометра на дисплее DWIN и Arduino.

Первый вариант выглядел вот так.

Первый вариант выглядел вот так.

Второй вариант выглядел немного лучше.

Второй вариант выглядел немного лучше.

Спидометр можно сделать блочным программированием, например, на сайте ArduBlock.


Также у компании DWIN есть дисплей круглой формы. Спидометр с использованием данного дисплея получится очень красивый.

КРУГЛЫЙ СМАРТ-ЭКРАН DWIN


Понравилась новость Спидометр для электросамоката или велосипеда своими руками на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Как произвести сброс чипов Mimaki. http://portal-pk.ru/news/360-kak-proizvesti-sbros-chipov-mimaki.html Константин Portal-PK 2022-09-23T08:49:44+03:00 Принтеры Mimaki отлично зарекомендовали себя и позволяют произвести печать на разных поверхностях. Но одно досадное обстоятельство омрачает всё впечатление о данных принтерах и плоттерах: постоянно заканчиваются чернила, дата и нужно покупать новый картридж, который стоит не дёшево. Поэтому энтузиастами был разработан программатор, который позволяет сбросить чип принтера.


Программатор для сброса чипов Mimaki.

На момент написания данной статьи реализована уже вторая версия программатора. Про предыдущий вариант я уже писал ранее.

Данный программатор (на текущий момент времени) поддерживает принтеры Mimaki серий: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160.Новая версия получила дисплей 2,8 дюйма с ёмкостным сенсором от компании DWIN.

При касании сенсора на событие нажатия кнопки предусмотрены звуковые эффекты

Функциональные возможности программатора сброса чипов Mimaki:

  • Чтение данных с чипа и вывод на дисплей;
  • Сброс года;
  • Сброс объёма чернил;
  • Смена типа краски картриджа (синий, красный, желтый, черный, белый, лак);
  • Смена типа чернил LH-100 на LF-140 и наоборот;
  • Обновление HEX суммы;
  • Защита паролем, с возможностью выбора входа с паролем или без;
  • Демонстрационная версия доступна по паролю «1234»;
  • Интерфейс на русском языке;
  • Зажимы в виде крабов позволяют легко подключить чип для прошивки;
  • Источник питания - устройство от телефона или Power bank;
  • Звуковое уведомление при нажатии кнопки на дисплее.

Подробное описание программатора можно посмотреть на моём втором сайте.

Все возможности программатора для сброса чипов Mimaki

Если вас заинтересовал программатор, уточнить стоимость и сроки изготовления вы можете у меня:

В контакте: https://vk.com/kas_flai
Tелеграмм: https://t.me/arduino_tex_ru


Понравилась новость Заставка на дисплее с простым скроллингом изображения? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Заставка на дисплее с простым скроллингом изображения. http://portal-pk.ru/news/359-zastavka-na-displee-s-prostym-skrollingom.html Константин Portal-PK 2022-08-24T13:14:10+03:00 Я часто делаю различные проекты, и в большинстве случаев требуется сделать заставку или приветственную страницу на дисплее. Раньше я делал обычную картинку. Но на дисплеях DWIN есть отличный инструмент, который позволяет из простой скучной картинки сделать анимацию, а именно скроллинг изображения в одном из четырёх направлений.


Создаём простой скроллинг на дисплее DWIN.

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

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

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

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

Более подробное описание и исходные материалы вы можете скачать на моём основном сайте.

Переход на основную страницу проекта.

проекте «программатор чипов Mimaki» я сделал возможность перехода на страницу ввода пароля

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


Понравилась новость Заставка на дисплее с простым скроллингом изображения? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.

]]>
Многофункциональные часы своими руками на ESP8266 и дисплее DWIN. http://portal-pk.ru/news/358-mnogofunkcionalnye-chasy-svoimi-rukami-na-esp8266-i.html Константин Portal-PK 2022-08-18T09:14:51+03:00 Пришла мне идея сделать часы, которые заменят основные устройства на моей прикроватной тумбочке. После чего была разработана программная часть, а также корпус. К сожалению, в корпус уложить не успел, так как нужно срочно снять видео для того, чтобы своевременно сообщить вам о том, что проводится конкурс по розыгрышу двух дисплеев от компании DWIN. Подробнее о конкурсе читайте тут.


Предыстория.

Тат как я не успел всё собрать в нужном корпусе, демонстрирую на другом дисплее, а вся электроника установлена на макетную плату. Но, несмотря на это, все функции устройства полностью готовы. Возможно, часы не так эффектно выглядят, но принцип показать можно.

Тат как я не успел всё собрать в нужном корпусе, демонстрирую на другом дисплее

Возможности часов.

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

Также можно включить воспроизведение музыки с карты памяти.

Кроме этого можно управлять подсветкой на адресных светодиодах. Данная функция управления влияет не только на светодиоды, но и на оформление интерфейса часов. Например, при смене цвета подсветки меняется цвет оформления на дисплее.

Кроме этого можно управлять подсветкой на адресных светодиодах.

Это достаточно красиво выглядит в сочетании с фоновой подсветкой от светодиодов.

Это достаточно красиво выглядит в сочетании с фоновой подсветкой от светодиодов.

К сожалению, на данный момент это не так эффектно. Но после того, как всё соберу в корпус, это должно быть очень красиво.

К сожалению, на данный момент это не так эффектно. Но после того, как всё соберу в корпус, это должно быть очень красиво.

После того, как часы соберу, сниму видео и напишу обзор.

Скачать исходные материалы проекта можно тут.


Понравилась новость Многофункциональные часы своими руками на ESP8266 и дисплее DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Панель управления шаговым двигателем своими руками. http://portal-pk.ru/news/357-panel-upravleniya-shagovym-dvigatelem-svoimi-rukami.html Константин Portal-PK 2022-07-28T12:57:36+03:00 Управление шаговым двигателем очень популярная и интересная тема. Мне часто поступают заказы по разработке станков и различных устройств с использованием шаговых двигателей. Для управления шаговым двигателем достаточно несколько тактовых кнопок. Но что делать, если требуется устанавливать различные параметры, такие как скорость вращения, ускорение, расстояние перемещения и пр. Можно установить символьный дисплей и энкодер, но данное решение не очень удобное. Лучше всего использовать сенсорный дисплей. Благо, дисплеи компании DWIN стоят недорого.


Собираем панель управления шаговым двигателем своими руками.

Для сборки панели управления шаговым двигателем подготовил все необходимые материалы: прошивка для дисплея DWIN, код для Arduino или ESP32, 3D модель корпуса под дисплей. При желании в корпус можно разместить драйвер шагового двигателя A4988 или другой драйвер данного форм-фактора.


Схема подключения шагового двигателя сенсорного дисплея к Arduino.

Как видим из схемы, нам нужно 2 источника питания на 5 и 12 В.

Код для Arduino.

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

- изменить количество шагов для совершения перемещения на 1 мм.;

- установить скорость шагового двигателя;

- установить ускорение шагового двигателя. И приступить к управлению. Можно вращать по часовой или против часовой стрелки бесконечное количество оборотов или перемещать на заданное расстояние в мм.

Также смотрите другие проекты с использованием дисплея DWIN:

Более подробное описание проекта вы можете прочитать на моём втором сайте.

Также смотрите другие проекты с использованием дисплея DWIN:


Понравилась новость Панель управления шаговым двигателем своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Выводим кнопку на дисплей DWIN. http://portal-pk.ru/news/356-vyvodim-knopku-na-displei-dwin.html Константин Portal-PK 2022-07-19T11:48:31+03:00 Вывести кнопку на дисплей DWIN достаточно просто. Но для этого потребуется нарисовать 2 изображения с разрешением вашего экрана. Первое изображение будет служить страницей управления. Вторая будет служить как частичная подмена изображения там, где располагаются кнопки.


Инструмент, который поможет вывести кнопки на дисплей DWIN.

Для вывода кнопки на дисплей используется всего один инструмент, в отличие от вывода кнопки с фиксацией, о которой я уже рассказывал в предыдущем уроке.

Данный элемент накладываем поверх «Bit icon».

А для вывода кнопки нужно использовать инструмент «Return Key code».

А для вывода кнопки нужно использовать инструмент «Return Key code».

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

На картинке ниже приведено описание «Return Key code» с переводом на русский язык.

Подробнее про данный инструмент вы можете прочитать в моей статье на втором сайте.

Применение кнопки на практике.

У меня реализован проект, который позволяет управлять модулем 8 реле с дисплея DWIN. Включение и выключение одного реле происходит с помощью кнопки с фиксацией. А для включения и выключения всех реле одновременно используется кнопка, созданная с помощью инструмента «Return Key code».

У меня реализован проект, который позволяет управлять модулем 8 реле с дисплея DWIN. Включение и выключение одного реле

Подробнее о работе с элементом «Return Key code» читайте в моём уроке.

Материалы постоянно пополняются. Не забывайте добавлять сайт в закладки, чтобы не пропустить новые интересные статьи и уроки.


Понравилась новость Выводим кнопку на дисплей DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Уроки по программированию дисплея DWIN. Использование с ESP32 и Arduino. http://portal-pk.ru/news/355-uroki-po-programmirovaniyu-displeya-dwin-ispolzovanie-s.html Константин Portal-PK 2022-07-14T12:16:41+03:00 Спектр электроники на рынке с каждым годом становится всё больше и разнообразнее. То же самое происходит и с дисплеями HMI, выбор различных моделей которых становится всё больше и разнообразнее. Одни из недорогих дисплеев — это дисплейные модули компании DWIN. Данные дисплеи есть различного размера от 1,5 дюймов до 21,5 дюймов. Также есть дисплеи очень яркие до 1000 nit, на которых информацию хорошо видно на улице при ярком освещении. Кроме этого есть дисплеи очень тонкие COF и много других предложений. Поэтому я решил освоить данные дисплеи и написать уроки по подключению и работе дисплейных модулей HMI с ESP32 и Arduino.


Уроки по программированию дисплея DWIN.

Приступил к написанию уроков по программированию дисплея DWIN. Также пишу код для ESP32 и Arduino, чтобы пользоваться данным дисплеем было не сложнее, чем c дисплеем Nextion.

Также пишу код для ESP32 и Arduino, чтобы пользоваться данным дисплеем было не сложнее, чем c дисплеем Nextion.

На данный момент написаны уроки:

Больше уроков можно посмотреть на моём втором сайте.

Также у меня на сайте есть полезные статьи про дисплеи DWIN:

И напоследок, проекты с использованием дисплея DWIN:

Кратко о датчиках давления, температуры и влажности BME280 (BMP280).

Материалы постоянно пополняются. Не забывайте добавлять сайт в закладки, чтобы не пропустить новые интересные статьи и уроки.


Понравилась новость Уроки по программированию дисплея DWIN. Использование с ESP32 и Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Метеостанция своими руками на Arduino. http://portal-pk.ru/news/354-meteostanciya-svoimi-rukami-na-arduino.html Константин Portal-PK 2022-07-07T12:11:56+03:00 Для того чтобы реализовать красивую и недорогую метеостанцию своим руками, нет необходимости писать много кода. Для этого нам поможет дисплей DWIN, который можно купить без сенсора, так как нам всего лишь нужно выводить информацию на дисплеи. Давайте приступим к рассмотрению реализации данного проекта.


Схема подключения необходимых компонентов к Arduino.

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

Настройка интерфейса для дисплея.

Для отображения информации на дисплей будем использовать всего 1 инструмент «Data variables».

Для отображения информации на дисплей будем использовать всего 1 инструмент «Data variables».

Изменяем только тип выводимого значения: int или float.

Для того чтобы реализовать красивую и недорогую метеостанцию своим руками, нет необходимости писать много кода.

Код метеостанции для Arduino.

Код метеостанции для Arduino.

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

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


Более подробное описание проекта смотрите на моём втором сайте.

Также смотрите другие проекты с использованием дисплея DWIN:


Понравилась новость Метеостанция своими руками на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.


]]>
Пианино своими руками на сенсорном дисплее. http://portal-pk.ru/news/353-pianino-svoimi-rukami-na-sensornom-displee.html Константин Portal-PK 2022-06-24T11:03:31+03:00 Как вы думаете, можно ли сделать что-то наподобие элитарного пианино, используя сенсорный дисплей? Конечно возможно! Об этом я вам расскажу в данной статье.


В рамках уроков про дисплей DWIN сделал инструкцию по работе со звуковыми файлами и для примера реализовал небольшое пианино. Конечно, в дисплей можно загрузить максимум 16 звуковых файлов, что не позволит реализовать полноценное пианино, но сделать игрушку для детей и сыграть, например, мелодию «В траве сидел кузнечик» можно. Может быть у вас получится сыграть и более сложные композиции. К сожалению, у меня нет музыкальных знаний, и на пианино я не играю, поэтому я не могу судить, что можно сыграть с минимальным набором нот.

В рамках уроков про дисплей DWIN сделал инструкцию по работе со звуковыми файлами и для примера реализовал небольшое пианино.

Подробнее про инструменты, которые потребуются для реализации сенсорного пианино на дисплее DWIN.

Для реализации данного проекта понадобятся следующие инструменты:

  • «WAE Generator» - позволит упаковать аудиофайлы в один. Для последующей загрузки его на дисплей.

«WAE Generator» - позволит упаковать аудиофайлы в один.

  • «Config Generator» - глобальные настройки дисплея. Инструмент позволяет включить воспроизведение музыки из определённого файла, который генерируется с помощью предыдущего инструмента.

«Config Generator» - глобальные настройки дисплея.

Использовать воспроизведение нот при нажатии на сенсорную кнопку достаточно просто. Нужно настроить всего лишь несколько параметров, и пианино готово.

Использовать воспроизведение нот при нажатии на сенсорную кнопку достаточно просто.

Скачать исходные материалы пианино на дисплей DWIN вы можете на странице урока.

Также смотрите другие проекты с использованием дисплея DWIN:


Понравилась новость Пианино своими руками на сенсорном дисплее? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Дисплей DWIN аналог Nextion. Пример проектов на Arduino. http://portal-pk.ru/news/352-displei-dwin-analog-nextion-primer-proektov-na-arduino.html Константин Portal-PK 2022-06-20T18:18:54+03:00 Дисплей Nextion многим знаком по моим проектами и урокам. Если нет, то рекомендую посмотреть! В наше неспокойное время дисплеи то дорожают, то становятся дешевле, и в один прекрасный день я задумался, а могу ли я заменить дорогой дисплей Nextion более дешёвым аналогом. Решение было найдено — это HMI дисплеи компании DWIN. Дисплей дешевле, но ничем не хуже, чем Nextion, даже есть некоторые преимущества.



Сейчас я не буду вдаваться в технические особенности и различия дисплеев DWIN и Nextion. Про это сделаю отдельное видео, когда мои знания и навыки работы будут сопоставимы с навыками работы с дисплеем Nextion. А сегодня просто покажу, какие проекты можно реализовать с использованием дисплея DWIN.

Примеры проектов с использованием дисплея DWIN – аналог Nextion.

Первый проект - Метеостанция.

На дисплей выводится температура, влажность воздуха, а также атмосферное давление. Датчик BME280 позволяет вывести приблизительное значение высоты над уровнем моря в метрах. На дисплей DWIN я также вывел данный параметр.

Первый проект - Метеостанция.

Скачать исходные материалы проекта можно тут.

Второй проект - Панель управления подсветкой на адресных светодиодах.

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

Второй проект - Панель управления подсветкой на адресных светодиодах.

Третий проект - Управление модулем из 8 реле.

Если вам нужно централизовано управлять различной нагрузкой, например, управлять подсветкой в зале ресторана или кафе. Для реализации данной задачи есть много различных светильников, которые рассчитаны на подсветку определённых зон. Управление большим количеством реле будет как раз кстати. Хотелось бы отметить, что можно управлять не 8 реле, а большим количеством: 16, 32, 48 и т.д.

Постарался сделать максимально универсальный код, чтобы его можно было использовать с разными платами: Arduino UNO, NANO, MAGA, ESP32, ESP8266.

Это только первые проекты, которые я реализовал за последнее время. Со временем мои знания будут накапливаться, и проекты будут всё сложнее и интереснее.


Понравилась новость Дисплей DWIN аналог Nextion. Пример проектов на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Самодельная подсветка с управлением с сенсорного экрана. http://portal-pk.ru/news/351-samodelnaya-podsvetka-s-upravleniem-s-sensornogo.html Константин Portal-PK 2022-06-15T12:22:57+03:00 Реализовал недавно самодельную подсветку с сенсорным экраном. Данная система достаточно универсальна, и использовать её можно для организации подсветки в помещении, для создания подсветки отдельных зон, сделать ночник, световое оформление и других задач, а также для управления мощными адресными светодиодами. На сайте AliExpress есть адресные светодиоды в виде прожекторов. Соответственно, используя данную панель управления подсветкой, можно управлять подсветкой зданий, фасадов и т.д.


Что умеет подсветка:

  • 18 разнообразных световых эффектов (можно расширить);
  • Регулирование яркости от 0 до 100%;
  • Выбор статического цвета с помощью бегунка (256 цветов);
  • Автоматическое переключение режимов через 60 сек. (время настраивается в прошивке. Можно изменить.)

Что умеет подсветка

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

Функционал стандартный, но я планирую его расширить.

Также можно реализовать совместное управление с дисплея и приложения для телефона. У меня уже есть проекты в данном направлении, остаётся только объединить функционал.


Понравилась новость Самодельная подсветка с управлением с сенсорного экрана? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Бесплатный образец сенсорного HMI дисплея DWIN. http://portal-pk.ru/news/350-besplatnyi-obrazec-sensornogo-hmi-displeya-dwin.html Константин Portal-PK 2022-06-07T10:09:42+03:00 Уже несколько лет я разрабатываю проекты с использованием сенсорных дисплеев. Недавно начал сотрудничать с компанией DWIN, которая разрабатывает дисплеи разного размера и с различными сенсорами. В чём различие сенсоров, вы можете прочитать в моей статье, а сейчас кратко познакомимся с продукцией компании и рассмотрим, как можно получить бесплатный образец сенсорного HMI дисплея DWIN.


Что производит компания DWIN?

Что производит компания DWIN?

Давайте кратко рассмотрим, какую продукцию производит компания DWIN, чтобы вам было проще выбрать, какой образец заказать.

  • Сенсорные HMI дисплеи компании DWIN;
  • Встраиваемые дисплеи на Android компании DWIN;
  • Дисплеи со структурой COF (chip on FPC) - микроконтроллер размещён на гибкой печатной плате (FPC) и имеет только шлейф;
  • Сенсорные HDMI-дисплеи DWIN. Имеют USB для подключения сенсора и HDMI вход для применения с внешним компьютером;
  • Готовые решения для интернета вещей (сенсорный термостат, датчик температуры с сенсорным дисплеем).

Как видим, кампания DWIN производит не только HMI-дисплеи, но и другую продукцию, которая может быть полезная для вас и вашего производства.

Как видим, кампания DWIN производит не только HMI-дисплеи, но и другую продукцию, которая может быть полезная для вас и вашего производства.

Как получить бесплатный образец HMI дисплея DWIN?

Как получить бесплатный образец HMI дисплея DWIN?

Данная новость создана, чтобы вы могли определиться, что вас интересует из продукции компании DWIN.

Понравилась новость Плата для расширения ШИМ портов Arduino, ESP8266 и ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Плата для расширения ШИМ портов Arduino, ESP8266 и ESP32. http://portal-pk.ru/news/349-plata-dlya-rasshireniya-shim-portov-arduino-esp8266-i-esp32.html Константин Portal-PK 2022-05-04T16:40:15+03:00 При создании различных проектов бывают случаи, когда портов ввода-вывода на плате Arduino, ESP8266 и ESP32 не хватает. Я в своих проектах сталкиваюсь с данной ситуацией неоднократно. Для расширения ШИМ портов Arduino, ESP8266 и ESP32 отлично подойдёт плата RoboIntellect controller 001.

Для расширения ШИМ портов Arduino, ESP8266 и ESP32 отлично подойдёт плата RoboIntellect controller 001.

Подробнее про данную плату рассказываю в видео.


Также с использованием данной платы сделал проект управления 16 реле с компьютера и при помощи Arduino. Что наглядно показывает, в каких случаях портов может не хватить и как исправить данную ситуацию.


Более подробное описание проекта управления реле можете прочитать на моём втором сайте.

проект управления 16 реле с компьютера и при помощи Arduino.

Там же можно скачать все исходные материалы.

Понравилась новость Плата для расширения ШИМ портов Arduino, ESP8266 и ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Ночник своими руками в домашних условиях. http://portal-pk.ru/news/348-nochnik-svoimi-rukami-v-domashnih-usloviyah.html Константин Portal-PK 2022-02-22T19:15:21+03:00 Для того чтобы сделать ночник в домашних условия, не нужны дорогие комплектующие и расходные материалы. В этом поможет убедиться мой очередной проект ночника на адресных светодиодах. Управлять ночником можно с помощью приложения для телефона. А в связи с тем, что молодёжь сейчас даже ночами не выпускают телефон из рук, данный светильник будет отличным подарком для подростка.


Из чего же сделан ночник?

Красивый корпус сделан из обычной банки из-под морской соли. Да-да! Это была банка из-под морской соли. Сейчас она получила вторую жизнь и будет радовать в качестве светильника.

Красивый корпус сделан из обычной банки из-под морской соли.

Также провод для подключения сделан из нерабочего USB провода от телефона. Остальная электроника покупная. Но тут её минимум: микроконтроллер и светодиодная гирлянда.

Приложение для управления самодельным ночником.

Приложение для управления светодиодным ночником.

Делал я к новому 2022 году новую версию гирлянды. Для данного ночника взял за основу приложение от этого проекта. Немого его доработал. Добавил больше статических цветов и сейчас они заполняют всю гирлянду. Если вы не понимаете, о чем я, посмотрите проект новогодней гирлянды.

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

Пример работы ночника, который я сделал своими руками.

Светильник имеет много световых режимов, которые выглядят вот так.

Светильник имеет много световых режимов, которые выглядят вот так.

Конечно, фото не предаёт всей насыщенности цветов, но даже на фото светильник выглядит просто шикарно.

Конечно, фото не предаёт всей насыщенности цветов, но даже на фото светильник выглядит просто шикарно.

Так же можно установить один из 16 предустановленных статических цветов.

На фотографии это будет выглядеть так:

  • красный;

На фотографии это будет выглядеть так

  • синий;

синий

  • зеленый;

зеленый;

  • оранжевый;

оранжевый;

  • голубой;

голубой

  • пурпурный и другие.

пурпурный и другие.

Это не последний светильник, который я запланировал сделать в этом году, будут ещё. Поэтому не забудьте добавить сайт в закладки, чтобы не пропустить новые и интересные проекты.


Понравилась новость Ночник своими руками в домашних условиях? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Робот-манипулятор. http://portal-pk.ru/news/347-robot-manipulyator.html Константин Portal-PK 2022-02-08T12:16:30+03:00 Сегодня речь пойдет о конструкторе робот-манипулятор, управлять которым можно с компьютера или с телефона. Особенность данного робота заключается в возможности управлять им с помощью джойстика.


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

В комплекте конструктора идёт поле с разметкой и 4 кубика, что позволяет выполнять различные задания.

Конструктор позволит научиться управлять роботом-манипулятором, а полученные навыки можно применить на практике. Например, для управления полётным роботом.

для управления полётным роботом.

Покупал конструктор на сайте robointellect.ru. Тут вы можете подробнее ознакомиться с документации по данному конструктору.

Распаковка работа-манипулятора.

Конструктор приходит в картонной коробке, в которую аккуратно всё уложено. Все комплектующие пронумерованы, а идущая в комплекте подробная инструкция поможет без труда собрать конструктор.

Распаковка работа-манипулятора.

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

Корпус манипулятора вырезан из нескольких листов акрила разного цвета.

Мне лично понравилось, что в комплекте идёт качественный инструмент для сборки конструктора. Чаще всего даже при покупке дорогих вещей инструмент кладут очень дешёвый и непригодный для сборки.

качественный инструмент для сборки конструктора

Сборка конструктора.

Так как корпус манипулятора вырезан из листового акрила, каждую деталь нужно выдавить из пластины, затем снять защитную плёнку. Это самый длительный и монотонный этап сборки манипулятора.

Так как корпус манипулятора вырезан из листового акрила, каждую деталь нужно выдавить из пластины, затем снять защитную плёнку


  • Сборку начинаем с клешни.

Сборку начинаем с клешни.

  • Приступаем к сборке подвижной части манипулятора.

Приступаем к сборке подвижной части манипулятора.

  • Собирается левая подвижная часть.

Собирается левая подвижная часть.

  • После чего приступаем к сборке правой части манипулятора.

После чего приступаем к сборке правой части манипулятора.

  • Подготавливаем основание манипулятора для установки подвижной части.

Подготавливаем основание манипулятора для установки подвижной части.

  • Соединяем левую и правую части манипулятора на основании.

Соединяем левую и правую части манипулятора на основании.

  • Устанавливаем клешню на место.

Устанавливаем клешню на место.

  • Приступаем к установке электроники.

Приступаем к установке электроники.

  • Вся электроника устанавливается на латунные стойки.

Вся электроника устанавливается на латунные стойки.

  • На верхнюю часть основания ставим плату управления сервоприводами.

На верхнюю часть основания ставим плату управления сервоприводами.

  • На нижнюю пластину основания крепится разъём питания и плата для подключения манипулятора к компьютеру.

На нижнюю пластину основания крепится разъём питания и плата для подключения манипулятора к компьютеру.

  • Подключаем сервоприводы по инструкции.

Подключаем сервоприводы по инструкции.

  • Присоединяем проводами плату управления сервоприводами с платой подключения к компьютеру.

В итоге получается вот такой манипулятор. Пришло время протестировать его в работе.

  • В итоге получается вот такой манипулятор. Пришло время протестировать его в работе.

Демонстрация работы робота-манипулятора.

Для начала работы с манипулятором нужно скачать с сайта «РобоИнтеллект» программу.

Для начала работы с манипулятором нужно скачать с сайта «РобоИнтеллект» программу.

Устанавливаем и настраиваем программу по инструкции. Выбираем нужный порт.

Затем подключаем манипулятор к компьютеру по USB. И подключаем блок питания, который идёт в комплекте.

Затем подключаем манипулятор к компьютеру по USB. И подключаем блок питания, который идёт в комплекте. Сейчас запускаем программу. После этого откроется окно в браузере с панелью управления манипулятором.

Сейчас запускаем программу. После этого откроется окно в браузере с панелью управления манипулятором.

Здесь можно произвести калибровку и дополнительные настройки.

Здесь можно произвести калибровку и дополнительные настройки.

Сейчас можно управлять манипулятором с компьютера. Например, перемещать кубики.

Сейчас можно управлять манипулятором с компьютера. Например, перемещать кубики.

Кроме управления с ПК, управлять можно с помощью джойстика. Я использую беспроводной джойстик. При подключении он автоматически определился программой. После приступаем к управлению манипулятором. Ребёнок у меня просто в восторге от данной опции. Он готов всё перекладывать с помощью манипулятора.

Кроме управления с ПК, управлять можно с помощью джойстика.

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

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

Но в целом всё работает, а это ещё только начало изучения работы с данным манипулятором. У него есть и другие возможности. Об этом расскажу в следующий раз.

Понравилась статья Робот-манипулятор? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Машинка на Wi-Fi ESP8266 http://portal-pk.ru/news/346-mashinka-na-wi-fi-esp8266.html Константин Portal-PK 2022-02-07T19:31:57+03:00

Собрал на днях Wi-Fi машинку, которой можно управлять с пульта управления и с приложения на компьютере. Мозгом машинки выступает микроконтроллер ESP8266. Программы для ПК и для микроконтроллера написаны на Python.


Схема подключения машинка на Wi-Fi ESP8266.

Схема подключения машинка на Wi-Fi ESP8266.

Собираем электронику вот по такой схеме. Вместо аккумуляторов можно использовать бокс с обычными батарейками.

Обзор пульта управления Wi-Fi машинкой.

Обзор пульта управления Wi-Fi машинкой.

Пульт сделан на M5Stack Core2. Про данное устройство у меня есть отдельный обзор, с которым можно познакомиться тут.

Пульт сделан на M5Stack Core2.

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

Приложение для компьютера.

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

Программа управления Wi-Fi машинкой с компьютера.В приложении также имеются 4 кнопки, которые позволяют управлять машинкой. Одно отличие от пульта управления — это отсутствие процента заряда батареи.

Тестирование Wi-Fi машинки.

Тестирование Wi-Fi машинки.

Приступаем к тестированию машинки. Управлять с пульта достаточно удобно. Пока мы удерживаем кнопку, машинка совершает движения, после того как кнопку отпускаем, движение прекращается. Аналогично происходит управление с программы для компьютера.

Исходные материалы для Wi-Fi машинки на ESP8266 и подробное описание.

В проводнике появится устройство со всеми доступными файлами на нём. Скачать исходные материалы вы можете внизу статьи в разделе «файлы для скачивания». Более подробное описание программы и схему подключения вы можете посмотреть на странице проекта.

Понравилась новость Машинка на Wi-Fi ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Онлайн симулятор Arduino, ESP32. http://portal-pk.ru/news/345-onlain-simulyator-arduino-esp32.html Константин Portal-PK 2022-01-25T19:47:45+03:00 С каждым днём популярность разработки проектов на Arduino и ESP32 растёт. В связи с этим увеличивается число разнообразных симуляторов, которые позволяют создавать проекты без использования железа. О этом я рассказывал в блоке уроков: «Программирование Arduino без Arduino». Сегодня в статье рассмотрим один из таких онлайн симуляторов, который называется «wokwi».


Возможности онлайн симулятора Arduino, ESP32.

Возможности онлайн симулятора Arduino, ESP32.

Симулятор wokwi имеет большую базу готовых примеров, которые доступны на главной странице. А также на странице библиотек.

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

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

  • Arduino UNO,
  • Arduino NANO,
  • Arduino MEGA,
  • Attiny85,
  • Raspberry Pi Pico,
  • ESP32.

Также в симуляторе предустановлено большое количество библиотек

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

  • Adafruit_NeoPixel,
  • Adafruit_SSD1306,
  • DHT-sensor-library,
  • LiquidCrystal_I2C,
  • MD_Parola,
  • RTClib,
  • Servo,
  • SevSeg,
  • ssd1306,
  • SSD1306Ascii

Как создавать свои проекты в симуляторе «wokwi» и более подробное описание функционала читайте в этой статье.

Как создавать свои проекты в симуляторе «wokwi»

Понравилась новость Онлайн симулятор Arduino, ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Светодиодная гирлянда на елку версия 2022. http://portal-pk.ru/news/344-svetodiodnaya-girlyanda-na-elku-versiya-2022.html Константин Portal-PK 2022-01-10T19:57:20+03:00 Чтобы украсить свою новогоднюю ёлку, я сделал светодиодную гирлянду версии 2022. Данная гирлянда стала более функциональна и имеет больше световых эффектов. Также добавил несколько новых функций, подробнее про которые вы можете прочитать тут.


Скачать прошивку и приложение для телефона «Гирлянда на ель» вы можете внизу статьи в разделе «файлы для скачивания».

Скачать прошивку и приложение для телефона «Гирлянда на ель»

Схема подключения гирлянды на ESP8266.

Схема подключения гирлянды на ESP8266.

Схема подключения гирлянды на ESP32.

Схема подключения гирлянды на ESP32.

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

История предыдущих версий гирлянд.

А сейчас вспомним какое приложение для управления гирляндой было в 2019 году.

гирлянда из 33 ws2812 светодиодовСледующая гирлянда уже получила звезду, но не умела ей управлять и это была версия 2020 года.

Гирлянда со звездой выглядит Версия прошлого года позволяла нам управлять цветом звезды и поддерживала ESP8266 и ESP32.

Версия прошлого года позволяла нам управлять цветом звезды и поддерживала ESP8266 и ESP32.Как видим, гирлянда с каждым годом становится всё более и более функциональной. Скорее всего, в следующем году она будет уметь предугадывать ваши желания и переключаться с помощью мыслей. Это конечно же шутка! Но всё возможно. Технологии развиваются стремительно и всё, что сегодня кажется нереальным завтра будет обычной вещью. И пусть ваши самые фантастические и нереальные желания сбудутся в новом году. С Новом год!

Понравилась новость Светодиодная гирлянда на елку версия 2022? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Самодельный ЧПУ станок на мебельных направляющих. http://portal-pk.ru/news/343-samodelnyi-chpu-stanok-na-mebelnyh-napravlyayushchih.html Константин Portal-PK 2021-12-23T19:18:17+03:00 Сегодня рассмотрим, как можно сделать самодельный ЧПУ станок на мебельных направляющих. А внизу статьи вы сможете скачать инструкцию на русском языке с чертежами по сборке данного ЧПУ станка. Следуя инструкции, вы сможете собрать небольшой, настольный, трех осевой фрезерный станок. На котором, можно обрабатывать изделия из дерева, фанеры, пластика и других мягких материалов.

Сегодня рассмотрим, как можно сделать самодельный ЧПУ станок на мебельных направляющих.

Чертежи самодельного ЧПУ станка.

3D модель Самодельного ЧПУ станка из мебельных направляющих будет выглядеть следующим образом.

Чертежи самодельного ЧПУ станка.

Чертежи раскроя фанеры и инструкцию по сборке вы можете скачать внизу статьи – в разделе «файлы для скачивания».

Сборка CNC машины своими руками.

Приступаем к сборке CNC машины, для этого нужно раскроить фанеру и купить мебельные направляющие. Ходовые винты можно сделать из строительных шпилек. Но лучше купить ходовые винты от 3D принтера.

Сборка CNC машины своими руками.

Дальше нам понадобиться электроника: шаговые двигатели, блок питания и плата для управления. Я бы порекомендовал для управления использовать плату CNC shield v3 и Arduino UNO. Но что использовать, решать вам.

Дальше нам понадобиться электроника: шаговые двигатели, блок питания и плата для управления.

Приступаем к сборке рамы из фанеры.

Приступаем к сборке рамы из фанеры.

На основание устанавливаем плату управления и блок питания.

На основание устанавливаем плату управления и блок питания.

Прикручиваем боковые стенки и ставим двигатель на ось Y.

Прикручиваем боковые стенки и ставим двигатель на ось Y.

Устанавливаем ходовой винт на ось X и подключаем двигатели к плате управления.

Устанавливаем ходовой винт на ось X и подключаем двигатели к плате управления.

Прикручиваем на ось X мебельные направляющие.

Прикручиваем на ось X мебельные направляющие.

Вбиваем в отверстия на столешнице пробивные гайки.

Вбиваем в отверстия на столешнице пробивные гайки.

Устанавливаем столешницу станка на место.

Устанавливаем столешницу станка на место.

Приступаем к сборке оси Z.

Приступаем к сборке оси Z.

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

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

CNC машина собрана. Можно посмотреть с разных сторон как она выглядит.

CNC машина собрана. Можно посмотреть с разных сторон как она выглядит.

Ставим дремал в качестве шпинделя и приступаем к фрезеровке фанеры.

Ставим дремал в качестве шпинделя и приступаем к фрезеровке фанеры.

Недостатки данного самодельного ЧПУ станка (На мой взгляд).

Станок получился замечательный. Но у меня есть богатый опыт по сборке подобных ЧПУ станков. Вот – один из примеров моих самодельных станков.



Как видим, конструкция очень похожа, но есть одно но. У меня стоит дополнительная направляющая внизу оси X. Что снижает биение. Так как нагрузка на шпиндель приходится как раз в нижней части.

Также, электроника идет одной платой, что очень плохо. Если у вас сгорит драйвер по одной из осей, поменять придётся всю плату. Что на мой взгляд, не очень приятно.

Но это лично мое мнение. Как собирать и какую электронику ставить, решать вам.

Понравилась новость Самодельный ЧПУ станок на мебельных направляющих? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Система автоматического полива растений своими руками. http://portal-pk.ru/news/342-sistema-avtomaticheskogo-poliva-rastenii-svoimi.html Константин Portal-PK 2021-12-22T18:47:46+03:00 Комнатные растения украшают наше жилье. Но как быть, если у вас нет времени постоянно их поливать. Тут нам поможет автоматическая система полива растений, которую можно сделать своими руками и без особых знаний в электронике и программировании.


Электроника для автоматического полива.

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

  • M5Stack — это мозг, который будет следить за поливом;
  • Юнит Watering, который измеряет влажность и поливает растения благодаря установленной помпе.

Электроника для автоматического полива.

Подключить их нужно вот по такой схеме.

Подключить их нужно вот по такой схеме.

Для облегчения подключения можно купить модуль расширения портов, у которого есть порт В. Подключаем разъём от юнита и все заработает. В программе менять ничего не нужно.

Программа системы автоматического полива растений.

Программа системы автоматического полива растений.

Программу для автоматического полива можно скачать для двух сред разработки:

  • Родной среды UIFlow. Но в данной версии нет возможности контролировать полив с телефона.
  • Для Arduino IDE, которая поддерживает управление с телефона по Wi-Fi.

Скачать все необходимые материалы вы можете внизу статьи или на странице данного проекта.

Приложение для управления поливом.

Приложение для управления поливом.

В приложении нужно указать IP -адрес устройства полива. Как получить IP и другие настройки читайте в полной статье про данную самоделку.

В приложении на странице настроек указываем полученный IP- адрес.

В приложении выводится информация о влажности почвы, работает или нет полив, а также уровень заряда батареи и яркость подсвети дисплея M5Stack.

На основной странице приложения отображается точно такая же информация, что и на дисплее.

Понравилась новость Система автоматического полива растений своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Печать на 3D принтере пластиком из бутылок http://portal-pk.ru/news/341-pechat-na-3d-printere-plastikom-iz-butylok.html Константин Portal-PK 2021-12-22T06:54:38+03:00 Мы постоянно пользуемся пластиковыми бутылками, посудой и пакетами. Пластикового мусора становится все больше и больше, использовать который можно разумным способом. Сегодня поговорим об изготовлении нити для печати на 3D принтере. Данный пластик сделаем из бутылок.

Изготовление пластика для 3D принтера из бутылок в домашних условиях.

Изготовление пластика для 3D принтера из бутылок в домашних условиях.

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

приспособление, которое сделает пластиковую ленту из бутылки

Из данной ленты можно сделать филамент для принтера. Для этого применяется обратный процесс печати. Берётся экструдер от 3D принтера, нагретый до нужной температуры, которая подбирается опытным путем.

сделать филамент для принтера

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

Полученная лента протягивается через устройство. Тем самым она сворачивается в трубочку.

Печать пластиком из бутылок.

Печать пластиком из бутылок.

Полученным пластиком можно печатать на 3D принтере. Из прозрачного пластика получится отличная имитация пролитого молока.

Из зелёного можно напечатать кружку.

 Из зелёного можно напечатать кружку.

Соединяем композицию и у нас получается левитирующая кружка из которой течет молоко.

левитирующая кружка из которой течет молоко

Достаточно красивая модель получилась с учетом того, что она напечатана на 3D принтере из пластикового мусора, а именно из бутылок.

Понравилась новость Печать на 3D принтере пластиком из бутылок? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Самый большой токарный станок, который я видел. http://portal-pk.ru/news/340-samyi-bolshoi-tokarnyi-stanok-kotoryi-ya-videl.html Константин Portal-PK 2021-12-20T20:34:10+03:00 Станки для обработки металла бывают разнообразные. В современном мире все больше преобладает спрос на ЧПУ станки различного назначения. Но старые добрые станки с механическим управлением также используются в производстве, и навряд ли, в ближайшее время их чем-то смогут заменить. И вы в этом убедитесь, сами дочитав данную новость до конца.

Станки для обработки металла бывают разнообразные. В современном мире все больше преобладает спрос на ЧПУ станки различного назначения.

Разнообразие станков для обработки металла и их назначение.

Если вы сталкивались с металлообработкой, то вы, наверное, видели, как станочники ради забавы делают 3-4 куба внутри друг друга. Это достаточно интересный процесс и на первый взгляд не выполнимый на обычном станке для обработки металла.

Разнообразие станков для обработки металла и их назначение.

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

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

Также делают крыльчатку для охлаждения двигателей.

Также делают крыльчатку для охлаждения двигателей.

Кроме этого существуют ЧПУ станки, которые могут одновременно обрабатывать несколько заготовок.

Кроме этого существуют ЧПУ станки, которые могут одновременно обрабатывать несколько заготовок.

Самый большой токарный станок, который я видел.

Эти станки очень полезны и нужны, но среди станков есть и гиганты. Такие как токарно-карусельные, которые могут обрабатывать большие детали.

Самый большой токарный станок, который я видел.

Но данный станок гораздо больше токарно-карусельных станков. Данный токарный станок – самый большой станок по обработке металла, который я когда-либо видел. Да он с механическим управлением, не оснащён ЧПУ, но он работает и обрабатывает такие большие детали. Это, конечно, потрясающее изобретение человека. И навряд ли, его в ближайшее время заменят на современный станок с ЧПУ.

заменят на современный станок с ЧПУ

Понравилась новость Самый большой токарный станок, который я видел? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Паровой двигатель, напечатанный на 3D-принтере. http://portal-pk.ru/news/339-parovoi-dvigatel-napechatannyi-na-3d-printere.html Константин Portal-PK 2021-12-17T18:57:03+03:00 Век паровых машин давно прошел, поэтому делать данный двигатель можно только ради забавы. Но стоит ли его делать, ведь изготовление деталей выйдет очень дорого?! Мы живем в пик развития и популярности 3D печати, поэтому напечатать подобный двигатель не так и сложно, если у вас есть под рукой 3D-принтер. Подойдёт даже самый бюджетный Anet A8, как у меня.

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

3D модель и печать механизмов паровой машины.

Скачать 3D модель паровой машины вы можете вот тут.

3D модель и печать механизмов паровой машины.

Затем нужно напечатать все детали будущего парового двигателя.

Затем нужно напечатать все детали будущего парового двигателя.

Закрепить всё на основании для того, чтобы двигатель не вибрировал и не перемещался по столу.

Закрепить всё на основании для того, чтобы двигатель не вибрировал и не перемещался по столу.

Но не все детали можно напечатать на 3D принтере. Например, цилиндр лучше сделать из пластиковой трубы, так как поверхность должна быть гладкой с минимальной шероховатостью внутренней поверхности.

Но не все детали можно напечатать на 3D принтере. Например, цилиндр лучше сделать из пластиковой трубы

Проверка работоспособности самодельной паровой машины.

Для проверки можно подключить компрессор со сжатым воздухом. Если всё работает, можно приступить к основному источнику движения, в данных двигателях - пару.


Как показывает опыт, двигатель работает. Но КПД у него не очень большой даже по сравнению с паровыми двигателями, которые стояли раньше на паровозах и пароходах.

Понравилась новость Паровой двигатель, напечатанный на 3D-принтере? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Сравнение m5stack core 2 и дисплея Nextion. http://portal-pk.ru/news/338-sravnenie-m5stack-core-2-i-displeya-nextion.html Константин Portal-PK 2021-12-16T19:50:05+03:00 Если вы следите за моими проектами и уроками, то вы знаете, что у меня достаточно много проектов, реализованных на сенсорном дисплее Nextion. Недавно я обзавелся M5stack Core 2 и сделал на него небольшой обзор.


Как видно из обзора, создать визуальный интерфейс M5stack Core 2 достаточно просто с помощью среды разработки UIFlow. Инструментов, конечно, меньше, чем для дисплея Nextion, но есть и свои плюсы.

визуальный интерфейс M5stack Core 2


Сравнение M5stack Core 2 и дисплея Nextion:

  • Создание интерфейса осуществляется с помощью визуального редактора для обоих устройств. Это дает по 1 баллу каждому устройству.
  • У дисплея Nextion большой выбор элементов управления и большой спектр их применения. Что дает дисплею 1 балл.
  • M5stack Core 2 имеет на борту Wi-Fi и Bluetooth, что дает данному устройству 1 балл.
  • M5stack - это микроконтроллер, который самостоятельно может управлять внешними устройствами. Это даёт ему еще один балл.
  • Nextion достаточна большая линейка дисплеев с различным размером экранов. M5stack выпускается только с 2-дюймовым экраном.
  • M5stack можно оснастить дополнительными модулями, дополнительным аккумулятором для автономной работы и другими периферийными устройствами.

Сравнение M5stack и Nextion

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

По M5stack планирую проводить курсы

По M5stack планирую проводить курсы, подробнее о которых расскажу немного позднее.

Понравилась новость Сравнение M5stack Core 2 и дисплея Nextion? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Самодельный токарный станок по дереву из дрели и фанеры. http://portal-pk.ru/news/337-samodelnyi-tokarnyi-stanok-po-derevu-iz-dreli-i.html Константин Portal-PK 2021-12-15T20:14:24+03:00 Я уже давно собираю разнообразные самодельные станки. В основном с ЧПУ управлением. Меня не раз посещала мысль собрать самодельный токарный станок для изготовления различных деталей из дерева. Станок собирать планирую как всегда: минимум бюджета и максимум пользы, поэтому собирать самодельный токарный станок по дереву я буду из дрели и фанеры.

Основные узлы самодельного токарного станка по дереву.

Основные узлы самодельного токарного станка по дереву.

Основой станка является станина, которую проще собрать из фанеры. Если вам позволяет бюджет, то можно собрать и из алюминиевого профиля.

Основой станка является станина, которую проще собрать из фанеры.

Второй немаловажный момент — это выбор двигателя, который будет вращать заготовку. Тут также можно обойтись ручным электроинструментом в виде дрели.

И наконец, нужно сделать фиксаторы заготовки. Фиксаторы нужны для того, чтобы держать заготовку при обработке. Их можно сделать из подручных материалов: шпильки и удлинённой гайки.

В итоге должен получиться вот такой аккуратный настольный токарный станок по дереву.

В итоге должен получиться вот такой аккуратный настольный токарный станок по дереву.


Автоматизация самодельного токарного станка.

Автоматизация самодельного токарного станка.

Также данному станку не помешало бы ЧПУ управления, которое можно сделать на Arduino. Подробнее как использовать Arduino в ЧПУ станках, а также подробное программное обеспечение для данного устройства смотрите на сайте CNC-TEX.

Понравилась новость Сегментный светодиодный светильник своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Сегментный светодиодный светильник своими руками. http://portal-pk.ru/news/336-segmentnyi-svetodiodnyi-svetilnik-svoimi-rukami.html Константин Portal-PK 2021-12-14T19:57:22+03:00 Декорирование помещения — это достаточно интересный и творческий процесс. Как же декорировать стену так, чтобы она была уникальной и запоминающейся? Сегодня мы рассмотрим, как сделать сегментный светодиодный светильник своими руками, который украсит любую стену в вашем доме или квартире.

сделать сегментный светодиодный светильник своими руками

Особенности сегментного светильника.

Данным светильником можно управлять с помощью приложения, так как оно реализовано на микроконтроллере ESP8266.

Данным светильником можно управлять с помощью приложения, так как оно реализовано на микроконтроллере ESP8266.

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

А благодаря адресным светодиодам

Это позволяет реализовать сногсшибательные эффекты.

Это позволяет реализовать сногсшибательные эффекты.

Благодаря тому, что светильник собирается из треугольных сегментов, можно собрать светильник разной формы.

Благодаря тому, что светильник собирается из треугольных сегментов, можно собрать светильник разной формы.

Например, в виде знака вопроса. А почему бы и нет!


Как самому собрать светодиодный светильник?

Эта новость написана по проекту из видео одного блоггера, поэтому более подробную информацию ищите в описании к видео. А со своей стороны я бы хотел напомнить вам про мою подборку ночников и светильников, которые сделаны лично мной. Для каждого светильника вы найдете схему подключения, код и макеты для создания корпуса..Проекты ночников и светильников на Arduino.Мои светильники также можно использовать в декорировании помещения.

Понравилась новость Сегментный светодиодный светильник своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
16 bit PWM на Arduino UNO. Увеличиваем частоту и разрядность ШИМ. http://portal-pk.ru/news/335-16-bit-pwm-na-arduino-uno--uvelichivaem-chastotu-i-razryadnost.html Константин Portal-PK 2021-12-13T16:39:31+03:00 Если вам нужен 16 битный ШИМ, стоит использовать плату ESP32, тем более сегодня отладочные платы на данный микроконтроллер стоят столько же, сколько и популярная Arduino UNO. Но что делать, если под рукой только 8-битная плата Arduino UNO, Arduino NANO и пр. Как выйти из данной ситуации сейчас рассмотрим на примере моего проекта.

Увеличиваем частоту и разрядность ШИМ Arduino UNO.

Увеличиваем частоту и разрядность ШИМ Arduino UNO.

Можно разогнать ШИМ через регистр, о чём подробно расписано в одной из статей Алекса Гайвера «Увеличение частоты ШИМ». Но если вы не готовы самостоятельно все настраивать, то у AlexGyver есть готовая библиотека, которая поможет реализовать разгон ШМИ без лишней головной боли. Подробнее ознакомиться с библиотекой можно на сайте.

AlexGyver есть готовая библиотека, которая поможет реализовать разгон ШМИ

В описании библиотеки есть очень полезная таблица, которая поможет разобраться с настройками Частоты и битности PWM сигнала.

Практическое применение полученных знаний смотрите на моем втором сайте.

Практическое применение 16 bit PWM на Arduino UNO.

Для чего же это всё нужно? В одном из моих проектов понадобилось 12 bit PWM для точного регулирования мощности. Тут я и применил данные знания и библиотеку.

Практическое применение 16 bit PWM на Arduino UNO.

В проекте у меня есть экран настроек, в котором я указываю предел регулирования. Также есть экран управления напряжением. 12 bit ШИМ позволяет регулировать мощность достаточно точно. Это достаточно хороший результат для 8- битной отладочной платы.

Мои проекты другие проекты тут.

Понравилась новость 16 bit PWM на Arduino UNO. Увеличиваем частоту и разрядность ШИМ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Умное WiFi реле с приложением на подобии sonoff. http://portal-pk.ru/news/334-umnoe-wifi-rele-s-prilozheniem-na-podobii-sonoff.html Константин Portal-PK 2021-12-07T20:12:28+03:00 Умное WiFi реле сегодня уже не редкость, и стоят они достаточно недорого. Взять, к примеру, реле sonoff. Они настроены под одну задачу, включение - выключение нагрузки с помощью приложения. Для того чтобы сделать управление светом с выключателя и с приложения они не подойдут. Поэтому решил я сделать на ESP8266 свое WiFi реле. Как повторить данный проект сейчас расскажу.


Приложение на подобии sonoff для управления WiFi реле.

Приложение похоже на приложение sonoff для управления WiFi реле, но со своими доработками. Также нет в данной версии расписания и таймеров.

Приложение на подобии sonoff для управления WiFi реле.

Главная страница приложения позволяет управлять 4 реле. Включать их и выключать. Помимо этого есть 2 кнопки, позволяющие одновременно включить или выключить все реле.

Вторая страница «настроек», на которой указывается IP устройства.

Вторая страница «настроек», на которой указывается IP устройства. И выводиться статус состояния сети. Также тут можно вывести доп. настройки, про которые рассказываю на странице описания данного проекта.

Возможности прошивки умного WiFi реле.

Изюминкой данного WiFi реле является возможность настроить тип подключаемого реле: высокого или низкого уровня.

Возможности прошивки умного WiFi реле.

Кроме этого управлять реле можно с помощью внешних кнопок: без фиксации и с фиксацией (обычный выключатель).

Кроме этого управлять реле можно с помощью внешних кнопок: без фиксации и с фиксацией (обычный выключатель).

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

Прошивка для умного WiFi реле с приложением на подобии sonoff.

Скачать прошивку и приложение можно внизу статьи, в разделе «файлы для скачивания». Если у вас возникли вопросы по настройке, читайте полную статью по данному проекту. Тут вы найдете подробное описание всех настроек. Также задавайте ваши вопросы в комментариях.

Прошивка для умного WiFi реле с приложением на подобии sonoff.

Тестирование умного Wi-Fi реле.

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

Тестирование умного Wi-Fi реле.

Результат меня очень порадовал!

Понравилась новость Умное WiFi реле с приложением на подобии sonoff? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Электромеханический замок с wifi управлением. Сделай сам. http://portal-pk.ru/news/333-elektromehanicheskii-zamok-s-wifi-upravleniem-sdelai.html Константин Portal-PK 2021-12-01T16:26:54+03:00 Сегодня рассмотрим вариант создания электромеханического замка с wifi управлением, который я сделал сам. Совсем недавно я делал электронный замок с дисплеем, в комментариях к которому порекомендовали сделать беспроводной замок. Чтобы можно было спрятать его и управлять с телефона. Что для этого понадобится:

  • Электромагнитная защелка
  • Драйвер L298n
  • Конечный выключатель
  • NodeMCU

Как видим, комплектующих не так и много. Соединяем электронику электромеханического замка вот по такой схеме.

Соединяем электронику электромеханического замка вот по такой схеме.

Этапы сборки электромеханического замка с wifi управлением.

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

Этапы сборки электромеханического замка с wifi управлением.

Для этого запустил приложение и проверил на работоспособность.

Для этого запустил приложение и проверил на работоспособность.

Затем приступил к установке электроники на макет двери.

Затем приступил к установке электроники на макет двери.

После чего провел повторную проверку. Замок с wifi управлением работает отлично.

Замок с wifi управлением работает отлично.

Возможности приложения для электромеханического замка с wifi.

Для управления замком в приложении нужно указать Ip адрес устройства. Как это сделать, можно почитать тут.

Возможности приложения для электромеханического замка с wifi.

Затем указать пароль. Пароль устанавливается в прошивке, об этом поговорим немного позднее.

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

Кнопка открыть, ниже которой выводится статус:

  • Закрыто
  • Открыто
  • Заблокировано
  • Неверный пароль

Описание прошивки замка с wifi.

Перед загрузкой прошивки нужно настроить среду разработки Arduino IDE. Подробнее про настройку и прошивку читайте тут.

Описание прошивки замка с wifi.

Затем необходимо настроить логин и пароль от вашей wi-fi сети.

Также не забудьте указать пароль, который нужно будет вводить в приложении.

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

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

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

Электромеханический замок с wifi управлением.

Более подробное описание проекта можно прочитать тут.

Понравилась новость Электромеханический замок с wifi управлением? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Русский текст на ЧПУ плоттере. http://portal-pk.ru/news/332-russkii-tekst-na-chpu-plottere.html Константин Portal-PK 2021-11-23T17:42:52+03:00 В продолжение темы ЧПУ плоттер рассмотрим пример написания русского текста на плоттере. Сделать это можно несколькими способами, но при этом получим разное качество и скорость написания. Давайте рассмотрим, что для этого понадобится.


Текст в одну линию для ЧПУ.

Чтобы нарисовать текст в одну линию на ЧПУ станке нужно создать векторный текст, нарисованный одной линейке. Это можно сделать самостоятельно или скачать готовый текст, например, у меня внизу статьи.

Дальше набираем нужный текст, и выводим его на плоттере.Дальше набираем нужный текст, и выводим его на плоттере.

Дальше набираем нужный текст, и выводим его на плоттере.Дальше набираем нужный текст, и выводим его на плоттере.

Процесс достаточно затратный по времени. Но результат получается хороший.

Преобразуем любой текст для написания на ЧПУ плоттере.

Для написания любого текста можно воспользоваться дополнительными шрифтами. Которые также можно скачать внизу статьи.

Для написания любого текста можно воспользоваться дополнительными шрифтами. Которые также можно скачать внизу статьи.

После чего пишим или копируем нужный текст и меняем формат текста на установленный.

После чего пишим или копируем нужный текст и меняем формат текста на установленный.

Как видим, получается текст, написанный тонкой линией.

Как видим, получается текст, написанный тонкой линией.

Его можно нарисовать на плоттере. Но тут есть свои плюсы и минусы. Рисуется он быстро. Но на некоторых местах есть двойная обводка.

Его можно нарисовать на плоттере. Но тут есть свои плюсы и минусы. Рисуется он быстро. Но на некоторых местах есть двойная обводка.

Фигурный текст на плоттере.

Также можно найти какой-нибудь интересный векторный шрифт. Например, вот такой и набрать нужный текст.

Фигурный текст на плоттере.

Я не стал заморачиваться с набором текста, а написал алфавит и цифры. Вот что получилось.

Я не стал заморачиваться с набором текста, а написал алфавит и цифры. Вот что получилось.

Но как видим данный шрифт нужно писать большого размера, в противном случае узор плохо различим.

Но как видим данный шрифт нужно писать большого размера, в противном случае узор плохо различим.

Рисовать на ЧПУ плоттере можно и другими интересными шрифтами.

Более подробное описание проекта можно прочитать тут.

Понравилась новость Русский текст на ЧПУ плоттере? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
CNC Shield v 4.0 лечим: вращение двигателей, деление шага http://portal-pk.ru/news/331-cnc-shield-v-40-lechim-vrashchenie-dvigatelei-delenie-shaga.html Константин Portal-PK 2021-11-17T18:03:25+03:00 Для создания ЧПУ станка на Arduino распространены два шилда CNC Shield v 4.0 и CNC Shield v 3.0. Но при практическом применении возникают сложности с CNC Shield v 4.0. Что с ним не так и как исправить данные недочёты мы с вами сегодня рассмотрим.


Лечим CNC Shield v 4.0 вращение шаговых двигателей.

Первое, что сбивает с толку это тот факт, что при сборке CNC Shield v 4.0 и загрузке прошивки GRBL шаговые двигателя не крутятся. Проблема кроется в том, что при разводке платы перепутаны пины управления драйвером. Правится это достаточно просто. Переходим в папку, где лежит прошивка и находим файл «cpu_map.h».

Переходим в папку, где лежит прошивка и находим файл «cpu_map.h».

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

Лечим деление шага платы CNC Shield v 4.0

Для того чтобы вылечить деление шага есть 2 способа:

  • Припаять перемычку с задней стороны платы замкнув контакты на 5V. Как показано на рисунке ниже. Деление шага будет максимальным и при этом джамперы ставить нельзя. Будет короткое замыкание.

Лечим деление шага платы CNC Shield v 4.0

  • Перерезать нужные дорожки и припаять 5 перемычек. Подробнее про данный способ читайте на моем втором сайте. При данном способе можно настраивать нужное деление шага с помощью джамперов.

Перерезать нужные дорожки и припаять 5 перемычек. Подробнее про данный способ читайте на моем втором сайте.

Вот так легко восстановить работоспособность CNC Shield v 4.0.

Вот так легко восстановить работоспособность CNC Shield v 4.0.

Понравилась новость CNC Shield v 4.0 лечим: вращение двигателей, деление шага? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Замок сенсорный на дверь с использованием Arduino http://portal-pk.ru/news/330-zamok-sensornyi-na-dver-s-ispolzovaniem-arduino.html Константин Portal-PK 2021-11-07T16:20:05+03:00 Разрабатывая проекты с использованием сенсорного дисплея Nextion постоянно сплывают в памяти сюжеты из фильмов в которых лаборанты для входа в помещение набирают код на сенсорном дисплее и попадают в помещение. Поэтому решил сделать замок сенсорный на дверь на базе микроконтроллера Arduino. Исходные материалы к проекту вы можете скачать тут.


Возможности сенсорного замка на дверь.

  • Блокировка ввода пароля на 20 секунд при неправленом введении.

Блокировка ввода пароля на 20 секунд при неправленом введении.

  • Отображение статусов: открыто, закрыто, заблокировано.

Отображение статусов: открыто, закрыто, заблокировано.

  • Автоматическое закрытие двери.
  • Возможность задать пароль разной длины.
  • Изменения времени блокировки при введении неверного пароля.

Схема подключения сенсорного замка на Arduino.

Схема подключения сенсорного замка на Arduino.

Пример использования сенсорного замка.

Пример использования сенсорного замка.

Замок можно установить на дверцу мебели и ограничить доступ к содержимого данной полочки или ящика. Например если у вас лежать документы и вы хотели бы ограничить доступ посторонним, возможно жены, детей или тещи. Тогда кодовый замок вам подойдет идеально.

Плюсы данного замка.

Плюсы данного замка.

  • Не нужно дополнительных ключей, карточек, брелков для открытия.
  • Красиво выглядит и может вписаться в любой интерьер.
  • Простота использования.

Понравилась новость Замок сенсорный на дверь с использованием Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Изготовление мебели на самодельном ЧПУ станке http://portal-pk.ru/news/329-izgotovlenie-mebeli-na-samodelnom-chpu-stanke.html Константин Portal-PK 2021-10-28T17:36:09+03:00 Сегодня затронем одну интересную тему. Возможно ли сделать самодельный ЧПУ станок, на котором можно было бы изготавливать мебель? Как вы знаете, я уже много лет увлекаюсь разработкой проектов с использованием различных микроконтроллеров. В том числе изготовление самодельных ЧПУ станков. Мне часто задают данный вопрос. Поэтому я решил немного порассуждать в данном направлении.

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

Какой должен быть ЧПУ станок, чтобы делать мебель?

Давайте рассмотрим требования к ЧПУ станку для изготовления мебели. Во-первых, изготовление мебели достаточно непростой процесс. Так как обрабатывать дерево нужно достаточно быстро и снимать большой слой. В противном случае изготовление займет много времени. Например, изготовление тумбы из массива дерева может занять несколько дней. Тут же самую операцию можно сделать и ручным фрезером. Соответственно станок должен быть оснащён мощными шаговыми двигателями и шпинделем. А следом вытекают следующие параметры, которые необходимо учитывать это тяжелая и жёсткая рама, чтобы станок не прыгал и не делал брак.

изготовление тумбы из массива дерева может занять несколько дней

Можно ли самостоятельно собрать ЧПУ для изготовления мебели?

И наконец, мы подошли к главному вопросу. На который однозначного ответа нет. Если вы умеете сваривать и у вас есть необходимые навыки, вы сможете собрать достаточно точную раму станка и установить всю электронику. Так что все зависит от вашего желания и опыта.

Можно ли самостоятельно собрать ЧПУ для изготовления мебели?

В данной статье я не упомянул про электронику и программное обеспечение. Это уже совсем другая история.

Понравилась новость Изготовление мебели на самодельном ЧПУ станке? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Сенсорная клавиатура для компьютера своими руками. http://portal-pk.ru/news/328-sensornaya-klaviatura-dlya-kompyutera-svoimi-rukami.html Константин Portal-PK 2021-10-27T15:05:05+03:00 Как сделать беспроводную клавиатуру на Arduino я уже рассказывал. Сегодня в проекте сделаем сенсорную клавиатуру для компьютера своими руками на базе Arduino. Вариантов реализации данной клавиатуры несколько. Сегодня расскажу самый просто и красивый способ реализовать сенсорную клавиатуру для ПК на дисплее Nextion.


Создаем интерфейс сенсорной клавиатуры.

Первым делом делаем интерфейс для будущей сенсорной клавиатуры. Как сделать графику для дисплея Nextion рассказывал в одном из уроков про данный дисплей.

Создаем интерфейс сенсорной клавиатуры.

Для реализации данного проекта нам понадобится 2 картинки. Добавляем их и определяем, где у нас будут кнопки. Как сделать кнопки активными и чтобы все было красиво, смотрите вот в этом уроке.

Исходные материалы проекта можно скачать на моем основном сайте про Arduino.

Исходные материалы проекта можно скачать на моем основном сайте про Arduino.

Код Arduino для создания самодельной клавиатуры для ПК.

Для данного проекта понадобится 2 библиотеки. Одна из которых встроена в Arduino IDE, вторую можно скачать внизу статьи в разделе «Файлы для скачивания».

Для работы с библиотекой Keyboard понадобятся минимальные знания. Как подключить библиотеку. Передать тот или иной символ. И нажатия спец клавиши. Полный список спец команд можно найти тут.

Код Arduino для создания самодельной клавиатуры для ПК.


Скачать код проекта можно внизу статьи.

Подведём итоги.

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

Так же на основе дисплея Nextion можно расширить функционал стандартной клавиатуры, например, как показано на картинке ниже.

Так же на основе дисплея Nextion можно расширить функционал стандартной клавиатуры

Понравилась новость Сенсорная клавиатура для компьютера своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Nextion Display – Строим графики waveform - Nextion Tutorial http://portal-pk.ru/news/327-nextion-display---stroim-grafiki-waveform---nextion-tutorial.html Константин Portal-PK 2021-10-26T13:59:22+03:00 Nextion Display позволяет реализовать различные проекты, благодаря сенсорному управлению и простому способу построения дизайна в программе Nextion Editor. У меня на втором сайте снято более 10 уроков Nextion Tutorial. Что позволит освоить работу с данным дивайсом. Также хочу упомянуть про построение графиков с помощью инструмента waveform.

Строим от 1 до 4 графиков на Nextion Display.

На Nextion Display можно вывести не один, а до 4 графиков.

На Nextion Display можно вывести не один, а до 4 графиков.

В рамках урока я протестировал данную возможность. Вывел один график по сгенерированным данным.

В рамках урока я протестировал данную возможность. Вывел один график по сгенерированным данным.

Затем сделал небольшой сдвиг графиков и вывел 4 графика на дисплей Nextion.

Затем сделал небольшой сдвиг графиков и вывел 4 графика на дисплей Nextion.

Вот такой Nextion Tutorial по построению графиков у меня получился. Более подробно по построению графиков читайте тут.

Строим графики по данным полученным с датчика.

Чтобы построить график по данным с датчика или, например потенциометра, дисплей необходимо подключить к Arduino.

Чтобы построить график по данным с датчика или, например потенциометра, дисплей необходимо подключить к Arduino.

Данная отладочная плата поможет считать данные с датчика или другого прибора измерения и передать их на дисплей. В итоге получаем вот такой результат.

Также возможно строить нестандартные графики на подобии вот такого.

Также возможно строить нестандартные графики на подобии вот такого.

Понравилась новость Nextion Display – Строим графики waveform - Nextion Tutorial? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
DIY CNC Plotter - 4xiDraw. Плоттер на Arduino http://portal-pk.ru/news/326-diy-cnc-plotter---4xidraw-plotter-na-arduino.html Константин Portal-PK 2021-10-21T10:35:57+03:00 Сегодня расскажу, как я собирал DIY CNC Plotter - 4xiDraw. Данный плоттер обладает впечатляющими характеристиками и спектром применения.

Сборка DIY CNC Plotter - 4xiDraw.

Напечатал я все необходимые детали. Скачать которые вы можете внизу статьи.

Сборка DIY CNC Plotter - 4xiDraw.

Поэтапно собрал раму.

Поэтапно собрал раму.

Подробнее этап сборки CNC Plotter - 4xiDraw вы можете посмотреть на моем втором сайте, посвящённом ЧПУ станка. Там же вы найдете информацию и о другихмоих проектах.

При сборке использовал пару нестандартных элементов. Таких как гвозди и пластиковые ролики.

При сборке использовал пару нестандартных элементов. Таких как гвозди и пластиковые ролики.

Но, не смотря на это, плоттер собран и готов к первому запуску.

плоттер собран и готов к первому запуску.

Электроника DIY CNC Plotter - 4xiDraw.

Электронные комплектующие буду использовать стандартные для ЧПУ станков на Arduino

Электроника DIY CNC Plotter - 4xiDraw.

  • ARDUINO UNO.
  • CNC shield v3.
  • 2 драйвера A4988.
  • Блок питание на 12 вольт.
  • Servo 9g.
  • 2 шаговых двигателя NEMA 17 17HS4401. С проводами, которые идут в комплекте.

Прошивку можно скачать внизу статьи. Подробнее о прошивке читайте тут.

Первый запуск DIY CNC Plotter - 4xiDraw.

Первый запуск DIY CNC Plotter - 4xiDraw.

При первом запуске получил вот такие рисунки.

При первом запуске получил вот такие рисунки.

Качество неплохое, но есть над чем поработать. Планирую сделать пану доработок и расширить возможности данного плоттера.

Понравилась новость DIY CNC Plotter - 4xiDraw. Плоттер на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
#37. Подключение матричной клавиатуры 4х4 Arduino http://portal-pk.ru/news/325-podklyuchenie-matrichnoi-klaviatury-4h4-arduino.html Константин Portal-PK 2021-10-19T18:54:12+03:00 Сегодня в уроке рассмотрим принцип работы матричной клавиатуры 4х4. Подключим клавиатуру 4х4 к Arduino и напишем скетч для получения значений при нажатии на кнопки.

Подключим клавиатуру 4х4 к Arduino и напишем скетч

Технические параметры матричной клавиатуры для Arduino.

  • Разъём: PLS-8;
  • Тип шлейфа: плоский, гибкий, 8 pin;
  • Длина шлейфа: 75 мм;
  • Размер: 77×69×2 мм;
  • Масса: 7 г.

Принцип работы клавиатуры 4х4 для Arduino.

Принцип работы клавиатуры 4х4 для Arduino.

Клавиатура выполнена в виде матрицы 4×4, каждая кнопка является областью воздушного зазора между двумя диэлектрическими слоями с нанесенным на них токопроводящим покрытием. Дорожки покрытия одного слоя нанесены горизонтально (выводы 1—4), а другого вертикально (выводы 5—8). Нажатие на кнопку приводит к соединению дорожки одного слоя с дорожкой другого и замыканию одного из выводов 1—4 с одним из выводов 5—8.

Принцип работы клавиатуры 4х4 для Arduino.

Принцип работы очень простой, при нажатии кнопки замыкается контакт между столбцом и строкой, между ними начинает течь ток. Например, при нажатии клавиши «4» происходит короткое замыкание столбца 1 и строки 2. Схема клавиатуры 4 x 4 показана на рисунке ниже.

Схема клавиатуры 4 x 4 показана на рисунке ниже.

Подключение матричной мембранной клавиатуры к Arduino.

Подключение матричной мембранной клавиатуры к Arduino.

Необходимые детали:

  • Arduino UNO R3. Купить можно на AliExpress или в России.
  • Матричная мембранная клавиатура 4х4, 16 кнопок. Купить можно на AliExpress или в России.
  • Провод DuPont. Купить можно на AliExpress или в России.
  • Плата макетная беспаечная 55х82х8.5 мм. Купить можно на AliExpress или в России.
  • Кабель USB 2.0.

Схема подключения матричной клавиатуры к Arduino UNO.

Схема подключения матричной клавиатуры к Arduino UNO.

Схема подключения матричной клавиатуры к Arduino NANO.

Схема подключения матричной клавиатуры к Arduino NANO.

Подключаем матричную клавиатуру к Arduino начиная с 2 цифрового пина до 9. Как показано на схеме подключения.

Установка библиотек:

В данном примере будем использовать библиотеку «Keypad.h» скачать ее можно в «Менеджере библиотек» или внизу статьи в разделе «файлы для скачивания».

библиотеку «Keypad.h» скачать ее можно в «Менеджере библиотек»

В строке поиска вводим «Keypad» находим библиотеку «Keypad by Mark Stanley» и устанавливаем ее.

В строке поиска вводим «Keypad» находим библиотеку «Keypad by Mark Stanley» и устанавливаем ее.

Пример скетча для работы матричной мембранной клавиатуры с Arduino.

В коде определяем количество рядов и колонок. Данный параметр зависит от типа клавиатуры.

#include <Keypad.h>    // Подключение библиотеки Keypad
 
const byte ROWS = 4;   // Количество рядов 
const byte COLS = 4;   // Количество строк

Также указываем массив символов кнопок.

char keys[ROWS][COLS] = 
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

И наконец, пины подключения клавиатуры к Arduino.

byte rowPins[ROWS] = {9, 8, 7, 6}; // Выводы, подключение к строкам
byte colPins[COLS] = {5, 4, 3, 2}; // Выводы, подключение к столбцам

Принцип работы достаточно простой. Считываем состояние кнопок и если было нажатие, выводим в монитор порта символ нажатой клавиши.

byte rowPins[ROWS] = {9, 8, 7, 6}; // Выводы, подключение к строкам
byte colPins[COLS] = {5, 4, 3, 2}; // Выводы, подключение к столбцам

Загрузите скетч и откройте «Последовательный монитор» из Arduino IDE и вы получим следующий результат.

Загрузите скетч и откройте «Последовательный монитор» из Arduino IDE и вы получим следующий результат.

На основе данного урока можно сделать кодовый замок по аналогии с кодовым замком, который я делал на дисплее Nextion. Но на этом возможности применения матричной клавиатуры в Arduino проектах не заканчивается. С помощью матрицы кнопок можно управлять элементами умного дома, станком с ЧПУ и пр.

Подключение матричной клавиатуры 4х4 Arduino. Пример скетча для работы матричной мембранной клавиатуры с Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Уроки по созданию проектов с использованием сенсорного дисплея Nextion и Arduino. http://portal-pk.ru/news/324-uroki-po-sozdaniyu-proektov-s-ispolzovaniem.html Константин Portal-PK 2021-10-11T09:04:43+03:00 Для создания проектов на Arduino часто используются дисплеи для отображения информации. Также есть возможность использовать сенсорные экраны, которые позволяют не только отображать информацию, но и управлять устройством, прям с дисплея. Это позволяет уменьшить количество подключаемых устройств ввода (кнопок, энкодоров, потенциометров и пр.) При этом можно использовать достаточно большое количество элементов, гораздо больше, чем можно подключить к Arduino UNO или Arduino NANO. Одним из самых распространённых сенсорных дисплеев для Arduino проектов является Nextion.

Одним из самых распространённых сенсорных дисплеев для Arduino проектов является Nextion.

Уроки по работе с nextion display.

Последний урок по данной теме: Красивый дизайн из 2 картинок. tft Nextion 3.5.

Про предыдущие 8 уроков уже рассказывал. Но всё же размещу в данной новости, чтобы вам их не искать.

Урок Nextion дисплей на русском.

Урок 1 - Скачать и установить Arduino IDE, Nextion Editor

Урок 2 - Подготовка графики для дисплея Nextion в Inkscape

Урок 3. Кнопка Dual state Nextion Включаем выключаем подсветку.

Урок 4 Button Nextion Управление яркостью, переключение режимов

Урок 5. Передаем информацию с Arduino на дисплей Nextion

Урок 6. Клавиатура дисплей Nextion. Timer, перенаправление на страницы.

Бонусный урок.

Урок 8. Slider Nextion - управление яркостью подсветки (обзор)

Видео урок по работе со слайдером в Nextion Editor доступен подписчикам на сайте boosty или YouTube.

В дальнейшем планирую реализовать ряд проектов с использованием дисплея Nextion, а также планирую снять дополнительные уроки Nextion.

Что получится после выполнения уроков, у меня будет сделан отдельный проект. Который скоро будет доступен, не забывайте добавить сайт в закладки, чтобы не пропустить.

Понравилась новость Уроки по созданию проектов с использованием сенсорного дисплея Nextion и Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Как сделать WEB-интерфейс для управления проектом на ESP8266? http://portal-pk.ru/news/323-kak-sdelat-web-interfeis-dlya-upravleniya-proektom-na.html Константин Portal-PK 2021-10-01T12:58:26+03:00 Как мы уже знаем, ESP8266 имеет на борту wi-fi модуль, что позволяет подключаться к локальной сети и получать данные из интернета. Подключение к сети это хорошо, но для чего оно нужно? Благодаря данной функции можно управлять подключенной к ESP8266 нагрузкой или получать данные с датчиков. Но куда эти данные вывести? Тут как раз нам поможет WEB-интерфейс для управления проектом на ESP8266.

С чего начать и как сделать WEB-интерфейс для управления проектом на ESP8266?

Сперва нужно понять, что такое HTTP веб-сервера на ESP8266 и как его можно реализовать. По данной теме у меня есть отдельный урок. Который поможет разобраться в данном вопросе.

Затем нужно понять как на web-страницу вывести информацию и элементы управления. В этом помогут знания по теме формирования HTML страницы и использование Javascript и CSS в интерфейсе приложения.

Применение WEB-интерфейса для управления проектом на ESP32 (ESP8266).

На основе полученных знаний из предыдущих уроков можно реализовать различные проекты на ESP32 (ESP8266). Получать информацию и производить управление через web-интерфейс.

Примеры использования web-интерфейса в проектах на ESP32 (ESP8266).

Веб-сервер ESP32 (ESP8266) в среде Arduino IDE.


Подключаем DHT11, DHT22 к ESP32, ESP8266. Выводим показание на веб-странице.


ESP32 и ESP8266 выводим статус на веб страницу и на OLED дисплей.


Понравилась новость Как сделать WEB-интерфейс для управления проектом на ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Visual Studio C# строим график температуры по данным Arduino DS18B20 http://portal-pk.ru/news/322-visual-studio-c-stroim-grafik-temperatury-po-dannym-arduino-ds18b20.html Константин Portal-PK 2021-09-29T09:13:27+03:00 С помощью Arduino вывести значения температуры можно на дисплей, отправить данные на телефон. Но как же реализовать вывод данных на компьютере? Написать приложение можно с помощью различных программ. Сегодня рассмотрим пример реализации, с помощью Visual Studio C# строим график температуры по данным с Arduino и датчика температуры DS18B20.

Visual Studio приложение Windows Forms для построения графиков температуры по данным Arduino DS18B20.

Visual Studio приложение Windows Forms для построения графиков температуры по данным Arduino DS18B20.

Первым делом нужно сделать интерфейс приложение Windows Forms для построения графиков температуры по данным Arduino DS18B20.Информации по данной теме много в интернете. Готовое приложение можно скаи внизу статьи в разделе «Файлы для скачивания». Также более подробное описание приложения можно посмотреть на моем втором сайте вот в этой статье.

Первым делом нужно сделать интерфейс приложение Windows Forms для построения графиков температуры по данным Arduino DS18B20

Arduino программа для отправки температуры на ПК с датчика DS18B20.

По работе с датчиком температуры DS18B20 у меня есть урок. Возьмём пример из урока и немного его подправим. В итоге получим вот такой код.

#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void) {
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  static uint32_t tmr2;
  if (millis() - tmr2 > 1000) {
    tmr2 = millis();
    Serial.println(sensors.getTempCByIndex(0)); //  в Цельсиях:
  }
}

Схема подключения DS18B20 к Arduino.

Подключаем датчик DS18B20 к Arduino NANO

Пример роботы приложения вывода температуры.

Пример роботы приложения вывода температуры.

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

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

Понравилась новость Visual Studio C# строим график температуры по данным Arduino DS18B20? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
ШИМ Arduino и ESP8266. В чем отличие? http://portal-pk.ru/news/321-shim-arduino-i-esp8266-v-chem-otlichie.html Константин Portal-PK 2021-09-23T07:55:55+03:00 Сегодня речь пойдет о Широтно-импульсной модуляции (ШИМ, англ. pulse-width modulation (PWM)). А точнее, в чем отличая работы с ШИМ Arduino и ESP8266. Опираться в данной статье будем на предыдущие уроки про Arduino и ESP8266.

Так в чем же отличия при работе с ШИМ Arduino и ESP8266?

Рассмотрим для начала, на каких пинах доступно управление ШИМ отладочной платы NodeMCU.

доступно управление ШИМ отладочной платы NodeMCU.

Как видим, можем использовать ШИМ на 9 пинах платы. Например, для плат Arduino UNO и Nano ЭТО всего 6 пинов с поддержкой ШИМ.

Для плат Arduino UNO и Nano ЭТО всего 6 пинов с поддержкой ШИМ.

NodeMCU позволяет использовать одновременно не более 6 PWM выходов. Частота PWM может быть от 1 до 1000 Гц.

NodeMCU позволяет использовать одновременно не более 6 PWM выходов. Частота PWM может быть от 1 до 1000 Гц.

Для реализации большинства плат Arduino можно установить значение ШИМ от 0 до 255, что является более низким разрешением, чем для ESP8266. Которое можно задать в диапазоне от 0 до 1023. Это означает, что скважность задается 10 битным числом, то есть от 0 до 1023.

для ESP8266. Которое можно задать в диапазоне от 0 до 1023.

Боле подробное описание работы с ШИМ для данных плат смотрите в предыдущих уроках. В данной статье рассмотрели только основные отличия.

Понравилась новость ШИМ Arduino и ESP8266. В чем отличие? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Пульт для управления презентациями своими руками. http://portal-pk.ru/news/320-pult-dlya-upravleniya-prezentaciyami-svoimi-rukami.html Константин Portal-PK 2021-09-22T09:53:12+03:00 Презентация одна из распространенных представлений информации для большой публики. И для удобства управления презентацией необходимо находиться на определённом расстоянии от проектора, и при этом в поле видимости аудитории, чтобы все могли видеть оратора с любого места в зале. При таких условиях для управления презентацией без пульта для управления не обойтись. Сегодня расскажу, как можно сделать своими руками подобный пульт.

Приступаем к сборке пульта для управления презентациями своими руками.

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

Приступаем к сборке пульта для управления презентациями своими руками.

Подключить все можно соединительными приводами без пайки вот по такой схеме.

Схема подключения устройства удаленного управления ПК.Или припаять и получить небольшое компактное USB устройство.

Второй вариант схемы устройства удаленного управления ПК более компактный

Список клавиш и их назначения для управления презентацией с помощью пульта.

Список клавиш и их назначения для управления презентацией с помощью пульта.

Код для Пульта управления презентациями своими руками.

Скачать код можно внизу статьи в разделе файлы для скачивания. Более подробное описание проекта можно на моем втором сайте в статье с полным руководством по сборке пульта.

Понравилась новость Пульт для управления презентациями своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
#36. GSM-модуль SIM800L. AT команды и отправка СМС http://portal-pk.ru/news/319-gsm-modul-sim800l-at-komandy-i-otpravka-sms.html Константин Portal-PK 2021-09-15T04:09:09+03:00 Сегодня в уроке рассмотрим Модуль GSM GPRS SIM800L V2.0 MicroSIM с антенной. Посмотрим в чем его преимущества и недостатки. Разберемся, как управлять данным модулем с помощью AT команд и оправим CMC сообщение.

 Модуль GSM GPRS SIM800L V2.0 MicroSIM с антенной.

Для урока понадодиться:


Модуль GSM GPRS SIM800L V2.0 обладает минимальным функционалом — обмен данными с GSM-модулем по UART. Плата имеет слот для установки внешней SIM-карты.
SIM800L V2.0 GSM/GPRS - это четырех диапазонный GSM/GPRS модуль, совместимый с Arduino. Модуль используется для реализации функций GSM и GPRS. Преимуществом этого модуля является возможность напрямую подключать его к Arduino или другому микроконтроллеру с напряжением питания 5В.

Общие характеристики SIM800L V2.0 GSM/GPRS

Общие характеристики SIM800L V2.0 GSM/GPRS:

  • Модель : SIMCOM SIM800L;
  • Напряжение питания : от 3,7В до 5В;
  • Поддержка сети: четыре диапазона–850/900/1800/1900 МГц, способные осуществлять звонки, SMS и передачу данных со значительно уменьшенным расходом заряда;
  • Управление посредством AT-команд;
  • TTL совместимый по уровню с Arduino;
  • Низкая потребляемая мощность;
  • Штекер подключения антенны;
  • Наличие антенны;
  • Размеры: 40мм х 28мм х 3мм;
  • Диапазон рабочих температур: от -40°C до +85°C.

Распиновка GSM-модуля SIM800L

Распиновка GSM-модуля SIM800L:

  • RxD (Receiver) — Вывод последовательной связи.
  • TxD (Transmitter) — Вывод последовательной связи.
  • GND — Вывод заземления, должен быть подключен к выводу GND на Arduino.
  • VCC — Питание модуля, от 3,7 В до 5 вольт.
  • DTR — этот пин отвечает за выход из спящего режима модуля.
  • RST (Reset) — Вывод сброса модуля.

Схема подключения GSM GPRS SIM800L V2.0 MicroSIM к Arduino UNO.

Схема подключения GSM GPRS SIM800L V2.0 MicroSIM к Arduino.

Схема подключения SIM800L V2.0 к Arduino NANO.

Схема подключения SIM800L V2.0 к Arduino NANO.

Так как модуль GSM GPRS SIM800L V2.0 MicroSIM может общаться только по UART и не имеет звукового интерфейса. Схема подключения будет очень простая, всего по двум проводам + питание.

Тестирование AT-команд SIM800L.

Для отправки AT-команд и связи с модулем SIM800L будем использовать окно «Монитора порта». Копируем приведенный скетч ниже и загружаем его в Arduino.

#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
}
void loop() {
  if (SIM800.available())           // Ожидаем прихода данных (ответа) от модема...
    Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available())           // Ожидаем команды по Serial...
    SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}

Открываем окно «Монитора порта», устанавливаем скорость «9600» и «NL (Новая строка)».

В коде используем библиотеку SoftwareSerial.h, которую нужно подключить. Библиотеку можно скачать внизу статьи в разделе «Файлы для скачивания».

Для проверки работоспособности будем использовать команды:

  • AT — это самая основная команда AT. Если все работает, в ответ получаем, символ AT, а затем ОК, сообщая, что все в порядке.
  • AT+CSQ — проверка уровня сигнала в дБ, должно быть выше 5.
  • AT+CCID — получение номера SIM-карты.
  • AT+CREG? — проверка регистрации в сети.

В мониторе порта увидим следующую информацию.

Для проверки работоспособности будем использовать команды

Также можно проверить:

  • ATI — получить название модуля и ревизию
  • AT+COPS? — проверка регистрации в сети (Bee Line)
  • AT+COPS=? — список операторов в сети.
  • AT+CBC — команда показывает состояние батареи

AT+CBC — команда показывает состояние батареи

Подробный список AT команд приведен в таблице ниже.

Описание Команда Структура ответа Пример ответа
Готовность модуля к работе AT OK
OK
Запрос информации об устройстве ATI <info>
OK

<info> — модель и версия модуля
SIM800 R14.18

OK
Запрос версии установленного ПО AT+CGMR <revision>
OK

<revision> — модель и версия ПО
Revision:1418B04SIM800L24

OK
Готовность модуля совершать звонки AT+CCALR? +CCALR: <mode>
OK

<mode> — идентификатор готовности:

0 — модуль не готов совершать звонки
1 — модуль готов совершать звонки

+CCALR: 1

OK
Запрос качества связи AT+CSQ +CSQ: <rssi>,<ber>
OK

<rssi> — качество сигнала (от 10 и выше — нормальное):

0 -115 дБм и меньше
1 -111 дБм
2...30 -110... -54 дБм
31 -52 дБм и больше
99 определить невозможно

<ber> — RXQUAL (мера качества сигнала), значение из таблицы GSM 05.08 — ETSI:

0...7 — коэффициент битовых ошибок (меньше — лучше)
99 определить невозможно

+CSQ: 8,0

OK
Запрос IMEI-модуля AT+GSN <sn>
OK

<sn> — IMEI модуля
864713035030892

OK
Запрос идентификационной информации модуля AT+GSV Текстовая информация о модуле SIMCOM_Ltd
SIMCOM_SIM800L
Revision:1418B04SIM800L24

OK
Напряжение питания AT+CBC +CBC: <bcs>,<bcl>,<voltage>
OK

<bcs> — статус зарядки

0 — зарядки нет
1 — зарядка идет
2 — зарядка завершена

<bcl> — объем оставшегося заряда в процентах (1...100)
<voltage> — напряжение питания модуля, в милливольтах
+CBC: 0,73,3988

OK
Тип регистрации в сети AT+CREG? +CREG: <n>,<stat>
OK

<n> — параметр ответа

0 — незапрашиваемый код регистрации в сети отключен
1 — незапрашиваемый код регистрации в сети включен
2 — незапрашиваемый код регистрации в сети включен с информацией о местоположении

<stat> — статус

0 — незарегистрирован, не ищет нового оператора для регистрации
1 — зарегистрирован в домашней сети
2 — незарегистрирован, но в поиске нового оператора для регистрации
3 — регистрация запрещена
4 — неизвестно
5 — зарегистрирован, в роуминге

+CREG: 0,1

OK
Информация об операторе AT+COPS? +COPS: <mode>,[<format>,<oper>]
OK

<mode> — режим регистрации
<format> — формат отображения
<oper> — наименование оператора в заданном формате
+COPS: 0,0,"MegaFon"

OK
Получение списка всех операторов AT+COPN +COPN: <numeric1>,<alpha1>
[<CR><LF>+COPN: <numeric2>,<alpha2> […]]

OK
<numeric n> — цифровой код оператора
<alpha n> — текстовый код оператора
...
+COPN: "24008","vodafone"
+COPN: "24010","Swefour AB"
+COPN: "24201","TELENOR"
+COPN: "24202","NetCom"
+COPN: "24403","FINNET"
+COPN: "24405","Elisa Corporation"
+COPN: "24409","FINNET"
...

OK
Статус телефона GSM-модуля AT+CPAS +CPAS: <pas>
OK

<pas> — статус

0 — готов к выполнению команд из терминала
2 — неизвестно (исполнение команд не гарантируется)
3 — входящий вызов, но модуль готов к выполнению команд
4 — исходящий вызов, но модуль готов к выполнению команд

+CPAS: 4

OK

Отправка СМС с помощью модуля GSM GPRS SIM800L V2.0 и Arduino.

Для отправки СМС также будем использовать AT команды:

  • AT + CMGF = 1 — выбирает формат SMS-сообщения в виде текста. Формат по умолчанию PDU.
  • AT + CMGS = +7xxxxxxxxxxотправляет SMS на указанный номер телефона.

Внимание! Прежде чем загрузить пример, необходимо ввести номер телефона. Найдите строку +7xxxxxxxxxx и замените его на необходимый номер телефона, на который будет оправлено сообщение.

Скетч отправки СМС сообщения с помощью Arduino и модуля SIM800L.

Скетч отправки СМС сообщений будет следующим.

#include <SoftwareSerial.h>
SoftwareSerial sim800l(8, 9); // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)

void SendSMS()
{
  Serial.println("Sending SMS...");                // Печать текста
  sim800l.print("AT+CMGF=1\r");                   // Выбирает формат SMS
  delay(100);
  sim800l.print("AT+CMGS=\"+7xxxxxxxxxx\"\r");  // Отправка СМС на указанный номер +792100000000"
  delay(300);
  sim800l.print("A letter from the site: arduino-tex.ru");       // Тест сообщения
  delay(300);
  sim800l.print((char)26);// (требуется в соответствии с таблицей данных)
  delay(300);
  sim800l.println();
  Serial.println("Text Sent.");
  delay(500);
}

void setup()
{
  sim800l.begin(9600);   //Инициализация последовательной связи с Arduino и SIM800L
  Serial.begin(9600);   // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor)
  delay(1000);          // Пауза 1 с
  SendSMS();
}

void loop()
{
  delay(500);                            // Пауза 500 мс
  if (sim800l.available()) {           // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE
    Serial.write(sim800l.read());
  }
}

В мониторе порта увидим подтверждение отправки сообщения, а также номер, на который было отправлено сообщение.

В мониторе порта увидим подтверждение отправки сообщения, а также номер, на который было отправлено сообщение.

На телефоне, на который было отправлено сообщение, увидим следующую информацию. СМС сообщение, которое мы отправляли.

На телефоне, на который было отправлено сообщение, увидим следующую информацию. СМС сообщение, которое мы отправляли.

СМС может содержать показание с датчика температуры и влажности, данные с датчика движения или уровень воды, давление в баке отопления или другую информацию.

СМС может содержать показание с датчика температуры и влажности, данные с датчика движения или уровень воды, давление в баке отопления или другую информацию.

С помощью модуля GSM GPRS SIM800L V2.0 MicroSIM можно получать СМС,управляя устройствами. Отправлять данные про GPRS на сайт. Также считывать команды сайта и производить управление домашней электроникой. Более подробнее данные функции рассмотрим в следующих уроках.

С помощью модуля GSM GPRS SIM800L V2.0 MicroSIM можно получать СМС,управляя устройствами. Отправлять данные про GPRS на сайт.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Использование сдвигового регистра в проектах на Arduino, Esp8266. http://portal-pk.ru/news/318-ispolzovanie-sdvigovogo-registra-v-proektah-na-arduino.html Константин Portal-PK 2021-09-07T09:08:32+03:00 При разработке проектов на Arduino часто встаёт вопрос нехватки пинов для подключения периферийных устройств. В случае использовании ESP8266 нехватка пинов возникает гораздо чаще, так как у данного микроконтроллера гораздо меньше пинов которые можно использовать для подключения внешних устройств. Для увеличения количества пинов можно использовать сдвиговый регистр. Например, восьмибитный 74HC595.

Где найти информацию о подключении74HC595 к Arduino, Esp8266?

Где найти информацию о подключении74HC595 к Arduino, Esp8266?

С методами расширения пинов плат Arduino и ESP8266 определились. Сейчас осталось понять, как подключить сдвиговый регистр к Arduino.

Подключить сдвиговый регистр 74HC595 к Arduino можно по схеме.

Схема подключения сдвигового регистра к плате Arduino UNOБолее подробный урок по подключению сдвигового регистра к Arduino читайте тут.

Также у меня есть очень подробный урок по подключению сдвигового регистра к ESP8266. Который вы можете посмотреть на моем втором сайте про Ардуино.

Схема подключения 74HC595 к ESP8266 будет следующая.

Схема подключения сдвигового регистра 74HC595 к NodeMCU.

Понравилась новость Использование сдвигового регистра в проектах на Arduino, Esp8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Сложности в проектировании ЧПУ станков http://portal-pk.ru/news/317-slozhnosti-v-proektirovanii-chpu-stankov.html Константин Portal-PK 2021-09-01T14:04:01+03:00 При разработке ЧПУ станков в домашних условиях нужно учесть большое количество различных моментов. Что сделать практически нереально при сборке ЧПУ станка своими руками. Поэтому приходится методом проб и ошибок подбирать оптимальные варианты реализации различных узлов станка. Сегодня расскажу о том, как я столкнулся с проблемой неравномерной подачи ЧПУ плоттера.

Доработка CNC плоттера.

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

Доработка CNC плоттера

Второй вариант. Это надеть резинки на вал. Более интересный и приемлемый. Но тут тоже есть небольшие проблемы. При частом перемещении вперед и назад лист начинает поворачиваться. И рисунок наносится со смещением. Причиной чего могут быть 2 причины. Либо резинки не одинаковой толщины или проблема с валом. Хотя с наждачной бумагой работал гораздо лучше. Про вариант с использованием наждачной бумаги рассказывал в статье про сборку ЧПУ плоттера.

Про вариант с использованием наждачной бумаги рассказывал в статье про сборку ЧПУ плоттера.

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

Понравилась новость Сложности в проектировании ЧПУ станков? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Первые шаги к беспроводной системе управления умным домом. http://portal-pk.ru/news/316-pervye-shagi-k-besprovodnoi-sisteme-upravleniya-umnym.html Константин Portal-PK 2021-08-29T15:22:46+03:00 Для беспроводного управления достаточно большое количество различных каналов: wifi, bluetooth, радио связь. Сегодня речь пойдет о радио связи как с её помощи можно реализовать проект беспроводной системы управления умным домом.

Сегодня речь пойдет о радио связи как с её помощи можно реализовать проект беспроводной системы управления умным домом.

Радио связи имеет ряд преимуществ перед wifi, bluetooth. Это автономность в сравнении с wifi. И больший радиус действия, и большое количество подключаемых устройств по сравнению с bluetooth. Благодаря чему можно сделать небольшую систему автоматизации умного дома, например на даче, где нет возможности постоянной работы wifi или удалённое расположение объектов управления, например надворные постройки, такие как баня, гараж, беседка. Поэтому радиосвязь тут более приемлемое решение.

Реализовать все можно с развязкой на одном или нескольких дисплеях. Которые будут отображать всю необходимую информацию. Также выступать в качестве контроля доступа.

Реализовать все можно с развязкой на одном или нескольких дисплеях. Которые будут отображать всю необходимую информацию. Также выступать в качестве контроля доступа.

На дисплей можно выводить все показания с датчиков и производить управление различными узлами дома. Например, включать и выключать реле освещения или электроприборов.

дисплей можно выводить все показания с датчиков

Это система позволяет реализовать умные устройства, которые будут обмениваться информацией друг с другом.

Делал на днях беспроводное управление контролем доступа с дисплеем Nextion подробнее о проекте можно почитать тут.

Понравилась новость Первые шаги к беспроводной системе управления умным домом? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Лучшие проекты на базе Digispark Attiny85 (мини Arduino). http://portal-pk.ru/news/315-sborka-proektov-sdelannyh-na-digispark.html Константин Portal-PK 2021-08-23T12:40:17+03:00 DigiSpark является небольшой отладочной платой. На которой можно реализовать различные проекты не смотря на ограниченное количество пинов для подключения и небольшой объем памяти под прошивку.Самым большим плюсом данной отладочной платы является ее небольшой размер. Что позволяет разместить DigiSpark, там, где не поместиться Arduino. Вторым плюсом является тот факт, что данная плата определяется компьютером как внешнее устройство и на основе DigiSpark можно реализовать мышке или клавиатуру.

Подборка моих проектов реализованных на DigiSpark.

Подборка моих проектов реализованных на DigiSpark.

Смотрите также статьи и уроки по использованию DigiSpark.

Смотрите также статьи и уроки по использованию DigiSpark.

Понравилась новость Лучшие проекты на базе Digispark Attiny85 (мини Arduino)? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
AT-команды для настройки bluetooth-модулей HC-05, HC-06. http://portal-pk.ru/news/314-at-komandy-dlya-nastroiki-bluetooth-modulei-hc-05-hc-06.html Константин Portal-PK 2021-08-10T05:29:01+03:00 При разработке проектов с беспроводным управлением часто падает выбор на bluetooth-модули HC-05, HC-06. В связи с небольшой стоимостью и простотой использования. Но перед тем как создать проект нужно настроить bluetooth-модуль. Настройка модулей осуществляется с помощью AT-команд.

Схема подключения bluetooth-модулей HC-05, HC-06 к Arduino для настройки.

Схема подключения bluetooth-модулей HC-05, HC-06 к Arduino для настройки.

Какие параметры bluetooth-модулей HC-05, HC-06 можно настроить с помощью AT-команд?

В зависимости от версии bluetooth-модуля и прошивки настроить можно разное количество параметров. Также AT-команд могут быть разные, у разных версий модулей и прошивок. Но основной набор команд неизменный для любой версии. Возможно, разделительный знак будет отличаться, но методом «научного подбора» можно определить, если даже нет описания для вашего модуля.

Основные AT-команды bluetooth-модулей HC-05, HC-06

Основные AT-команды bluetooth-модулей HC-05, HC-06:

  • AT - Используется для проверки связи с модулем.
  • AT+VERSION - Запрос версии прошивки
  • AT+NAME - Запрос / установка имени модуля
  • AT+PSWD или AT+PIN - Запрос / Установка PIN-кода
  • AT+UART - Запрос / установка скорости UART
  • AT+CMODE - Запрос / установка режима подключения
  • AT+BIND - Запрос / установка фиксированного адреса
  • AT+ADDR - Запрос адреса модуля
  • AT+ROLE - Запрос / установка роли модуля

Это основные AT-команды. Остальные команды используются редко. Более подробный список вы можете посмотреть в таблице ниже.

AT-команды: Ответ Bluetooth модуля: Назначение AT-команд:
AT OK Команда Тест:
Используется для проверки связи с модулем.
AT+RESET OK Команда программной перезагрузки модуля:
Модуль ведёт себя так, как после кратковременного отключения питания.
AT+VERSION? +VERSION:ВЕРСИЯ
OK
Запрос версии прошивки модуля:
Модуль возвращает версию в виде строки до 32 байт.
Пример ответа: +VERSION:hc01.comV2.1OK
AT+ORGL OK Сброс пользовательских настроек:
Модуль сбрасывает следующие настройки:
CLASS=0, IAC=9e8b33, ROLE=0, CMODE=0, UART=38400,0,0, PSWD=1234, NAME=hc01.com.
AT+ADDR? +ADDR:АДРЕС
OK
Запрос адреса модуля:
Модуль возвращает три части своего адреса NAP:UAP:LAP разделённые двоеточием.
Каждая часть состоит из шестнадцатиричных цифр.
Пример ответа: +ADDR:1234:56:789ABCOK
Если количество символов в адесе не четное, то такой адрес не получется добавить мастеру в параметр AT+BIND
AT+NAME? +NAME:ИМЯ
OK
Запрос / установка имени модуля:
Имя модуля представлено строкой до 32 байт.
Пример ответа: +NAME:iArduinoOK
Пример установки: AT+NAME=iArduino
Некоторые модули реагируют на команду AT+NAME? только при нажатой кнопке модуля или наличии высокого уровня на входе K.
AT+NAME=ИМЯ OK
AT+RNAME? АДРЕС +RNAME:ИМЯ
OK
Запрос имени найденного Bluetooth устройства:
Адрес вводится после пробела, а части адреса (NAP,UAP,LAP) разделены запятой. Модуль возвращает имя найденного Bluetooth устройства находящегося в зоне действия, адрес которого был в запросе.
Пример запроса: AT+NAME? 1234,56,789ABC
Пример ответа: +RNAME:iArduinoOK
AT+ROLE? +ROLE:РОЛЬ
OK
Запрос / установка роли модуля:
Роль модуля представлена цифрой:
0 - ведомый, 1 - ведущий, 2 - ведомый в цикле*.
Пример ответа: +ROLE:1
Пример установки: AT+ROLE=0
AT+ROLE=РОЛЬ OK
AT+CLASS? +CLASS:ТИП
OK
Запрос / установка типа устройства:
Тип устройства представляется 32 битным числом, по которому можно определить назначение модуля: Bluetooth клавиатура, Bluetooth мышь, гарнитура ...
Пример установки: AT+CLASS=0
AT+CLASS=ТИП OK
AT+IAC? +IAC:КОДOK Запрос / Установка кода общего доступа GIAC:
Код представлен 32 битным числом и используется для обнаружения Bluetooth устройств.
В роли ведущего, по данному коду модуль будет получать доступ к другим Bluetooth устройствам для их поиска (опроса), а в роли ведомого по данному коду будет предоставляться доступ для опроса модуля другими ведущими.
Пример ответа: +IAC:9e8b33OK
Пример установки: AT+IAC=9e8b33
AT+IAC=КОД OK
или
FAIL
AT+INQM? +INQM:РЕЖИМ,КОЛ,ВРЕМЯ
OK
Запрос / Установка режима опроса модулей:
Используемые параметры являются настройками для команды поиска (опроса) других Bluetooth устройств.
- Режим поиска представлен цифрой:
0-стандартный, 1-поиск по интенсивности сигнала.
- Количество представлено цифрой определяющей предельное количество найденных Bluetooth устройств, после которого требуется прекратить поиск.
- Время поиска задаёт таймаут после которого поиск прекращается. Реальное время поиска в секундах равно указанному числу умноженному на 1,28.
Пример ответа: +INQM:1,1,48OK
Пример установки: AT+INQM:1,1,48
AT+INQM=РЕЖИМ,КОЛ,ВРЕМЯ OK
или
FAIL
AT+PSWD? +PSWD:КОД
OK
Запрос / Установка PIN-кода:
Код доступа представлен строкой до 16 байт.
Код модуля в роли ведомого устройства является паролем доступа к текущему модулю.
Код модуля в роли ведущего устройства является паролем доступа к внешним Bluetooth устройствам.
Пример ответа: +PSWD:1234OK
Пример установки: AT+PSWD=1234arduino
AT+PSWD=КОД OK
AT+UART? +UART:СКОР,СТОП,ПРОВ
OK
Запрос / установка скорости UART:
Скорость представлена числом бит/сек
Стоп бит представлен цифрой: 0 - один, 1 - два
Проверка представлена цифрой: 0 - без проверки,
1 - проверка нечётности, 2 - проверка чётности.
Пример ответа: +UART:38400,0,0OK
Пример установки: AT+UART=38400,0,0
AT+UART=СКОР,СТОП,ПРОВ OK
AT+CMODE? +CMOD:РЕЖИМ
OK
Запрос / установка режима подключения:
Режим представлен цифрой:
0 - модуль в роли ведущего подключается только к тому Bluetooth устройству, адрес которого указан командой AT+BIND.
1 - модуль в роли ведущего подключается к любому ведомому Bluetooth устройству.
2 - модуль в роли ведомого работает в цикле*
Пример ответа: +CMOD:0OK
Пример установки: AT+CMOD=1
AT+CMODE=РЕЖИМ OK
AT+BIND? +BIND:АДРЕС
OK
Запрос / установка фиксированного адреса:
Если модуль находится в роли ведущего (ROLE=1) и установлен режим подключения к фиксированному адресу (CMODE=0), то он будет подключаться только к тому Bluetooth устройству, адрес которого указан данной командой.
Части адреса вводятся: при установке - через запятую, а при ответе - через двоеточие.
Пример ответа: +BIND:1234:56:789ABCOK
Пример установки: AT+BIND=0,0,0
AT+BIND=АДРЕС OK
AT+POLAR? +POLAR:ЛОГ,ЛОГ
OK
Запрос / установка активного логического уровня для включения светодиодов:
Полярность представлена цифрой 0 или 1 соответствующей активному логическому уровню.
Первый параметр указывает логический уровень для включения светодиода подключённого к выводу PIO8 (отображает режим работы), а второй для светодиода подключённого к выводу PIO9 (отображает статус соединения).
Пример ответа: +POLAR:1,1OK
Пример установки: AT+POLAR=1,1
AT+POLAR=ЛОГ,ЛОГ OK
AT+PIO=НОМЕР,УРОВЕНЬ OK Установка логического уровня PIO:
Позволяет установить логический уровень на выводе PIO. Номер вывода представлен числом от 2 до 11, кроме 8 и 9. Уровень представлен цифрой 0 или 1.
Пример установки: AT+PIO=11,0
AT+MPIO? +MPIO:ЧИСЛО
OK
Запрос / установка логических уровней PIO:
Позволяет узнать или установить логические уровни сразу на всех выводах PIO.
Уровни представлены шестнадцатиричным числом, каждый бит которого соответствует уровню вывода PIO.
Пример ответа: +MPIO:1F0OK
Пример установки: AT+MPIO:CFC
AT+MPIO=ЧИСЛО OK
AT+IPSCAN? +IPSCAN:A,B,C,D
OK
Запрос / установка параметров IP сканирования:
A - интервал сканирования
B - продолжительность сканирования
C - интервал страниц
D - количество страниц
Пример ответа: +IPSCAN:1024,512,1024,512OK
Пример установки: AT+IPSCAN:1024,512,1024,512
AT+IPSCAN=A,B,C,D OK
AT+SNIFF? +SNIFF:A,B,C,D
OK
Запрос / установка параметров энергосберегающего режима:
A - максимальное время
B - минимальное время
C - период повторов
D - таймаут
Пример ответа: +SNIFF:0,0,0,0OK
Пример установки: AT+SNIFF=0,0,0,0
AT+SNIFF=A,B,C,D OK
AT+ENSNIFF=АДРЕС OK Переход в энергосберегающий режим:
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример команды: AT+ENSNIFF=1234,56,789ABC
AT+EXSNIFF=АДРЕС OK Выход из энергосберегающего режима:
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример команды: AT+EXSNIFF=1234,56,789ABC
AT+SENM? +SENM:СЕКРЕТ,ШИФР
OK
Запрос / установка параметров безопасности:
Режим секретности представлен цифрой:
0 - выключен
1 - незащищённое соединение
2 - защита на сервисном уровне
3 - защита на уровне соединения
4 - неизвестный режим
Режим шифрования представлен цифрой:
0 - без шифрования
1 - шифруется только трафик PTP
2 - шифруется весь трафик
Пример ответа: +SENM:0,0OK
Пример установки: AT+SENM:0,0
AT+SENM=СЕКРЕТ,ШИФР OK
AT+PMSAD=АДРЕС OK Удаление устройства из списка пар:
Удаление Bluetooth устройства из списка приведёт к необходимости заново образовывать пару для подключения к нему.
Части адреса удаляемого устройства вводится через запятую (NAP,UAP,LAP)
Пример команды: AT+PMSAD=1234,56,789ABC
AT+RMAAD OK Удаление всех устройств из списка пар:
Очистка данного списка приведёт к необходимости заново образовывать пары с Bluetooth устройствами для подключения к ним.
AT+FSAD=АДРЕС OK
или
FAIL
Поиск устройства в списке пар:
Если Bluetooth устройство с указанным адресом имеется в списке, то модуль вернёт OK иначе FAIL.
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример запроса: AT+FSAD=1234,56,789ABC
AT+ADCN? +ADCN:КОЛИЧЕСТВО
OK
Запрос количества устройств в списке пар:
При образовании пары ведущий-ведомый, данные о паре автоматически попадают в список пар и для последующих подключений (даже после отключения питания) не требуется повторно устанавливать пару.
Пример ответа: +ADCN:10OK
AT+MRAD? +MRAD:АДРЕС
OK
Запрос адреса устройства из списка пар:
Модуль вернёт адрес Bluetooth устройства из списка пар с которым выполнялось последнее успешное соединение.
Части адреса выводятся через двоеточие (NAP:UAP:LAP)
Пример ответа: +MRAD:1234:56:789ABCOK
AT+STATE? +STATE:СТАТУС
OK
Запрос статуса модуля:
Модуль вернёт свое текущее состояние в виде строки:
INITIALIZED - инициализация
READY - готов
PAIRABLE - образование пары
PAIRED - пара образована
INQUIRING - запрос
CONNECTING - подключение
CONNECTED - подключён
DISCONNECTED - отсоединён
NUKNOW - неизвестное состояние
Пример ответа: +STATE:CONNECTEDOK
AT+INIT OK
или
FAIL
Инициализация профиля SPP:
Профиль SPP эмулирует последовательный порт.
AT+INQ +INQ:АДРЕС,ТИП,СИГНАЛ
+INQ:АДРЕС,ТИП,СИГНАЛ
...
+INQ:АДРЕС,ТИП,СИГНАЛ
Поиск (опрос) Bluetooth устройств:
Команда доступна модулю в роли ведущего.
Модуль ищет Bluetooth устройства в радиусе действия и выводит каждый найденный модуль на новой строке. Режим поиска (опроса) устанавливается командой AT+INQM, код опроса устанавливается командой AT+IAC, тип искомых устройств указывается командой AT+CLASS. Поиск завершается по достижении предельного количества найденных Bluetooth устройств, или по достижении таймаута, или командой AT+INQC.
Пример ответа: +INQ:1234:56:789ABС,240404,7FFF
AT+INQC OK Завершить поиск (опрос) Bluetooth устройств:
Досрочно завершает поиск Bluetooth устройств инициированный командой AT+INQ
AT+PAIR=АДРЕС,ТАЙМАУТ OK
или
FAIL
Создать пару с Bluetooth устройством:
Создание пары или сопряжение Bluetooth устройств инициируется ведущим устройством.
Таймаут указывается десятичным числом в секундах.
Если пара создана, то информация о ней автоматически запишется в список пар, модуль ответит OK после чего можно подключить Bluetooth устройство командой AT+LINK. Если пара не создана (например не подошёл PIN-код или истек таймаут), то модуль ответит FAIL.
Пример команды: AT+PAIR=1234,56,789ABC,10
AT+LINK=АДРЕС OK
или
FAIL
Подключиться к Bluetooth устройству:
После выполнения данной команды можно общаться с подключённым Bluetooth устройством.
Команда доступна модулю в роли ведущего.
Пример команды: AT+LINK=1234,56,789ABC
AT+DISC +DISC:РЕЗУЛЬТАТ
OK
Отключиться от Bluetooth устройства:
Команда указывает модулю отключиться от Bluetooth устройства с которым установлено соединение. После отключения от Bluetooth устройства информация о нём сохраняется в списке пар. Если потребуется вновь подключиться к этому устройству, то создание пары будет необязательно (если Bluetooth устройство намеренно не удалить из списка пар).
После выполнения команды модуль ответит результатом её выполнения:
SUCCESS - успех
LINK_LOSS - соединение потеряно
NO_SLC - отсутствует SLC
TIMEOUT - истекло время ожидания
ERROR - ошибка
Пример ответа: +DISC:SUCCESSOK

Список ошибок которые может вернуть Bluetooth модуль HC-05, HC-06.

ERROR:(№) Описание ошибки Максимальный размер параметра
0 Такая AT команда не существует
-
1 Результат по умолчанию -
2 Ошибка сохранения пароля -
3 Слишком длинное имя устройства 32 байта
4 Имя устройства не указано -
5 Часть адреса NAP слишком длинная 4 разряда в шестнадцатиричной системе
6 Часть адреса UAP слишком длинная 2 разряда в шестнадцатиричной системе
7 Часть адреса LAP слишком длинная 6 разрядов в шестнадцатиричной системе
8 Не указана маска порта PIO -
9 Не указан номер вывода PIO -
A Не указан класс устройства
-
B Слишком длинный класс устройства -
C Не указан общий код доступа IAC -
D Слишком длинный общий код доступа IAC -
E Недопустимый общий код доступа IAC -
F Не указан пароль -
10 Слишком длинный пароль
16 байт
11 Недопустимая роль модуля -
12 Недопустимая скорость передачи данных -
13 Недопустимый размер стоп-бита -
14 Недопустимая настройка бита четности -
15 Устройство отсутствует в списке пар -
16 Профиль последовательного порта не инициализирован -
17 Повторная инициализация профиля SPP -
18 Недопустимый режим опроса Bluetooth устройств -
19 Слишком большое время опроса -
1A Не указан адрес Bluetooth устройства -
1B Недопустимый режим безопасности -
1C Недопустимый режим шифрования -

Сравнение модулей HC-05 и HC-06

Модули HC-05 и HC-06 являются наиболее используемыми. Оба модуля основаны на одинаковом чипе, но есть и важные отличия. Модуль HC-05 может работать в двух режимах работы – и в качестве ведущего (master), и в качестве ведомого (slave).

Сравнение модулей HC-05 и HC-06

Модуль HC-05 стоит несколько дороже, но он имеет большее количество полезных рабочих функций. Скорость передачи АТ команд по умолчанию для HC-05 равна 38400, для HC-06 – 9600. Важным моментом является то, что в конце АТ команд для HC-05 должны быть символы CRLF.

Подключение обоих модулей к плате Arduino одинаково.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
#35. Выводим символы на дисплей LCD 1602 и LCD 2004. http://portal-pk.ru/news/313-vyvodim-simvoly-na-displei-lcd-1602-i-lcd-2004.html Константин Portal-PK 2021-07-07T16:50:25+03:00 Для создания проектов на Arduino достаточно часто применяют дисплей LCD 1602 и LCD 2004. Как подключить LCD 1602 к Arduino рассмотрели в предыдущем уроке. Кроме текста очень часто нужно вывести специальные символы. Например, обозначение температуры - градус цельсия или процент влажности, а также направление продвижения или вращения. Как же вывести спец символы на дисплей LCD 1602 и LCD 2004? В данном уроке рассмотрим вывод из набора предустановленных символов и создадим свои символы, которые также выведем на LCD 1602 и LCD 2004.

 Как же вывести спец символы на дисплей LCD 1602 и LCD 2004?

Для урока понадодиться:

  • ARDUINO NANO. Купить можно на AliExpress или в России.
  • ЖК-дисплей 1602 16x2 с I2C модулем. Купить можно на AliExpress.
  • Провод DuPont. Купить можно на AliExpress или в России.
  • Плата макетная беспаечная 55х82х8.5 мм. Купить можно на AliExpress или в России.

Схема подключения LCD 1602 к Arduino UNO по I2C.

Схема подключения LCD 1602 к Arduino UNO по I2C.

Не смотря на то, что схему подключения уже рассматривали в предыдущем уроке. В данном уроке продублирую схему подключения LCD 1602 к Arduino UNO по I2C.

Выводим символы на дисплей LCD 1602 и LCD 2004.

В дисплее есть предустановленные символы, которые можно использовать. На рисунке ниже представлены символы и их порядковый номера.

1602 таблица символов

Вывести символ из данной таблицы на дисплей LCD 1602 и LCD 2004 достаточно просто. Вызываем команду:
lcd.print(char(127));

Где 127 номер символа из таблицы.

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


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

Пример кода (Скетча) вывода символов на дисплей LCD 1602 и LCD 2004.

#include <LiquidCrystal_I2C.h>        //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);   //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
//  Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup() {                        //
  lcd.init();                       //  Инициируем работу с LCD дисплеем
  lcd.backlight();                  //  Включаем подсветку LCD дисплея
  lcd.setCursor(0, 0);              //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
  lcd.print("LCD");                 //  Выводим текст "LCD", начиная с установленной позиции курсора
  lcd.setCursor(0, 1);              //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
  lcd.print("arduino-tex.ru");     //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
  delay(5000);
  lcd.setCursor(0, 0);
  lcd.print("25");
  lcd.print(char(223));
  lcd.print("C");
  lcd.print(" ");
  lcd.print(char(127));
  lcd.print(" ");
  lcd.print(char(126));
  lcd.print(" ");
  lcd.print(char(37));
  lcd.print(" ");
  lcd.print(char(61));
  lcd.print(char(62));
  lcd.setCursor(0, 1);
  lcd.print(" ");
  lcd.print(char(255));
  lcd.print(" ");
  lcd.print(char(252));
  lcd.print(" ");
  lcd.print(char(219));
  lcd.print(" ");
  lcd.print(char(170));
  lcd.print(" ");
  lcd.print(char(63));
  lcd.print(" ");
  lcd.print(char(58));
  lcd.print(" ");
  lcd.print(char(33));
}

void loop() {
}

Как видим из кода, вывод символов ничем не отличается от вывода обычного текста, только вывести можно всего один символ и при этом нужно преобразовать значение в char(). Это необходимо сделать, чтобы микроконтроллер понял, что мы выводим на дисплей символ, а не число.

В результате выведем вот такой набор символов.

В результате выведем вот такой набор символов.

Создаём и выводим на LCD 1602 собственные символы.

Для того чтобы создать собственный символ достаточно заполнить массив в котором 1 – это закрашенная ячейка на дисплее, а 0 – не закрашенная. В результате получим вот такое изображение.

Создаём и выводим на LCD 1602 собственные символы.

Массив будет выглядит вот так. И массив и картинка очень похожи.

  B00000,
  B01010,
  B10101,
  B10001,
  B01010,
  B00100,
  B00000,
  B00000

По аналогии можно создавать другие спец символы.

По аналогии можно создавать другие спец символы.

Пример кода создания своих символов для вывода на дисплей LCD 1602 и LCD 2004.

Пример кода создания своих символов для вывода на дисплей LCD 1602 и LCD 2004.

Создал 8 спец символов для вывода на дисплей LCD 1602 и LCD 2004.

byte customChar[] = {
  B00000,
  B01010,
  B10101,
  B10001,
  B01010,
  B00100,
  B00000,
  B00000
};
byte customChar1[] = {
  B00001,
  B00010,
  B00100,
  B01000,
  B11111,
  B00010,
  B00100,
  B01000
};
byte customChar2[] = {
  B11111,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B11111
};
byte customChar3[] = {
  B11111,
  B10101,
  B01010,
  B01110,
  B10101,
  B11011,
  B11111,
  B11111
};
byte customChar4[] = {
  B11110,
  B11101,
  B11011,
  B10111,
  B00000,
  B11101,
  B11011,
  B10111
};
byte customChar5[] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};
byte customChar6[] = {
  B10111,
  B11011,
  B11101,
  B11110,
  B11101,
  B11011,
  B10111,
  B11111
};
byte customChar7[] = {
  B01110,
  B01010,
  B01110,
  B10101,
  B01110,
  B00100,
  B01010,
  B10001
};

Давайте сейчас сохраним данные символы в память дисплея. Для этого используется команда lcd.createChar().

  lcd.createChar(0, customChar);
  lcd.createChar(1, customChar1);
  lcd.createChar(2, customChar2);
  lcd.createChar(3, customChar3);
  lcd.createChar(4, customChar4);
  lcd.createChar(5, customChar5);
  lcd.createChar(6, customChar6);
  lcd.createChar(7, customChar7);

После чего символ можно выводить на дисплей и повторно загружать не нужно. Но тут есть свое ограничение, записать можно только 8 символов. Также любой символ можно перезаписать.

Для вывода символов устанавливаем курсор. Например, в домашнюю позицию и выводим по порядку все символы.

  lcd.home();
  lcd.write(0);
  lcd.print(" ");
  lcd.write(1);
  lcd.print(" ");
  lcd.write(2);
  lcd.print(" ");
  lcd.write(3);
  lcd.print(" ");
  lcd.write(4);
  lcd.print(" ");
  lcd.write(5);
  lcd.print(" ");
  lcd.write(6);
  lcd.print(" ");
  lcd.write(7);

Вот так символы отображаются на дисплее LCD 1602 и LCD 2004.

Вот так символы отображаются на дисплее LCD 1602 и LCD 2004.


Но это не позволяет нам выводить русские буквы на дисплей LCD 1602 и LCD 2004. Для этого есть специально адаптированная библиотека с ней мы познакомимся в следующем уроке.

Но это не позволяет нам выводить русские буквы на дисплей LCD 1602 и LCD 2004.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#34. ЖК-дисплей LCD 1602 и LCD 2004. Подключение к Arduino. Основы. http://portal-pk.ru/news/312-zhk-displei-lcd-1602-i-lcd-2004-podklyuchenie-k-arduino-osnovy.html Константин Portal-PK 2021-06-24T20:13:11+03:00 Символьные ЖК-дисплеи LCD 1602 и LCD 2004 достаточно часто используются в Arduino проектах, благодаря большому размеру и относительно небольшой стоимости. Кроме этого с данными дисплеями достаточно просто работать. Сегодня в Arduino уроке рассмотрим основы работы с ЖК-дисплеями LCD 1602 и LCD 2004. Подключим lcd 1602 к Ардуино. И рассмотрим пару примеров скетчей, которые позволят вывести текстовую информацию на LCD 1602 и 2004.

Описание и классификация LCD 1602 и LCD 2004.

LCD 1602 дисплей еще называют символьным. Это связано с тем, что ЖК-дисплей разбит на области точек. На каждую такую область можно вывести 1 символ. В связи с чем дисплей данного типа подразделяется по количеству строчек и символов в строке. Например, 2 строки и 16 символов в каждой строке, данное значение указывается в названии дисплея 1602. По аналогии 20 символов и 4 строки это LCD 2004. Также есть и другое разрешение дисплея 0802, но у меня, к сожалению, нет таких маленьких дисплеев и продемонстрировать их я вам не смогу. Но работа с ними ничем не отличается от старших братьев.

LCD 1602 дисплей еще называют символьным.

Также можно выделить разный тип подсветки. Существуют дисплеи: синий фон белые буквы, зелёный фон чёрные буквы, чёрный фон белые буквы и проч. Я буду использовать, с синим фоном и белыми буквами.

Для урока понадобится:

LCD 1602 и LCD 2004 подключение к Ардуино.

Существует несколько вариантов подключения LCD 1602 или LCD 2004 к Ардуино по 4-бит или 8-бит параллельному интерфейсу. При таком подключении у нас будет задействовано 6 или 10 контактов Arduino, что неприемлемо при использовании Arduino UNO, Arduino NANO и подобных отладочных плат, в которых не так и много пинов, которые можно использовать.

Схема подключения LCD 1602 к Arduino UNO.

Схема подключения LCD 1602 к Arduino UNO.

Чтобы уменьшить количество проводов для подключения LCD 1602, используется плата PCF8574, которая позволяет подключить дисплей по I2C. Что уменьшает количество проводов до 2. Сегодня в уроке будем использовать подключение LCD 1602 и LCD 2004 к Arduino по I2C.

 LCD 1602 и LCD 2004 к Arduino по I2C

Схема подключения LCD 1602 к Arduino UNO по I2C с использованием PCF8574.

LCD 2004, LCD 1602 библиотека.

Для работы с дисплеем используется библиотека LiquidCrystal. Но в связи с тем, что мы будем использовать подключение LCD 1602 и LCD 2004 к Arduino по I2C. Библиотеку использовать будем другую LiquidCrystal_I2C. Которую можно скачать с GitHub. Или внизу статьи, в разделе «Файлы для скачивания».

После того как вы скачали архив с библиотекой. Заходим в Arduino IDE, открываем вкладку «Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку…»

LCD 2004, LCD 1602 библиотека.

В открывшемся окне выбираем скаченный архив. После чего вы увидите, что библиотека успешно установлена.

установились с библиотекой LiquidCrystal_I2C

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

примеры, которые установились с библиотекой LiquidCrystal_I2C

Описание библиотеки LiquidCrystal_I2C.

Описание библиотеки LiquidCrystal_I2C.

Перед тем как начать работать с дисплеем LCD 2004, LCD 1602 давайте рассмотрим библиотеку LiquidCrystal_I2C. Ниже приведены основные функции, которые необходимы для работы с дисплеем.

print(data);          // вывести (любой тип данных)
setCursor(x, y);      // курсор на (столбец, строка)
clear();              // очистить дисплей
home();               // аналогично setCursor(0, 0)
noDisplay();          // отключить отображение
display();            // включить отображение
blink();              // мигать курсором на его текущей позиции
noBlink();            // не мигать
cursor();             // отобразить курсор
noCursor();           // скрыть курсор
scrollDisplayLeft();  // подвинуть экран влево на 1 столбец
scrollDisplayRight(); // подвинуть экран вправо на 1 столбец
backlight();          // включить подсветку
noBacklight();        // выключить подсветку
createChar(uint8_t, uint8_t[]);                     // создать символ
createChar(uint8_t location, const char *charmap);  // создать символ

Пример кода вывода текста на LCD 1602 с использованием библиотеки LiquidCrystal.

Не смотря на то, что урок ориентирован на использование подключения дисплея по I2C. Рассмотрим пример подключения дисплея LCD 1602 подключённого по 4-битной параллельной шине. Для работы с дисплеем LCD2004 нужно изменить пятую строчку кода на lcd.begin(20, 4);

#include <LiquidCrystal.h>            //  Подключаем библиотеку LiquidCrystal для работы с LCD дисплеем
LiquidCrystal lcd(2,3,4,5,6,7);       //  Объявляем объект библиотеки, указывая выводы дисплея (RS,E,D4,D5,D6,D7)
                                      //  Если используется 8 проводов шины данных, то указываем (RS,E,D0,D1,D2,D3,D4,D5,D6,D7)
void setup(){                         //
    lcd.begin(16, 2);                 //  Инициируем работу с LCD дисплеем, указывая количество (столбцов, строк)
    lcd.setCursor(0, 0);              //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD2004");             //  Выводим текст "LDC1602", начиная с установленной позиции курсора
    lcd.setCursor(0, 1);              //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("arduino-tex.ru");     //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
}                                     //
                                      //
void loop(){}                         //  Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop

Пример вывода текста на LCD 2004, LCD 1602 с использованием библиотеки LiquidCrystal_I2C.

#include <LiquidCrystal_I2C.h>        //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2);     //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
                                      //  Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup(){                         //
    lcd.init();                       //  Инициируем работу с LCD дисплеем
    lcd.backlight();                  //  Включаем подсветку LCD дисплея
    lcd.setCursor(0, 0);              //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD");                 //  Выводим текст "LCD", начиная с установленной позиции курсора
    lcd.setCursor(0, 1);              //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("arduino-tex.ru");     //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
}                                     //
                                      //
void loop(){}                         //  Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop

Пример вывода текста на LCD 2004, LCD 1602 с использованием библиотеки LiquidCrystal_I2C.


Не смотря на то, что в примере будем использовать подключение LCD 1602 по I2C и библиотеку LiquidCrystal_I2C. Код не сильно изменится. Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C LCD (0x27,20,4);

Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C LCD (0x27,20,4);

Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C.

#include <LiquidCrystal_I2C.h>             //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,20,4);          //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 20, количество строк = 4)
                                           //
uint8_t  tim_D, tim_H, tim_M, tim_S;       //  Объявляем  переменные для хранения дней, часов, минут и секунд.
uint32_t tim;                              //  Объявляем  переменную для хранения общего количества времени прошедшего после старта.
                                           //  Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup(){                              //
 lcd.init();                               //  Инициируем работу с LCD дисплеем
    lcd.backlight();                       //  Включаем подсветку LCD дисплея
    lcd.setCursor(0, 0);                   //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD");                      //  Выводим текст "LCD", начиная с установленной позиции курсора
    lcd.setCursor(0, 1);                   //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("arduino-tex.ru");           //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
}                                          //
                                           //
void loop(){                               //
                                           //  Получаем время прошедшее после старта: 
    tim   =  millis()   / 1000;            //  Получаем общее количество секунд (максимум 4'294'967 сек ≈ 49,7 дней).
    tim_S =  tim        % 60;              //  Получаем секунды: остаток от деления всех секунд на минуту (60 сек).
    tim   = (tim-tim_S) / 60;              //  Получаем общее количество минут.
    tim_M =  tim        % 60;              //  Получаем минуты: остаток от деления всех минут на час (60 мин).
    tim   = (tim-tim_M) / 60;              //  Получаем общее количество часов.
    tim_H =  tim        % 24;              //  Получаем часы: остаток от деления всех часов на день (24 час).
    tim_D = (tim-tim_H) / 24;              //  Получаем общее количество дней.
                                           //  Выводим время прошедшее после старта: 
    if (millis()%1000<100){                //  Условие выполняется в течении 100 первых миллисекунд каждой новой секунды.
        delay(100);  lcd.setCursor(2, 2);  //  Устанавливаем курсор в позицию (0 столбец, 0 строка).
                     lcd.print("Days: ");  //  Выводим текст.
        if(tim_D<10){lcd.print( 0      );} //  Выводим 0 перед количеством дней.
                     lcd.print(tim_D   );  //  Выводим количество дней.
                     lcd.setCursor(0, 3);  //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
                     lcd.print("Time: ");  //  Выводим текст.
        if(tim_H<10){lcd.print( 0      );} //  Выводим 0 перед количеством часов.
                     lcd.print(tim_H   );  //  Выводим количество часов.
                     lcd.print(':'     );  //  Выводим символ.
        if(tim_M<10){lcd.print( 0      );} //  Выводим 0 перед количеством минут.
                     lcd.print(tim_M   );  //  Выводим количество минут.
                     lcd.print(':'     );  //  Выводим символ.
        if(tim_S<10){lcd.print( 0      );} //  Выводим 0 перед количеством секунд.
                     lcd.print(tim_S   );  //  Выводим количество секунд.
    }                                      //
}                                          //

Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C.

Если дисплей LCD 2004, LCD 1602 не отображает текст.

После того как вы всё сделали, подключили дисплей. Загрузили код. На дисплее могут не отображаться символы. Что может быть не так:

  • Если дисплей показывает чёрные прямоугольники или пустой экран – нужно отрегулировать яркость дисплея, это синий квадратный регулятор на задней стороне платы.
  • Если кроме чёрных прямоугольников и пустого экрана ничего не видно – меняем адрес в программе. Их всего два: 0x27 и 0x3F.
  • Если все равно не работает – проверяем подключение и повторяем сначала.

На этом урок про дисплеи LCD 2004, LCD 1602 заканчивается. В следующем уроке рассмотрим, какие символы есть в прошивке дисплея и как их вывести, а также создадим свои символы.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#33. Motor shield l293d подключение. Пример кода для Arduino http://portal-pk.ru/news/311-motor-shield-l293d-podklyuchenie-primer-koda-dlya-arduino.html Константин Portal-PK 2021-06-13T16:24:20+03:00 Робототехника с каждым годом становиться все популярнее. И поэтому количество электроники с помощью которой можно реализовать роботизированную модель достаточно много. А если у вас нет опыта работы с электроникой, вам отлично подойдёт Motor shield на базе драйвера l293d. Шилд устанавливается на плату Arduino UNO.

На shield выведены контакты для подключения двигателей постоянного тока, шаговых двигателей и сервоприводов. Я уже делал проект с использованием данного Motor shield. У вас, наверное, возник вопрос. Если шилд такой простой, почему у меня мало Arduino проектов с его использование? Это связанно со сложностью расширения функционала проекта при использовании Motor shield l293d. Но обо всём по порядку.

Motor shield l293d

Для урока понадодиться:

Технические параметры Motor shield l293d.

  • Напряжение питания двигателей: 5 — 36 В
  • Напряжение питания платы: 5 В
  • Допустимый ток нагрузки: 600 мА на канал
  • Максимальный (пиковый) ток нагрузки: 1,2 А на канал
  • Размер платы: 70х54х20 мм

Общие сведения о Motor shield L293D.

Motor shield построен на драйвере L293D, состоящим из двух H-мост (H-Bridge), с помощью которых можно управлять двумя постоянными двигателями или одним шаговым двигателем. Каждый канал рассчитан на 0.6 А с пиком 1.2 А. Так как на Motor shield установлено две микросхемы L293D, можно управлять сразу четырьмя двигателями постоянного тока, это позволяет использовать данный shield в разработке робот платформ. Так же, на shield установлен сдвиговый регистр 74HC595, который расширяет 4 цифровых контакта Arduino до 8 управляющих контактов двух микросхем L293D. Познакомиться подробнее со сдвиговым регистром 74HC595 можно в уроке: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни.

Питание Motor shield L293D


Питание Motor shield L293D:

  • Общий источник питания для Arduino и двигателей (максимальное напряжение 12 В) — можно использовать один источник питания, используется разъем DC на Arduino UNO или 2-х контактный разъем на Motor shield «EXT_PWR», так же необходимо установить перемычку «PWR».
  • Раздельный источник питания — рекомендуется отдельно питать Arduino и shield, для этого Arduino подключаем к USB, а двигатели подключаем к источнику постоянного тока, используя разъем «EXT_PWR». Необходимо убрать перемычку «PWR».

Внимание! Нельзя подавать питание на «EXT_PWR» выше 12 В, при установленной перемычке «PWR».

Выходные контакты двух микросхем L293D выведены по бокам shield с помощью 5-ти контактных винтовых клемм, а именно М1 , М2 , М3 и М4. К этим контактам подключается четыре двигателя постоянного тока и два шаговых двигателя.

Так же, на shield выведено два 3-х контактных разъема, к которым можно подключить два сервопривода.

Контакты, которые не используются Motor shield L293D:

Так как шилд устанавливается на Arduino UNO, есть контакты, которые не используются Motor shield и к ним можно подключить дополнительные компоненты. Это цифровые контакты D2 и D13 и аналоговые контакты A0-A5. Кроме этого на шилде можно распаять пины A0-A5 и подключаться к ним прямо на shield.

Подключение к Motor shield L293D двигателя постоянного тока.

Подключение к Motor shield L293D двигателя постоянного тока.


Схема подключения двигателя постоянного тока к Motor shield.

Схема подключения двигателя постоянного тока к Motor shield.

Устанавливаем shield сверху Arduino, далее подключаем источник питания к клеммам «EXT_PWR», в примере используется источник питания на 12 В. Теперь подключаем двигатели к клеммам M1, M2, M3 или M4. В примере подключаем 2 двигателя постоянного тока к М4, М3.

Установка библиотеки «AFMotor.h»

Для удобной работы с Motor shield L293D, необходимо установить библиотеку «AFMotor.h». Заходим в Arduino IDE, открываем вкладку «Скетч -> Подключить библиотеку -> Управлять библиотеками…»

Установка библиотеки «AFMotor.h»

Откроется новое окно «Менеджер библиотек», в окне поиска вводим «Adafruit Motor Shield» и устанавливаем библиотеку.

«Adafruit Motor Shield» и устанавливаем библиотеку

Скетч управления двигателем постоянного тока с помощью Motor shield L293D.

#include <AFMotor.h>      // Подключаем библиотеку AFMotor
AF_DCMotor motor4(4);      // Указываем какому порту подключен двигатель (1 - 4)
AF_DCMotor motor3(3);      // Указываем какому порту подключен двигатель (1 - 4)
void setup()
{
  motor3.setSpeed(100);    // Начальная скорость вращения
  motor3.run(RELEASE);     // Останавливаем двигатель
  motor4.setSpeed(50);    // Начальная скорость вращения
  motor4.run(RELEASE);     // Останавливаем двигатель
}
void loop()
{
  /* Вращение двигателя вперед*/
  motor3.run(FORWARD);
  for (int i = 0; i < 255; i++) // Ускоряем двигатель от 0 до 255
  {
    motor3.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  for (int i = 255; i != 0; i--) // Замедляем двигатель от 255 до 0
  {
    motor3.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  /* Останавливаем двигатель*/
  motor3.run(RELEASE);
  delay(1000);            // Пауза
  /*Вращение двигателя назад*/
  motor4.run(BACKWARD);
  for (int i = 0; i < 255; i++) // Ускоряем двигатель от 0 до 255
  {
    motor4.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  for (int i = 255; i != 0; i--) // Замедляем двигатель от 255 до 0
  {
    motor4.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  /* Останавливаем двигатель*/
  motor4.run(RELEASE);
  delay(1000);            // Пауза
}

Описание кода:

Скетч начинается с подключения библиотеки «AFMotor.h», затем создаем объект «AF_DCMotor motor4(4)» в котором указываем номер порта двигателя (M1, M2, M3, M4). Для подключения второго двигателя «AF_DCMotor motor3(3)» и так далее.

#include <AFMotor.h>      // Подключаем библиотеку AFMotor
AF_DCMotor motor4(4);      // Указываем какому порту подключен двигатель (1 - 4)
AF_DCMotor motor3(3);      // Указываем какому порту подключен двигатель (1 - 4)

В блоке «setup» мы вызываем функции «setSpeed(speed)» в которой задаем скорость двигателя, от 0 до 255 и функцию «motor.run» направление вращения двигателя, где «FORWARD» — вперед, «BACKWARD» — назад, «RELEASE» — остановка.

  motor3.setSpeed(100);    // Начальная скорость вращения
  motor3.run(RELEASE);     // Останавливаем двигатель
  motor4.setSpeed(50);    // Начальная скорость вращения
  motor4.run(RELEASE);     // Останавливаем двигатель

Подключение сервопривода к Motor shield L293D.

Подключение сервопривода к Motor shield L293D.

Для этого нам понадобятся следующие комплектующие:

С помощью shield L293D можно управлять сервоприводами. На shield выведены 16-разрядные контакты Arduino 9 и 10, питание для сервоприводов подается от 5 вольтового стабилизатора Arduino, поэтому подключать дополнительное питание в разъем «EXT_PWR» не нужно.

Схема подключения сервопривода SG90S к Motor shield.

Схема подключения сервопривода SG90S к Motor shield.

Скетч управления сервопривода SG90S.

#include <Servo.h>    // Подключаем библиотеку Servo
Servo myservo;        // Создаем объект 
void setup() 
{
  myservo.attach(10); // Указываем к какому порту подключен вывод сервопривода
}
void loop() 
{
  for(int i = 0; i <= 180; i++)        // Увеличиваем угол от 0 до 180
  {
    myservo.write(i);                  // Передаем данные
    delay(15);                         // Пауза 
  }
  for(int i = 180; i>=0; i--)    // Уменьшаем угол от 180 до 0
  {
    myservo.write(i);              // Передаем данные
    delay(15);                       // Пауза 
  }
}

Так как используется стандартный вывод PWM, нет смысла использовать дополнительную библиотеку, воспользуемся стандартной библиотекой Servo.

#include <Servo.h>    // Подключаем библиотеку Servo
Servo myservo;        // Создаем объект

Урок по работе с сервоприводом можно почитать тут: Подключает servo-привод к arduino. Сервопривод + кнопка.

Подключение к Motor shield L293D шагового двигателя NEMO17.

Подключение к Motor shield L293D шагового двигателя NEMO17.

Для этого нам понадобятся следующие комплектующие:

В данном примере подключим шаговый двигатель NEMA 17, который рассчитан на 12 В (и выше) и делает 200 шагов на оборот. Итак, подключите шаговый двигатель к клеммам M3 и M4. Затем подключите внешний источник питания 12 В к разъему «EXT_PWR».

Схема подключения шагового двигателя Nemo17 к Motor shield L293D.

Схема подключения шагового двигателя Nemo17 к Motor shield L293D.

Скетч управления шаговым двигателем Nemo17 с помощью Motor shield L293D.

#include <AFMotor.h>                      // Подключаем библиотеку AFMotor
const int stepsPerRevolution = 200;       // Указываем количество шагов на 1 оборот двигателя

AF_Stepper motor(stepsPerRevolution, 2);  // Указываем что двигатель подключен к портам №2 (М3 - М4)

void setup()
{
  motor.setSpeed(10);                     // Скорость двигателя в минуту
}

void loop() {
  motor.step(100, FORWARD, SINGLE);
  motor.step(100, BACKWARD, SINGLE);

  motor.step(100, FORWARD, DOUBLE);
  motor.step(100, BACKWARD, DOUBLE);

  motor.step(100, FORWARD, INTERLEAVE);
  motor.step(100, BACKWARD, INTERLEAVE);

  motor.step(100, FORWARD, MICROSTEP);
  motor.step(100, BACKWARD, MICROSTEP);
}

Используем ту же библиотеку, что и в первом примере.

Описание кода:

Скетч начинается с подключением библиотеки «AFMotor.h». Во второй строке создаем объект «AF_Stepper motor(48, 2)» где указываем количество шагов на оборот и номер порта.

#include <AFMotor.h>                      // Подключаем библиотеку AFMotor
const int stepsPerRevolution = 200;       // Указываем количество шагов на 1 оборот двигателя

В разделе настройки, функцией «motor.setSpeed(10);» устанавливает скорость двигателя, где «10» количество оборотов в минуту.

motor.setSpeed(10);

В разделе цикла программы, мы просто вызываем две функции для управления скоростью и направлением вращения двигателя.

motor.step(100, FORWARD, SINGLE); 
motor.step(100, BACKWARD, SINGLE);
  • «100» — это сколько шагов, необходимо сделать.
  • «FORWARD» и «BACKWARD» — направление вращение двигателем.
  • «SINGLE» — активация одной обмотки двигателя для совершения шага.
  • «DOUBLE» — активация двух обмоток двигателя, что обеспечивает больший вращающий момент
  • «INTERLEAVE» — применение ШИМ для управления шаговым двигателем двигателем.

Для начинающего Ардуинщика Motor shield L293D

Вывод по использованию Motor shield L293D.

Для начинающего Ардуинщика Motor shield L293D позволит реализовать роботизированную модель. Но реализовать более серьёзные проекты не получится. Так как свободных pin для подключения остается не много. Что еще мне не нравится в данном shield это то, что пины для shield заняты всегда, даже если мы подключили 2 двигателя постоянного тока. А другая пара подключения свободна, пины Arduino все равно будут заняты, и мы не сможем их использовать. Это наглядный пример того, что использования данного шилда не является универсальным и гибким решением.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Проект на дисплее Nextion и Arduino. 8 уроков Nextion по реализации проекта http://portal-pk.ru/news/310-proekt-na-displee-nextion-i-arduino-8-urokov-nextion-po.html Константин Portal-PK 2021-06-07T19:31:39+03:00 Недавно реализовал проект на дисплее Nextion и Arduino. И на основе данного проекта сделал 8 уроков, в которых поэтапно рассказываю о возможностях сенсорного экрана Nextion.

Управление подсветкой на адресных светодиодах WS2812 с дисплея Nextion

Проект позволяет управлять подсветкой на адресных светодиодах, что дает возможность использовать большое количество световых эффектов. Библиотека, которую использую в проекте, имеет более 50 предустановленных эффектов. Как ими пользоваться рассказываю в уроках. Также можно самостоятельно сделать дополнительные эффекты и управлять светом с помощью сенсорного дисплея Nextion.

Урок Nextion дисплей на русском.

Урок 1 - Скачать и установить Arduino IDE, Nextion Editor

Урок 2 - Подготовка графики для дисплея Nextion в Inkscape

Урок 3. Кнопка Dual state Nextion Включаем выключаем подсветку.

Урок 4 Button Nextion Управление яркостью, переключение режимов

Урок 5. Передаем информацию с Arduino на дисплей Nextion

Урок 6. Клавиатура дисплей Nextion. Timer, перенаправление на страницы.

Бонусный урок.

Урок 8. Slider Nextion - управление яркостью подсветки (обзор)

Видео урок по работе со слайдером в Nextion Editor доступен подписчикам на сайте boosty или YouTube.

В дальнейшем планирую реализовать ряд проектов с использованием дисплея Nextion, а также планирую снять дополнительные уроки Nextion.

Понравилась новость Проект на дисплее Nextion и Arduino. 8 уроков Nextion по реализации проекта? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
#32. Подключение термопары К-типа к Arduino с помощью модуля max6675. http://portal-pk.ru/news/309-podklyuchenie-termopary-k-tipa-k-arduino-s-pomoshchyu-modulya.html Константин Portal-PK 2021-06-04T10:45:08+03:00 Для измерения высоких температур обычные датчики, такие как DS18B20, термистор – не подойдут. Высокие температуры можно измерять с помощью термопары. Но как ее подключить к Arduino? Для решения данной проблемы есть недорогой модуль max6675 который позволяет преобразовать аналоговый сигнал в цифровой. Полученное цифровое значение считывает Arduino, таким образом, мы получаем показание с термопары К-типа. А сейчас подробно разберемся, что такое термопара К-типа и как подключить модуль max6675 к Arduino.

подключить модуль max6675 к Arduino


Что такое термопар. Характеристики термопары K-типа.

Термопара – это термоэлектрическое устройство замкнутой цепи, чувствительное к температуре, которое состоит из двух проводников, выполненных из разнородных металлов. Электрический ток создается, когда температура на одном конце или спае, отличается от температуры на другом конце. Это явление носит название эффект Зеебека, который является основой измерения температуры с помощью термопар.

Что такое термопар. Характеристики термопары K-типа.

Существует много типов термопар, в которых используются различные сочетания металлов. Эти сочетания имеют разные выходные характеристики, которые определяют диапазон температур, в котором можно применять ту или иную термопару, и соответствующий выходной сигнал напряжения.

Термопары K-типа (хромель – алюмель).

Хромель (Chromel) – это сплав, состоящий на 90% из никеля и на 10% из хрома, а Алюмель (Alumel) – это сплав, содержащий 95% никеля, 2% марганца, 2% алюминия и 1% кремния. Термоэлектрод из сплава Chromel имеет положительный потенциал относительно термоэлектрода из сплава Alumel.

Термопары K-типа

Это недорогие термопары, их диапазон измеряемых температур составляет от -270°C до +1372°C и характеристика относительно линейна. Такие термопары можно использовать в постоянно окислительных или нейтральных средах.

Корпус термопары, который используется в нашем примере, рассчитан на температуру до 600 °C, значит и измерения необходимо производить в диапазоне от 0 до 600 °С.

Описание модуля max6675.

Описание модуля max6675.

Модуль преобразователя MAX6675 поставляется как вместе с термопарой, так и отдельно. Немного расскажу о самом модуле, на котором установлена одна микросхема MAX6675ISA фирмы Maxim Integrated Products конденсатор и пару разъемов. Микросхема имеет 12 битный АЦП, SPI интерфейс и точность микросхемы 0,25°C (это точность самой микросхемы, у термопары точность другая). Если необходима более подробная информация о микросхеме MAX6675, можете воспользоваться документаций, скачать можно внизу статьи.

Характеристики модуля max6675:

  • Тип преобразователя: аналогово-цифровой (АЦП) с компенсацией холодного спая;
  • Разрядность преобразователя: 12 бит;
  • Шаг измерения: 0,25°C;
  • Точность: 1,5°C;
  • Интерфейс подключения к контроллеру: SPI;
  • Напряжение питания: 3 – 5,5 В постоянного тока;
  • Габариты модуля: 32 x 15 x 14 мм;
  • Тип термопары: К (хромель-алюмелевая);
  • Диапазон измеряемой температуры: 0 – +600°С;
  • Диаметр резьбы термопары: 6 мм;
  • Длина резьбы термопары: 13 мм;
  • Длина кабеля термопары: 50 см;
  • Вес комплекта: 25 г.

Для подключения модуля MAX6675 к микроконтроллеру используется интерфейс SPI, для этого на модуле выведен пяти контактный разъем, назначение каждого вывода приведено ниже.

Назначение контактов:

  • GND – «-» , питание модуля;
  • VCC – «+», питание модуля;
  • SCK –тактовые импульсы;
  • CS – вывод интерфейс SPI;
  • SO – вывод интерфейс SPI.

MAX6675 подключение к Arduino.

Для урока понадодиться:

Схема подключения MAX6675 к Arduino UNO.

Схема подключения MAX6675 к Arduino UNO.

Подключаем питание, выводы VCC и GND (модуля MAX6675) подключаем к выводам +5В и GND (Arduino). Теперь можно подключить интерфейс ISP, для этого выводы SCK, CS, SO (модуля MAX6675), подключаем к выводам 2, 3, 4 (Arduino).

Установка библиотеки MAX6675.

Для работы с модулем необходимо установить библиотеку MAX6675. Для этого запускаем программу Arduino IDE и выбираем «Скетч -> Подключить библиотеку -> Управлять библиотеками…»

 установить библиотеку MAX6675

В открывшемся окне ищем «MAX6675» и устанавливаем библиотеку. Сейчас можно приступить к коду для Arduino.

 ищем «MAX6675» и устанавливаем библиотеку

Скетч MAX6675 + Arduino считывания показаний с термопары и вывод значений в монитор порта.

Данный пример кода просто считывает показание с термопары и выводит значение в монитор порта.

// Подключаем библиотеку 
#include "max6675.h"

int thermoDO = 4; // Указываем к какому пину подключен SO
int thermoCS = 5; // Указываем к какому пину подключен CS
int thermoCLK = 6; // Указываем к какому пину подключен SCK

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

void setup() {
  Serial.begin(9600); // Открытие последовательного порта на скорости 9600

  Serial.println("MAX6675 test");
   // Отправка текста
  delay(500);
}

void loop() {
  
   Serial.print("C = "); // Отправка текста в последовательный порт
   Serial.println(thermocouple.readCelsius()); // Чтение и отправка температуры в последовательный пор

   delay(1000);
}

Вот такое значения температуры с термопары мы увидим в мониторе порта.

Вот такое значения температуры с термопары мы увидим в мониторе порта.

В данном уроке мы рассмотрели основы работы с термопарой и модулем MAX6675. У меня есть несколько реализованных проектов с использованием термопары, вот один из нихАвтоматизация вакуумного пресса на Arduino и дисплее Nextion.

В следующих Arduino Уроках рассмотрим, как автоматически регулировать температуру с помощью IRF520 MOSFET.

В следующих Arduino Уроках рассмотрим, как автоматически регулировать температуру с помощью IRF520 MOSFET.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Вентиляция и кондиционирование производственных помещений http://portal-pk.ru/news/308-ventilyaciya-i-kondicionirovanie-proizvodstvennyh.html Константин Portal-PK 2021-05-05T18:57:04+03:00 Вентиляция - важнейший элемент в производственных помещениях. Ведь не только для материала, хранящегося на складах, нужно поддерживать приемлемую влажность и температуру окружающей среды, но и для людей, работающих на производстве, должны создаваться приемлемые условия для труда.

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

Оптимальным уровнем влажности для складских помещений является примерно 50-70 %, а температура должна поддерживаться в среднем в диапазоне от -10 до 30 градусов. А для работников влажность 40-60 % и температура 23-25 градусов соответственно. Не стоит забывать и о содержании углекислого газа в воздухе. Ведь если в помещениях переизбыток углекислого газа, продуктивность работников падает.

Оптимальным уровнем влажности для складских помещений является примерно 50-70 %

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

Кондиционеры Раменское, Жуковский, Люберцы и другие регионы в Московской области


Кондиционеры Раменское, Жуковский, Люберцы и другие регионы в Московской области используют системы с ионизаторами. Данный тип кондиционеров придает отрицательный заряд пыли, вследствие чего она оседает на поверхности и не остается в воздухе, что делает окружающую среду чище.

Правильный выбор систем кондиционирования и вентиляции

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

Понравилась новость Вентиляция и кондиционирование производственных помещений? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Раскрой гофрокартона на ЧПУ. http://portal-pk.ru/news/307-raskroi-gofrokartona-na-chpu.html Константин Portal-PK 2021-04-26T19:08:43+03:00 Сегодня мы с вами поговорим об упаковочных материалах и способах их резки. Упаковочные материалы - неотъемлемая часть жизни человека. Но в связи с тем, что большинство упаковок изготавливаются из пластмассы, наша с вами планета очень сильно загрязняется. Поэтому стоит бережнее относиться к выбору упаковок.

Из него изготавливается: гофротара, гофроящики и гофрокоробки.

На рассмотрении у нас такой материал, как гофрокартон. Из него изготавливается: гофротара, гофроящики и гофрокоробки. Это экологически чистый материал, который не загрязняет окружающую среду.

Гофрокартон можно резать несколькими способами:

  • При помощи ЧПУ плоттера. Плоттерная резка достаточно популярна, позволяет за короткий срок вырезать изделия в штучном экземпляре. Бюджетная, так как плоттер относительно недорогой станок. Плоттерная резка оставляет гладкие края, отсутствуют какие-либо заусенцы, по сравнению с ручной резкой.

При помощи ЧПУ плоттера. Плоттерная резка достаточно популярна

  • При помощи ЧПУ лазерного гравера. Данный способ нарезания гофрокартона выгоден при производстве большого количества одинаковых изделий, но в то же время сам станок обходится в большую стоимость. В качестве резака используется лазер, прожигающий гофрокартон, вследствие чего края изделия остаются ровными.

При помощи ЧПУ лазерного гравера. Данный способ нарезания гофрокартона

Если вы занимаетесь производством и последующей упаковкой своей продукции, задумайтесь об более экологически чистой упаковке.

Понравилась новость Раскрой гофрокартона на ЧПУ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Байкал русские микропроцессоры http://portal-pk.ru/news/306-baikal-russkie-mikroprocessory.html Константин Portal-PK 2021-04-23T13:45:03+03:00 Байкал Электроникс - российская компания, которая занимается разработкой и производством процессоров. Сегодня обсудим один из их продуктов. Да, это немного не по нашей теме, мы не затронем темы Arduino. Но процессор, который будет рассмотрен сегодня, может использоваться как управляющее устройство станков и принтеров.

Байкал Электроникс - российская компания

Поговорим же мы о процессоре Baikal-T1. Позиционируется же он как “first russian processors” предназначенный для использования в сетевых устройствах, таких как маршрутизаторы, а также для устройств промышленной автоматики.

first russian processors

На борту Baikal-T1 два 32-х битных процессорных ядра P5600, и изготовлен по 28 нм техпроцессу. Имеет производительность в 4 гигафлопса, что вполне будет достаточно для всяческих сетевых устройств и станков. Имеет всего два ядра и работает на частоте 1.2 МГц, что делает его энергоэффективным, с энергопотреблением в 5 Вт.

На данный момент уже имеется множество устройств, работающих под управлением Baikal-T1. Буквально в позапрошлом году был выпущен универсальный маршрутизатор NSG-3060. А самым первым продуктом, была система управления ЧПУ станками «Ресурс-30».

система управления ЧПУ станками «Ресурс-30»

У процессоров есть огромный потенциал, поэтому будем ждать, когда все больше и больше устройств будет работать на отечественных процессорах от компании Байкал Электроникс.

Понравилась новость Байкал русские микропроцессоры? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Проекты самодельных ЧПУ станков. http://portal-pk.ru/news/305-proekty-samodelnyh-chpu-stankov.html Константин Portal-PK 2021-04-19T08:00:29+03:00 Станки на протяжении многих лет облегчают человеку работу. А с появлением числового программного управления, производство можно полностью автоматизировать. Но вот цена у заводских решений достаточно велика, поэтому мы сегодня с вами поговорим о том, какие ЧПУ станки можно сделать своими руками.

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

Для управления ЧПУ изначально купил комплект Mega2560 R3 + RAMPS 1.4+ DVR8825 + 2004 LCD .

Маленькое отступление. Не забывайте, при работе с ЧПУ станками не стоит пренебрегать техникой безопасности. Ведь “Охрана труда” была написана не просто так. Не стоит забывать о защите глаз, при работе с лазером. И будьте аккуратнее с движущимися частями станков.

Как первый станок можно собрать ЧПУ плоттер. Достаточно недорогой и простой в изготовлении. Данный станок позволит вам рисовать красивые картинки, собирается же из подручных материалов.

собрать ЧПУ плоттер

Следующий на очереди - лазерный ЧПУ гравер. Еще один станок, который прост в сборке. Но он уже не рисует, а выжигает линии, создавая из них рисунки. А если использовать достаточно мощный лазер, можно и “вырезать” какие-либо детали.

лазерный граверЛибо же можно собрать ЧПУ фрезерный станок. Который с легкостью сможет вырезать деталь, и уже не нужно тратить свое время на выпиливание их лобзиком вручную.

Вот такой самодельны фрезерный ЧПУ станок с дисплеем получился.

Перед приобретением заводского решения, рекомендую собрать ЧПУ станок своими руками. Это даст вам начальное понимание тех или иных механизмов. И вы запросто сможете выбрать подходящий вам станок.

Понравилась новость Проекты самодельных ЧПУ станков? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Установка Arduino IDE в Windows 10. http://portal-pk.ru/news/304-ustanovka-arduino-ide-v-windows-10.html Константин Portal-PK 2021-04-14T11:11:43+03:00 Для работы с Arduino требуется программа Arduino IDE, сегодня поговорим об ее установки в Windows 10. Назовем плюсы и минусы разных способов, и обсудим вопрос почему тормозит компьютер.

Есть 3 способа, как установить Arduino IDE в Windows 10:

  • Самый простой и желательный способ установки. Заключается он в том, что Arduino IDE будем устанавливать через установщик. На официальном сайте находим кнопку “WINDOWS Win 7 and newer” и нажимаем на нее, у нас скачивается приложение, открываем его и устанавливаем как любое приложение, выбирая место установки.

Установка Arduino IDE через .zip файл

  • Установка Arduino IDE через .zip файл. На официальном сайте нужно найти кнопку “WINDOWS ZIP file” нажимаем на нее, ждем скачивание, открываем архив через WinRAR, либо же другой архиватор, устанавливаем, выбирая место установки. Но в этом способе придется вручную устанавливать драйвера. Чтобы установить драйвера, переходим по пути “Пуск -> Панель управления -> Оборудование”.

Находим Arduino Leonardo

Находим Arduino Leonardo, и выполняем поиск драйверов “на моем компьютере”, папку, в которой находятся драйвера, мы установили вместе с архивом, находим ее и устанавливаем драйвера.

установить Arduino IDE можно из магазина Windows

  • Самый нежеланный из способов, установить Arduino IDE можно из магазина Windows. Ведь установщик предоставит вам старую версию программы.

Установка и настройка Arduino IDE.

Arduino и операционная система Windows вам необходимо поставить дополнительный драйвер ch340 driver

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

Установка драйвера ch340 для Windows.

  1. Скачайте драйвер.
  2. Распакуйте архив
  3. Запустите исполнительный файл CH341SER.EXE
  4. В открывшемся окне нажмите кнопку Install
  5. На этом установка завершена

В других операционных системах такой проблемы нет. Можно подключать и перепрошивать.

На плате увидим мигающий светодиод. Почему может тормозить компьютер? Это может быть связано с несколькими вещами. Системный блок в пыли и перегревается. Может не хватать “железа” для работы с Windows 10. Либо же на вашем компьютере много вирусов. Следите за своими аппаратами и “лечите” их вовремя.

Понравилась новость Установка Arduino IDE в Windows 10? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Аренда микроавтобусов и экскурсии в городе Санкт-Петербург. http://portal-pk.ru/news/303-arenda-mikroavtobusov-i-ekskursii-v-gorode.html Константин Portal-PK 2021-04-12T16:58:23+03:00 Санкт-Петербург является одним из самых красивых городов России. Обладает большим количеством достопримечательностей со своей историей. Из-за своих размеров, город будет интересен как туристам, так и местным жителям.

Галант занимается пассажирскими перевозками, и на рынке находятся уже на протяжении 18 лет. Предоставляют множество услуг в области перевозок и аренды транспортных средств. У них вы можете заказать проведение экскурсий по Санкт-Петербургу, и на протяжении нескольких часов наслаждаться достопримечательностями города и комфортом. Это прекрасный шанс организовать экскурсию по городу для детей, поездка оставит кучу эмоций и даст некоторые знания об истории города.

Аренда микроавтобусов и экскурсии в городе Санкт-Петербург.

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

Если вдруг вы хорошо отдохнули со своими друзьями или коллегам, а приехали на мероприятие на своем личном автомобиле, у Галант вы можете воспользоваться услугой трезвый водитель. Профессиональный водитель, со стажем более 10 лет доставит вас любую точку Санкт-Петербурга.

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

Галант организовывает рейсы из Санкт-Петербурга в ближайшие города Финляндии

Давно хотели побывать в Финляндии, но не знали как добраться? Галант организовывает рейсы из Санкт-Петербурга в ближайшие города Финляндии, а во время Рождественских и школьных каникул, действуют праздничные скидки. Это хороший повод отправиться всей семьей на отдых.

А если же вы переезжаете, можете арендовать Грузо-пассажирское такси, которое поможет вам в перевозке крупногабаритных предметов. Доставка осуществляется на автомобиле IVECO Daily.

А если вы являетесь обладателем Hyundai Grand Starex, обращаясь в Галант, вы можете провести техническое обслуживание, где вам заменять все расходники по выгодной цене, а одним из преимуществ является то, что обслуживание производится только оригинальными запчастями. За обслуживанием вы можете обратиться по адресу наб.Обводного канала д.209.

Заказать подачу авто

Заказать подачу авто, вы можете на их официальном сайте, как онлайн, на сайте Miniventaxi.ru, так и по номеру телефона +7(911) 234-99-99. Подача автомобиля осуществляется в течение получаса.

]]>
Гнутый ходовой винт из Китая для ЧПУ. Что делать? http://portal-pk.ru/news/302-gnutyi-hodovoi-vint-iz-kitaya-dlya-chpu-chto-delat.html Константин Portal-PK 2021-04-11T15:24:41+03:00 Недавно решил собрать себе новый ЧПУ фрезерный станок на ходовых винтах. Заказывал их из Китая. Пришло относительно быстро, но еще с самого начала все пошло не по плану. По ошибке продавца мне пришел винт не с тем шагом, но благо выплатили компенсацию за ошибку.

Заказывал все ходовые винты с шагом 2 мм.Сборка продвигалась хорошо, а когда уже все собрал, обнаружилась еще одна неисправность. Один из двигателей по ось Y закусывает, а причиной всему этому гнутый ходовой вид. На первый взгляд ели заметно, что с винтом что-то не так, но при работе видно степень изогнутости.

Так как же я вышел из этого положения? Для выравнивания понадобится не так много, использовал две струбцины и три фанерки одинаковой толщины. Для проведения операции, пациент на рабочем столе закрепляется следующим образом: укладывается две фанерки в одной плоскости. Сверху помещается ходовой винт, располагаясь выгнутостью вверх.

добавлю других изгибов в месте жесткой фиксации валаС одной из сторон на него кладется еще одно фанерка и притягивается струбциной к столу. Второй же оставшийся струбциной прижимаем выгнутость. Потихоньку, за несколько подходов выравнивая каждую волну.


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

Понравилась новость Гнутый ходовой винт из Китая для ЧПУ. Что делать? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Автоматизация газовых котлов на Arduino. http://portal-pk.ru/news/301-avtomatizaciya-gazovyh-kotlov-na-arduino.html Константин Portal-PK 2021-04-10T19:00:48+03:00 Каждый кто живет в квартире или в доме с газовой системой отопления, на газовых котлах, задумывался хоть раз, а как же можно автоматизировать систему отопления? Сегодня мы поговорим о том, что можно было бы сделать на Arduino, чтобы облегчить себе жизнь. Какие бы функции могла выполнять Arduino.

Каждый кто живет в квартире или в доме с газовой системой отопления, на газовых котлах

Начнем с самого простого, что можно было бы сделать. Автоматическое включение котла по разнице температур. Как это все могло бы работать. Допустим, нормальная температура в помещении должна составлять +23 градуса, и не должна опускаться ниже +20 градусов. Реализация достаточно проста, устанавливается один датчик в доме и настраивается уровень температур, при которых Arduino будет либо включать котел, либо отключать его.

Большинство газовых котлов подвергаются таким модернизациям, такие как Vaillant, Ferroli, BAXI, и множество других. Но также стоит следить и за другой бытовой техникой, не забывать про запчасти к газовой плите индезит, к холодильникам, стиральным машинам и другой бытовой технике, своевременный ремонт обеспечивает длительную и качественную работу.

К Arduino можно добавить экран и выводить температуру в помещении.

К Arduino можно добавить экран и выводить температуру в помещении. Добавив еще парочку датчиков, мы уже сможем контролировать и температуру горячей воды, время работы котла в режиме отопления. Можно установить датчик температуры на улице и настроить включение котла, при низкой температуре на улице, а не чтобы он включался при температуры улице +18.

Еще можно придумать множество способов автоматизировать газовые котлы, все зависит от вашей фантазии.

Понравилась новость Автоматизация газовых котлов на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
MP3 плеер на Arduino. http://portal-pk.ru/news/300-mp3-pleer-na-arduino.html Константин Portal-PK 2021-04-09T19:16:14+03:00 Прослушивание музыки для современного человека является неотъемлемой частью его жизни. Пока едем в машине или в общественном транспорте, мы слушаем музыку. Едем с работы и тоже слушаем музыку. Когда прогуливаемся по торговым центрам, на прогулке, в тренажерном зале. Музыка нас окружает везде.

Эти комплектующие пригодятся при сборе часов с сенсорным дисплеемПоговорим сегодня о MP3 плеере и сделаем его своими руками на Arduino. Это будет достаточно простой плеер с небольшим количеством функций, но которых будет достаточно для домашнего использования. Для изготовления его нам понадобится: Arduino UNO или Arduino NANO, DFPlayer Mini в который мы будем вставлять флешку, динамик, несколько резисторов на 10 кОм, парочка кнопок, а также плата, на которой мы будем это все собирать.

rduino UNO или Arduino NANO, DFPlayer Mini

Arduino у нас будет выполнять роль переключающего устройства, будет поддерживать связь с DFPlayer Mini. А сам плеер выступает как усилитель и будет воспроизводить музыку.

Для оценки качество звучания, можете послушать данный трек, который может вам понравится «VAVAN Не корона бро».

На флешке же вы можете хранить до 99 папок с музыкой и быстро переключаться между нужными вам, включая музыку под настроение. Либо же использовать данный плеер в связке с усилителем, применяя его на мероприятиях, где нужно выбирать определенную музыку в определенное время.

Arduino у нас будет выполнять роль переключающего устройства, будет поддерживать связь с DFPlayer Mini.

Проект получается легко повторимым, не трудозатратным и достаточно дешевым в изготовлении.

Понравилась новость MP3 плеер на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Технологии печати домов на 3D принтере. http://portal-pk.ru/news/299-tehnologii-pechati-domov-na-3d-printere.html Константин Portal-PK 2021-04-09T14:46:42+03:00 Технологии 3D печати с каждым годом только улучшаются и модернизируются. Сейчас уже у каждого 10-15 человека есть свой 3D принтер. И вот относительно недавно только говорили все, о том, что в скором будущем дома будут строить роботы за нас. Можно считать, что это самое будущие наступило.

Сегодня поговорим о печати домов на 3D принтере. Как и при любой другой печати, для постройки дома требуется 3D модель, а вместо пластика, как мы все привыкли, используют быстротвердеющий бетон.

Сегодня поговорим о печати домов на 3D принтере.

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

Строительные принтеры разнообразны по своей конструкции, но почти все они похожи на своих младших братьев. Различают XYZ-принтеры, Дельта, D-Shape и роботизированные манипуляторы.

XYZ-принтеры.

XYZ-принтеры.

Самая распространённая технология печати, среди младших моделей. Принтер представляет собой раму с тремя осями, и одной печатающей головкой, закрепленной на оси Z. Используются для печати внутренних стен и для изготовления домов по частям.

Дельта.

Дельта.

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

D-Shape.

D-Shape в отличие от предыдущих принтеров

D-Shape в отличие от предыдущих принтеров, печатает порошковым материалом, который затем пропитывается связующим веществом.

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

Понравилась новость Технологии печати домов на 3D принтере? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Игра мафия на Arduino. http://portal-pk.ru/news/298-igra-mafiya-na-arduino.html Константин Portal-PK 2021-04-08T10:53:33+03:00 Недавно мы с друзьями собрались большой компанией, все прекрасно общались между собой и веселились. Кто-то из друзей предложил сыграть в мафию. Я помнил, что у меня где-то были карты, но так их и не нашел. Поэтому я не придумал ничего лучше, кроме как сделать выдачу ролей на Arduino.

Давайте сначала разберемся, что такое мафия и что нам нужно от Arduino. Мафия - карточная игра, в которой, как минимум, должны быть:

  • Шериф,
  • Комиссар,
  • Лекарь,
  • Мафия,
  • Мирные жители.

А так как эта игра очень увлекательная, наверняка кто-то из компании может проголодаться, поэтому о еде нужно подумать заранее.

выполнена на Arduino, модуле KY-009 RGB

Если говорить вкратце, задача мафии убить всех, а мирные должны убить, либо исключить мафию. Вся наша игра будет выполнена на Arduino, модуле KY-009 RGB, парочке тактовых кнопок, аккумулятора и DC-DC повышающего преобразователя.

Обозначим цвета для каждой из ролей:

  • Шериф -синим цветом.
  • Комиссар - фиолетовым.
  • Лекаря - белым.
  • Мафии - красный.
  • Мирные жители будут зеленого цвета.

Выдача ролей будет производиться при нажатии кнопки.

что такое мафия и что нам нужно от Arduino

Настройку количества людей и число каждой из ролей тоже будет производиться с помощью кнопок, одна для входа в меню, другие две настройки, кол-во выбранных ролей будет информироваться миганием светодиода.

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

светодиод цветом роли

Можно модернизировать эту схему и добавить в нее множество всего, экспериментируйте и удачной вам игры!

Понравилась новость Игра мафия на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Авиамодели с управлением на Arduino. http://portal-pk.ru/news/297-aviamodeli-s-upravleniem-na-arduino.html Константин Portal-PK 2021-04-07T10:28:08+03:00 Наверняка каждый из нас запускал машинку на радиоуправлении. Уверен, что вам знакомо это чувство, когда первые минут 10 этот процесс является увлекательным, а дальше это все наскучивает. У меня есть для вас решение, которое не скоро вам наскучит.

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

Наверняка каждый из нас запускал машинку на радиоуправлении. Уверен, что вам знакомо это чувство, когда первые минут 10 этот процесс является увлекательным, а дальше это все наскучивает. У меня есть для вас решение, которое не скоро вам наскучит.  За несколько вечеров можно самому собрать свою авиамодель с небольшими затратами. Думаю, название уже говорит за себя, что же будет управлять нашим самолетиком. Для изготовления простой авиамодели нам понадобится не так и много элементов.

Управлять всем будет Arduino Pro Mini, между пультом и моделькой связь будет поддерживаться с помощью двух модулей NRF24L01. Понадобится и электродвигатель с винтом. Питаться все может от двух аккумуляторов (один на модель, другой в пульт), со стабилизацией напряжения. Понадобится парочка сервоприводов, для управления рулями высоты и поворота. Парочка джойстиков для пульта.

Управлять всем будет Arduino Pro Mini

Хотели бы полюбоваться видами свысока? Вас интересовал полет на воздушном шаре в Москве цена его? Теперь в запросто можете полетать возле своего дома. Правда у данной самоделки есть маленький недостаток, дальность полета всего 20-25 метров.

полет на воздушном шаре в Москве

Данная тема позволяет вашей фантазии разгуляться. Если же использовать ESP32-CAM, то мы уже получим самолетик с камерой, а изображение можно выводить на телефон.

Не бойтесь экспериментировать, пробуйте себя в чем-то новом и открывайте для себя новые двери в этом мире. Удачи вам.

Понравилась новость Авиамодели с управлением на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Необычные материалы для DIY. Из аптеки. http://portal-pk.ru/news/296-neobychnye-materialy-dlya-diy-iz-apteki.html Константин Portal-PK 2021-04-03T19:23:07+03:00 В самоделках очень часто используются предметы из быта, это неотъемлемая часть некоторых проектов. Сегодня мы с вами разберем, какие же материалы из аптеки можно использовать для своих самоделок, рассмотрим несколько примеров их использования.

Например, самый обычный шприц, в серии изготовления ЧПУ плоттера я использовал колпачок от медицинской иглы в качестве соединительной муфты. Для этого просто вынул металлическую иглу и подрезал колпачок под нужную длину.

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

Из шприца на 20 мл выходят хорошие корпуса и холдеры для аккумуляторов 18650.

Из шприца на 20 мл выходят хорошие корпуса и холдеры для аккумуляторов 18650. Диаметр шприца позволяет надежно установить внутрь аккумулятор. Немного подрезаем корпус, срезаем часть поршня, устанавливаем контакты и у нас выходит самодельный холдер. Это прекрасное решение, если ваша самоделка работает от аккумуляторов.

Достаточно часто в автоматических системах полива используется капельница.

Достаточно часто в автоматических системах полива используется капельница. Благодаря регулятору подачи жидкости, можно отрегулировать количество поступающей в горшки воды. Либо же можно использовать сам шланг в качестве тонкой гофры для кабелей и проводов, трубка обладает достаточной гибкость и переломится не скоро.

материалы из аптеки можно использовать для своих самоделок


Понравилась новость Необычные материалы для DIY. Из аптеки? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Создание графики в Inkscape для Arduino проектов и ЧПУ. http://portal-pk.ru/news/295-sozdanie-grafiki-v-inkscape-dlya-arduino-proektov-i-chpu.html Константин Portal-PK 2021-04-03T07:26:11+03:00 Inkscape — это универсальное приложение, позволяющее создавать разнообразную графику для самодельных ЧПУ плоттеров, гравировальных и фрезерных станков на Arduino. Освоить данное приложение может каждый.

графику для самодельных ЧПУ плоттеров, гравировальных и фрезерных станков на Arduino

Inkscape позволяет: преобразовывать растровое изображение в векторное, разработка дизайна рекламы облегчается, при работе с данным приложением. Функции Inkscape позволяют создавать оригинальные картинки. Давайте же разберемся, что же умеет данное приложение.

Inkscape позволяет: преобразовывать растровое изображение в векторное, разработка дизайна рекламы

Как и говорилось ранее, мы можем преобразовывать картинки в графику, а затем использовать ее для работы со станками. Так же в Inkscape можно создавать и свои изображения, например для своего недавнего проекта, в котором я создавал экраны для дисплея Nextion. Я рассказывал и показывал, как просто и быстро можно создать кнопки и графическое оформление для дисплея.

Как и говорилось ранее, мы можем преобразовывать картинки в графику

Скачать и установить приложение вы можете с официального сайта Inkscape, для этого в любой поисковой системе, в моем случае Яндекс, вбиваем “Inkscape” и переходим по переходим по первой ссылке.

название программы «Inkscape». Переходим на сайт разработчика Inkscape.org. В разделе “Download” выбираем операционную систему и ее битность. И устанавливаем, как и любую другую программу.

На сайте переходим в раздел «Download».

Так как Inkscape полностью бесплатное приложение, вы и сами можете попробовать в нем что-то нарисовать, либо можете использовать его в своих проектах.

Понравилась новость Создание графики в Inkscape для Arduino проектов и ЧПУ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Где взять качественную музыку для видео на Youtube? http://portal-pk.ru/news/294-gde-vzyat-kachestvennuyu-muzyku-dlya-video-na-youtube.html Константин Portal-PK 2021-03-27T07:39:06+03:00 Зачастую, хорошую и качественную музыку достаточно проблематично найти, я перепробовал множество сервисов по транслированию музыки онлайн. В конечном итоге остановился на SoundCloud.

SoundCloud хорошая стриминговая платформа

Если же вы так же, как и я, увлекаетесь записью видеороликов на Youtube про Arduino или самодельные станки, либо же на другую тематику, наверняка сталкивались со сложностями в поиске музыки для своего контента. SoundCloud хорошая стриминговая платформа для прослушивания музыки, так же вы можете и сохранять свои треки на ней, либо же скачивать музыку. Используя музыку в своих видео, вы способствует продвижению саундклауд. Ведь в большинстве случаев именно музыкальное сопровождение влияет на смотрящего, оно и определяет настрой и характер видео.

Используя музыку в своих видео, вы способствует продвижению саундклауд.

SoundCloud не имеет ограничений, во время прослушивания музыки вы не встретите рекламы. А одним из важнейших преимуществ является бесплатное использование данного сервиса, за скачивание и прослушивание музыки вы ничего не платите.

SoundCloud не имеет ограничений, во время прослушивания музыки вы не встретите рекламы.

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

Понравилась новость Где взять качественную музыку для видео на Youtube? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Сложности установки конечных выключателей на 2 осевой ЧПУ на Arduino. http://portal-pk.ru/news/293-slozhnosti-ustanovki-konechnyh-vyklyuchatelei-na-2-osevoi.html Константин Portal-PK 2021-03-24T11:23:36+03:00 При установке конечных выключателей на самодельные фрезерные ЧПУ или другие 3-х осевые станки не возникает никаких проблем, что не скажешь про 2-х осевые, такие как лазерно-гравировальные станки или ЧПУ плоттеры.

Припаиваем провода и устанавливаем концевые выключатели на заранее подготовленные фанерки.Связано это с тем, что прошивка GRBL по умолчанию сконфигурирована для работы с трех осевым ЧПУ станком.

В прошивке «grbl 1.1» это 105 строка.Поэтому при установке конечных выключателей на 2-х осевые станки у вас будет выдавать ошибку. Ошибка же эта возникает по одной причине. GRBL первым делом ищет конечный выключатель по оси Z, что для нас критично. Чтобы исключить ось Z из поиска, необходимо подправить файл конфигурации прошивки «config.h». Затем установить драйвер ch340 и загрузить GRBL в Arduino UNO.

Запустите исполнительный файл CH341SER.EXEВсе эти действия достаточно несложные и каждый сможет выполнить сам. В итоге получается рабочий 2-х осевой станок с конечными выключателями и прошивкой для них. А файлы для скачивания и более подробные инструкции вы можете найти в моей статье: Установка и настройка конечных выключателей на 2 осевой ЧПУ станок – GRBL.

получается рабочий 2-х осевой станок с конечными выключателями

Понравилась новость Сложности установки конечных выключателей на 2 осевой ЧПУ на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Микроконтроллер и микропроцессор, в чем их разница? http://portal-pk.ru/news/292-mikrokontroller-i-mikroprocessor-v-chem-ih-raznica.html Константин Portal-PK 2021-03-24T11:09:49+03:00 Если вы занимаетесь самоделками, уверен, что у вас когда-либо возникал вопрос, а в чем же разница микропроцессора и микроконтроллера, об этом мы и поговорим.


Микроконтроллер - микросхема, в ее состав входят процессор, ОЗУ и ПЗУ, устройства ввода/вывода.

Микроконтроллер

Микроконтроллер - микросхема, в ее состав входят процессор, ОЗУ и ПЗУ, устройства ввода/вывода. Предназначена для выполнения простых задач, это уже готовый компьютер, но с ограниченными функция. На микроконтроллерах и выполняются большинство самоделок. Вычислительной мощности у них достаточно мало, по сравнению с микропроцессорами, но ее достаточно для управления какими-либо станками, машинками, лампами, простыми устройствами вывода изображения.


Микропроцессор - кардинально отличается от микроконтроллера.

Микропроцессор

Микропроцессор - кардинально отличается от микроконтроллера. Состоит из арифметико-логического устройства, запоминающих устройств, блока синхронизации и управления, регистра, шины. Но, к микропроцессору так же понадобиться подключить и ОЗУ с ПЗУ, устройства ввода/вывода и интерфейсы. Все это делает его более дорогим и большим, по сравнению с микроконтроллерами, но и вычислительной мощи у микропроцессора во много раз больше. Применяются же они в большей части специализированной и бытовой электроники.Микропроцессор

Вывод можно сделать такой, если же вы увлекаетесь простыми и несложными самоделками, то можно использовать микроконтроллеры, они достаточно дешевы, компактны, и сложностей при работе с ними возникнет меньше, чем при работе с микропроцессорами.

Понравилась новость Микроконтроллер и микропроцессор, в чем их разница? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Для чего нужен WiFi роутер в проектах на ESP8266 и ESP32. http://portal-pk.ru/news/291-dlya-chego-nuzhen-wifi-router-v-proektah-na-esp8266-i-esp32.html Константин Portal-PK 2021-03-23T15:06:53+03:00 Хотелось бы рассказать о важности сети, при работе с модулями ESP8266 и ESP32. Модули данной серии позволяют построить множество проектов, направленных на автоматизацию некоторых процессов. Связь с ними поддерживается через Wi-Fi, что позволяет общаться с устройствами как в локальной сети, так и на большом расстоянии от них через интернет.

На модулях ESP8266 и ESP32 можно сделать устройства полива на даче, работающие от аккумуляторных батарей и сети.

Рассмотрим такой вариант. На модулях ESP8266 и ESP32 можно сделать устройства полива на даче, работающие от аккумуляторных батарей и сети. В связи с тем, что в некоторых краях довольно часто отключают электричество, вы можете полностью потерять связь с устройствами. Решением данной проблемы может стать использование Wi-Fi роутера с сим картой и аккумулятором. Можно использовать хорошее заводское решение: ZTE MF920ru с Антенной ShopCarry M2 на магните переносной роутер WiFi под сим карту 3G 4G.


ZTE MF920ru с Антенной ShopCarry M2 на магните, это переносной WiFi роутер под сим карту 3G/4G

Данный Wi-Fi роутер позволит вам поддерживать связь с вашими устройствами, даже при отключенном свете.

Данный Wi-Fi роутер позволит вам поддерживать связь с вашими устройствами, даже при отключенном свете.

Разберем ситуацию, в которой у вас простой роутер. Устройства полива и датчики питаются от аккумуляторных батарей и сети, и вдруг выключается свет, и теряется связь с устройствами, так как ваш роутер питался от розетки и не имел доп. источника питания. И вот уже следующий день, прогноз погоды показывает +30, а полить растения вы не можете, не имеете связи с вашими устройствами, свет до сих пор не включили. Было бы обидно так потерять растения, когда их сжигает солнце.

Лучше сейчас задуматься об автономной работе ваших устройств и быть готовым ко всему.

Понравилась новость Для чего нужен WiFi роутер в проектах на ESP8266 и ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Что нужно учитывать при постройке мастерской для хобби http://portal-pk.ru/news/290-chto-nuzhno-uchityvat-pri-postroike-masterskoi-dlya.html Константин Portal-PK 2021-03-19T08:25:10+03:00

Наверное, каждый мужчина, который увлекается самоделками, мечтает о своей собственной мастерской. Я и сам увлекаюсь постройкой самодельных ЧПУ станков, хотелось бы обзавестись уютным местом, в котором я бы мог заниматься своим любимым делом - творить.

Но так получается, что электроника и станки в общем очень требовательны к месту, где они располагаются. Температура в помещении должна находиться в диапазоне от +5 до +35. А самым главным фактором, который оказывает большое воздействие на металлические детали и электронику станков, является влажность, она не должна быть выше 75%. Влага в помещение может поступать с земли и через стены, благодаря геотекстилю можно избавиться от данной проблемы. Главным поставщиком геотекстиля в СПБ является компания МиК, со всем ассортиментом можете ознакомиться на их сайте компании. Геотекстиль не позволяет задерживаться воде на поверхности, а также очень хорошо вентилируется и не допустит возникновения грибка.

Геотекстиль не позволяет задерживаться воде на поверхности

Не стоит забывать и о стенах, для мастерской дешевле всего выбрать каркасно-щитовой тип здания. Данная технология постройки зданий занимает минимальное кол-во времени, легка в постройке и относительно дешевая. Не стоит забывать об утеплении стен, экономия на утеплителе может привести к плачевным последствиям, лучше взять что-то среднего класса, так же стоит позаботиться и об отоплении здания в зимние время.

каркасно-щитовой тип здания

Это просто размышление. Как вы будет строить мастерскую для хобби решать вам!

Понравилась новость Что нужно учитывать при постройке мастерской для хобби? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Прошивка для самодельного ЧПУ плоттера. http://portal-pk.ru/news/289-proshivka-dlya-samodelnogo-chpu-plottera.html Константин Portal-PK 2021-03-18T09:03:15+03:00 Я всегда хотел увеличить скорость работы моего самодельного ЧПУ плоттера. Долго экспериментировал и продолжаю его модернизировать.

Недавно руки дошли и до смены прошивки, на которой раньше и работал мой плоттер. Достаточно просто поменять прошивку для плоттера и пользоваться программой LaserGRBL.

Для рисования на плоттере можно использовать такие же параметры, что при работе с лазером

Речь пойдет о LaserGRBL, хоть данная программа и предназначена для работы с лазерными гравировальными станками, но мы её научим работать и с нашим самодельным ЧПУ станком. А в работе с данной программой нам поможет прошивка GRBL Servo.

 Яндекс произвести поиск по фразе «GRBL Servo»Первым делом мы устанавливаем прошивку GRBL Servo с github, а как я ранее уже говорил, для работы с прошивкой нам понадобиться программа LaserGRBL, как это сделать и как ее настроить, вы сможете прочитать в статье: Установка и настройка программы LaserGRBL. Следующим шагом подключаемся к станку и настраиваем прошивку.

В итоге вот что получается

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

Плюсы программы LaserGRBL для работы с граверам.

А полную статью, инструкцию по прошивке GRBL Servo и настройке программы LaserGRBL, а также все файлы, использовавшиеся в модернизации самодельного станка, вы сможете найти в данной статье: Прошивка для плоттера GRBL Servo и работа с программой LaserGRBL.

Понравилась новость Прошивка для самодельного ЧПУ плоттера? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
А-Контракт российский производитель печатных плат. http://portal-pk.ru/news/288-a-kontrakt-rossiiskii-proizvoditel-pechatnyh-plat.html Константин Portal-PK 2021-03-16T07:14:55+03:00 А-Контракт одна из крупнейших фирм производитель печатных плат. Данная компания поможет вам в осуществлении ваших проектов, разработает за вас схемотехнику печатной платы любой сложности, и сама же изготовит. На рынке печатных плат А-контракт уже больше пяти лет, они хорошо знают свое дело и прекрасно выполняют поставленные им задачи.

А-Контракт одна из крупнейших фирм производитель печатных плат.

А-контракт изготавливает как мелкие серии печатных плат, так и занимается производством крупно партийных заказов, а разнообразие и класс оборудования позволяет изготавливать самые сложные и крупные заказы.

Печатные платы

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

Печатные платы

Для ваших целей предоставляются следующие виды услуг:

1. Проектирование печатных плат;

Если же у вас отсутствует проект, специалисты из компании А-контракт разработают для вас печатную плату и выберут подходящее сочетание электронных компонентов.

2. Трассировка печатных плат;

Проектирование расположения печатных дорожек на плате.

3. Одно- и двухсторонние, многослойные и другие печатные платы;

А-контракт владеют разнообразным количеством станков, что позволяет им изготавливать платы разной сложности, в том числе со сквозными отверстиями, на металлической подложке и др.

4. Печатные платы для применения в условиях высоких и сверхвысоких частот;

На производстве так же могут изготавливаться печатные платы для ВЧ и СВЧ аппаратуры, производятся платы с использованием базового материала Rogers.

5. Формирование контура платы;

В их услуги входит и внешнее оформление, дизайн и изготовление печатных плат с любым контуром, формирование отверстий.

Контроль качества

Контроль качества

А-Контракт полностью отвечает за качество изготавливаемых ими плат. На всех этапах производства проводится контроль качества продукции. Для оценки качества перед монтажом компонентов производится электроконтроль, он позволяет оценить целостность цепей и выявить КЗ проводников на плате. А при изготовлении плат производится тест паяемости финишного покрытия. Нельзя не сказать о том, что каждая плата проверяется вручную под увеличительными приборами с кратностью до 10Х. Может быть проведена и экспертная проверка для большей надежность. При визуальном контроле качества оценивается качество паяльной маски, финишного покрытия, шелкографии, качество обработки контура изделия, измеряются и сравниваются размеры с заданными в конструкционной документации.

Понравилась новость А-Контракт российский производитель печатных плат.? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Автономный лазерный ЧПУ гравер на ESP32_GRBL. http://portal-pk.ru/news/287-avtonomnyi-lazernyi-chpu-graver-na-esp32_grbl.html Константин Portal-PK 2021-03-10T07:03:58+03:00

Для гравировки портретов на лазерном ЧПУ станке требуется 5-7 часов. И самая большая проблема, станок должен быть подключен к компьютеру, и компьютер должен постоянно работать. У меня были проблемы с гравировкой при переходе компьютера в спящий режим. Неплохо было бы сделать такой ЧПУ гравер, чтобы воткнул его в розетку, и он самостоятельно работал. Звучит как фантастика. Но прогресс не стоит на месте и сегодня сделать автономный лазерный гравер достаточно просто, используя прошивку ESP32_GRBL. При этом управлять им можно из другой комнаты с помощью телефона, планшета или ПК.

автономный лазерный гравер достаточно просто, используя прошивку ESP32_GRBL

Установка электроники ЧПУ гравера на ESP32.

Подключил всю электронику лазерного ЧПУ гравера на ESP32 по схеме.

Подключил всю электронику лазерного ЧПУ гравера на ESP32 по схеме.Вот что получилось. Не совсем аккуратно, но работает отлично.

Вот что получилось. Не совсем аккуратно, но работает отлично.Также установил камеру на ESP32-CAM, для того чтобы следить за процессом. Исходные материалы можно скачать тут: Лазерный гравер на ESP32. Прошивка GRBL_ESP32.

Установка и настройка GRBL ESP32.

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

Папки с библиотеками нужно скопировать в папку с библиотеками Arduino IDEНастроить конфигурационный файл для 2 осевого станка и настроить работу лазера.

Настроить конфигурационный файл для 2 осевого станка и настроить работу лазера.Загружаем прошивку в плату esp32 devkit v1.

Нажимаем кнопку загрузить. Затем нужно произвести минимальные настройки веб-интерфейса. Подробное описание и все материалы вы найдёте статье: Установка и настройка GRBL ESP32


Сейчас можно приступить к гравировке!

Понравилась новость Автономный лазерный ЧПУ гравер на ESP32_GRBL? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Красивые эффекты для изображений для рисования на ЧПУ плоттере http://portal-pk.ru/news/286-krasivye-effekty-dlya-izobrazhenii-dlya-risovaniya-na-chpu.html Константин Portal-PK 2021-02-28T16:51:31+03:00 Как собрать самодельный ЧПУ плоттер рассказывал в предыдущей новости. А данной статье рассмотрим, как можно сделать красивый рисунок на плоттере используя бесплатные программы преобразования растрового изображения в векторное.

StippleGen 2 программа для создания точечного изображения.StippleGen 2 является бесплатным программным обеспечениемStippleGen 2 бесплатная программа, которая поможет создать из растрового изображения векторное изображение, нарисованное точками. Подробнее читайте: Программа StippleGen 2. Создание точечного изображения для ЧПУ станка.

Веб-приложение Plotterfun для создания векторного изображения с различными эффектами.

Веб-приложение Plotterfun для создания векторного изображения с различными эффектами.

Создать больше вариантов векторного изображения из растрового, с различными эффектами, поможет Plotterfun. В данной программе можно, без знаний работы с векторными изображениями, сделать красивые эффекты из растрового изображения: рисования волнистой линией, спираль, карандашный рисунок, мозаику и пр.

Подробнее со всеми функциями программы вы можете ознакомиться: Plotterfun веб приложении для созданий графических изображений для ЧПУ плоттера, гравера.

Понравилась новость Красивые эффекты для изображений для рисования на ЧПУ плоттере? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.


]]>
#31. MQ135 датчик углекислого газа. Библиотека MQ135 Arduino library. http://portal-pk.ru/news/285-mq135-datchik-uglekislogo-gaza-biblioteka-mq135-arduino-library.html Константин Portal-PK 2021-02-27T09:08:15+03:00 Данный датчик позиционируют на рынке, как датчик качества воздуха. Так как он измеряет не только концентрацию CO2 в воздухе, но и концентрацию других газов.

концентрацию CO2 в воздухе, но и концентрацию других газов

Для того чтобы добиться приемлемых показаний, нужно его откалибровать, и при этом показания не на 100% точные. Несмотря на это, данный датчик можно использовать дома или в офисе, для контроля качества воздуха, и выводить данные значений на дисплей, подавать звуковой или световой сигнал. При желании можно сделать автоматическое проветривание помещения.

MQ135 датчик углекислого газа

ВНИМАНИЕ! Перед работай с датчиком его нужно прогреть не менее 12-24 часов. Для этого подаем питание и оставляем датчик на указанное время. Затем его нужно вынести на свежий воздух, рекомендуемая температура +20 С и провертеть.Только после этого датчик будет показывать корректные значение.

Еще один минус, после включения датчик должен прогреться, только после этого можно снимать показание.

Для урока понадодиться:

Что из себя представляет датчик качества воздуха MQ135?

Сам датчик MQ-135 представляет собой цилиндрическое устройства с 6 контактами. И выполняется в 2 корпусах.

Сам датчик MQ-135 представляет собой цилиндрическое устройства с 6 контактами.

MQ-135 представляет собой цилиндрическое устройства с 6 контактами

 датчик MQ-135

Для работы с датчика необходима небольшая обвязка.

Для работы с датчика необходима небольшая обвязка

В данном Arduino уроке, мы будем рассматривать подключения модуля, на основе датчика MQ135. Модуль имеет необходимую обвязку, а также оснащен компаратором и подстроечным резистором. Это позволяет получить сигнал на цифровую ножку модуля D0. Когда концентрация ниже установленного параметра, на цифровом выходе датчика логическая 1, и зеленый светодиод не светиться, задать чувствительность датчика можно с помощью подстроечного резистора. При повышении концентрации, светодиод включается и на цифровом пине появляется логический ноль. Используя данный пин, датчик можно использовать без микроконтроллера.

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

Схема модуля выглядит примерно так. В интернете нет точной схемы данного модуля.

Схема модуля выглядит примерно так

Для подключения модуля необходим источник питания 5в. Не менее 800 мВт. Это связано с тем, что чувствительный элемент датчика нужно подогревать. По документации, температура чувствительного элемента не ниже 42 С. При этом корпус датчика не нагревается и при прикосновении теплый. Для отвода тепла датчик закрыт металлической сеткой.

Разберем технические характеристики газоанализатора:

  • напряжение питания: 5V;
  • время прогрева: около 1 мин;
  • потребляемый ток: 130-150 мА;
  • диапазон рабочих температур: -10 ... 45 С;
  • выходной сигнал TTL уровня;
  • габариты: 35 х 20 х 21 мм;
  • вес: около 10 г.

Схема подключения MQ135 к Arduino.

Назначение пинов датчика MQ135:

  • Vcc – питания 5в.
  • GND – «-» питания.
  • D0 – цифровой пин.
  • A0 – аналоговый пин.

Назначение пинов датчика MQ135:

Подключаем модуль MQ135 к Arduino UNO по схеме. Подключаем модуль MQ135 к Arduino UNO по схеме.

Подключаем модуль MQ135 к Arduino NANO по схеме. Подключаем модуль MQ135 к Arduino NANO по схеме.

Пример кода MQ135 для Arduino.

Снять показание с датчика можно без использования сторонних библиотек. Вот такой простой пример кода, поможет получить данные с цифрового и аналогового пина, и вывести полученные значения в монитор порта.

#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino
#define digitalPin 3 // цифровой выход подключен к пину 3

float analogValue; // для аналогового значения
byte digitalValue; // для цифрового значения, можно, кстати и boolean, но не суть

void setup() {
  Serial.begin(9600); // инициализация последовательного порта
  pinMode(analogPin, INPUT); // режим работы аналогового пина
  pinMode(digitalPin, INPUT); // режим работы цифрового пина
  delay(1000); // устаканимся
}

void loop() {
  analogValue = analogRead(analogPin); // чтение аналогового значения
  digitalValue = digitalRead(3); // чтение цифрового значения

  Serial.print("Current value: "); // вывод аналогового значения в последовательный порт
  Serial.println(analogValue);

  Serial.print("Threshold: "); // вывод цифрового значения в аналоговый порт
  Serial.println(digitalValue);

  delay(5000); // задержка, чтобы не мельтешило перед глазами
}

 пример кода, поможет получить данные с цифрового и аналогового пина

Но это значения не приведены к стандартным, а хотелось бы снять показание в PPM. Для этого можно использовать библиотеку MQ135.h, которую можно скачать на github или внизу страницы.

Для того чтобы установить библиотеку. Заходим в Arduino IDE и выбираем в меню: Скетч –> Подключить библиотеку –> Добавить .ZIP библиотеку… Заходим в Arduino IDE и выбираем в менюВыбираем скаченный архив MQ135-master.zip и нажимаем кнопку «Открыть». После установки вы увидите надпись, что библиотека успешно добавлена.

Затем загрузим в Arduino пример кода.

В мониторе порта мы получим непонятные значения. Это связанно с тем, что датчик нужно откалибровать и в библиотеки настроить необходимые параметры.

#include <MQ135.h> // подключение библиотеки

#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino
MQ135 gasSensor = MQ135(analogPin); // инициализация объекта датчика

void setup() {
  Serial.begin(9600); // последовательный порт для отображения данных
  delay(1000); // устаканимся
}

void loop() {
  float ppm = gasSensor.getPPM(); // чтение данных концентрации CO2
  Serial.println(ppm); // выдача в последовательный порт

  float rzero = gasSensor.getRZero(); // чтение калибровочных данных
  Serial.println(rzero); // выдача в последовательный порт
  
  delay(1000); // просто задержка, чтобы не мельтешило перед глазами
}

Первый параметр, который нужно знать, это концентрация углекислого газа в атмосфере. Для этого заходим в поисковик и получаем вот такой результат:

«Концентрация углекислого газа (CO2) в земной атмосфере впервые в истории человечества превысила 415 частей на миллион (ppm) - то есть в каждом куб. м воздуха присутствует не менее 415 мл углекислого газа.»

 концентрация углекислого газа в атмосфере


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

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

Также нам нужно знать номинал нагрузочного резистора RL.

Также нам нужно знать номинал нагрузочного резистора RL

В моем случае это 1 кОм. Данное значение нужно указать в библиотеке. Заходим в папку библиотеки и открываем файл MQ135.h с помощью любого текстового редактора.

Заходим в папку библиотеки и открываем файл MQ135.h

И меняем полученные значения. У вас эти данные могут быть другими.

И меняем полученные значения. У вас эти данные могут быть другими.

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

Вот что у меня, выводим в монитор порта.

Показание ниже, чем концентрация углекислого в атмосфере. Возможно, это связанно с тем, что я живу в небольшом городе или просто датчик меня обманывает. Буду надеяться, что это все-таки связанно с хорошей экологической обстановкой в моем городе!

Сейчас полученные показания можно использовать для реализации информера

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

Вывод по работе с датчика MQ135.

Датчик имеет ряд минусов:

  • Прогрев перед работай.
  • Сложность настройки и калибровки.
  • Неточные показания.

Плюсы. Их ни так и много. Один плюс — это стоимость. Данный датчик в разы дешевле аналогичных датчиков качества воздуха.

Вывод по работе с датчика MQ135.

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

Смотрите другие уроки подключения датчиков к Arduino:

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Как собрать ЧПУ плоттер в домашних условиях. http://portal-pk.ru/news/284-kak-sobrat-chpu-plotter-v-domashnih-usloviyah.html Константин Portal-PK 2021-02-26T13:14:47+03:00 Несмотря на то, что у многих дома стоят принтеры, копиры и МФУ. Плоттер остается достаточно интересной и востребованной техникой, скорее всего для хобби или просто поиграться. Но в связи с тем, что его можно собрать практически из подручных средств и недорогой электроники, ЧПУ плоттер может собрать любой школьник или студент.

Для сборки ЧПУ плоттера я использовал готовые каретки, как их собирать рассказывал вот тут:Самодельная каретка для ЧПУ станка.

Устанавливаю все на фанерку и креплю одну каретку на другую под углом 90 градусов.

купил в канцелярском магазине: гелевую ручку, авторучку и циркуль «козья ножка»Взял в канцелярском магазине гелевую ручку, циркуль и авторучку. Из этих элементов сконструировал механизм, который поднимает и отпускает пасту с помощью серво привода.

Подключил всю электронику по схеме.Схема подключения электроники ЧПУ плоттера на Arduino UNO и CNC shield v3.

Загрузил GRBL прошивку и с помощью программ, про которые рассказываю тут: ЧПУ плоттер на Arduino своими руками.

Сделал G-Cod. И выполнил первую гравировку на гравировальном на ЧПУ плеторе на Arduino.


Подробное описание процесса сборки, прошивка, электроника и программы для создания кода смотрите в статье: G-Code для плоттера на Arduino.

Так же рекомендую посмотреть видео, по созданию изображений для ЧПУ плоттера, из растрового изображения.

Понравилась новость Как собрать ЧПУ плоттер в домашних условиях? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.


]]>
Машинка, управляемая с телефона. http://portal-pk.ru/news/283-mashinka-upravlyaemaya-s-telefona.html Константин Portal-PK 2021-02-23T10:30:37+03:00 Если вы взрослый, но временами в вас просыпается ребенок, я знаю, чем вам можно помочь. Благодаря следующей самоделке, вы сможете вспомнить детство.

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

Машинка с камерой

Машинка построена на платформе ESP32-CAM. Питается же от двух источников питания 18650. Вся электроника занимает достаточно мало места, что позволяет сделать машинку достаточно компактной. Ей можно управлять с любого устройства, имеющего подключение к интернету. Подключение и управление осуществляется через браузер. Контролировать всю обстановку вокруг позволяет модуль с камерой ESP32-CAM.

Машинка построена на платформе ESP32-CAM

Проект достаточно прост в повторении, а на его изготовление уходит не так много времени. Если же вам захочется повторить данную самоделку, предлагаю ознакомиться с полным перечнем компонентов в указанной ниже статье, там же вы сможете найти и код прошивки:Wi-Fi машинка с камерой на ESP32-CAM.

Понравилась новость Машинка, управляемая с телефона

Понравилась новость Машинка, управляемая с телефона? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Часы – матрица своими руками. http://portal-pk.ru/news/282-chasy---matrica-svoimi-rukami.html Константин Portal-PK 2021-02-20T14:52:40+03:00 Недавно сидел и рассуждал о том, чего же у меня не хватает дома. Немного подумал и понял, что у меня никогда не было часов, не видел в них смысла. Но после того, как я неизвестное кол-во времени искал телефон и чуть не опоздал на важное мероприятие, решил всё-таки обзавестись дополнительным указателем времени. Долго просматривал каталоги интернет-магазинов, но увы, ничего для себя дельного не нашел. Поэтому решил отказаться от покупки и сделать их своими руками. Самым простым вариантом был часы – матрица с использованием адресной светодиодной ленты. На нем я и решил остановиться.

Часы – матрица своими руками.

Да, делать данный проект буду на Arduino, вы можете повторить проект с версией Nano, но мой выбор пал на Arduino pro Mini, из-за ее габаритов.

Корпус распечатаем на 3D принтере.

Корпус распечатаем на 3D принтере.

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

Рассеивающие линзы сделал из термоклея, а матовый пластик вырезал из коробки для ниток, приобретенную в фикс-прайсе.

Следующим шагом была сборка электроники. Пытался всё спаять аккуратно и компактно, ведь это еще в корпус нужно будет засунуть. Загрузил прошивку и решил проверить, работает, светиться, время показывает, а мне большего и не нужно. Последним шагом было всё полностью собрать. В итоге у меня появились минималистичные часы, да еще и цвет циферблата могу выбирать.

минималистичные часы, да еще и цвет циферблата могу выбирать

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

Понравилась новость Часы – матрица своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости!

]]>
Пользователь reddit построил руку манипулятор, которая имитирует его движение. http://portal-pk.ru/news/281-polzovatel-reddit-postroil-ruku-manipulyator-kotoraya.html Константин Portal-PK 2021-02-16T19:34:51+03:00 Реддитор, под ником «Spidey616_», показал пользователям действующий прототип механической руки. Устройство работает следующим образом, когда пользователь сжимает руку, механическая рука полностью копирует это движение.

Реддитор, под ником «Spidey616_», показал пользователям действующий прототип механической руки.

Вся работа завязана вокруг Arduino UNO, именно она считывает действия пользователя и вращает сервоприводы. Как можно понять, из комментариев изобретателя, все устроено следующим образом:

На руке у «Spidey616_» надета перчатка, на которой приклеены полосочки фольги, с приходящими к ним проводками. Когда контакты замыкаются, сигнал проходит от одного контакта Arduino к другому. После этого от Arduino поступает команда на вращение сервоприводов.

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

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

 систему управления рукой

Реддитор уже планирует доработать систему управления рукой. Он не собирается останавливаться и планирует совершенствовать свою конструкцию. Следующим шагом в его планах, это сделать раздельное управление каждым пальцем, но будет это после модернизации перчатки.

Легкость данного проекта позволяет любому пользователю, с небольшими затратами, повторить это изобретение. Если же вдруг у вас появится желание попробовать сделать что-то похожее своими руками, рекомендую ознакомиться с уроком, в котором я рассказывал о подключении сервопривода к Arduino и способе управления им, посредством кнопки: Подключает servo-привод к arduino. Сервопривод + кнопка.

Понравилась новость Пользователь reddit построил руку манипулятор, которая имитирует его движение? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости!

]]>
Лазерный гравер из хлама. http://portal-pk.ru/news/280-lazernyi-graver-iz-hlama.html Константин Portal-PK 2021-02-15T19:19:34+03:00 Собирать ЧПУ станки с каждым годом становиться все проще и дешевле. Для того чтобы собрать ЧПУ станок на Arduino, для хобби или проверки своих сил, не нужно покупать дорогие драйвера, шпиндели, шаговые двигателя и линейные направляющие. Все можно собрать из подручных материалов. На своем втором сайте я выкладываю новые проекты по реализации самодельных ЧПУ станков из хлама. Сегодня речь пойдет о лазерном гравировальном станке, который собран из хлама, буквально на коленке.

Сегодня речь пойдет о лазерном гравировальном станке

Сборка механики из палок и реек.

Для сборки использую готовые модули кареток.

Для сборки использую готовые модули кареток. Как их собрать можно почитать в статье: Самодельная каретка для ЧПУ станка.

Из реек и брусков делаю раму станка. Из фанеры столешницу.

Из реек и брусков делаю раму станка. Из фанеры столешницу.

Устанавливаю лазер на ось X.

Устанавливаю лазер на ось X.

На фанерку закрепляю всю необходимую электронику

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

Соединил все по схеме.

Соединил все по схеме.

Станок готов и его можно проверить

Станок готов и его можно проверить.

LaserGRBL. Программа для управления лазерным станком на Arduino.

С помощью программы LaserGRBL можно настроить ЧПУ станок. Подробнее о настройке ЧПУ лазерного гравер можно почитать в моей статье: Установка и настройка программы LaserGRBL. С помощью программы LaserGRBL можно настроить ЧПУ станок

Также в данной программе можно создавать эскизы для гравировки, из векторной графики в формате .svg и из растровой графики: jpeg, png. Что позволяет делать гравировку даже без знания устройства ЧПУ станка и G-Code.

делать гравировку даже без знания устройства ЧПУ станка и G-Code.

С помощью данной программы и самодельного лазерного гравера можно сделать вот такую гравировку.

С помощью данной программы и самодельного лазерного гравера можно сделать вот такую гравировку.

Более подробное описание станка и примеры работы смотрите на странице проекта: Самодельный Лазерный гравёр с ЧПУ, в домашних условиях.

Также читайте следующие статьи по теме:

Понравилась новость Лазерный гравер из хлама? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости! ]]>
Vdoo сообщила об уже исправленных уязвимостях модулей Realtek. http://portal-pk.ru/news/279-vdoo-soobshchila-ob-uzhe-ispravlennyh-uyazvimostyah-modulei.html Константин Portal-PK 2021-02-12T08:02:01+03:00

IT-специалисты по информационной безопасности из компании Vdoo обнаружили шесть серьезных уязвимостей Wi-Fi модуля от Realtek.

Realtek RTL8195A главный виновник исследований. Обнаружилось, что модули не защищены от переполнения буфера и чтения за границами выделенной области памяти.

Realtek RTL8195A

Данное устройство представляет собой Wi-Fi, предназначенный для использования в устройствах «умного» дома. Он обеспечивает связь между вашими управляющими и исполняющими устройствами. Но это не последнее место его применения, используется так же и в довольно важных сферах, таких как: здравоохранение, автомобилестроение, а также в сельском хозяйстве.

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

Модуль использует Ameba API, обеспечивающий связь пользователя с устройством через Wi-Fi, HTTP и MQTT. Хоть и обнаруженные уязвимости были подтверждены только в Realtek RTL8195A, но они также касаются и модулей TL8711AM, RTL8711AF и RTL8710AF (до версии 2.0.6).

Переполнение буфера (CVE-2020-9395), одна из главных дыр в безопасности модулей. Данная уязвимость позволяет получить доступ к устройству без пароля от Wi-Fi, даже когда устройство не выступает в роли точки доступа.

Оставшиеся пять уязвимостей имеют более мягкий характер. Две из них позволяют вызвать отказ в обслуживании, оставшиеся три (в их числе и CVE-2020-25854) предоставляют злоумышленникам возможность эксплуатировать Wi-Fi устройства владельцев, а также выполнять произвольные коды.

Но на данный момент не о чем переживать. Устройства с версией прошивки после апреля 2020 года, оборудованы защитой от внезапных атак, связанных с их эксплуатацией. Эти же дыры были исправлены с выходом Ameba Arduino 2.0.8.

Понравилась новость Vdoo сообщила об уже исправленных уязвимостях модулей Realtek? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости!

]]>
Виды реле и принципы их работы. http://portal-pk.ru/news/278-vidy-rele-i-principy-ih-raboty.html Константин Portal-PK 2021-02-06T18:43:58+03:00 Реле — это электромеханическое устройство. Внутри корпуса которого расположен электромагнит, при подаче напряжения притягивающий якорь. К якорю крепится один подвижный контакт, замыкающийся с одним неподвижным контактом.

Реле — это электромеханическое устройство.

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

Реле с тремя группами контактов.

Бывают так же и другого типа реле, имеющие три группы контактов: первую, всё так же предназначенную для питания устройства, вторую называют нормально разомкнутой группой контактов, а также третью группу контактов, имеющую название нормально замкнутая.

Давайте разберемся во всех видах контактов данного типа реле:

  • Нормально разомкнутая пара контактов – называют те контакты, которые при подаче напряжения на реле замыкаются, а когда питание отсутствует, контакты разомкнуты.Нормально разомкнутая пара контактов
  • Нормально замкнутая группа контактов – та пара, которая размыкается при подаче напряжения на реле, в отключённом состоянии же, они замкнуты.Нормально замкнутая группа контактов

Комбинация этих двух видов контактов в одном реле называется переключающее группой контактов. Такая система позволяет осуществлять переключение питания или логических цепей.

Комбинация этих двух видов контактов в одном реле

ЭЛЕКТРОМАГНИТНОЕ РЕЛЕ.

Электромагнитное реле является одним из самых простых, применяется в различной аппаратуре для управления исполнительными устройствами, коммутации цепей или же для управления питания приборов.

ЭЛЕКТРОМАГНИТНОЕ РЕЛЕ.

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

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

Обычно реле спрятано в защитном корпусе, он может быть выполнен как из металла, так из пластика.

Принцип работы реле.

Рассмотрим принцип работы на схеме.

Принцип работы реле.

Есть управляющая цепь, состоящая из электромагнитного реле, выключателя и источника питания. Исполнительная же цепь состоит из контактов реле, источника питания и нагрузки (в качестве нагрузки может выступать что угодно, в нашем случае лампочка).

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

Параметры электромагнитных реле.

Размеры самих реле позволяют нанести на их корпус основные параметры. В качестве примера рассмотрим реле SONGLE SRD-12VDC-SL-C.

В качестве примера рассмотрим реле SONGLE SRD-12VDC-SL-C.

12VDC – показывает, от какого напряжения и каким его видом питается само реле. Напряжение срабатывания реле 12 Вольт. Питается же реле постоянным током (DC обозначает постоянный ток/напряжение)

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

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

Для нашего случая, контакты реле SONGLE SRD-12VDC-SL-C способны выдержать ток в 10А и переменное напряжение 125/250 В. Так же реле способно коммутировать нагрузку с силой тока в 10 А и постоянным напряжением 28 В.

Твердотельное реле.

Твердотельное реле (ТТР) - Электронное устройство, в котором отсутствуют такие элементы как: катушка, якорь, подпружиненные контакты, ярма и сердечник. Предназначены такие реле для коммутации высокомощностных цепей с помощью низких напряжений, подаваемых на клеммы управления.

Твердотельное реле.

Заменой всей начинки обычных электромагнитных реле служат мощные ключи на полупроводниковых структурах, выполненных по типу: транзисторов, тиристоров или симисторов.

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

Принцип работы твердотельного реле.

Твердотельное реле работает следующим образом: управляющий сигнал подается на светодиод, оптическое излучение вызывает ЭДС на фотоприемнике. Это напряжение подается на управляющую схему, которая вырабатывает сигнал для управления выходным ключом.

Принцип работы твердотельного реле.

Такого типа реле могут иметь разное устройство. В качестве силового элемента могут быть использованы: симистор, МДП-транзистор, тиристор, диод, биполярный транзистор или IGBT- транзистор. Поэтому твердотельное реле может найти применение в различных задачах.

Основные параметры ТТР:

  • коммутируемое напряжение U;
  • коммутируемый ток I;
  • управляющий сигнал;
  • скорость коммутации.

Преимущества твердотельных реле над электромеханическими.

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

Твердотельные же обладают рядом преимуществ:

  • В тысячу раз больше переключений, по сравнению с электромеханическими.
  • Совместимость с уровнями логических микросхем. ТТР можно управлять прямо с выхода микросхем.
  • Бесшумная работа и высокое быстродействие.
  • Малое энергопотребление.

Но к выбору твердотельных реле нужно подходить с умом, т.к. они боятся повышенных напряжений и токов, поэтому при выборе нужно делать запас в 20%, желательно даже больше. ТТР боятся перегревов, сами же по себе выделяют огромное количество тепла, потому что построены на полупроводниковой структуре, из-за этого нуждаются в массивных радиаторах, либо в активном охлаждении.

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Что такое Транзистор? http://portal-pk.ru/news/277-chto-takoe-tranzistor.html Константин Portal-PK 2021-01-26T17:11:55+03:00 Транзистор — один из самых распространенных полупроводниковых элементов самого широкого применения. Существуют различные виды транзисторов, но как правило данный электронный компонент имеет три вывода и, как и диод, основывается на явлении p-n перехода. Отсюда происходит его второе название – полупроводниковый триод.

Главным свойством транзистора является управление током, протекающим через него (ток эмиттер–коллектор у биполярных и ток исток–сток у полевых транзисторов), с помощью третьего вывода (база у биполярных и затвор у полевых транзисторов). Иными словами транзисторы зачастую используют как выключатель и/или регулятор силы тока и напряжения.

 виды транзисторов

Биполярный транзистор

Транзисторы данного типа состоят из трех слоев полупроводников с чередующимся типом проводимости:

  • Эмиттер (emitter)
  • База (base) – на схемах изображается между К. и Э. под прямым углом к несущей черте
  • Коллектор (collector) – на схемах обозначен стрелкой.

Биполярный транзистор

Таким образом, у биполярных транзисторов имеется два p-n перехода: эмиттер-база и база-коллектор. Наделение полупроводников определенным типом проводимости происходит с помощью легирования — добавления в них специальных примесей. Каждый слой легируется в разной степени.

Различают два типа биполярных транзиторов:

p-n-p, где эмиттер – полупроводник p-типа, база – n-типа, коллектор – p-типа

n-p-n, где эмиттер – полупроводник n-типа, база – p-типа, коллектор – n-типа.

Их схематичное устройство представлено представлено на иллюстрации ниже.

Различают два типа биполярных транзиторов

В основе работы биполярных транзисторов лежит следующий процесс, который рассмотрим на примере транзистора со структурой npn в нормальном активном режиме. В этом режиме переход эметтер-база смещён в прямом направлении, иначе говоря, открыт, а переход база-коллектор смещён в обратном направлении или закрыт. При переходе носителей заряда (электронов) из эмиттера через открытый p-n переход эмиттер-база, часть их рекомбинирует с носителями заряда (дырками) в базе. Однако база делается очень тонкой и слабо легированной (по сравнению с эмиттером), из-за чего большая часть электронов, перешедших (инжектированных) в базу из эмиттера, так сказать, «не находит себе в базе места» и, как следствие, диффундирует в коллектор. Сильное электрическое поле обратносмещённого коллекторного перехода захватывает неосновные носители из базы и переносит их в коллекторный слой. Таким образом, ток коллектора практически равен току эмиттера, за исключением небольшой потери на рекомбинацию в базе, которая и образует ток базы. В случае с биполярными транзисторами структуры pnp процесс будет тем же, изменится лишь полярность и направление токов.

Полевой транзистор (униполярный)

Принцип действия полевых транзисторов основан на управлении электрическим сопротивлением токопроводящего канала поперечным электрическим полем, создаваемым приложенным к затвору напряжением.

Полевые транзисторы имеют следующие выводы

Полевые транзисторы имеют следующие выводы:

  • Исток (source) — область, из которой носители заряда уходят в канал
  • Затвор (gate) – электрод, на который подается управляющее напряжение
  • Сток (drain) – область, в которую носители заряда входят.

Читайте также про другие элементы электрической цепи:

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
#30. Радиопульт с приемником HY-DJM-5V. Подключаем к Arduino. http://portal-pk.ru/news/276-radiopult-s-priemnikom-hy-djm-5v-podklyuchaem-k-arduino.html Константин Portal-PK 2020-12-12T14:21:47+03:00 При изучении Arduino, часто возникают разнообразные идеи. Одна из самых распространённых - это беспроводное управление несколькими реле. Для включения различной нагрузки: открывать гаражные ворота, включать и выключать электроприборы и управление освещением. Но как быть, если знания не хватает для реализации идеи. Для этого отлично подойдёт радиопульт, в виде брела, который продается вместе с приемником HY-DJM-5V. Почему данный пульт подойдёт для новичка? Это связано с простотой подключения и использования радиопульта с приёмником HY-DJM-5V в Arduino проектах. Данный пульт и приемник я использовал в управлении светом в проекте «Arduino управление светом с 3 мест: Пульт ДУ + Радиопульт + Переключатель».

Описание радиопульта и приемникаHY-DJM-5V.

Для урока понадодиться:

Описание радиопульта и приемникаHY-DJM-5V.

В интернете не так много информации по данному радиопульту. Есть источники, в которых говорится, что он работает на частоте 433 МГц. В других источниках говорится, что работает на частоте 315 МГц. Для нас нет большой разницы, на какой частоте работает пульт и приемник. Это не помешает нам сделать отличный проект на Arduino.

Характеристики пульта

Характеристики пульта:

  • частота передачи 315 Мгц,
  • количество каналов 4,
  • дальность действия до 50 м
  • элемент питания 23 a / 12 v

Не смотря на то, что обещают до 50 метров дальность действия, мой пульт позволяет управлять только до 20 м. при прямой видимости, за стеной уже не работает. Рассчитал по формуле, и припаял к приемнику спиралевидную антенну, сигнал стал более устойчивым, но радиус действия практически не изменился. Возможно, что я неправильно рассчитал антенну, но формула простая, и ошибиться я не мог.

Разобрал я пульт, чтобы посмотреть, из чего он состоит. Пульт сделан на микросхеме SC 2262.

Пульт сделан на микросхеме SC 2262.

Схема пульта дистанционного управления на микросхеме SC 2262.

Схема пульта дистанционного управления на микросхеме SC 2262.

Характеристики приемника HY-DJM-5V:

  • частота приема - 315 Мгц,
  • количество каналов – 4,
  • режим – "включен", пока нажата кнопка,
  • тип выхода - открытый коллекто

Схема приемника HY-DJM-5V.

Схема приемника HY-DJM-5V.

Так приемник HY-DJM-5V выглядит в живую.

Так приемник HY-DJM-5V

Кодирование сигнала.

Для того, чтобы ваш сосед с таким же радиопультом не смог открыть ваш гараж, или включать и выключать свет, на пульте и на приемнике есть система кодирования. Рядом со свободными ножками приемника и передатчика есть 2 контактные полоски, одна «+» вторая «-».

Рядом со свободными ножками приемника и передатчика есть 2 контактные полоски

И для кодирования сигнала свободные ножки припаиваем к минусу или плюсу, так, чтобы на приемнике и передатчике эти перемычки были одинаковые.

Использование радиопульта и приёмника HY-DJM-5V без Arduino.

Использование радиопульта и приёмника HY-DJM-5V без Arduino.

На фото приведен пример использования приемника HY-DJM-5V без Arduino. Мы можем подключить приемник к источнику питания 5В, и управлять нагрузкой. На схеме ниже подключены четыре светодиода. А как мы знаем, вместо светодиодов можно, без проблем, подключить пятивольтовое реле.

Схема подключения приемника HY-DJM-5V без Arduino будет вот такой.

На схеме ниже подключены четыре светодиода

Использование приемника без Arduino имеет большой минус. Светодиод светится, пока нажата кнопка на радиопульте. Поэтому, в данную схему добавит Arduino NANO.

Управление реле, с помощью радиопульта с приемником HY-DJM-5V и Arduino NANO.

Как мы поняли из примера выше, нам нужно в схему добавить Arduino. Схема подключения HY-DJM-5V к Arduino NANO будет следующая:

Схема подключения HY-DJM-5V к Arduino NANO


Код для управления 4 реле, с помощью приемника HY-DJM-5V и Arduino NANO.

Код для управления 4 реле, с помощью приемника HY-DJM-5V и Arduino NANO.

Как и писал в начале статьи, код получается достаточно простой. Даже проще, чем управление светодиодом с помощью кнопки. Тут не нужно бороться с дребезгом. Но задержку нужно сделать, потому что, при большом расстоянии между пультом и приемником, сигнал бывает не стабильным, и реле будет несколько раз подряд включаться и выключаться.
// Радиопульт с приемником HY-DJM-5V.
// https://portal-pk.ru
//переменные для подключении 4 реле //
#define RELAY1 6
#define RELAY2 7
#define RELAY3 8
#define RELAY4 9
// переменные для подключения 4 контактов с приемника HY-DJM-5V //
#define RADIO_PIN1 2
#define RADIO_PIN2 3
#define RADIO_PIN3 4
#define RADIO_PIN4 5
// переменные для хранения состояния реле //
boolean statusRelay1 = false;
boolean statusRelay2 = false;
boolean statusRelay3 = false;
boolean statusRelay4 = false;
void setup() {
  //инициализировать пины реле как выход //
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  // пины приемника на вход //
  pinMode(RADIO_PIN1, INPUT);
  pinMode(RADIO_PIN2, INPUT);
  pinMode(RADIO_PIN3, INPUT);
  pinMode(RADIO_PIN4, INPUT);
// инициализируем работу с монитором порта 
// и выведем надпись "Relay Ok!" 
  Serial.begin(9600);
  Serial.println("Relay Ok!");
}
void loop() {
  //Если пришел сигнал 
  //выводим в монитор порта информацию что сработало реле 1 "Relay 1". 
  if ( digitalRead(RADIO_PIN1) == HIGH) {
    Serial.println("Relay 1");
    //инвертируем статус реле //
    statusRelay1 = !statusRelay1;
    // отправляем статус на включения или выключения //
    digitalWrite(RELAY1, statusRelay1);
    // подождем 100 мс //
    delay(100);
  }
  if ( digitalRead(RADIO_PIN2) == HIGH) {
    Serial.println("Relay 2");
    statusRelay2 = !statusRelay2;
    digitalWrite(RELAY2, statusRelay2);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN3) == HIGH) {
    Serial.println("Relay 3");
    statusRelay3 = !statusRelay3;
    digitalWrite(RELAY3, statusRelay3);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN4) == HIGH) {
    Serial.println("Relay 4");
    statusRelay4 = !statusRelay4;
    digitalWrite(RELAY4, statusRelay4);
    delay(100);
  }
}

Описание кода.

Создаем переменные для подключения 4 реле, и переменные для подключения 4 контактов с приемника HY-DJM-5V.

//переменные для подключении 4 реле //
#define RELAY1 6
#define RELAY2 7
#define RELAY3 8
#define RELAY4 9
// переменные для подключения 4 контактов с приемника HY-DJM-5V //
#define RADIO_PIN1 2
#define RADIO_PIN2 3
#define RADIO_PIN3 4
#define RADIO_PIN4 5

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

// переменные для хранения состояния реле //
boolean statusRelay1 = false;
boolean statusRelay2 = false;
boolean statusRelay3 = false;
boolean statusRelay4 = false;

В функции setup() нам нужно инициализировать пины реле как выход, а пины приемника на вход, для считывания поступающего сигнала с радиоприемника.

//инициализировать пины реле как выход //
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  // пины приемника на вход //
  pinMode(RADIO_PIN1, INPUT);
  pinMode(RADIO_PIN2, INPUT);
  pinMode(RADIO_PIN3, INPUT);
  pinMode(RADIO_PIN4, INPUT);

Также инициализируем работу с монитором порта, и выведем надпись "Relay Ok!", что означает, что у нас все работает, и можно начать управлять нашими реле.

// инициализируем работу с монитором порта 
// и выведем надпись "Relay Ok!" 
  Serial.begin(9600);
  Serial.println("Relay Ok!");

В основном цикле loop() будем проверять, по какому каналу пришел сигнал, для этого создадим 4 одинаковых условия для каждого канала.

//Если пришел сигнал 
  //выводим в монитор порта информацию что сработало реле 1 "Relay 1". 
  if ( digitalRead(RADIO_PIN1) == HIGH) {
    Serial.println("Relay 1");
    //инвертируем статус реле //
    statusRelay1 = !statusRelay1;
    // отправляем статус на включения или выключения //
    digitalWrite(RELAY1, statusRelay1);
    // подождем 100 мс //
    delay(100);
  }
  if ( digitalRead(RADIO_PIN2) == HIGH) {
    Serial.println("Relay 2");
    statusRelay2 = !statusRelay2;
    digitalWrite(RELAY2, statusRelay2);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN3) == HIGH) {
    Serial.println("Relay 3");
    statusRelay3 = !statusRelay3;
    digitalWrite(RELAY3, statusRelay3);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN4) == HIGH) {
    Serial.println("Relay 4");
    statusRelay4 = !statusRelay4;
    digitalWrite(RELAY4, statusRelay4);
    delay(100);
  }

Разберём работу по первому каналу. Если пришел сигнал, то выводим в монитор порта информацию, что сработало реле 1 "Relay 1".

if ( digitalRead(RADIO_PIN3) == HIGH) {
    Serial.println("Relay 3");
...
}

Затем инвертируем статус реле, и отправляем статус на включение или выключение.

statusRelay3 = !statusRelay3;
digitalWrite(RELAY3, statusRelay3);
delay(100);

И подождем 100 мс, для того, чтобы наше реле не сработало 2 раза, как и писал выше.

Подключение модуля с 4 твердотельными реле к модулю HY-DJM-5V.

Подключение модуля с 4 твердотельными реле к модулю HY-DJM-5V.

Не стал я убирать светодиоды с макетной платы и, параллельно с ними, подключил модуль с 4 твердотельными реле. Вот что получилось. Как видим, все работает отлично.

Схема подключения четырех реле к модулю HY-DJM-5V.

Схема подключения четырех реле к модулю HY-DJM-5V.

На схеме 2 модуля, на каждом по 2 обычных реле. Не нашел векторного изображения модуля с четырьмя твердотельными реле, поэтому схема получилась такая. Но принцип один и тот же.

Как видим, все отлично работает, и, используя пульт радиоуправления с приемником HY-DJM-5V, можно сделать и другие интересные проекты.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#29. Подключаем драйвер мотора MX1508 к Arduino. http://portal-pk.ru/news/275-29-podklyuchaem-draiver-motora-mx1508-k-arduino.html Константин Portal-PK 2020-11-27T09:45:13+03:00 Модуль двигателя MX1508, рассмотренный в этой статье, рекламируется на Aliexpress как «Двухканальная плата драйвера двигателя постоянного тока L298N, PWM Speed Dual H Bridge Stepper Module», однако присутствует микросхема MX1508 китайского производства. Также отличаются характеристики драйвера MX1508 от L298N. Давайте рассмотрим подробней данный драйвер и разберемся, как его подключить к Arduino и управлять моторами постоянного тока.

При управлении, например, с платой Arduino UNO, можно управлять двумя двигателями, при этом вращать в любом направлении каждый двигатель. Драйвер представляет из себя Н-мост с рабочим током 800 мА и пиковым током 2,5 А, а также, со встроенной системой контроля температуры.

Модуль двигателя MX1508

Характеристики драйвера MX1508:

  • Напряжение питания модуля 2 - 9,6 В.
  • Диаметр монтажного отверстия: 2 мм.
  • Входное напряжение сигнала: 1,8- 7 В.
  • Ток для одного канала: 0,8 А.
  • Пиковый ток: до 2,5 А.
  • Ток в режиме ожидания: менее 0,1 мкА.
  • Схема защиты от перегрева: встроенная (TSD) с эффектом гистерезиса.
  • Размер: 24,7 х 21 х 7 мм.

Общие сведения о драйвере MX1508.

Основной чип модуля - это микросхема MX1508, состоящая из двух H-мостов (H-Bridge), один для выхода A, второй для выхода B, каждый канал рассчитан на 0,8 А с пиком 2,5 А. H-мост широко используется в электронике и служит для изменения вращения двигателя, схема H-моста содержит четыре транзистора (ключа) с двигателем в центре, образуя H-подобную компоновку. Принцип работы прост, при одновременном закрытии двух отдельных транзисторов, изменяется полярность напряжения, приложенного к двигателю. Это позволяет изменять направление вращения двигателя. На рисунке ниже, показана работа H-мостовой схемы.

работа H-мостовой схемы

Управлять двигателем можно низковольтным напряжением, ниже, чем напряжение на плате Arduino. Для управления скоростью используется широтно-импульсная модуляция (PWM).

Модуль MX1508 содержит разъем для подключения питания, два выхода A и B,

Модуль MX1508 содержит разъем для подключения питания, два выхода A и B, и разъем управления, с назначением каждого можно ознакомиться ниже:

  • Вывод «+» и «-» — питание модуля и двигателей, от 2 до 9,6 В;
  • Выводы A1 и A2 — используются для управления направлением вращения двигателя A;
  • Выводы B1 и B2 — используются для управления направлением вращения двигателя B;
  • Выходы MOTOR A — разъем для двигателя A;
  • Выходы MOTOR B — разъем для двигателя B;

Подключение MX1508 к Arduino (коллекторный двигатель).

Для урока понадодиться:

Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.

Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.

Первым делом, необходимо подключить источник питания от 2 до 9,6 B к модулю (в примере используется 5 В. от Arduino). Далее, подключаем управляющие провода A1, A2, B1, B2 (встречается маркировка, как на L298: IN1, IN2, IN3, IN1) к цифровым выводам Arduino 10, 11, 5 и 6. Теперь, подключаем двигатели, один к клеммам MOTOR A , а другой к клеммам MOTOR B. Схема подключения приведена ниже.

Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.

Теперь подключаем Arduino к компьютеру и загружаем скетч ниже.

const int PinA1 = 5;  // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = 6;  // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = 11;  //(ШИМ) вывод 11 соединен с выводом (pin)B2
byte speed = 250;  // измените это значение (0-255), 
                  //чтобы управлять скоростью вращения двигателей
void setup() {
  pinMode(PinA1, OUTPUT); // установите контакты на выход
  pinMode(PinA2, OUTPUT);
  pinMode(PinB1, OUTPUT);
  pinMode(PinB2, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  Serial.println("Avanti");
  forward();
  delay(2000);
  STOP();
  Serial.println("Indietro");
  backward();
  delay(2000);
  STOP();
  Serial.println("Sinistra");
  left();
  delay(2000);
  STOP();
  Serial.println("Destra");
  right();
  delay(2000);
  STOP();
}
void backward() // Вперед.
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void forward() //Назад...
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, 0);
  delay (2000);
}

Описание скетча:

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

const int PinA1 = 5;  // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = 6;  // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = 11;  //(ШИМ) вывод 11 соединен с выводом (pin)B2

Управление скоростью осуществляется с помощью ШИМ, для удобства используем переменную speed, в которой указываем скорость двигателя. Значение «0» - значит остановка, а «255» равносильно напряжению питания, и двигатели крутятся на максимальной скорости.

byte speed = 250;  // измените это значение (0-255), 
                  //чтобы управлять скоростью вращения двигателей

Далее, мы указываем, что данные выводы используем как выход.

  pinMode(PinA1, OUTPUT); // установите контакты на выход
  pinMode(PinA2, OUTPUT);
  pinMode(PinB1, OUTPUT);
  pinMode(PinB2, OUTPUT);

Направление вращения двигателя осуществляется с помощью выводов A1 и A2 - для первого двигателя, B1 и B2 - для второго двигателя, то есть, если подать на вывод A1 — 0B (LOW), а на A2 — 5B (HIGH), двигатель A будет вращаться вперед (так же и для двигателя B). Для вращения назад, необходимо подать на A1 — 5B (HIGH), а на A2 — 0B (LOW), двигатель A будет вращаться назад (так же и для двигателя B). На основании этого напишем небольшие функции, которые позволят вращать оба двигателя вперед, назад, в противоположном направлении, и останавливать вращение обоих двигателей.

void backward() // Вперед.
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void forward() //Назад...
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, 0);
  delay (2000);
}

Реализуем вывод в монитор порта информацию о направлении вращения двигателя в данный момент.

  Serial.println("Avanti");
  forward();
  delay(2000);

Реализуем вывод в монитор порта информацию о направлении вращения двигателя в данный момент.

Это поможет определить, правильно ли мы всё подключили, или нет. Если двигатели будут вращаться не в том направлении, как выводится в мониторе порта, то необходимо поменять местами провода подключения двигателей, и повторить проверку. Эта информация позволит настроить минимальный код для создания радиоуправляемой машины. Вот такие машинки я делал на Arduino и ESP8266 с использованием драйвера L298:

Используя драйвер MX1508, собрать данные проекты не составит труда, так как код из проектов выше совместим с драйвером MX1508.

Вот такие машинки я делал на Arduino и ESP8266 с использованием драйвера L298

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#28. Подключение модуля освещенности к Arduino. http://portal-pk.ru/news/274-28-podklyuchenie-modulya-osveshchennosti-k-arduino.html Константин Portal-PK 2020-11-21T12:39:28+03:00 В данном Arduino уроке подключим модуль освещённости к Arduino, и научимся настраивать датчик для работы при различной освещённости. В основе датчика лежит светочувствительный полупроводниковый прибор – фоторезистор. Что такое фоторезистор, и как его можно подключить к Arduino, рассматривали в предыдущем уроке: «Подключение фоторезистора к Arduino». В чем преимущество модуля освещённости, и как его использовать в Arduino проектах, рассмотрим в данном уроке.

Два вида моделей освещённости.

При покупке модуля освещённости, нужно определиться с вашей задачей. Что вы планируете собрать, и как должен работать модуль освещённости. Это связано с тем, что модули освещённости бывают разные. На фото ниже приведены 2 модуля освещённости.

Два вида моделей освещённости.

Аналоговый модуль освещённости KY-018.

Arduino модуль освещённости KY-018 черного цвета. Этот модуль состоит из фоторезистора и линейного резистора 10 кОм. Сопротивление фоторезистора будет уменьшаться при наличии света, и увеличиваться при его отсутствии. Выход аналоговый, и он определяет интенсивность света.

Аналоговый модуль освещённости KY-018.

Для урока понадодиться:

Схема подключения модуля освещённости KY-018 к Arduino.

Схема подключения модуля освещённости KY-018 к Arduino.

На модуль подается питание 5 Вольт, а в зависимости от освещенности в помещении, на выходе модуля (S) меняется напряжение от 0 до 5 Вольт. При подаче этого сигнала на аналоговый вход микроконтроллера, Arduino преобразует сигнал, при помощи АЦП, в диапазоне значений от 0 до 1023.

Скетч для модуля освещённости KY-018.

Скетч для модуля освещённости KY-018.

Так как у датчика выход аналоговый, как и у фоторезистора, код можно взять из предыдущего урока без изменения. Например, скетч Светильника с автоматическим включением.

byte sensorPin = A0;
byte ledPin = 3;
// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения 
int value = 0;
void setup() {
  // Пин 3 со светодиодом будет выходом (англ. «output»)
  pinMode(ledPin, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(sensorPin, INPUT);
}
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(sensorPin);
  // value значение в диапозоне от 0 до 1023
  // Полученные значения на аналоговом входе A0 делим на 4 
  //чтобы уложиться в диопозон от 0 до 255
  data = value / 4;
  // Включаем светодиод с полученной ранее мощностью - от 0 до 255
  analogWrite(ledPin, data);
}

Цифровой датчик освещённости на LM393.

Модуль синего цвета устроен по-другому, и подключается уже к цифровому пину Arduino, и на выходе формирует логическую единицу, либо логический ноль. Давайте рассмотрим данный модуль и поговорим подробнее.

Цифровой датчик освещённости на LM393.

Модуль освещенности на LM393.

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

Технические параметры

  • Напряжение питания: 3.3 В. - 5.5 В.
  • Потребляемый ток: 10 мА.
  • Цифровой выход: TTL (лог 1 или лог 0)
  • Аналоговый выход: 0 В. … Vcc
  • Диаметр монтажного отверстия: 2.5 мм.
  • Выходной ток: 15 мА.
  • Габариты: 42мм. х 15мм. х 8мм.

Общие сведения датчик освещённости на LM393.

Существуют два модуля на базе LM393, их визуальное отличие только в количестве выводов (3 pin и 4 pin), дополнительный вывод добавлен для снятия прямых показаний с фоторезистора (аналоговый выход), по аналогии работы модуля KY-018. Рассмотрим четырех контактный вариант модуля. У этих двух модулей измерение осуществляется с помощью фоторезистора, который изменяет напряжение в цепи, в зависимости от количества света, попадающего на него. Чтобы представить, как свет будет влиять на фоторезистор, приведу краткую таблицу.

Общие сведения датчик освещённости на LM393.

Модуль освещенности с четырьмя выводами содержит два выходных контакта, аналоговый и цифровой, и два контакта для подключения питания. Для считывания аналогово сигнала предусмотрен отдельный вывод «AO», с которого можно считать показания напряжения с 0 В … 3.3 В или 5 В, в зависимости от используемого источника питания. Цифровой вывод DO, устанавливается в лог «0» или лог «1», в зависимости от яркости, чувствительность выхода можно регулировать с помощью поворотного потенциометра. Выходной ток цифрового выхода способен выдать более 15 мА, что очень упрощает использование модуля, и дает возможность использовать его, минуя контроллер Arduino, и подключая его напрямую к входу одноканального реле, или одному из входов двухканального реле. Принципиальная схема модуля освещенности на LM393 с 3 pin и 4 pin, показана ниже.

Принципиальная схема модуля освещенности на LM393 с 4 pin.

Принципиальная схема модуля освещенности на LM393 с 4 pin

Принципиальная схема модуля освещенности на LM393 с 3 pin.

Принципиальная схема модуля освещенности на LM393 с 3 pin

Теперь, как же работает схема. Фоторезистор показан Foto (IN). Основная микросхема модуля - это компаратор LM393 (U1), который производит сравнение уровней напряжения на входах INA- и INA+. Чувствительность порога срабатывания задается с помощью потенциометра R2, и, в результате сравнений, на выходе D0, микросхемы U1, формируется лог «0», или лог «2», который поступает на контакт D0 разъема J1.

Цифровой датчик освещённости на LM393.

Назначение J1 (в исполнении 4 pin)

  • VCC - «+» питание модуля
  • GND - «-» питание модуля
  • D0 - цифровой выход
  • A0 -аналоговый выход

Назначение J1 (в исполнении 3 pin)

  • VCC - «+» питание модуля
  • GND - «-» питание модуля
  • D0 - цифровой выход

Подключение модуля освещенности к Arduino UNO.

Подключение модуля освещенности к Arduino UNO.

Подключение модуля освещенности к Arduino NANO

Подключение модуля освещенности к Arduino UNO


Подключение:

В данном примере буду использовать модуль освещенности LM393, 3 pin, и Arduino UNO, все данные будут передаваться в «Мониторинг порта». Схема не сложная, необходимо всего три провода, сначала подключаем D0 к 2 цифровому пину Arduino, осталось подключить питание GND к GND и VCC к 5V (можно запитать и от 3.3В), схема собрана, теперь надо подготовить программную часть.

Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.

int pinD0 = A1;                    // Пин к которому подключен D0
// Присваиваем имя для порта 9 со светодиодом
#define LED 13

void setup() 
{
  // Пин 9 со светодиодом будет выходом (англ. «output»)
  pinMode(LED, OUTPUT);
  pinMode (pinD0, INPUT);          // Установим вывод A1 как вход
  Serial.begin (9600);             // Задаем скорость передачи данных
}

void loop() 
{
  int xD0;                     // Создаем переменные
  xD0 = digitalRead (pinD0);        // считываем значение с порта pinD0

  Serial.print("Sensor: ");         // Выводим текст
    
  if (xD0 == HIGH)                  // Если xD0 равно "1" 
   {            
     Serial.println ("ON");         // Выводим текст
     digitalWrite(LED, HIGH);
   }
  else
   {
    Serial.println ("OFF");         // Если xD0 равно "0" 
    digitalWrite(LED, LOW);
   }
delay (500);                        // Ждем 500 мкс.
}

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

В мониторе порта можно увидеть, когда модуль освещенности срабатывает и отключается

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

Как видим, датчиков освещенности для Arduino проектов существует несколько.

В этом уроке мы рассмотрели, как подключить модуля освещенности к Arduino, в предыдущем уроке мы подключили фоторезистор к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#27. Подключение фоторезистора к Arduino. http://portal-pk.ru/news/273-27-podklyuchenie-fotorezistora-k-arduino.html Константин Portal-PK 2020-11-16T16:23:21+03:00 Сегодня в уроке рассмотрим, что такое фоторезистор, и подключим его в Arduino UNO и Arduino NANO. Рассмотрим пару примеров как с помощью данного элемента электрической цепи можно управлять яркостью светодиода и светильника.

Что такое Фоторезистор?

У полупроводниковых материалов есть много интересных свойств. Одно из них – изменение сопротивления под действием света.Электрическое сопротивление полупроводниковых элементов используется в приборах под названием «фоторезистор».

Что такое Фоторезистор?

Полупроводниковый резистор может изменять параметры электрического тока, в зависимости от интенсивности освещения. Это свойство часто используют на практике для создания устройств, управляемых потоком излучения. Сегодня промышленность поставляет на рынок фоторезисторы с различными характеристиками, а это значит, что они еще находят применение в современных электротехнических устройствах.

Фоторезистор — это полупроводниковый прибор (датчик), который при облучении светом изменяет (уменьшает) свое внутреннее сопротивление.

Устройство фоторезистора.

В основе каждого фоторезистора лежит подложка, чаще всего керамическая, покрытая слоем полупроводникового материала. Поверх этого полупроводника наносится змейкой тонкий слой золота, платины или другого коррозиестойкого металла. Слои наносятся методом напыления.

Устройство фоторезистора.

Напыленный слой соединяют с электродами, на которые поступает электрический ток.

Для урока понадодиться:

Подключение фоторезистора к Arduino.

В этом уроке соберем электрическую схему «умного» светильника. Если в одном из предыдущих уроков, с помощью ШИМ сигнала, изменяли яркость светодиода, то сегодня мы будем использовать фоторезистор в схеме для автоматического включения светодиода. Фоторезистор будет играть роль переменного сопротивления, которое изменяет напряжение на аналоговом входе A0.

Подключение фоторезистора к Arduino.

Для урока понадобиться:

  • Arduino Uno или Arduino Nano
  • макетная плата
  • 1 фоторезистор
  • 1 светодиод
  • 2 резистора 220 Ом
  • провода «папа-папа»

Схема подключения фоторезистора к Arduino UNO.

Схема подключения фоторезистора к Arduino UNO.

Соберите электрическую цепь, как на картинке выше. Принцип работы схемы в том, что в электрической цепи будет меняться сопротивление, в зависимости от освещенности в помещении, а значит, будут меняться данные на аналоговом входе. После сборки принципиальной схемы с фоторезистором, подключите Arduino к компьютеру и загрузите следующую программу в микроконтроллер.

byte sensorPin = A0;
byte ledPin = 3;
// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения 
int value = 0;
void setup() {
  // Пин 3 со светодиодом будет выходом (англ. «output»)
  pinMode(ledPin, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(sensorPin, INPUT);
}
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(sensorPin);
  // value значение в диапозоне от 0 до 1023
  // Если значение value на входе A0 меньше 500, включаем светодиод
  if (value<500) digitalWrite(ledPin, HIGH);
  // В противном случае (если value>500), выключаем светодиод 
  if (value>500) digitalWrite(ledPin, LOW);
}

Пояснения к коду:

  • для удобства, создали переменные: подключения фоторезистора и светодиода;
  • оператор int указывает, что значение value может принимать только целое число, а начальное значение value равно нулю;
  • условный оператор if позволяет определить действие при истинном условии. Оператор else позволяет определить действие, когда условие ложно.

Скетч умного светильника на Arduinoи фоторезисторе.

byte sensorPin = A0;
byte ledPin = 3;

// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения 
int value = 0;
 
void setup() {
  // Пин 3 со светодиодом будет выходом (англ. «output»)
  pinMode(ledPin, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(sensorPin, INPUT);
}
 
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(sensorPin);
  // value значение в диапозоне от 0 до 1023
  // Полученные значения на аналоговом входе A0 делим на 4 
  //чтобы уложиться в диопозон от 0 до 255
  data = value / 4;
  
  // Включаем светодиод с полученной ранее мощностью - от 0 до 255
  analogWrite(ledPin, data);
}

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

Пояснения к коду:

  • в этом скетче мы добавили переменную data, которая равна value, деленная на 4;
  • пин 9 мы использовали, как аналоговый выход, который плавно изменяет яркость свечения светодиода, в зависимости от значения data.

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

В этом уроке мы рассмотрели, как подключить фоторезистор к Arduino, в предыдущем уроке мы подключили инфракрасный датчик препятствия YL-63 к Arduino.

В этом уроке мы рассмотрели, как подключить фоторезистор к Arduino, в предыдущем уроке мы подключили инфракрасный датчик препятствия YL-63 к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.


]]>
#26. Подключение инфракрасного датчика препятствия YL-63 к Arduino. http://portal-pk.ru/news/272-26--podklyuchenie-infrakrasnogo-datchika-prepyatstviya-yl-63.html Константин Portal-PK 2020-11-11T16:11:02+03:00 Сегодня в Arduino Уроке рассмотрим принцип работы инфракрасного датчика препятствия, или как еще его называют, датчик обхода препятствия YL-63 (или FC-51). И научимся подключать датчик к Arduino и рассмотрим пример кода.

Инфракрасный датчик препятствия я YL-63 широко применяется в робототехнике, когда нужно определить препятствие, и объехать его. Поэтому его и называют, иногда, датчиком обхода препятствий. Кроме робототехники данный датчик можно использовать в других Arduino проектах, в которых необходимо определить препятствия. Я использовал данный датчик в следующих Arduino проектах:

Данный датчик можно использовать и в других Arduino проектах для определения препятствия.

Технические параметры YL-63 (FC-51).

  • Напряжение питания: 3.3 В - 5.5 В.
  • Потребляемый ток: 10 мА.
  • Цифровой выход: TTL (лог 1 или лог 0)
  • Диаметр монтажного отверстия: 2.5 мм.
  • Выходной ток: 15 мА.
  • Габариты: 42мм. х 15мм. х 8мм.

Описание датчика препятствия YL-63 (FC-51).

Модуль содержит инфракрасный передатчик (ИК диод), излучающий свет в прямом направлении (~ 700 нм, этот свет не виден невооруженным глазом, его можно увидеть только камерой), и приемник (фотодиод), который измеряет отраженное ИК излучение.

700 нм, этот свет не виден невооруженным глазом, его можно увидеть только камерой)

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

одуль содержит инфракрасный передатчик (ИК диод), излучающий свет в прямом направлении

Основная микросхема ИК датчика препятствия - это компаратор LM393 (U1), который производит сравнение уровней напряжений на входах INB- и INB+. Чувствительность порога срабатывания задается с помощью потенциометра R2 и, в результате сравнений, на выходе OUTB микросхемой U1 формируется «LOW» или «HIGH». Принципиальная схема ИК модуля препятствия показана на рисунке ниже.

Принципиальная схема ИК модуля препятствия

Оптический датчик YL-63 относится к классу диффузионных. Название группы датчиков возникло из-за, лежащего в основе работы, датчика отражения излучения по множествам направлений – диффузии излучения отражающей поверхностью. Работа устройства заключается определении освещенности фотоприемника. Поскольку YL-63 фиксирует отраженное излучение, то возникает погрешность измерения расстояния, вызванная различной отражающей способностью поверхностей объектов, изготовленных из разнообразных материалов.

Оптический датчик YL-63 относится к классу диффузионных.

Коэффициенты расстояния для отражения от различных материалов.

Коэффициенты расстояния для отражения от различных материалов.

Различное отражение и поглощение излучения разных материалов используются для работы воспринимающего узла тахометра. Предположим, у нас есть двигатель Стирлинга. Требуется узнать количество оборотов в минуту вала двигателя. Нас выручит YL-63. Достаточно приклеить на маховик фрагмент белой бумаги, направить луч датчика на маховик и получим воспринимающий узел тахометра. Для снижения последствий различных помех, обрабатывающим микроконтроллером накапливаются данные, полученные от датчика за короткий промежуток времени, и производится усреднение. Датчик YL-63 может работать в приборах, не имеющих микроконтроллера.

Индикаторы на плате датчика YL-63.

На плате модуля расположены два индикатора. Свечение зеленого сообщает о включении питания.

Индикаторы на плате датчика YL-63.

Красный светодиод светится, если в зоне обнаружения находится объект. Цвет индикатора может быть другим. На фото ниже приведён датчик, у которого оба индикатора зеленого цвета.

Контакты YL-63.

Датчик препятствия YL-63 ( FC-51) имеет вилку разъема из трех контактов:

Индикаторы на плате датчика YL-63.

  • VCC – питание,
  • GND – общий провод,
  • OUT – выход.

Установка расстояния срабатывания.

Установка расстояния срабатывания.

Настройку устройства облегчает работа индикатора обнаружения. Это позволяет настроить YL-63 (FC-51) на срабатывание в реальных условиях. Установка чувствительности датчика выполняется с помощью переменного резистора, установленного на плате. Препятствие устанавливается на требуемом удалении от фотоприборов датчика. Поворотом подвижного контакта переменного резистора, на плате модуля YL-63, выполняется установка расстояния срабатывания, тем самым добиваются включения красного светодиода. Затем проверяют дистанцию срабатывания перемещением отражающего объекта.

Подключение ИК модуля препятствия YL-63 к Arduino.

Для урока понадодиться:

Подключение ИК модуля препятствия YL-63 к Arduino.

В данном примере буду использовать ИК модуль препятствия, YL-63 и Arduino UNO, данные будут передаваться в «Мониторинг порта». Схема не сложная, сначала необходимо подключить питание, GND к GND и VCC к 5V (можно записать и от 3,3В.), затем подключаем вывод OUT к 7 пину Arduino. Схема подключения ниже.

Подключение ИК модуля препятствия YL-63 к Arduino.

Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.

int irsensor= 7;                    // Вывод OUT на модуле подключен к выходу 7 Arduino
int sensorvalue;                    // Переменная для хранения показаний датчика 
 
void setup()                
{
 Serial.begin(9600);                // Задаем скорость передачи данных
 pinMode(irsensor,INPUT);           // Установим вывод D0 как вход                                                                                                                                                                                
}
 
void loop()
{
 sensorvalue=digitalRead(irsensor); // Считываем показания в переменной sensorvalue.
 Serial.print("Sensor ==");         // Выводим текст
 Serial.println(sensorvalue);       // Выводим текст
 if (sensorvalue==1)
 {
  Serial.println(" No obstacle");   // Выводим текст
  digitalWrite(13,LOW);             // Выключаем светодиод
  delay (500);                      // Ждем 500 мкс
 }
  else 
 {
 Serial.println(" Obstacle ");      // Выводим текст
 digitalWrite(13,HIGH);             // Включаем светодиод
 delay (500);                       // Ждем 500 мкс
 }
}

В мониторинге порта можно увидеть показания с модуля препятствия YL-63 . При выводе в монитор порта значения «1», - значит, что препятствия нет. Вывод значения «0» - означает, что препятствие найдено.

Подключение ИК модуля препятствия YL-63 к Arduino. Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.

Используя такую несложную логику можно настроить работу робота, чтобы он обнаруживал препятствия, и объезжал их. Для реализации данного алгоритма работы понадобится несколько модулей препятствия, например, 3 штуки. Существуют готовые модули с 5 датчиками препятствия. Как подключить данный модуль препятствия будем рассматривать в следующих Arduino уроках и Arduino проектах.

Подключение ИК модуля препятствия YL-63 к Arduino.

В данном уроке рассмотрели Подключение инфракрасного датчика препятствия YL-63 к Arduino. В предыдущем уроке мы рассматривали, Подключение датчика температуры и давления BMP180 к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#25. Подключение датчика температуры и давления BMP180 к Arduino. http://portal-pk.ru/news/271-25-podklyuchenie-datchika-temperatury-i-davleniya-bmp180-k.html Константин Portal-PK 2020-11-08T07:51:02+03:00 Сегодня в Arduino уроке научимся подключать датчик температуры и давления BMP180 к Arduino.

Данный датчик отлично подойдёт для Arduino проекта, в котором необходимо измерять температуру и давление окружающей среды. Благодаря I2C интерфейсу подключения, данный датчик не занимает дополнительных пинов. Напряжение питания от 3.3 до 5 вольт, что позволяет использовать BMP180 как с Arduino, так и с такими микроконтроллерами как ESP32, ESP8266 и STM32. Если вас интересуют уроки по программированию ESP32, ESP8266, то на моем втором сайте «Ардуино технологии» вы найдете уроки по данной теме, и много другой полезной информации.

Сегодня в Arduino уроке научимся подключать датчик температуры и давления BMP180 к Arduino.

BMP180 достаточно точный датчик, погрешность измерения давления: 0,1 гектопаскаль, и погрешность измерения температуры: 0,1°С.

Параметры датчика давления и температуры BMP180.

  • Напряжение питания: 3.3 В – 5 В.
  • Рабочий ток: 0.5 мA.
  • Диапазон измеряемого давления:300 гПа. – 1100 гПа.
  • Интерфейс: I2C
  • Время срабатывания: 4.5 мс.
  • Точность измерения давления: 0.1 гектопаскаль
  • Точность измерения температуры: 0.1°С
  • Габариты: 15 мм. х 14 мм.

Общие сведения.

Параметры датчика давления и температуры BMP180.

Давайте рассмотрим данный датчик. В левой части расположен сам сенсорный датчик BMP180 фирмы Bosch. Так как датчик BMP 180 работает от 3.3В (а почти все платы Arduino работают на 5В), на плате предусмотрен стабилизатор напряжения XC6206P332MR в корпусе SOT-23, который выдает на выходе напряжение в 3.3В, рядом установлена обвязка стабилизатора, состоящая из двух керамических конденсаторов на 1 мкФ. Подключение осуществляется по интерфейсу I2C, линии SCL и SDA выведены на группу контактов на другой стороне модуля, туда же выведено и питание. Последние два резистора на 4.7 кОм необходимы для подтяжки линии SCL и SDA к питанию, конечно, при необходимости, их можно выпаять, если используете несколько устройств на I2C линии.

Рассмотрим датчик давления и температуры BMP180 (Digital Pressure Sensor)

Рассмотрим датчик давления и температуры BMP180 (Digital Pressure Sensor)

Датчик поставляется в виде модуля (на печатной плате) с 4 или 5 выводами:

  • если у модуля 4 вывода (VIN GND SCL SDA), то на вывод VIN подаётся питание +3,3в.
  • если у модуля 5 выводов (VIN 3V3 GND SCL SDA), то на вывод VIN подаётся +5в. (так же можно запитать модуль с 5 выводами от 3,3в, подав их на вывод 3V3 оставив вывод VIN свободным)
  • если у модуля 5 выводов с выводом IO или VDDIO, то считайте, что у вашего модуля 4 вывода. Не подавайте +5в!!!

Выводы датчика BMP180:

1 - CS, 2 - VDD, 3 - VDDIO, 4 - MOSI, 5 - CSL (CSLK), 6 - SDA (MISO), 7 - GND.

Датчик имеет возможность передачи данных, используя интерфейсы I2C (выводы: 5-CSL и 6-SDA) или SPI (выводы: 1-CS, 4-MOSI, 5-CSLK и 6-MISO)

В рассматриваемых модулях используется протокол I2C, а значит, выводы 1 и 4 датчика не используются, но должны быть припаяны к плате для симметрии

Виды некоторых модулей с установленным датчиком BMP180:

Виды некоторых модулей с установленным датчиком BMP180

В примере будем использовать первый датчик BMP180, из указанных выше.

Выводы модуля BMP180:

  • VIN (Vcc, Vdd) плюс питания;
  • GND (-) (англ. GrouND) общий (минус питания);
  • SDA (DA) (англ. Serial DAta) линия данных, интерфейс I2C
  • SCL (CL) (англ. Serial CLock) линия тактирования, интерфейс I2C

Принципиальная схема датчика BMP180, показана ниже.

Принципиальная схема датчика BMP180

Подключение датчика давления BMP180 к Arduino.

Для урока понадодиться:

Подключение датчика давления BMP180 к Arduino:

В данном примере используем датчик BMP 180 и плату Arduino NANO, все полученные показания отправляем в «Монитор порта», в принципе и все, осталось собрать схему по рисунку ниже. Для интерфейса I2C на плате Arduino предусмотрено только два вывода A4 и A5.

 датчик BMP 180 и плату Arduino NANO

Подключение датчика давления BMP180 к Arduino NANO.

Подключение датчика давления BMP180 к Arduino UNO

Подключение датчика давления BMP180 к Arduino UNO.

Теперь, о программной части. Для нашего удобства разработана библиотека BMP180 Breakout Arduino Library, которая позволяет упросить работу с датчиком, скачиваем и устанавливаем ее.

#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 pressure;                          // Объявляем переменную для доступа к SFE_BMP180

void setup()
{
 Serial.begin(9600);                          // Задаем скорость передачи данных
 Serial.println("REBOOT");                    // Вывод текста "Перезагрузка"

 if(pressure.begin())                         // Инициализация датчика
     Serial.println("BMP180 init success");   // Вывод текста "BMP180 подключен"
   else{                                      // В противном случаи, датчик не подключен
     Serial.println("BMP180 init fail\n\n");  // Вывод текста "BMP180 не подключен"
     while(1);                                // Пауза.
       }
}

void loop()
{
  char status;
  double T,P,p0,a;

/* Так как давление зависит от температуры, надо сначало узнать температуру 
 * Считывание температуры занимает какоето время. 
 * Если все хорошо, функция pressure.startTemperature вернет status с количеством милисикунд
 * которые нужно подождать. Ксли какае то проблема, то функция вернет 0.
*/

  status = pressure.startTemperature();       // Считывание показания
  if(status!=0){                              // Если значение status не 0, выполняем следующию команду.
     delay(status);                           // Ждем     
     status = pressure.getTemperature(T);     // Полученые показания, сохраняем в переменную T
      if(status!=0){                          // Если все хорошо, функция вернет 1, иначе вернет 0
         Serial.print("Temperature: ");       // Вывод текста "Температура"
         Serial.print(T,2);                   // Вывод показания переменной "Т"
         Serial.println(" C, ");              // Вывод текста "С"

/* Определяем показания атмосферного давления
 * Параметр указывает расширение, от 0 до 3 (чем больше расширение, тем больше точность, тем долше ждать)
 * Если все хорошо, функция pressure.startTemperature вернет status с количеством милисикунд
 * которые нужно подождать. Если какая то проблема, то функция вернет 0.
*/

  status = pressure.startPressure(3);         // Считывание показания
  if(status!=0){                              // Если значение status не 0, выполняем следующию команду.
     delay(status);                           // Ждем
     status = pressure.getPressure(P,T);      // Полученные показания, сохраняем в переменную P
      if(status!=0){                          // Если все хорошо, функция вернет 1, иначе вернет 0 
         Serial.print("Absolute pressure: "); // Вывод текста "Атмосферное давление"
          Serial.print(P,2);                  // Вывод показания переменной mBar
          Serial.print(" mbar, ");            // ПВывод текста "mBar"
          Serial.print(P*0.7500637554192,2);  // Вывод показания в mmHg
          Serial.println(" mmHg");}           // Вывод текста "mmHg"

  else Serial.println("error retrieving pressure measurement\n");}    // Ошибка получения давления
  else Serial.println("error starting pressure measurement\n");}      // Ошибка запуска получения давления
  else Serial.println("error retrieving temperature measurement\n");} // Ошибка получения температуры
  else Serial.println("error starting temperature measurement\n");    // Ошибка запуска получения температуры
  delay(5000);                                                        // Пауза в 5с
}

Загружаем скетч в плату Arduino, и если все правильно подключено, то в окне мониторинга порта можно увидеть температуру и атмосферное давление.

Загружаем скетч в плату arduino,

В данном уроке рассмотрели Подключение датчика температуры и давления BMP180 к Arduino. В предыдущем уроке мы рассматривали, как можно реализовать анимацию на сегментном дисплее TM1637.

В данном уроке рассмотрели Подключение датчика температуры и давления BMP180 к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Конденсатор. Принцип работы, основные характеристики. http://portal-pk.ru/news/270-kondensator-princip-raboty-osnovnye-harakteristiki.html Константин Portal-PK 2020-10-29T13:46:00+03:00 Конденсатор — распространенный двухполюсный электронный компонент, главным свойством которого является способность накапливать электрический заряд и «отпускать» его обратно. Процесс накопления заряда называется зарядкой, а процесс его потери – разрядкой.

Выпускаются конденсаторы самых разных типов и конструкций. Наиболее распространены в электронике и любительской радиотехнике следующие виды:

  • Керамические конденсаторы
  • Танталовые конденсаторы
  • Электролитические конденсаторы
  • Конденсаторы переменной емкости

Выпускаются конденсаторы самых разных типов и конструкций.

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

В простейшем виде конденсатор состоит их двух металлических пластин, называемых обкладками, которые разделены слоем диэлектрика.

В простейшем виде конденсатор состоит их двух металлических пластин

При включении конденсатора в цепь с источником тока, под воздействием электрического поля на одной обкладке накапливается положительный заряд, а на другой – отрицательный. Это будет происходить до тех пор, пока на обкладках не накопится максимально возможное количество заряда. Оно определяется важной характеристикой конденсатора — емкостью. Емкость конденсатора определяется количеством заряда, которое он может накопить при заданном напряжении:

Формула емкости.

Формула емкости

C — емкость конденсатора, q — заряд, U — напряжение.

Емкость зависит от таких физических характеристик, как, например, площадь обкладок, расстояние между ними и диэлектрическая проницаемость диэлектрика. Единицей измерения емкости конденсаторов в международной системе единиц (СИ) является Фарад (Ф).

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

Основные параметры конденсаторов:

  • Основной характеристикой конденсатора является его ёмкость, характеризующая способность конденсатора накапливать электрический заряд. В обозначении конденсатора фигурирует значение номинальной ёмкости, в то время как реальная ёмкость может значительно меняться в зависимости от многих факторов. Реальная ёмкость конденсатора определяет его электрические свойства. Так, по определению ёмкости, заряд на обкладке пропорционален напряжению между обкладками. Типичные значения ёмкости конденсаторов составляют от единиц пикофарад до тысяч микрофарад. Однако существуют конденсаторы (ионисторы) с ёмкостью до десятков фарад.
  • Конденсаторы также характеризуются удельной ёмкостью — отношением ёмкости к объёму (или массе) диэлектрика. Максимальное значение удельной ёмкости достигается при минимальной толщине диэлектрика, однако при этом уменьшается его напряжение пробоя.
  • Плотность энергии электролитического конденсатора зависит от конструктивного исполнения. Максимальная плотность достигается у больших конденсаторов, где масса корпуса невелика по сравнению с массой обкладок и электролита.
  • Другой, не менее важной характеристикой конденсаторов является номинальное напряжение — значение напряжения, обозначенное на конденсаторе, при котором он может работать в заданных условиях в течение срока службы с сохранением параметров в допустимых пределах. Номинальное напряжение зависит от конструкции конденсатора и свойств применяемых материалов. При эксплуатации напряжение на конденсаторе не должно превышать номинального. Для многих типов конденсаторов с увеличением температуры допустимое напряжение снижается, что связано с увеличением тепловой скорости движения носителей заряда и, соответственно, снижению требований для образования электрического пробоя.
  • Полярность. Многие конденсаторы с оксидным диэлектриком (электролитические) функционируют только при корректной полярности напряжения из-за химических особенностей взаимодействия электролита с диэлектриком. При обратной полярности напряжения электролитические конденсаторы обычно выходят из строя из-за химического разрушения диэлектрика с последующим увеличением тока, вскипанием электролита внутри и, как следствие, с вероятностью взрыва корпуса.

Основная классификация конденсаторов проводится по типу диэлектрика в конденсаторе. Тип диэлектрика определяет основные электрические параметры конденсаторов: сопротивление изоляции, стабильность ёмкости, величину потерь и др.

По виду диэлектрика различают:

  • Конденсаторы вакуумные (между обкладками находится вакуум).
  • Конденсаторы с газообразным диэлектриком.
  • Конденсаторы с жидким диэлектриком.
  • Конденсаторы с твёрдым неорганическим диэлектриком: стеклянные (стеклоэмалевые, стеклокерамические, стеклоплёночные), слюдяные, керамические, тонкослойные из неорганических плёнок.
  • Конденсаторы с твёрдым органическим диэлектриком: бумажные, металлобумажные, плёночные, комбинированные — бумажноплёночные, тонкослойные из органических синтетических плёнок.
  • Электролитические и оксидно-полупроводниковые конденсаторы. Такие конденсаторы отличаются от всех прочих типов, прежде всего, большой удельной ёмкостью. В качестве диэлектрика используется оксидный слой на металлическом аноде. Вторая обкладка (катод) — это или электролит (в электролитических конденсаторах), или слой полупроводника (в оксидно-полупроводниковых), нанесённый непосредственно на оксидный слой. Анод изготовляется, в зависимости от типа конденсатора, из алюминиевой, ниобиевой или танталовой фольги или спечённого порошка. Время наработки на отказ типичного электролитического конденсатора 3000-5000 часов при максимально допустимой температуре, качественные конденсаторы имеют время наработки на отказ не менее 8000 часов при температуре 105°С. Рабочая температура — основной фактор, влияющий на продолжительность срока службы конденсатора. Если нагрев конденсатора незначителен из-за потерь в диэлектрике, обкладках и выводах, (например, при использовании его во времязадающих цепях при небольших токах или в качестве разделительных), можно принять, что интенсивность отказов снижается вдвое при снижении рабочей температуры на каждые 10 °C вплоть до +25 °C. Твердотельные конденсаторы — вместо традиционного жидкого электролита используется специальный токопроводящий органический полимер или полимеризованный органический полупроводник. Время наработки на отказ ~50000 часов при температуре 85°С. ЭПС меньше чем у жидко-электролитических и слабо зависит от температуры. Не взрываются.

Последовательное соединение конденсаторов.

Последовательное соединение конденсаторов

При последовательном соединении конденсаторов уменьшается общая емкость и увеличивается общее напряжение конденсаторов. Общая емкость при последовательном соединении конденсаторов будет вычисляться по формуле:

Последовательное соединение конденсаторов

Общее напряжение будет равняться сумме напряжений всех конденсаторов.

Например: мы имеем три конденсатора по 30 мкФ x 100 В каждый. При их последовательном соединении общий конденсатор будет иметь следующие данные: 10 мкФ x 300 В.

Параллельное соединение конденсаторов.

Параллельное соединение конденсаторов

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

Параллельное соединение конденсаторов

Например: мы имеем три конденсатора 30 мкФ x 100 В, соединённые параллельно. Параметры всего набора конденсаторов в этом случае будут следующие: 90 мкФ x 100 В.

Соединение более двух конденсаторов последовательно редко встречается в реальных схемах. Хотя для увеличения общего напряжения такой набор может встретиться в высоковольтных источниках питания. А вот в низковольтных источниках довольно часто встречается параллельное соединение нескольких конденсаторов для сглаживания пульсаций после выпрямления при больших токах потребления.

Обратите внимание, формулы вычисления емкости последовательного и параллельного соединения конденсаторов в точности обратны формулам вычисления сопротивления при последовательном и параллельном соединении резисторов.

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Обзор драйвера шагового двигателя DRV8825 и A4988. http://portal-pk.ru/news/269-obzor-draivera-shagovogo-dvigatelya-drv8825-i--a4988.html Константин Portal-PK 2020-10-07T15:01:41+03:00 На моем новом сайте про ЧПУ станки и ЧПУ технологии (CNC-tex.ru) вышли две новые статьи про драйвера шаговых двигателей DRV8825 иA4988.

драйвера шаговых двигателей DRV8825 иA4988

Драйвера DRV8825 иA4988 широко применяются в разработке ЧПУ станков различного назначения. Начиная от простых плоттеров для рисования и выкройки ткани и рекламной плёнки, до более сложных станков, таких как настольные фрезерные станки с ЧПУ. Кстати, данные драйвера также используются в 3D принтерах. Но последнее время использовать данные драйвера для управления шаговыми двигателями в 3D принтерах стали редко. Это связанно с тем, что DRV8825 иA4988 имеют небольшое деление шага A4988 максимум 1/16, а DRV8825 1/32. Также новые версии драйверов, например TMC-2208, обеспечивают более тихую работу шаговых двигателей.

Подробную информацию и техническое описание драйвера A4988

Подробную информацию и техническое описание драйвера A4988 читайте тут:

Драйвер шагового двигателя A4988.

Подробную информацию и техническое описание драйвера DRV8825

Подробную информацию и техническое описание драйвера DRV8825 читайте тут:

Драйвер шагового двигателя DRV8825. Подключение к Arduino.

Также рекомендую к прочтению Плата расширения для Arduino UNO, CNC shield v3 и драйверов A4988.

Если вы планируете собрать самостоятельно ЧПУ станок, то читайте

ЧПУ станок своими руками на базе arduino. Пошаговая инструкция + видео

Не забывайте подписываться на мой YouTube канал, вступить в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в следующей статье.

]]>
6 частых ошибок начинающих предпринимателей, и способы их избежать http://portal-pk.ru/news/268-6-chastyh-oshibok-nachinayushchih-predprinimatelei-i-sposoby.html Константин Portal-PK 2020-09-16T07:38:59+03:00

Планирование и запуск собственного бизнеса – это время чистого творчества, неподдельного азарта, нескончаемого стресса и большого количества кофе. Иногда вам будет казаться, что вы даже вздохнуть не можете, не говоря уже, о том, чтобы принять сложные и стратегически выверенные решения. Поэтому так важно учитывать опасности, которые подстерегают начинающих предпринимателей. Ниже представлена подборка шести самых распространенных.


1.Использование чужой интеллектуальной собственности

Если кто-то придумал классный слоган, и вам кажется, что лучше уже и не скажешь, даже не думайте его повторить. Автор все равно узнает свое творение и тогда судебных исков не избежать. Хотя в нашей стране ущерб не исчисляется пока даже шестизначными цифрами, репутация в любом случае пострадает. Поэтому никогда не берите чужого, даже если кажется, что оно ничье. Это касается и текстов, и музыки, и фотографий. Они в Интернете не появляются из неоткуда, и авторы рано или поздно обнаружат кражу.

Как избежать? Запускайте поиск по изображениям, проверяйте тексты на уникальность. Изучайте ограничения на использования фотографий в бесплатных фотобанках. В крайнем случае, выходите непосредственно на автора и пытайтесь договориться лично.


2. Переоценка собственных возможностей

Предприниматели, даже начинающие, как правило, много знают и еще больше умеют. Они часто думают: «В этом нет ничего сложного, я, наверняка, сам смогу…». В четырех случаях из пяти это оказывается правдой. Но когда вы запускаете собственный бизнес, повторяйте, как мантру следующие слова: «Я не могу делать все, и не должен/не должна этого делать». Ваше время и энергия должны быть посвящены задачам, которые можете выполнять только вы как владелец бизнеса.

Как избежать? Проведите полную и честную ревизию своих сильных и слабых сторон. Заранее продумайте, кому и как вы передадите задачи, которые не относятся к управлению проектом. Исправление ошибок всегда выходит дольше и значительно дороже.


3. Упущение момента

Многие предприниматели склонны к перфекционизму. И вы тоже, если требуете лучшее из возможного, а оценка «достаточно хорошо» вас не устраивает. Но стремление к идеальному во всем способно убить бизнес. Подождите еще немного, и момент будет упущен. Например, если вы ищите место для своего кафе, рассматриваете варианты, но никак не выберете лучшее. Эксперты часто называют подобный образ мыслей «аналитическим параличом». Страх принять неверное решение буквально не дает двигаться вперед. Но дело в том, что играть в игру «а что, если…» можно бесконечно, так ни на что и не решившись.

Как избежать? Дайте себе время принять решение, но установите жесткие рамки. Например, два дня или одну неделю. А затем смело принимайте одну из сторон, - в конце концов, решитесь купить офис в Рязани (регион приведен в качестве примера) - и открывайтесь.



4. Работать non-stop

Запуск своего бизнеса требует много времени и сил. С этим никто не спорит. Однако ваша жизнь вне стен рабочего кабинета не должна на этом заканчиваться. Даже в самые напряженные дни не пренебрегайте семьей, а также собственным психическим и физическим здоровьем. Всегда помните, ради чего или кого вы все это затеяли.

Как избежать? Внесите в рабочий график хотя бы получасовой ланч в кафе за углом, звонок родным и другие перерывы, например, чтобы просто немного пройтись. Достаточно спите, занимайтесь спортом и правильно питайтесь. Чтобы выдержать любой стресс, вашему телу и разуму нужен полноценный отдых и качественное «топливо».


5. Сокращение неоправданных затрат

Какие статьи расходов сокращают предприниматели в первую очередь в кризис? Рекламу? Юридический отдел? В регионах многие компании оставили сотрудников на удалёнке. Но будьте осторожны, урезая бюджеты. Независимо от того, сколько денег это поможет сэкономить вам прямо сейчас, в конечном итоге вы можете заплатить намного больше. Если бизнес только развивается, вам более чем нужны и маркетологи, и юристы, не говоря уже о самом насущном вопросе - аренде офиса в Рязани (город опять же упомянут в качестве примера) или в другом актуальном для вас регионе.

Как избежать? Имейте в виду, что каким бы ни был экономический спад, он рано или поздно закончится. Внимательно изучите свои цифры и бюджеты, прикиньте различные варианты развития событий прежде, чем оптимизировать всех и все без разбора. Не позволяйте страху взять верх!


6. Стремление быть всем для всех

Если вы уверены, что ваш продукт захотят все, или ваша целевая аудитория – граждане страны старше 21 года, - выдохните и сделайте паузу. Возможно, поначалу будет казаться, что неважно, кто это купит, лишь бы денег в кассе становилось больше. Но секрет роста продаж не в расширении цели продукта или услуги. Стоит сосредоточиться на сильных сторонах и сузить нишу.

Как избежать? Найдите своих идеальных клиентов. Изучите их, как можно подробнее. А затем поговорите с ними на их языке о том, почему ваша компания - их лучшее решение.

]]>
Резистор http://portal-pk.ru/news/267-rezistor.html Константин Portal-PK 2020-07-26T15:28:54+03:00 Резистор — искусственное «препятствие» для тока. Сопротивление в чистом виде. Резистор ограничивает силу тока, переводя часть электроэнергии в тепло. Сегодня невозможно изготовить ни одно, сколько-нибудь функционального, электронного устройства без резисторов. Они используются везде: от компьютеров, до небольших проектов на Arduino.

Резистор — искусственное «препятствие» для тока. Сопротивление в чистом виде.

Сопротивление резистора — его основная характеристика. Основной единицей электрического сопротивления является Ом. На практике используются также производные единицы — килоом (кОм), мегаом (МОм), гигаом (ГОм), которые связаны с основной единицей следующими соотношениями:

1 кОм = 1000 Ом,
1 МОм = 1000 кОм,
1 ГОм = 1000 Мом

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

Ниже на рисунке видна маркировка резисторов на схемах:

Ниже на рисунке видна маркировка резисторов на схемах:

Наклонные линии обозначают мощность резистора до 1 Вт. Вертикальные линии и знаки V и X (римские цифры), указывают на мощность резистора в несколько Ватт, в соответствии со значением римской цифры.

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

Разные типы соединений нужны для подбора сопротивления, если нет в наличии нужного наминала, или нужен резистор большей мощности.


Последовательное соединение резисторов.

Последовательное соединение резисторов применяется для увеличения сопротивления. То есть, когда резисторы соединены последовательно, общее сопротивление равняется сумме сопротивлений каждого резистора. Например, если резисторы R1 и R2 соединены последовательно, их общее сопротивление высчитывается по формуле:

Rобщ = R1 + R2

Это справедливо и для большего количества соединённых последовательно резисторов:

Rобщ = R1 + R2 + R3 + … + Rn

Цепь из последовательно соединённых резисторов будет всегда иметь сопротивление большее, чем у любого резистора из этой цепи.

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

Мощность при последовательном соединении.

При соединении резисторов последовательно электрический ток по очереди проходит через каждое сопротивление. Значение тока в любой точке цепи будет одинаковым. Данный факт определяется с помощью закона Ома. Если сложить все сопротивления, приведенные на схеме, то получится следующий результат:

R = 200 + 100 + 51 + 39 = 390 Ом

Мощность при последовательном соединении

Учитывая напряжение в цепи, равное 100 В, по закону Ома сила тока будет составлять

I = U/R = 100 В/390 Ом = 0,256 A

На основании полученных данных можно рассчитать мощность резисторов при последовательном соединении по следующей формуле:

P = I2 x R = 0,2562 x 390 = 25,55 Вт

Таким же образом можно рассчитать мощность каждого отдельно взятого резистора:

P1 = I2 x R1 = 0,2562 x 200 = 13,11 Вт;
P2 = I2 x R2 = 0,2562 x 100 = 6,55
Вт;
P3 = I2 x R3 = 0,2562 x 51 = 3,34
Вт;
P4 = I2 x R4 = 0,2562 x 39 = 2,55
Вт
.

Если сложить полученные мощности, то общая Р составит:

Робщ = 13,11 + 6,55 + 3,34 + 2,55 = 25,55 Вт

Параллельное соединение резисторов.


Параллельное соединение резисторов

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

Расчет параллельного сопротивления двух параллельно соединённых резисторов R1 и R2 производится по следующей формуле:

Rобщ = (R1 × R2) / (R1 + R2)

Параллельное соединение трёх и более резисторов требует более сложной формулы для вычисления общего сопротивления:

1 / Rобщ = 1 / R1 + 1 / R2 + … + 1 / Rn

Сопротивление параллельно соединённых резисторов будет всегда меньше, чем у любого из этих резисторов.

Параллельное соединение резисторов часто используют в случаях, когда необходимо сопротивление с большей мощностью. Для этого, как правило, используют резисторы с одинаковой мощностью и одинаковым сопротивлением. Общая мощность, в таком случае, вычисляется умножением мощности одного резистора на количество параллельно соединённых резисторов.

Мощность при параллельном соединении.

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

1/R = 1/200 + 1/100 + 1/51 + 1/39 ≈ 0,06024 Ом
R = 1 / 0,06024 ≈ 16,6 Ом

Мощность при параллельном соединении

Используя значение напряжения 100 В, по закону Ома рассчитывается сила тока

I = U/R = 100 В x 0,06024 Ом = 6,024 A

Зная силу тока, мощность резисторов, соединенных параллельно, определяется следующим образом

P = I2 x R = 6,0242 x 16,6 = 602,3 Вт

Расчет силы тока для каждого резистора выполняется по формулам:

I1 = U/R1 = 100/200 = 0,5 A;
I2 = U/R2 = 100/100 = 1 A;
I3 = U/R3 = 100/51 = 1,96 A;
I4 = U/R4 = 100/39 = 2,56 A

На примере этих сопротивлений прослеживается закономерность, что с уменьшением сопротивления, сила тока увеличивается.

Существует еще одна формула, позволяющая рассчитать мощность при параллельном подключении резисторов:

P1 = U2/R1 = 1002/200 = 50 Вт;
P2 = U2/R2 = 1002/100 = 100 Вт;
P3 = U22/R3 = 1002/51 = 195,9 Вт;
P4 = U22/R4 = 1002/39 = 256,4 Вт

Если сложить полученные мощности, то общая Р составит:

Робщ = 50 + 100 + 195,9 + 256,4 = 602,3 Вт

Цветовая маркировка резисторов.

Наносить номинал резистора на корпус числами — дорого и непрактично: они получаются очень мелкими. Поэтому номинал и допуск кодируют цветными полосками. Разные серии резисторов содержат разное количество полос, но принцип расшифровки одинаков. Цвет корпуса резистора может быть бежевым, голубым, белым. Это не играет роли. Если не уверены в том, что правильно прочитали полосы, можете проверить себя с помощью мультиметра или калькулятора цветовой маркировки.

Цветовая маркировка резисторов

Все полученные знания в данной статье необходимы при изучении уроков на Arduino. А также при созданиипроектов на Arduino, ESP8266, ESP32 и прочих микроконтроллерах.

Если же вы увлекаетесь ЧПУ станками, данные знания тоже будет не лишними.

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Лазерный станок с ЧПУ с АлиЭкспресс http://portal-pk.ru/news/266-lazernyi-stanok-s-chpu-s-aliekspress.html Константин Portal-PK 2020-07-19T08:56:35+03:00 Мое увлечение ЧПУ станками началось больше 3 лет. Все это время я собирал самодельные ЧПУ станки. Сегодня я буду собирать заводской лазерный станок с ЧПУ, купленный на АлиЭкспресс. У вас, наверное, возник вопрос что случилось? Почему заводской, а не самодельный станок с ЧПУ?

Все просто: сочетание прагматичности, логики и немного лени.

Более подробное описание смотрите на моем втором сайте X-TEX.

Дело обстояло так. Попался на сайте АлиЭкспресс автономный лазерно-гравировальный ЧПУ станок с рамой из алюминиевых профилей.

Дело обстояло так. Попался на сайте АлиЭкспресс автономный лазерно-гравировальный ЧПУ станок с рамой из алюминиевых профилей. Посчитал, если покупать все комплектующие, то стоимость будет не многим меньше. А времени потрачу на сборку достаточно много.Вы считает, что собрать такую раму не сложно? Но спешу вас огорчить. Кроме того чтобы нарезать профиль нужно еще сделать резьбу. Также нужен чертёж всех деталей, которые сделаны из акрила. А затем это все вырезать. Но тут тоже нужен подходящий материал. Я заказывал станок в начале карантина. А в начале купить комплектующие для сборки самодельного ЧПУ станка было проблематично. Это было еще одним фактором, который повлиял на покупку заводского станка.

Сборка Лазерного станка с ЧПУ с АлиЭкспресс.

Сборку произвожу по инструкции, которая идет в комплекте со станком. Кстати, инструкцию перевел и немного доработал:Инструкция по сборке лазерно-гравировального станка CNC2-6550.

Сборку произвожу по инструкции

Собираем раму.

Собираем раму.Собираем каретки станка.

Собираем каретки станка.

Ставлю все на место.

Ставлю все на место.

Натягиваем ремни.

Натягиваем ремни.

Подключаем двигателя и пульт управления к плате управления.

Подключаем двигателя и пульт управления к плате управления.

Можно запускать.

Запуск Лазерного станка с ЧПУ с АлиЭкспресс.

Благодаря пульту управления станком можно управлять и без компьютера. В комплекте идет карта памяти, которая устанавливается в пульт станка с ЧПУ.

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

Центральная кнопка пульта включает лазер для настройки и определения положения заготовки.

Возможности пульта управления Лазерного станка с ЧПУ с АлиЭкспресс.

  • Перемещение по осям.
  • Включение и выключение лазера при нажатии кнопки.
  • Выбор файла с карты памяти и автономная работа.


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

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

Пример гравирования на Лазерном станке с ЧПУ.

На карте памяти есть несколько файлов для гравировки. Можно запустить и проверить работу станка. Как видим, станок работает, но очень медленно и прожигает сильно. Это связано с тем, что примеры с карты памяти рассчитаны на более слабый лазер.

Пример гравирования на Лазерном станке с ЧПУ.

Но для проверки работоспособности достаточно.

Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.

Не забывайте подписываться на мой YouTube канал, вступить в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Что такое макетная плата и как ей пользоваться? http://portal-pk.ru/news/265-chto-takoe-maketnaya-plata-i-kak-ei-polzovatsya.html Константин Portal-PK 2020-07-13T19:25:05+03:00 Для чего нужна макетная плата?

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

Прототип — это работающая модель устройства. Именно для прототипированя нам и понадобится макетная плата.

Прототип — это работающая модель устройства. Именно для прототипированя нам и понадобится макетная плата.

Беспаечные макетные платы (breadboard).

Видов беспаечных макетных плат существует множество. Они различаются количеством выводов, количеством шин, конфигурацией, но устроены все они по одному принципу. Макетная плата состоит из пластикового основания с множеством отверстий, расположенных обычно со стандартным шагом 2,54 мм. С таким же шагом обычно располагаются ножки у выводных микросхем. Отверстия нужны для того, чтобы вставлять в них выводы радиоэлементов или соединительные провода. Типичный вид макетной платы представлен на рисунке.

Беспаечные макетные платы (breadboard).

На рисунке ниже показан breadboard, на котором снято основание на нижней части. Как вы видите, на плате установлены ряды металлических пластин.

На рисунке ниже показан breadboard, на котором снято основание на нижней части. Как вы видите, на плате установлены ряды металлических пластин.

Каждая металлическая пластина имеет вид, приведенный на рисунке ниже. То есть, это не просто пластина, а пластина с клипсами, которые прячутся в пластиковой части монтажной платы. Именно в эти клипсы вы подключаете ваши провода.

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

Обратите внимание, что на одной рельсе пять клипс. Это общепринятый стандарт. Большинство беспаечных макетных плат реализуются именно таким образом. То есть, вы можете подключить до пяти компонентов включительно к отдельной рельсе на breadboard’е и они будут связаны между собой. Но ведь на плате десять отверстий в ряду! Почему мы ограничены пятью контактами? Вы, наверное, обратили внимание, что по центру монтажной платы есть отдельная рельса без пинов? Эта рельса изолирует пластины друг от друга.

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

 светодиод, установленный на беспаечную макетную плату.

Теперь рассмотрим макетные платы на 400 контактов. На таких платах, как правило, предусматривают две вертикально расположенные рельсы. Так называемые рельсы для питания.

\Теперь рассмотрим макетные платы.

Эти рельсы аналогичны по исполнению с горизонтальными, но при этом соединены друг с другом по всей длине. При разработке проекта вам часто необходимо питание для многих компонентов. Именно эти рельсы используются для питания. Обычно их отмечают «+» и «-» и двумя разными цветами — красным и голубым. Как правило, рельсы соединяют между собой, чтобы получить одинаковое питание по обеим сторонам макетной платы (смотрите на рисунке ниже). Кстати, нет необходимости подключать плюс именно к рельсе с обозначением «+», это исключительно подсказка, которая поможет вам структурировать ваш проект.

это исключительно подсказка, которая поможет вам структурировать ваш проект.


Центральная рельса без контактов изолирует две стороны беспаечной монтажной платы. Помимо изоляции, эта рельса выполняет вторую важную функцию. Большинство микросхем (ICs), изготавливаются в стандартных размерах. Для того, чтобы они занимали минимум места на монтажной плате, используется специальный форм-фактор под названием Dual in-line Package, или сокращенно – DIP.

У DIP-микросхем контакты расположены по двум сторонам и отлично садятся на две рельсы по центру макетной платы. Именно в этом случае изоляция контактов – отличный вариант, который позволяет сделать разводку каждого контакта микросхемы на отдельную рельсу с пятью контактами.

На рисунке ниже показана установка двух DIP микросхем. Сверху – LM358, ниже – микроконтроллер ATMega328, который используется во многих платах Arduino.

установка двух DIP микросхем. Сверху – LM358, ниже – микроконтроллер ATMega328

Наверняка вы обращали внимание, что на беспаечных монтажных платах нанесены числа и буквы возле строк (горизонтальных рельс) и столбцов (вертикальных рельс). Эти обозначения нанесены исключительно для удобства. Прототипы ваших устройств очень быстро обрастают дополнительными компонентами, а одна ошибка в подключении приводит к неработоспособности электрической схемы или даже к выходу из строя отдельных компонентов. Гораздо проще подключить контакт к рельсе, которая отмечена цифрой и буквой, чем отсчитывать контакты “на глаз”.

Breadboard также не заменив при изучении Arduino.

Breadboard также не заменив при изучении Arduino. В моих уроках устанавливаю на маетную плату Arduino NANO и устанавливаю на макетную плату все необходимые элементы. Затем все соединяю соединительными проводами.


Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Самодельные динамики для монитора с регулировкой громкости. http://portal-pk.ru/news/264-samodelnye-dinamiki-dlya-monitora-s-regulirovkoi.html Константин Portal-PK 2020-07-01T04:00:54+03:00 В период самоизоляции, когда все было достаточно строго, у меня сломались колонки для компьютера. Заказал новые, но доставят через неделю, работать надо сейчас. Решил сделать себе самодельные динамики для монитора. Благо все комплектующие были в наличии.

Если у вас все в порядке с компьютерными колонками но, нужен сервер, дедик или VPS. Купить сервер, дедик, VPS можно на сайте vpserver.pro.

Что понадобилось для создания самодельных колонок для монитора.

В наличии были 2 усилителя PAM8403 DC 5v 2 канала. Один с регулятором громкости, второй пассивный. Использовать решил плату с регулировкой громкости, постоянно регулировать громкость на компьютере неудобно.

2 усилителя PAM8403 DC 5v 2

Для подключения к компьютеру буду использовать провод от старых наушников. Питание подавать через USB провод от зарядного устройства. На фото ниже оно зеленого цвета.

Питание подавать через USB провод

Динами взял от старого нерабочего ноутбука. Я их часто использую в своих проектах со звуком, например при создании MP3-плеера на DFPlayer Mini и Arduino.

Для сборки понадобится клеевой пистолет, паяльник.

К сборке все готово, можно приступать к работе.

Сборка самодельных колонок для монитора.

Для проверки работоспособности усилителя сперва все собрал соединительными проводами без пайки.

Сборка самодельных колонок для монитора.

Собирал все по схеме.

Собирал все по схеме.

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

Все работает! Звук регулируется, но конечно желает лучшего. Но на несколько дней работы достаточно.

Установка динамиков на монитор.

Пришло время все закрепить на мониторе. Сперва планировал приклеить динамики снизу монитора, но регулировать звук снизу неудобно. Поэтому все приклеил к верхней части монитора.

Установка динамиков на монитор.

Регулятор громкости сделал чуть выше, чтобы его было видно, это позволяет без проблем регулировать громкость. Если это было бы постоянное решение, то можно было бы напечатать ручку для установки на регулятор громкости, но через неделю я все убрал, поэтому пользовался так, как установил, без дополнительной модификаций.

Регулятор громкости сделал чуть выше, чтобы его было видно, это позволяет без проблем регулировать громкость.

Мое мнение об усилители PAM8403.

Усилитель не очень мощный и при этом чувствителен к помехам. Если вам нужно сделать оповещение или уведомления, усилитель PAM8403 подойдёт отлично, но для реализации устройства, которое будет воспроизводить аудио или звук из видео, то это сомнительное решение. Не смотря на это, самодельные динамики я сделал и установил нам монитор и пользовался некоторое время, по причине отсутствия другого решения.

Мое мнение об усилители PAM8403.

Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Изучаем Arduino без Arduino c помощью Tinkercad и его сервиса Схемы. http://portal-pk.ru/news/263-izuchaem-arduino-bez-arduino-c-pomoshchyu-tinkercad-i-ego-servisov.html Константин Portal-PK 2020-06-04T15:48:14+03:00 С каждым годом робототехника становиться популярнее. Для разработки роботов и простых проектов используется платформа Arduinо, но для изучения данной платформы нужно купить Arduino UNO или NANO, резисторы, светодиоды, соединительные провода, макетную плату, сервоприводы, двигателя, дисплей, реле, датчики и сенсоры. Начальное вложение от 2 т. руб. при покупке минимального Arduino набора на Aliexpress. Если покупать в наших магазинах стоимость может быть в 2-3 раза больше. Стоит ли покупать железки для изучения робототехники? На данный вопрос можно ответить, попробовав свои силы в сборке схем и программировании Arduino в Tinkercadи его сервисе Circuits.

 сборке схем и программировании Arduino в Tinkercad и его сервисе Circuits.

Что такое Tinkercad?

Tinkercad - графический редактор, предназначенный для создания и печати трехмерных моделей.

Tinkercad - графический редактор, предназначенный для создания и печати трехмерных моделей.

Главным преимуществом программы, по сравнению с другими CAD-редакторами, является то, что она представлена в виде онлайн-приложения, и не требует установки на компьютер. Сервисом можно пользоваться прямо в веб-браузере благодаря технологии WebGL, позволяющей отображать трехмерную графику в интернет-обозревателях.

Онлайн-сервис Tinkercad полностью бесплатный, русифицирован, имеет простой интерфейс, понятный даже новичкам, не требует установки дополнительных плагинов и поддерживает работу со всеми основными браузерами (Chrome, Firefox, Opera и другие). CAD-редактор позволяет сохранять готовые проекты на сервере разработчика или на жестком диске компьютера в виде OBJ и STL-файлов, а также обладает возможностью печати моделей.

Tinkercad позиционирует себя как сервис робототехники для начинающих. Изучать схемотехнику и программирование Arduino помогает раздел Схемы.

Tinkercad Arduino

Tinkercad Arduino

Тинкеркад (Tinkercad Circuits Arduino) – бесплатный, удивительно простой и одновременно мощный эмулятор Arduino, с которого можно начинать обучение электронике и робототехнике. Он предоставляет очень удобную среду для написания своих проектов. Не нужно ни чего покупать, ни чего качать — все доступно онлайн. Единственное, что от вас потребуется — зарегистрироваться.

Возможности симулятора Tinkercad для разработчика Arduino.

Возможности симулятора Tinkercad для разработчика Arduino.

  • Онлайн платформа, для работы не нужно ничего кроме браузера и устойчивого интернета.
  • Удобный графический редактор для визуального построения электронных схем.
  • Предустановленный набор моделей большинства популярных электронных компонентов, отсортированный по типам компонентов.
  • Симулятор электронных схем, с помощью которого можно подключить созданное виртуальное устройство к виртуальному источнику питания и проследить, как оно будет работать.
  • Симуляторы датчиков и инструментов внешнего воздействия. Вы можете менять показания датчиков, следя за тем, как на них реагирует система.
  • Встроенный редактор Arduino с монитором порта и возможностью пошаговой отладки.
  • Готовые для развертывания проекты Arduino со схемами и кодом.
  • Визуальный редактор кода Arduino.
  • Возможность интеграции с остальной функциональностью Tinkercad и быстрого создания для вашего устройства корпуса и других конструктивных элементов – отрисованная модель может быть сразу же сброшена на 3D-принтер.
  • Встроенные учебники и огромное сообщество с коллекцией готовых проектов

Начало работы в Tinkercad Arduino.

Начало работы в Tinkercad Arduino.

Найти Tinkercad достаточно просто. Для этого в поисковой системе указываем Тинкеркад. Заходим на сайт с доменом tinkercad.com. Для того, чтобы начать пользоваться сервисом нужно авторизоваться или зарегистрироваться.

авторизоваться или зарегистрироваться

Регистрация в Tinkercad.

Для того, чтобы зарегистрироваться нажимаем кнопку Присоединиться. Регистрация доступна по E-mail или с помощью учтённой записи Google или Apple.

Регистрация в Tinkercad.

При регистрации с использованием E-mail нужно указать вашу страну, дату рождения, свой E-mail и пароль.

При регистрации с использованием E-mail нужно указать вашу страну

При входе с помощью учтённой записи Google или Apple достаточно разрешить использование сервисом Tinkercad данных для авторизации. Но не забывайте, что у вас должен быть создан аккаунт в данной системе и вы должны быть авторизованы.

Создание первой схемы в Circuits.

Создание первой схемы в Circuits.

После авторизации в сервисе вы попадете в раздел 3D-проектирования. Для создания схем нам нужно перейти в раздел Circuits. Чтобы создать электрическую цепь нужно нажать на кнопку Создать цепь.

Для создания схем нам нужно перейти в раздел Circuits.

После чего нам откроется рабочая область в которой:

  • Название проекта;
  • Меню управления;
  • Панель компонентов;
  • Рабочее поле.

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

После того, как схема собрана, нужно нажать на кнопку Начать моделирование. Для проверки работоспособности схемы нажмем на тактовую кнопку. Как видим, при нажатии на кнопку светодиод светиться. Это значит, что схема собрана верно и все работает.

Программирование Arduino в Tinkercad.

После добавления Arduino на рабочий стол у нас появляется возможность работы с кодом. Программировать Arduino можно с помощью блоков на языке Scratch или кодом.

Программирование Arduinoв Tinkercad.

После нажатия Начать моделирование. Мы увидим мигание светодиода на плате Arduino. Мигать светодиод заставляет тестовая программа, которая создается автоматически при добавлении Ардуино на рабочее поле.

Встроенный светодиодподключен к 13 пину Арудино.

Давайте подключим внешний светодиод. Для этого установим светодиод и резистор на макетную плату. Подключим все по схеме. Встроенный светодиодподключен к 13 пину Арудино. Подключим внешний светодиод к тому же пинуи увидим синхронное мигание встроенного и внешнего светодиода.

Примеры реализации проектов на Arduino.

Для новичков подготовлены несколько готовых схем использования Arduino. Достаточно выбрать схему и вытащить на рабочее поле и начать моделирование.

Часть примеров реализовано с использованием блочного программирования, а вторая часть написана кодом, что позволяет расширить кругозор любого пользователя.

Кроме моделирования данный сервис поможет не сделать ошибки новичку и испортить элементы цепи или спалить Arduino.

Защита от ошибок новичка.

При программировании приложений для ПК или телефона у вас могут возникнуть ошибки с кодом и к серьезным последствиям это навряд ли приведет. Но при разработке проектов на Arduino, нужно не только писать код, но и понимать, как собирать электрические схемы. И при неправильно собранной схеме может перегореть светодиод, исполнительный механизм, датчик, сенсор, модуль и пр. А также может выйти из строя отладочная плата Arduino. Вот почему так важно понимать, как правильно собирать электрические схемы.

Защита от ошибок новичка.

При сборе схем в Tinkercad Circuits вы защищены от основных ошибок новичка. Например, если вы подключите светодиод без резистора, то вы увидите предупреждение о том, что ток превышен, что может привести к быстрому выходу из строя светодиода.

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

В реальной схемотехнике при такой ситуации сгорит не только светодиод, но может выйти из строя Arduino.

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

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Инструкция по сборке лазерного гравировального станка CNC2-6550. http://portal-pk.ru/news/262-instrukciya-po-sborke-lazernogo-gravirovalnogo.html Константин Portal-PK 2020-06-02T07:19:41+03:00

CNC2-6550

Part A: Инструкция по сборке лазерного гравировального станка.

Инструкция по сборке лазерного гравировального станка.

Подключение станка к компьютеру и автономное использование с внешним дисплеем.

Краткая инструкция по использованию программы LaserGRBL.

Видео по сборке и запуску станка будет доступно в ближайшее время!

Купить станок с автономным управлением можно тут CNC2-6550.

CNC 6550 Machine Desktop DIY Big Laser 65x50cm CNC 6550 Machine Desktop DIY Big Laser 65x50cm

Переведено и дополнено проектом Portal-PK. Сайт проекта Portal-PK.ru

Технологии начинаются с простого!

Инструкция по сборке лазерного гравировального станка.

2. Направляющие для портала.

2. Направляющие для портала.

3. Направляющие для портала, и установка двигателя для перемещения по оси Y.


Направляющие для портала, и установка двигателя для перемещения по оси Y.

4. Сборка каретки и установка лазера.

Сборка каретки и установка лазера.

5. Сборка портала лазерного гравировального станка.

Сборка портала лазерного гравировального станка.

6. Установка ножек станка.

 Установка ножек станка.

7. Установка 4-ой ножки станка с платой управления.

Установка 4-ой ножки станка с платой управления.


8.Y-ось: длина ремня: 765 мм x2 шт.

X-ось: длина ремня: 790 мм x1 шт

Y-ось: длина ремня



Подключение станка к компьютеру и автономное использование с внешним дисплеем

Подключение станка к компьютеру и автономное использование с внешним дисплеем.

Управлять станком CNC2-6550 можно через компьютер или с дисплея. В комплекте идет карта памяти на 1 Гб, что позволяет управлять станком без использования ПК.

Купить станок с автономным управлением можно тут CNC2-6550.

CNC 6550 Machine Desktop DIY Big Laser 65x50cm CNC 6550 Machine Desktop DIY Big Laser 65x50cm

Переведено и дополнено проектом Portal-PK. Сайт проекта Portal-PK.ru

Технологии начинаются с простого!

1. Плата управления может быть другой, но принцип подключения не меняется. Все разъёмы подписаны.

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

Если вы работаете без подключения к компьютеру, подключать USB провод не нужно!

CH340SER2. Установка драйвера. Вместе с инструкцией на флешке есть файл CH340SER.exe

Кликаем по нему 2 раза. И устанавливаем.


Кликаем по нему 2 раза. И устанавливаем.


3. Чтобы определить COM-порт вашего станка нужно:

• Windows XP: щелкните правой кнопкой мыши «Мой компьютер», выберите «Свойства», выберите «Диспетчер устройств».

• Windows 7: нажмите «Пуск» -> щелкните правой кнопкой мыши «Компьютер» -> выберите «Диспетчер устройств» -> «Порты (COM и LPT)»

• Вашим устройством будет последовательный порт USB (COMX), где «X» представляет номер COM, например COM5.

• Если имеется несколько последовательных USB-портов, щелкните каждый из них правой кнопкой мыши и проверьте производителя, выбрать нужно «CH340».

Чтобы определить COM-порт вашего станка нужно

4.0. Использование вместе с программой LaserGRBL (есть на USB флешке)

 Использование вместе с программой LaserGRBL

4.1. Используйте USB-кабель для подключения к компьютеру. (Не подключайте при автономной работе!)


Используйте USB-кабель для подключения к компьютеру. (Не подключайте при автономной работе!)

  • Если все удачно подключилось, то вы увидите надпись ” Grbl 1.1f ['$' for help]”.
  • Если выбран неверный порт, то данное сообщение вы не увидите.

4.2. Фокусировка лазера.

Фокусировка лазера.

Лазер нужно сфокусировать, для этого поверните объектив, чтобы минимизировать пятно. Работать с лазером нужно в защитных очках.

Лазер нужно сфокусировать, для этого поверните объектив, чтобы минимизировать пятно. Работать с лазером нужно в защитных очках.


4.3. ИМПОРТ РАСТРОВЫХ ИЗОБРАЖЕНИЙ

Растровый импорт позволяет загружать изображение любого вида в LaserGRBL и превращать его в кодовые инструкции без необходимости использования другого программного обеспечения. LaserGRBL поддерживает фотографии, клипарты, карандашные рисунки, логотипы, иконки и пытается сделать все возможное с любым видом изображения.

Его можно вызвать из меню "Файл, Открыть файл", выбрав изображение типа jpg, png или bmp.

4.3. ИМПОРТ РАСТРОВЫХ ИЗОБРАЖЕНИЙ

Его можно вызвать из меню "Файл, Открыть файл", выбрав изображение типа jpg, png или bmp.

Растровый импорт позволяет загружать изображение любого вида в LaserGRBL

Обратите внимание: скорость и значение S отличаются для разных материалов.

Обратите внимание: скорость и значение S отличаются для разных материалов.

4.5. Сохраните программу в файл "NC", если вы используете автономный контроллер.


Сохраните программу в файл "NC", если вы используете автономный контроллер.


Автономный контроллер можно использовать в качестве считывателя карт через USB-кабель.

  • Автономный контроллер можно использовать в качестве считывателя карт через USB-кабель.
  • Затем подключите автономный контроллер к плате управления. (Не подключайте USB-кабель к компьютеру)

 Затем подключите автономный контроллер к плате управления. (Не подключайте USB-кабель к компьютеру)

  • Затем. См. ”руководство пользователя автономного контроллера", чтобы начать работу.

ЭКСПЕРТНЫЙ РЕЖИМ

- Экспертный режим позволяет пользователям достичь большего контроля над станком. Но пользователи должны иметь понимание об основных настройках.

1. Режим Постоянной Мощности Лазера М3.(режим по умолчанию)

* Режим постоянной мощности лазера просто сохраняет мощность лазера запрограммированной, независимо от того, движется ли машина, ускоряется или останавливается. Это обеспечивает лучший контроль состояния лазера. При хорошей программе G-кода это может привести к снижению времени при работе со сложными материалами.

ПРИМЕЧАНИЕ: M3 можно использовать, чтобы держать лазер включенным для фокусировки.

2. Динамический режим мощности лазера M4

Режим динамической мощности лазера автоматически регулирует мощность лазера, в зависимости от текущей скорости, относительно запрограммированной частоты. Это, по существу, гарантирует, что количество лазерной энергии вдоль разреза остается неизменным, даже если машина может быть остановлена или активно ускоряться. Это очень полезно для чистой, точной гравировки и резки простых материалов в широком диапазоне методов генерации G-кода программами CAM. Как правило, он будет работать быстрее и может быть все, что вам нужно использовать.

Grbl рассчитывает мощность лазера, исходя из предположения, что мощность лазера линейна по скорости и материалу. Часто это не так. Лазеры могут резать по-разному при разных уровнях мощности, и некоторые материалы могут плохо резать при определенной скорости и / или мощности. Короче говоря, это означает, что режим динамического питания может работать не во всех ситуациях. Всегда делайте пробный образец, прежде чем использовать его с новым материалом или машиной.

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

Откройте «Режим динамической мощности лазера M4» в программном обеспечении LaserGRBL.

Примечание. Лазер включается только при движении машины.

Режим Постоянной Мощности Лазера М3.

3. Пользовательская кнопка

LaserGRBL поддерживает пользовательские кнопки. Щелкните правой кнопкой мыши в области кнопок, чтобы добавить новую пользовательскую кнопку.

Пользовательская кнопка

В пользовательской кнопке вы можете написать набор инструкций G-кода для выполнения пользовательских действий.

Существует 3 типа пользовательских кнопок:

  • Button
  • TwoStateButton
  • PushButton

Пользовательская кнопка типа «Button» содержит блок кода GCode, который будет выполнен при нажатии. Это можно использовать для запуска серии инструкций gcode, то есть для трассировки кадра вокруг изображения или установки новой нулевой позиции.

В пользовательской кнопке вы можете написать набор инструкций G-кода для выполнения пользовательских действий.

«TwoStateButton» содержит два блока GCode. Первое действие выполняется при первом щелчке, затем второе действие выполняется при втором щелчке. Это очень полезно для таких действий, как включение / выключение лазера, чтобы увидеть его положение Включить / выключить лазер.

«TwoStateButton» содержит два блока GCode.«PushButton» похож на «TwoStateButton», но первое действие выполняется при наведении мыши, второе - при нажатии мыши. Пользовательские кнопки поддерживают ряд переменных, которые можно использовать в выражениях. Вот полный набор поддерживаемых переменных:

«PushButton» похож на «TwoStateButton», но первое действие выполняется при наведении мыши

4. Конфигурация по умолчанию


Конфигурация по умолчанию


Видео по сборке и запуску станка будет доступно в ближайшее время!

Купить станок с автономным управлением можно тут CNC2-6550.

CNC 6550 Machine Desktop DIY Big Laser 65x50cm CNC 6550 Machine Desktop DIY Big Laser 65x50cm

Скачать инструкцию в формате PDF можно по ссылке внизу статьи: инструкция для лазерного гравировального станка CNC2-6550 на русском.

Переведено и дополнено проектом Portal-PK. Сайт проекта Portal-PK.ru

Технологии начинаются с простого!

Подписывайтесь на наш Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Что такое светодиод? Как подключить к Arduino? http://portal-pk.ru/news/261-chto-takoe-svetodiod-kak-podklyuchit-k-arduino.html Константин Portal-PK 2020-05-19T10:53:51+03:00 Для реализации многих проектов на Arduino используются светодиоды. А для изучения Ардуино светодиод является не заменимым инструментом. Для изучения основ Arduino на сайте есть целый блок уроков, который так и называться: Уроки Arduino: Светодиоды, Резисторы, Arduino.

Что такое резистор рассмотрим в следующий раз.

Что же такое светодиод и как он работает?

Светодиод — вид диода, представляет собой полупроводниковый прибор, способный излучать свет при пропускании через него электрического тока в прямом направлении, от анода (+) к катоду (-).

Что же такое светодиод и как он работает?

Для того чтобы правильно включить светодиод в электрическую цепь, необходимо отличать катод от анода. Сделать это можно по двум признакам:

  1. анод (+) светодиода имеет более длинную ножку;
  2. со стороны катода, корпус светодиода немного срезан.

В современной микроэлектронике применяются миниатюрные светодиоды для поверхностного монтажа (SMD). Такие индикаторы, например, имеются на Arduino Uno для информирования пользователя о состоянии системы.

Такие индикаторы, например, имеются на Arduino Uno для информирования пользователя о состоянии системы.


Подключение Светодиода к Arduino.

Собственное сопротивление светодиода после насыщения очень мало, и без тока ограничивающего резистора светодиод перегорит. Где установить резистор в цепи не важно. Его можно поставить до светодиода или после.

Подключение Светодиода

Подключение Светодиода к Arduino.

Подключим например к пину 3 платы Arduino. Наша программа примет вот такой вид.

/*
  Зажигаем светодиод на одну секунду, затем выключаем его на  
  одну  секунду в цикле.
 */
void setup() {               
  // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(3, OUTPUT);   
}
void loop() {
  digitalWrite(3, HIGH);   // зажигаем светодиод
  delay(1000);              // ждем 3 секунды
  digitalWrite(3, LOW);    // выключаем светодиод
  delay(1000);              // ждем секунду
}

Подробнее: Урок 2 – Мигаем светодиодом на Arduino

Расчеты для выбора резистора и мощности светодиода.

Рассмотрим основные расчеты схемы подключения светодиода к Arduino. Возьмём светодиод, круглый 5 мм, – полупроводниковый источник света с рабочим напряжением от 1.9в до 3.4в и силой тока в 20мА.

Рассчитаем, какой резистор R в приведённой схеме нам нужно взять, чтобы получить оптимальный результат. Предположим, что у нас такой светодиод имеет рабочее напряжения 3.3 В и источник питания Arduino 5в:

VF = 3.3 В
I = 20 мА
Vcc = 5 В

Найдём оптимальное сопротивление R и минимально допустимую мощность резистора PR.

Сначала рассчитаем, какое напряжение должен взять на себя резистор:

UR = Vcc – VF = 5 В – 3.3 В = 1.7 В

По закону Ома найдём значение сопротивления, которое обеспечит такое падение:

R = UR / I = 1.7 В / 0.02 А = 85 Ом

Таким образом:

  • при сопротивлении более 85 Ом яркость будет ниже заявленной;
  • при сопротивлении менее 85 Ом срок жизни светодиода будет меньше.

Далее рассчитаем мощность, которую при этом резистору придётся рассеивать:

PR = I2 × R = (0.02 А)2 × 85 Ом = 0.034 Вт

Это означает, что при мощности резистора менее 34 мВт резистор перегорит.

Данные расчеты проводить не обязательно, есть онлайн калькуляторы. Также при разработке проектов используют стандартные наборы резисторов от 100 Ом до 220 Ом. Чтобы продлить срок службы резистора, чаще всего, используют 220 Ом.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Вторая модернизация (доработка) 3D принтера Anet A8. http://portal-pk.ru/news/260-vtoraya-modernizaciya-dorabotka-3d-printera-anet-a8.html Константин Portal-PK 2020-05-14T08:05:36+03:00 При разработке самоделок и проектов на Arduino не обойтись без 3D принтера. Купил я себе недорогой 3D принтер Anet A8. Принтер бюджетный, поэтому есть недочёты, чтобы устранить основные, сделал первую модернизацию. Ее было необходимо сделать для увеличения скорости печати, иначе печатать на данном принтере можно только на очень низкой скорости 30-40 мм/сек. А сегодня буду проводить вторую модернизацию. Данная модернизация нужна в основном для комфортной работы.

Купил я на Aliexpress следующие комплектующие:

Купил я на Aliexpress следующие комплектующие:

В связи с тем, что у меня сломался кулер обдува хотенда

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

старый кулер обрезал, а новый припаял и заизолировал контакты термоусадочной трубкой.

Дальше приступил к устранению еще одной досадной ситуации.

Термодатчик крепиться только с помощью клейкой ленты

Термодатчик крепиться только с помощью клейкой ленты, и она, со временем, стала отклеиваться. Пока однажды термодатчик не выпал из отверстия, где он стоял. Вот к чему это привело.

Пока однажды термодатчик не выпал из отверстия, где он стоял.

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

Для того, чтобы наклеить термоизоляционную наклейку необходимо снять стол.

Для того, чтобы наклеить термоизоляционную наклейку необходимо снять стол.

Чтобы наклейка не мешала винтам с пружинками, которые держат стол, подрезал уголки на наклейке

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

После чего стол нужно установить на место и откалибровать.

И напоследок, установил силиконовый чехол на хотенд.

И напоследок, установил силиконовый чехол на хотенд.


Данная модернизация 3D принтер Anet A8 ускорит нагрев стола и хотенда, а при печати ABS и PETG пластиком это занимает достаточно долгое время. Также уменьшит рассеивание тепла, что снизит расход электроэнергии. Ещё снизит вероятность отклеивания от стола детали при печати ABS пластиком.

После модернизации и калибровки решил проверить печать. Мне нужно было напечатать пару крупных деталей соплом 0,6 мм. Вот результат.

После модернизации и калибровки решил проверить печать. Мне нужно было напечатать пару крупных деталей соплом 0,6 мм.

А так, Anet A8 сам по себе работает достаточно шумно.


Вывод следующий: нагрев стола стал быстрее; работает тише, но это благодаря замене сломанного кулера. А так, Anet A8 сам по себе работает достаточно шумно.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Ночник с сенсорной кнопкой из Киндер Сюрприз - diy. http://portal-pk.ru/news/259-nochnik-s-sensornoi-knopkoi-iz-kinder-syurpriz---diy.html Константин Portal-PK 2020-04-30T12:00:21+03:00 Пару лет назад я делал ночник из Kinder Sorpresa. Не смотря на свою простоту исполнения и небольшой размер, данный ночник светит ярко и пользуется популярностью. Один знакомый, увидев ночник, заинтересовался и подсказал очень интересное решение: «Вот бы еще сделать сенсорное включение, чтобы пошел у меня ребенок ночью в туалет, бац рукой по нему и ночник включился. Пошел обратно, бац рукой и свет выключился. И при этом чтобы не было сильно ярко». Приступил я к реализации, что у меня получилось, смотрите ниже.

Для данного DIY понадобится:

Для данного DIY понадобится

Как видим для ночника из Киндер Сюрприза нужно немного элементов. И практически все доступные. Только нужно купить сенсорную кнопку, но стоит она недорого.


Схема подключения электронных компонентов.

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

Схема подключения электронных компонентов.

Для проверки работоспособности собрал все на макетной плате. Тестирование показало, что все работает. У вас, наверное, появился вопрос, что за провод припаян к сенсорной кнопке? Это выносной сенсор, он остался от предыдущего проекта, и в нашем проекте использоваться не будет. На работу сенсорной кнопки это ни как не повлияет. Вы можете не тестировать схему, я проверил и все работает. Подключал к зарядному устройству и к внешнему Power Bank, все работает как нужно.

Подключал к зарядному устройству и к внешнему Power Bank, все работает как нужно.


Этапы сборки сенсорного ночника из Киндер Сюрприза.

Приступим к сборке.

Сперва нам нужно подготовить USB провод. Отрезаем провод, оставив небольшой кусок длиной 10 см.

Сперва нам нужно подготовить USB провод. Отрезаем провод, оставив небольшой кусок длиной 10 см. и зачищаем его. Дальше нужно определить какие провода подают питание 5в. Чаше всего это провода красного и черного цвета, у меня коричневый и черный. Если у вас есть мультиметр, можно прозвонить и найти нужный провод.

В USB разъёме это самые длинные контакты и располагаются они по кроям.

В USB разъёме это самые длинные контакты и располагаются они по кроям. Центральные контакты информационные, нам они не пригодятся, поэтому синий и белый провода я отрезал.

В нижней части капсулы из Kinder Sorpresa сделал отверстие и установил в него подготовленный USB разъем.

В нижней части капсулы из Kinder Sorpresa сделал отверстие и установил в него подготовленный USB разъем.

Дальше нам понадобится паяльник. ВНИМАНИЕ! Детям нельзя пользоваться паяльником без присмотра взрослых.

Спаиваем все элементы по схеме, которая представлена выше.

Спаиваем все элементы по схеме, которая представлена выше.

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

Затем на двухсторонний скотч приклеиваем светодиоды, предварительно отогнув их так чтобы, они светили в центр капсулы из-под Kinder Sorpresa

Затем на двухсторонний скотч приклеиваем светодиоды, предварительно отогнув их так чтобы, они светили в центр капсулы из-под Kinder Sorpresa. На крышку приклеиваем сенсорную кнопку. Но тут будьте внимательны, скотч клеим по краям кнопки, ни в коем случае не клейте скотч в центр кнопки. Так как сенсорный элемент не должен соприкасаться с поверхностью, иначе он будет срабатывать произвольно.

Закрываем капсулу и наш ночник готов. Сейчас можно проверить, как работает наше изобретение.

Закрываем капсулу и наш ночник готов. Сейчас можно проверить, как работает наше изобретение.


Проверка и тестирование diy из Kinder Sorpresa.

Для проверки работоспособности ночника достаточно его подключить к источнику 5в. Это может быть зарядное устройство от телефона или Power Bank.

Проверка и тестирование diy из Kinder Sorpresa.

Для тестирования я использовал недорогой Power Bank. Все работает отлично. И в связи с тем, что источник питания автономный данный ночник можно поставить где угодно. А при необходимости приклеить или закрепить в нужном месте, например, на кухне. Если вдруг к вам придёт «Ночная жрица», чтобы ни кого не разбудить!


Подведём итог.

Ночник делается из простых и достаточно дешевых элементов. А универсальность изделия позволяет пользоваться данным ночником не только дома, но и в походе, и на даче. Отличная самоделка и повторить ее достаточно просто.

Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Автоматический дозатор мыла и антисептика своими руками. http://portal-pk.ru/news/258-avtomaticheskii-dozator-myla-i-antiseptika-svoimi.html Константин Portal-PK 2020-04-21T12:27:30+03:00 В школе робототехники, где я работаю преподавателем, попросили сделать автоматический дозатор мыла на Arduino. Начал я разрабатывать данный проект и тут закрыли всех на карантин. Проект автоматического сенсорного дозатора для жидкого мыла так и стоял недоделанным. Решил я исправить данную ситуацию и вот что получилось.

Проект автоматического сенсорного дозатора для жидкого мыла так и стоял недоделанным.

Дозатор работает от батарейки крона 9v, что обеспечивает автономность и безопасность работы, но есть и минусы. Но обо всем по порядку.

Что понадобиться для того чтобы сделать самодельный дозатор.

Использовать ультразвуковой датчик расстояния, который используют в большинстве случаем для реализации подобных проектов, я не стал. Для измерения расстояния решил использовать инфракрасный модуль препятствия. Его преимущества заключается в небольших размерах и простоте использование в Ардуино проектах.

Что понадобиться для того чтобы сделать самодельный дозатор.

Для того, чтобы собрать автоматический дозатор мыла понадобится:


Схема подключения самодельного автоматического дозатора мыла.

Для программирования и отладки сенсорного дозатора мыла собираем все элементы на макетной плате по схеме.

Схема подключения самодельного автоматического дозатора мыла.

При сборке схемы для автономной работы от батарейки крона изменим схему подключения. Плюсовой контакт Servo подключим в пину vin, так как данный пин соединен напрямую с источником питания, в нашем случае это батарейка крона 9v. Соответственно питание на Servo будет 9 в.

Плюсовой контакт Servo подключим в пину vin, так как данный пин соединен напрямую с источником питания,


Программа для управления автоматическим дозатором.

В связи с тем, что инфракрасный модуль препятствия устроен так, что при появлении препятствия на выходе датчика будет 5 в. При отсутствии препятствия соответственно 0. Поэтому код будет аналогичен работе изменения положения сервопривода при нажатии кнопки. Урок можно посмотреть тут: Подключает servo-привод к arduino. Сервопривод + кнопка

Поэтому подробно останавливаться на разборке кода не будем.


Сборка самодельного дозатора.

После проверки на работоспособность схемы и кода, можно приступить к сборке всех элементов на нашей бутылке с дозатором.

Сперва устанавливаем сервопривод

Сперва устанавливаем сервопривод, я приклеил его на двухсторонний скотч и закрепил ниткой. Но при этом жёсткости не хватало, поэтому я еще его прикрепил с помощью узкого прозрачного скотча, сделав несколько оборотов вокруг бутылки.

Затем приклеил на двухсторонний скотч остальные элементы: Ардуино, датчик и батарею крона.

Затем приклеил на двухсторонний скотч остальные элементы: Ардуино, датчик и батарею крона.

С помощью соединительных проводов соединил все элементы как показано на схеме выше.

С помощью соединительных проводов соединил все элементы как показано на схеме выше.

Закрепил под крышкой одну сторону нитки, перекинул через носик дозатора, а второй край прикрепил к рычажку сервопривода.

Закрепил под крышкой одну сторону нитки, перекинул через носик дозатора, а второй край прикрепил к рычажку сервопривода.


Обзор автоматического сенсорного дозатора для жидкого мыла.

Обзор автоматического сенсорного дозатора для жидкого мыла.

Самодельный автоматический дозатор жидкого мыла на Arduino готов. Когда подносим руки к дозатору, то срабатывает сервопривод и на руки подаётся жидкое мыло. Все работает, причем автономно. Бутылку с мылом можно поставить в любое место. Или сделать бутылку с антисептиком и поставить в коридоре около входной двери, что позволит при возвращении с улицы ни чего не прикасаясь обработать руки. Достаточно удобная и необходимая самоделка в нынешней ситуации.

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

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


Вывод можно сделать следующий.

Дозатор работает, и пользоваться можно, но желательно поставить более мощный сервопривод. А также рассмотреть реализацию с напечатанными на 3D принтере элементами, для более надежной фиксации электронных компонентов.


Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Что такое Arduino? http://portal-pk.ru/news/257-chto-takoe-arduino.html Константин Portal-PK 2020-04-17T13:12:41+03:00 Программная часть состоит из бесплатной программной оболочки (Arduino IDE) для написания программ, их компиляции и программирования аппаратуры. Аппаратная часть представляет собой набор смонтированных печатных плат, продающихся как официальным производителем, так и сторонними производителями. Полностью открытая архитектура системы позволяет свободно копировать или дополнять линейку продукции Arduino.

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

Больше информации читайте на сайте разработчика и в Википедии. А сейчас на простом примере рассмотрим, как Arduino можно использовать в робототехнике и при разработке самодельных ЧПУ станков и 3D принтеров.

Arduino — это огромный конструктор, в котором нет ограничений в разнообразии того, что можно собрать. Всё ограничено лишь вашей фантазией и возможностью электроники.

Arduino — это огромный конструктор,

Arduino представляет собой небольшую плату с собственным процессором и памятью. На ней также есть пара десятков контактов, к которым можно подключать всевозможные компоненты: светодиоды, датчики, моторы, модули, магнитные дверные замки и вообще всё, что работает от электричества.

Arduino представляет собой небольшую плату с собственным процессором и памятью

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

В процессор Arduino можно загрузить программу, которая будет управлять всеми этими устройствами по заданному алгоритму.


В чем преимущество Arduino?

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

В чем преимущество Arduino?

Сложно ли начать изучение?

Свою огромную популярность Arduino приобрела именно благодаря простоте и дружелюбности. Даже абсолютный ноль в программировании и робототехнике может освоить основы работы с Arduino за пару дней! Этому способствуют тысячи публикаций, учебников, заметок в интернете и куча роликов на YouTube.

Программы для Arduino пишутся на обычном C++, дополненным простыми и понятными функциями для управления вводом/выводом на контактах. Если вы уже знаете C++ — Arduino станет дверью в новый мир, где программы не ограничены рамками компьютера, а взаимодействуют с окружающим миром и влияют на него. Если же вы новичок в программировании — не проблема, вы с лёгкостью научитесь, это просто.

Для удобства работы с Arduino существует бесплатная официальная среда программирования «Arduino IDE», работающая под Windows, Mac OS и Linux. С помощью неё загрузка новой программы в Arduino становится делом одного клика, только лишь подключите плату к компьютеру через USB.

Arduino IDE

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

В следующих статьях рассмотрим, что такое Arduino IDE. Сравним платы Arduino и определим, с какой платы лучше начинать изучать Arduino и прочее.


Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новой статье.

]]>
Самодельные часы - плеер на Arduino с сенсорным дисплеем Nextion. http://portal-pk.ru/news/256-samodelnye-chasy---pleer-na-arduino-s-sensornym-displeem.html Константин Portal-PK 2020-04-13T15:24:34+03:00 Разработка часов на Arduino достаточно увлекательная и интересная тема. На моём сайте вы найдете большое количество различных проектов часов, в том числе и проект часов на Arduino с дисплеем Nextion.

В данном проекте будем дорабатывать часы на Arduino с сенсорным дисплеем Nextion. Напечатаем новый корпус на 3D принтере и добавим возможность воспроизведения MP3 файлов с карты памяти.

В данном проекте будем дорабатывать часы на Arduino с сенсорным дисплеем Nextion. Напечатаем новый корпус на 3D принтере

Первая версия часов с сенсорным дисплеем.

Предыдущая версия часов получилась неплохой, но были недостатки. Один из недостатков заключался в том, что часы обладали минимальным набором функций: вывод даты и времени, температуры, влажности в помещении. Но больше всего не понравился моим подписчикам на YouTube корпус. Он был сделан из банки из-под чипсов и имел ряд недочетов. Подписчики на канале предложили переделать корпус, и напечатать его на 3D принтере, что я и сделал.

Для того, чтобы собрать часы на Arduino с дисплеем Nextion нам понадобится:

1. Arduino Nano V3.0 (ATmega328). Версия Arduino Nano V2.0 (ATmega168) не подойдет, так как для текущего функционала недостаточно памяти.

2. Дисплей Nextion 2,8 дюйма. Можно и другого размера.

3. Датчик температуры и влажности SHT3x (SHT31) .

4. Часы реального времени (RTC) DS3231, я использовал версию mini.

5. Разъем 5.5 мм, для подключения питания часов.

6. MP3-плеер DFPlayer Mini.

7. Динамик 3Вт. 4Ом.

8. Провода для соединения элементов.

9. Пластик для печати корпуса.

10. Винты, гайки и шайбы М3.

11. Краска для покраски корпуса. Можно и не красить.

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

Эти комплектующие пригодятся при сборе часов с сенсорным дисплеем. Возможно, упустил и расписал не все, что использовал. Если есть замечания или предложения, пишите в комментарии.


Схема подключения самодельных часов и плеера.

С комплектующими определились. Сейчас можно все собрать. Для тестирования работы часов я собрал электронику на макетной плате вот по такой схеме.

Схема подключения самодельных часов и плеера.

Перед тем, как установить все в корпус, необходимо запрограммировать Arduino. Это связано с тем, что мы будем использовать аппаратные пины RX TX. На плате это pin 0 и 1. Если мы подключим к ним дисплей, то прошить Ардуино не получится, будет выводить ошибку. Вот почему так важно перед сборкой загрузить скетч в Arduino NANO.


Скетч часов на Arduino с дисплеем Nextion.

Скетч часов на Arduino с дисплеем Nextion можно скачать внизу статьи, в разделе материалы для скачивания. Там же вы найдете все необходимые библиотеки.

Скетч часов на Arduino с дисплеем Nextion можно скачать внизу статьи, в разделе материалы для скачивания. Там же вы найдете все необходимые библиотеки.

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

Если у вас возникнут трудности, задавайте вопросы на форуме, там быстрее увижу и отвечу вам.


Корпус для часов Nextion.

После того, как забраковали мой первый корпус для часов, я решил не расстраиваться, а сделать 3D Model в программе Fusion 360.

3D Model в программе Fusion 360

Модель, к сожалению, утеряна, так как у меня сломался жёсткий диск. Остался только код для печати на 3D принтере пластиком PLA, соплом 0,4 мм.Код можно скачать в разделе материалы для скачивания.

Корпус удался не с первого раза.

Первая модель получилась достаточно маленькая и компактная, но устанавливать элементы было бы достаточно сложно.

Первая модель получилась достаточно маленькая и компактная, но устанавливать элементы было бы достаточно сложно. А порой даже невозможно. Для установки дисплея мне пришлось подточить крепления задней крышки.

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

Долго мучиться я не стал с подгонкой всех элементов и сделал вторую версию.

Третий вариант получился более удачный. Я решил его зачистить и покрасить. В итоге получился вот такой красивый белый корпус.

Третий вариант получился более удачный. Я решил его зачистить и покрасить. В итоге получился вот такой красивый белый корпус.


Сборка часов с сенсорным дисплеем.

Сборка часов с сенсорным дисплеем.

После того, как Arduino запрограммирована, можно приступить к установке электроники в корпус. Поэтапно устанавливаем все элементы: датчик температуры и влажности, модуль MP3 плеера, динамик, его устанавливаю на заднюю крышку с помощью крепежного кольца.

крышку с помощью крепежного кольца.

Дисплей Nextion закрепляю с помощью винтов M3, предварительно подложив по три шайбы между корпусом и дисплеем. Это необходимо для того, чтобы корпус и дисплей были на одном уровне. Устанавливаем разъём питания на заднюю крышку. После чего зданию крышку устанавливаем на место, и закрепляем ее с помощью двух винтов.

Часы готовы и теперь их можно проверить.

Часы готовы и теперь их можно проверить.


Обзор готовых часов плеера на Ардуино с дисплеем.

Часы готовы и пора проверить их работоспособность. Предлагаю рассмотреть, что уже умеет данная самоделка?

Функции и возможности самодельных часов на Ардуино

Функции и возможности самодельных часов на Ардуино:

  • Вывод даты и времени;
  • Вывод температуры и влажности;
  • Настройка даты и времени;
  • Время не сбрасывается при отключении питания;
  • Воспроизведение музыки с карты памяти;
  • Настраиваемые плейлисты.
  • Воспроизведение композиций из выбранного плейлиста.
  • Воспроизведение случайной композиции.
  • Настройка громкости.

Более наглядно о возможностях данной самоделки вы сможете посмотреть в видео.

Вывод.

Возможности Arduino NANO достаточно обширные и реализовать на данной отладочной плате можно различные самоделки. Я планировал добавить еще пару функций, но памяти уже не достаточно и ардуинка начинает подвисать, если посылать большое количество команд с дисплея. Поэтому следующая версия часов с дисплеем Nextion будет на ESP32.

Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Arduino урок 24. Анимация на семисегментный индикатор TM1637. http://portal-pk.ru/news/255-animaciya-na-semisegmentnyi-indikator-tm1637.html Константин Portal-PK 2020-04-02T15:14:46+03:00 Сегодня в Arduino уроке научимся выводить анимацию и бегущую строку на семисегментный индикатор TM1637. Если вы не знаете, что такое семисегментный индикатор TM1637, или у вас возникли сложности с данным уроком, вы можете посмотреть предыдущий урок:Урок 23. Подключение сегментного дисплея TM1637 к Arduino. В нём уже рассматривали модуль TM1637, с простыми примерами использования данного модуля.

Сегодня в Arduino уроке научимся выводить анимацию и бегущую строку на семисегментный индикатор TM1637

Для урока понадодиться:


Установка и настройка библиотеки TM1637.h.

Для данного урока будем использовать другую библиотеку, которая обладает рядом преимуществ:

  • Вывод символов происходит простым написанием этого символа в коде;
  • Есть готовая функция скроллинга текста, просто указываем массив символов. Таким способом удобно выводить дату и год;
  • Функции анимации вывода символов на дисплей;

Скачать библиотеку можно внизу статьи, в разделе "Материалы для скачивания". После того, как вы скачали архив с библиотекой, её нужно установить. Для этого откроем Arduino IDE, перейдем в раздел Скетч -> Подключить библиотеку -> Добавить ZIP. библиотеку.

Установка и настройка библиотеки TM1637.h.

Выбираем архив. После установки, библиотека появиться в списке библиотек.

После установки, библиотека появиться в списке библиотек.

Внимание! Если вы ставили другие библиотеки для работы с дисплеем TM1637, их необходимо удалить. В противном случае возможен конфликт. Удалить библиотеку можно из менеджера библиотек, конечно если вы ставили через менеджер библиотек. Или напрямую из папки libraries, которая располагается: C:\Users\(Пользователь)\Documents\Arduino\libraries в операционной системе Windows.

 Если вы ставили другие библиотеки для работы с дисплеем TM1637, их необходимо удалить.

Описание функций библиотеки TM1637

init() - инициализация
set(n) - яркость сегментов от 0 до 7
clearDisplay() - очистить экран
point(True) - выключить/включить разделитель (две вертикальные точки)
displayInt(value) - вывести на экран четырёхзначное число
displayIntZero(value) - вывести на экран четырёхзначное число с нулями слева
display(posit, Byte) - вывести на экран символ Byte (0-9) в одну из четырёх позиций posit(0-3)
display(array) - вывести на экран массив array из четырёх символов
displayByte(posit, Byte) - вывести на экран символ Byte в одну из четырёх позиций posit(0-3)
displayByte(ARRAY_BYTE) - RRAY_BYTE - массив ( 0x7d, 0x7d, 0x7d, 0x7d )
displayByte(Byte1, Byte2, Byte3, Byte4) - вывести на экран четыре знака
runningString(buf, sizeof(buf), delay) - бегущая строка из массива (массив, размер массива, задержка в мс)
scroll(BitAddr, DispData, delayms) - обновить значение пролистыванием (адрес, символ, задержка в мс)
scroll(DispData[], delayms) - обновить значение пролистыванием (массив символов, задержка в мс)
scrollByte(BitAddr, DispData, delayms) - обновить значение пролистыванием (адрес, БАЙТ, задержка в мс)
scrollByte(DispData[], delayms) - обновить значение пролистыванием (массив, задержка в мс)
twist(BitAddr, DispData, delayms) - обновить значение вращением (адрес, символ, задержка в мс)
twist(DispData[], delayms) - обновить значение вращением (массив символов, задержка в мс)
twistByte(BitAddr, DispData, delayms) - обновить значение вращением (адрес, БАЙТ, задержка в мс)
twistByte(DispData[], delayms) - обновить значение вращением (массив, задержка в мс)
displayClock(hrs, mins) - выводит часы, минуты
displayClockScroll(hrs, mins, delayms) - выводит часы, минуты с эффектом пролистывания экрана вниз
displayClockTwist(hrs, mins, delayms) - выводит часы, минуты с эффектом вращения знакоместа

Сейчас можно приступить к подключению сегментного дисплея TM1637 к Arduino.

Подключение дисплея TM1637 к Arduino

Подключить дисплей можно к любым цифровым пинам Ардуино. В нашем случае будем подключать к Arduino NANO по схеме.

Подключить дисплей можно к любым цифровым пинам Ардуино. В нашем случае будем подключать к Arduino NANO по схеме.

  • Arduino Nano [PIN 5V] - TM1637 Module[PIN 5V]
  • Arduino Nano [PIN GND] - TM1637 Module[PIN GND]
  • Arduino Nano [PIN 2] - TM1637 Module[PIN DIO]
  • Arduino Nano [PIN 3] - TM1637 Module[PIN CLK]

Подключить TM1637 к Arduino UNO можно по аналогичной схеме.

Подключить TM1637 к Arduino UNO можно по аналогичной схеме.

Пример кода для вывода анимации и бегущей строки на семисегментный индикатор с драйвером TM1637.

Пример 1. Анимация пузыри на TM1637.

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

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
void setup()
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop()
{
  running_text(); // пузыри
}
void running_text() // пузыри
{
  byte buf[] = {_degree, _o, _degree, _o, _degree, _o, _degree, _o, _degree, _o, _degree, _o};
  disp.runningString(buf, sizeof(buf), 300);  // время в мс
}

Код получается в несколько строк. Используя функцию скроллинга текста. Выводим поочерёдно нужные символы и получаем данный эффект.

Пример 2. Вывод символов со скроллингом текста вниз.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
static byte buff[4] = {_L, _E, _G, _O};
void setup()
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop()
{
  scrolling_text();// скролинг текста вниз
}
void scrolling_text() // скролинг текста вниз
{
  disp.clear();
  disp.scrollByte(buff, 100);
  delay(1000);
}

Символы на экране выводим с эффектом скроллинга. Символы как бы падают сверху и занимают свою позицию на дисплее. При каждой смене символа анимация повторяется. Для примера используем текст из прошлого урока, для демонстрации, на сколько проще использовать данную библиотеку.

Пример 3. Анимация вращения символов на дисплее TM1637.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
static byte buff[4] = {_S, _t, _O, _P};
void setup()
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop()
{
  rotation_all_sign(); // вращение по часовой стрелке всех символов
  rotation_one_sign(); // вращение символов по очереди слева на право
}
void rotation_all_sign()  // вращение по часовой стрелке всех символов
{
  disp.clear();
  disp.twistByte(buff, 100);
  delay(1000);
}
void rotation_one_sign()  // вращение символов по очереди слева на право
{
  for (uint8_t i = 0; i < 4; i++)
  {
    disp.twistByte(i, buff[i], 70);
    delay(100);
  }
}

Информация на дисплее появляется с эффектом вращения символов. Первая функция вращает все символы и выводит их на дисплей. Вторая функция вращает по одному символу и выводит их на дисплей по очереди.

Пример 4. Обычные часы и изменения яркости.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
uint32_t Now;
boolean flag;
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  normClock(); //обычные часы
  blinking_text(); //изменяем яркость
}
void normClock() //обычные часы
{
  byte hrs = 19, mins = 55;
  uint32_t tmr;
  Now = millis();
  while (millis () - Now < 10000) {   // каждые 10 секунд
    if (millis() - tmr > 500) {       // каждые полсекунды
      tmr = millis();
      flag = !flag;
      disp.point(flag);   //выкл/выкл разделитель:
     if (flag) 
      {
        // ***** часы! ****
        mins ++;
        if (mins > 59) 
        {
          mins = 0;
          hrs++;
          if (hrs > 24) hrs = 0;
        }
      // ***** выводим часы! ****
      disp.displayClock(hrs, mins);   // выводим время функцией часов
      }
    }
  }
  disp.point(0);   // выкл точки
}
void blinking_text() //изменяем яркость
{
   disp.brightness(0);
   delay(500);
    for (uint8_t i = 0; i < 5; i++) 
    {
      disp.brightness(2);
      delay(200);
      disp.brightness(7);
      delay(200);
      disp.brightness(0);
      delay(500);
    }
 disp.brightness(7);
}

Кроме анимации можно вывести и обычные часы. Что и делает функция в данном примере. Вторая функция изменяет яркость, её можно использовать для автоматического регулирования яркости, например, используя показания, полученные с фоторезистора.

Пример 5. Часы с вращающимися символами на TM1637 и Arduino.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
uint32_t Now;
boolean flag;
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  twistClock(); //часы с вращающимися цифрам
}
void twistClock()  //часы с вращающимися цифрам
{
  byte hrs = 19, mins = 53;
  uint32_t tmr;
  Now = millis();
  while (millis () - Now < 10000) {   // каждые 10 секунд
    if (millis() - tmr > 500) {       // каждые полсекунды
      tmr = millis();
      flag = !flag;
      disp.point(flag);   // выкл/выкл точки
      if (flag) 
      {
        // ***** часы! ****
        mins ++;
        if (mins > 59) 
        {
          mins = 0;
          hrs++;
          if (hrs > 24) hrs = 0;
        }
        // ***** часы! ****
        disp.displayClockTwist(hrs, mins, 35);    // показываем часы
      }
    }
  }
  disp.point(0);   // выключить разделитель :
}

В данном примере сделаем имитацию работы часов с выводом символов с анимацией вращения. Пример подойдёт для реализации часов с красивым выводом значений даты и времени на TM1637 и Arduino.

Пример 6. Часы со скроллингом текста сверху вниз на TM1637 и Arduino.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
uint32_t Now;
boolean flag;
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  scrollClock(); //часы со скролингом цифр
}
void scrollClock() //часы со скролингом цифр
{
  byte hrs = 19, mins = 54;
  uint32_t tmr;
  Now = millis();
  while (millis () - Now < 10000) {   // каждые 10 секунд
    if (millis() - tmr > 500) {       // каждые полсекунды
      tmr = millis();
      flag = !flag;
      disp.point(flag);   // выкл/выкл разделитель:
      if (flag) 
      {
        mins ++;
        if (mins > 59) 
        {
          mins = 0;
          hrs++;
          if (hrs > 24) hrs = 0;
        }
        // ***** выводим часы! ****
        disp.displayClockScroll(hrs, mins, 70);    // показываем часы
      }
    }
  }
  disp.point(0);   // выкл точки
}

Данный пример немногим отличается от предыдущего. Изменена функция вывода символов. Сейчас используем анимацию скроллинга. Символы как бы падают сверху вниз и останавливаются на своей позиции на дисплее.

Пример 7. Бегущая строка на TM1637 и Arduino.

Конечно, реализовать полноценную бегущую строку на данном модуле не получиться. Но вывести некоторую информацию можно. Как писал выше, данная библиотека поддерживает вывод написанных в коде символов, но не всех. Это связано с возможностью семисегментного индикатора. Синтаксис следующий, сперва пишем нижнее подчеркивание, а затем символ. Если символ не подсвечивается оранжевым цветом, значит данного символа нет в наборе. Все достаточно просто.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  running_text();
}
void running_text()
{
  byte buf[] = { _A,_r,_d,_u,_i,_n,_o,0,0,_N,_A,0,0,_P,_o,_r,_t,_A,_L,0,_P,_C,0,0,_A,_r,_d,_u,_i,_n,_o,0,0,_S,_E,_N,_S,_O,_r,_S,0,0,_A,_L,_L,0,0,_F,_o,_r,0,0,\
  _A,_r,_d,_u,_i,_n,_o,0,0,_b,_o,_A,_r,_d,_S,0,0};
  disp.runningString(buf, sizeof(buf), 200);  // время в мс
}

Для примера вывел надпись: _A,_r,_d,_u,_i,_n,_o,0,0,_N,_A,0,0,_P,_o,_r,_t,_A,_L,0,_P,_C,

Как вы догадываетесь это: Arduino na Portal PC. Почему PC? Дисплей не поддерживает символ К.

Вывод: Использование данной библиотеки позволяет по-другому взглянуть на возможности семисегментного индикатор на TM1637. Скучные символы становятся анимированными и более красивыми.

Планирую сделать часы на TM1637 и Arduino с использованием анимации.

Планирую сделать часы на TM1637 и Arduino с использованием анимации.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Проекты ночников и светильников на Arduino. http://portal-pk.ru/news/254-proekty-nochnikov-i-svetilnikov-na-arduino.html Константин Portal-PK 2020-03-31T15:38:35+03:00

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

6. Космический ночник со стеклянными шарами своими руками.

Сегодня расскажу про светильник, который сделал своими руками на Arduino (DigiSpark).Очень красивый светильник со стеклянными шарами. Знакомые сказали, что его можно использовать вместо свечек для создания романтичной обстановки. И я с ними согласен. Светильник достаточно яркий и красивый. Стеклянные шары выглядят просто сногсшибательно. Пузырьки воздуха внутри шарика похоже на звезды в небе. А переливающий свет придает дополнительный антураж.

Ночник со стеклянными шарами на Arduino своими руками.

5. Сенсорный светильник с большой площадью срабатывания на Arduino (Digispark).

Данный светильник занимает мало места на столе, но при этом его можно использовать как настольную лампу при чтении книг, или для подсветки клавиатуры и рабочего стола. Разрабатывал несколько вариантов подсветки с сенсорным управлением. И решил сделать светильник с сенсорным управлением, но так чтобы область срабатывания была не только небольшая область корпуса, а весь алюминиевый профиль под светодиодную ленту.

Управляет всем небольшой микроконтроллер Arduino (Digispark). Для обеспечения 5 режимов работы использовал светодиодную ленту ws2812b.

Cамодельный сенсорный светильник на Arduino (Digispark).

4. Ночник в виде куба с несколькими режимами работы на Arduino и светодиодах WS2812.

Ночник в виде куба с несколькими режимами работы на Arduino и светодиодах WS2812.При изучении 3D моделирования, и осваивая печать на 3D принтере, сделал вот такой ночник в виде куба. Не смотря на свою простоту и небольшой размер данный ночник нравится многим знакомым. Управляет ночником Ардино (DigiSpark) в качестве светодиодов отлично подошли светодиоды ws2812b.

Светодиодный ночник в виде куба.

3. Два варианта ночника «светофор» на Arduino иадресных светодиодах WS2812.

Два варианта ночника «светофор» на Arduino иадресных светодиодах WS2812.

Сделал уже два варианта светофора на Arduino и адресных светодиодах WS2812. Достаточно удобные ночники и нравиться детям. У меня ребенок играл месяца 2 с данным светильником. Также использовал как ночник. В связи с тем, что он работает на батарейках, его можно поставить в любое место. Ребенок включает его и ставит на тумбочку около кровати. Время работы от 7 до 9 ночей.

Ардуино светофор на digispark и ws2812b

Светофор на Digispark и адресных светодиодах WS2812 — Ардуино светофор

2. Светильник, сделанный на ЧПУ станке с 5 режимами работы и регулировкой яркости.

Светильник, сделанный на ЧПУ станке с 5 режимами работы и регулировкой яркости.

Это один из самых популярных светильников, которые я делал. Спустя пару лет после первого светильника, уже сделал несколько десятков светильников, в подарок и на заказ.

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

Очередной проект на Digispark и адресных светодиодах WS2812. Работа ЧПУ

1. Ночник из банки из-под витаминов на Arduino и адресных светодиодах WS2812.

Ночник из банки из-под витаминов на Arduino и адресных светодиодах WS2812.

Это первый проект, который я сделал на адресных светодиодов WS2812. Рассеиватель сделал из банки из-под витаминов для детей.

Через некоторое время переделал данный светильник, добавил режимы работы и вместо Arduino NANO установил Digispark.

Меняем Arduino на Digispark в светильнике на ws2812. digispark проекты.

Умный ночник на Arduino и адресных светодиодах WS2811

]]>
Урок 23. Подключение сегментного дисплея TM1637 к Arduino. http://portal-pk.ru/news/253-podklyuchenie-segmentnogo-displeya-tm1637-k-arduino.html Константин Portal-PK 2020-03-24T12:24:49+03:00 Сегодня в уроке подключим семисегментный индикатор TM1637 к Arduino. Установим библиотеку TM1637.h и научимся выводить на дисплей цифры и некоторые символы.

Как устроен и из чего состоит модуль TM1637.

Характеристики Индикатора на TM1637:
• Напряжение питание: 5,5В
• Потребляемый ток 0.2 — 80мА (в зависимости от горящих сегментов)
• Градаций яркости индикаторов — 8
• Размеры платы: 42x24мм
• Двух проводной последовательный интерфейс (CLK, DIO).

Фото модуля от магазина RobotDyn фронтальный вид.

Фото модуля от магазина RobotDyn, фронтальный вид

Фото модуля от магазина RobotDyn вид с тыльной стороны.

Фото модуля от магазина RobotDyn вид с тыльной стороны.

Этот модуль собран на драйвере TM1637.
• Есть модули красного, синего, зелёного, белого цвета.
• Размеры 0,36” и 0,56”

В уроке будем использовать модуль TM1637 0,56”, зеленого цвета.


Возможности модуля TM1637:
• Зажигать сразу все знаки или по одному сегменту или символу,
• Выводить цифры от 0 до 9 и некоторые буквы. Смотри ниже.
• Цифры могут выводиться как с нулями слева, так и без них,
• 8 градаций изменения яркости.
• Вывод символа в определённую позицию (ячейку).

Отличие модуля индикатора на TM1637 от других – это его компактность, он не дорогой, и управление всего по двум проводам.

Отличие модуля индикатора на TM1637 от других – это его компактность, он не дорогой, и управление всего по двум проводам.


Для урока понадодиться:

Подключение дисплея TM1637 к Arduino

Подключить дисплей можно к любым цифровым пинам Ардуино. В нашем случае будем подключать к Arduino NANO по схеме.

Подключение дисплея TM1637 к Arduino

Arduino Nano [PIN 5V] - TM1637 Module[PIN 5V]

Arduino Nano [PIN GND] - TM1637 Module[PIN GND]

Arduino Nano [PIN 2] - TM1637 Module[PIN DIO]

Arduino Nano [PIN 3] - TM1637 Module[PIN CLK]

Подключение дисплея TM1637 к Arduino UNO

Установка и настройка библиотеки TM1637.h.

Установить библиотеку TM1637.h можно из менеджера библиотек. Для этого откроем Arduino IDE, перейдем в раздел Скетч-> Подключить библиотеку -> Управление библиотеками.

Установить библиотеку TM1637.h

Затем в строке поиска наберем TM1637. И установим библиотеку Grove 4-Digit Display.

 Затем в строке поиска наберем TM1637. И установим библиотеку Grove 4-Digit Display.

Вы также можете скачать библиотеку TM1637 внизу урока, в разделе «материалы для скачивания».


Настройка библиотеки TM1637 для вывода дополнительных символов.

Библиотека позволяет вывести цифры и некоторые символы на дисплей.

Библиотека позволяет вывести цифры и некоторые символы на дисплей.

Для реализации простых проектов, таких как часы, индикаторы и счетчики, этого набора символов достаточно. Я реализовывал часы с выводом температуры и влажности: Arduino часы. Видео 2. Подключаем к Arduino TM1637 и датчик DHT11.

Для отображения температуры использовал символ «С» номер для вывода на индикатор 12и для отображения влажности использовал символ «F» номер для вывода на дисплей 15.

Но для некоторых проектов на Arduino не достаточно

Но для некоторых проектов на Arduino не достаточно данного набора символов. Расширить его достаточно легко, для этого в файле TM1637.cpp библиотеки находим массив TubeTab[] и добавляем нужные коды символов.

TM1637.cpp библиотеки

Список добавленных символов в файле TM1637.cpp, библиотеки TM1637.

Список добавленных символов в файле TM1637.cpp, библиотеки TM1637.

После чего данные символы можно использовать в своих проектах.

После чего данные символы можно использовать в своих проектах.

После чего данные символы можно использовать в своих проектах.

Если захочется закодировать свой символ, то можно использовать следующую таблицу:

После кодирования сегментов, установив нужные биты в байте,

После кодирования сегментов, установив нужные биты в байте, для сокращения записи можно перевести байт из двоичного в шестнадцатиричный формат, как - b00011110 -> 0x1E.


Пример кода для вывода информации на семисегментный индикатор с драйвером TM1637.

Пример 1. Вывод времени с мигающим двоеточием.

Пример 1. Вывод времени с мигающим двоеточием.

В данном примере выведем 4 цифры на индикатор TM1637, и научимся мигать двоеточием каждую секунду. Данный пример поможет вывести любую цифровую информацию: время, счётчики, показания с датчиков.

В данном примере выведем 4 цифры на индикатор TM1637,

Пример 2. Вывод слов на модуль TM1637.

Пример 2. Вывод слов на модуль TM1637.

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

Дополнительные символы добавили в библиотеку, сейчас осталось научиться их выводить.

Пример 3. Выводданных с датчиком с символами.

Пример 3. Выводданных с датчиком с символами.

Мы научились выводить цифры и слова на дисплей. Как же сделать динамическое изменение значений на дисплее. При этом добавлять символы для индикации различных данных.

Тут поможет нам посимвольный вывод данных на дисплей. Например, запись tm1637.display(0, 5) выводит первый символ на дисплей 5. Аналогично выводятся остальные 3 символа.

Тут поможет нам посимвольный вывод данных на дисплей. Например, запись tm1637.display(0, 5)

Для разделения числа на десятки и единицы, для нахождения единиц нужно найти остаток от деления на 10, и для получения десяток нужно число делить на 10.

Для разделения числа на десятки и единицы

И после числового значения выведем символ, например, для температуры символ «С».

И после числового значения выведем символ, например, для температуры символ «С».


Пример применим при выводе даты, времени и показаний с датчиков.


Появились вопросы или предложения не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Работа со встроенной EEPROM в микроконтроллерах на Arduino http://portal-pk.ru/news/252-rabota-so-vstroennoi-eeprom-v-mikrokontrollerah-na-arduino.html Константин Portal-PK 2020-03-21T10:19:57+03:00 Микроконтроллеры AVR, на основе которых создаются платы Arduino и Genuino, обладают встроенной EEPROM: памятью, которая хранит значения переменных, пока плата выключена (подобно крошечному жесткому диску). Описываемая в данной статье библиотека позволяет считывать и записывать данные в EEPROM.

Поддерживаемые микроконтроллеры на различных платах Arduino и Genuino обладают разным размером EEPROM: 1024 байта в ATmega328, 512 байт в ATmega168 и ATmega8, 4 KB (4096 байт) в ATmega1280 и ATmega2560. Платы Arduino и Genuino 101 обладают эмуляцией EEPROM пространства размером 1024 байт.

Функции для работы с EEPROM:

read()

Описание
Считывает байт из EEPROM. Ячейки, которые никогда не были записаны, содержат значение 255.
Синтаксис
EEPROM.read(address)
Параметры
address: адрес ячейки для считывания, начинается с 0 (int).
Возвращаемое значение
Значение, записанное в ячейку (byte).
Пример
/*
 * EEPROM Read
 *
 * Считывает значение каждого байта в EEPROM и выводит его
 * на компьютер.
 */

#include <EEPROM.h>

// начать чтение с первого байта (адрес 0) в EEPROM
int address = 0;
byte value;

void setup() {
  // инициализировать последовательный порт и ждать,
  // пока порт не будет открыт:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждать подключения последовательного порта. Необходимо только для встроенного USB порта.
  }
}

void loop() {
  // прочитать байт из текущего адреса EEPROM
  value = EEPROM.read(address);

  Serial.print(address);
  Serial.print("\t");
  Serial.print(value, DEC);
  Serial.println();

  /***
    Перейти к следующему адресу, или, если находимся в конце, вернуться в начало.

    Большие AVR контроллеры обладают большим размером EEPROM, например:
    - Arduno Duemilanove: 512b EEPROM;
    - Arduino Uno:        1kb EEPROM;
    - Arduino Mega:       4kb EEPROM;

    Вместо жесткого прописывания размера EEPROM, лучше использовать предусмотренную 
    функцию определения размера.
    Это сделает ваш код портируемым на все микроконтроллеры AVR.
  ***/
  address = address + 1;
  if (address == EEPROM.length()) {
    address = 0;
  }

  /***
    Поскольку размеры EEPROM являются степенями двойки, то возврат к началу EEPROM
    можно было бы реализовать с помощью операции побитового И со значением (размер - 1).

    ++address &= EEPROM.length() - 1;
  ***/

  delay(500);
}

write()

Описание
Записывает байт в EEPROM.
Синтаксис
EEPROM.write(address, value)
Параметры
address: адрес ячейки для записи, начинается с 0 (int).
value: значение для записи, от 0 до 255 (byte).
Возвращаемое значение
Ничего не возвращается.
Примечание
Запись в EEPROM занимает 3,3 мс. Память EEPROM обладает жизненным циклом 100 000 операций записи/стирания, поэтому, возможно, вам придется быть осторожными с тем, как часто записываете её.
Пример
/*
 * EEPROM Write
 *
 * Записывает значения, считанные с аналогового входа 0, в EEPROM.
 * Эти значения будут оставаться в EEPROM, когда плата будет
 * выключена, и могут быть извлечены позже при следующем запуске.
 */

#include <EEPROM.h>

/** текущий адрес в EEPROM (т.е. какой байт мы собираемся записать следующим) **/
int addr = 0;

void setup() {
  /** Нет никаких начальных настроек. **/
}

void loop() {
  /***
    Необходимо делить на 4, так как диапазон значений на аналоговых входах
    составляет от 0 до 1023, а каждый байт EEPROM может хранить значения
    только от 0 до 255.
  ***/

  int val = analogRead(0) / 4;

  /***
    Записать значение в соответствующий байт EEPROM.
    Эти значения останутся там, когда плата будет выключена.
  ***/

  EEPROM.write(addr, val);

  /***
    Перейти к следующему адресу, или, если находимся в конце, вернуться в начало.

    Большие AVR контроллеры обладают большим размером EEPROM, например:
    - Arduno Duemilanove: 512b EEPROM;
    - Arduino Uno:        1kb EEPROM;
    - Arduino Mega:       4kb EEPROM;

    Вместо жесткого прописывания размера EEPROM, лучше использовать предусмотренную 
    функцию определения размера.
    Это сделает ваш код портируемым на все микроконтроллеры AVR.
  ***/
  addr = addr + 1;
  if (addr == EEPROM.length()) {
    addr = 0;
  }

  /***
    Поскольку размеры EEPROM являются степенями двойки, то возврат к началу EEPROM
    можно было бы реализовать с помощью операции побитового И со значением (размер - 1).

    ++addr &= EEPROM.length() - 1;
  ***/
  delay(100);
}

update()

Описание
Записывает байт в EEPROM. Значение записывается, только если оно отличается от значения уже записанного по этому адресу.
Синтаксис
EEPROM.update(address, value)
Параметры
address: адрес ячейки для записи, начинается с 0 (int).
value: значение для записи, от 0 до 255 (byte).
Возвращаемое значение
Ничего не возвращается.
Примечание
Запись в EEPROM занимает 3,3 мс. Память EEPROM обладает жизненным циклом 100 000 операций записи/стирания, поэтому данная функция, в отличие от write(), может сохранить время, если записываемые данные часто не меняются.
Пример
/***
   EEPROM Update

   Сохраняет значения, считанные с аналогового входа 0, в EEPROM.
   Эти значения будут оставаться в EEPROM, когда плата будет
   выключена, и могут быть извлечены позже при следующем запуске. 

   Если значение не изменилось, то EEPROM не перезаписывается,
   что поможет без необходимости не сокращать срок службы EEPROM.
 ***/

#include <EEPROM.h>

/** текущий адрес в EEPROM (т.е. какой байт мы собираемся записать следующим) **/
int address = 0;

void setup() {
  /** EMpty setup **/
}

void loop() {
  /***
    Необходимо делить на 4, так как диапазон значений на аналоговых входах
    составляет от 0 до 1023, а каждый байт EEPROM может хранить значения
    только от 0 до 255.
  ***/
  int val = analogRead(0) / 4;

  /***
    Обновить конкретную ячейку EEPROM.
    Эти значения останутся там при выключении платы.
  ***/
  EEPROM.update(address, val);

  /***
    Функция EEPROM.update(address, val) эквивалентна следующему:

    if( EEPROM.read(address) != val ){
      EEPROM.write(address, val);
    }
  ***/

  /***
    Перейти к следующему адресу, или, если находимся в конце, вернуться в начало.

    Большие AVR контроллеры обладают большим размером EEPROM, например:
    - Arduno Duemilanove: 512b EEPROM;
    - Arduino Uno:        1kb EEPROM;
    - Arduino Mega:       4kb EEPROM;

    Вместо жесткого прописывания размера EEPROM, лучше использовать предусмотренную 
    функцию определения размера.
    Это сделает ваш код портируемым на все микроконтроллеры AVR.
  ***/
  address = address + 1;
  if (address == EEPROM.length()) {
    address = 0;
  }

  /***
    Поскольку размеры EEPROM являются степенями двойки, то возврат к началу EEPROM
    можно было бы реализовать с помощью операции побитового И со значением (размер - 1).

    ++addr &= EEPROM.length() - 1;
  ***/

  delay(100);
}

get()

Описание
Считывает любой тип данных или объект из EEPROM.
Синтаксис
EEPROM.get(address, data)
Параметры
address: адрес для чтения, начинается с 0 (int).
data: данные для чтения, могут быть примитивным типом (например, float) или пользовательской структурой struct.
Возвращаемое значение
Ссылка на переданные данные.
Пример
/***
    Чтобы предварительно записать данные в EEPROM, используйте 
    пример для функции put().
    Можно обойтись и без этого, но значения, выводимые этим скетчем,
    зависят от того, что содержится в EEPROM. Это может заставить
    объект последовательного порта вывести на печать длинную строку
    мусора, если в загруженной строке не будет найден нулевой символ.
***/

#include <EEPROM.h>

void setup() {

  float f = 0.00f;   // Переменная для хранения данных, прочитанных из EEPROM.
  int eeAddress = 0; // Адрес EEPROM, откуда следует начать чтение.

  Serial.begin(9600);
  while (!Serial) {
    ; // ждать подключения последовательного порта. Необходимо только для встроенного USB порта.
  }
  Serial.print("Read float from EEPROM: ");

  // Получить данные типа float из EEPROM в месте 'eeAddress'
  EEPROM.get(eeAddress, f);
  Serial.println(f, 3);    // Это может напечатать 'ovf, nan', если данные в EEPROM 
                           // не корректны для float.

  /***
    Так как get возвращает ссылку на 'f', вы можете использовать ее в качестве аргумента
    То есть: Serial.print( EEPROM.get( eeAddress, f ) );
  ***/

  /***
    Get может использоваться и с пользовательскими структурами.
    Пример с ними выделен в отдельную функцию.
  ***/

  secondTest(); // Запустить следующий тест.
}

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void secondTest() {
  int eeAddress = sizeof(float); // Переместить адрес к байту, следующему после float 'f'.

  MyObject customVar; // Переменная для хранения данных, прочитанных из EEPROM.
  EEPROM.get(eeAddress, customVar);

  Serial.println("Read custom object from EEPROM: ");
  Serial.println(customVar.field1);
  Serial.println(customVar.field2);
  Serial.println(customVar.name);
}

void loop() {
  /* Пустой цикл */
}

put()

Описание
Записывает любой тип данных или объект из EEPROM.
Синтаксис
EEPROM.put(address, data)
Параметры
address: адрес для записи, начинается с 0 (int).
data: данные для записи, могут быть примитивным типом (например, float) или пользовательской структурой struct.
Возвращаемое значение
Ссылка на переданные данные.
Примечание
Функция использует EEPROM.update() для реализации записи, поэтому она не перезаписывает значение, если оно не изменилось.
Пример
/***
    Этот скетч также можно использовать для предварительной
    записи в EEPROM данных, используемых в примере для функции get().

    Обратите внимание, что, в отличие от однобайтной версии EEPROM.write(),
    функция put использует обновление. То есть байт будет записан, только
    если он отличается от записанных в EEPROM данных. 
***/

#include <EEPROM.h>

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void setup() {

  Serial.begin(9600);
  while (!Serial) {
    ; // ждать подключения последовательного порта. Необходимо только для встроенного USB порта.
  }

  float f = 123.456f;  // Переменная для записи в EEPROM.
  int eeAddress = 0;   // Место, куда мы хотим положить данные.
  // Простой вызов с адресом и переменной в качестве аргументов.
  EEPROM.put(eeAddress, f);

  Serial.println("Written float data type!");

  /** Put поддерживает и пользовательские структуры. **/

  //Data to store.
  MyObject customVar = {
    3.14f,
    65,
    "Working!"
  };

  eeAddress += sizeof(float); // Переместить адрес к байту, следующему после float 'f'.

  EEPROM.put(eeAddress, customVar);
  Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
}

void loop() {
  /* Пустой цикл */
}

EEPROM[]

Описание
Данный оператор позволяет использовать идентификатор 'EEPROM', как массив. Ячейки EEPROM могут быть прочитаны и записаны непосредственно с помощью этого оператора.
Синтаксис
EEPROM[address]
Параметры
address: адрес для чтения/записи, начинается с 0 (int).
Возвращаемое значение
Ссылка на ячейку EEPROM.
Пример
#include <EEPROM.h>

void setup(){

  unsigned char val;

  // Прочитать первую ячейку EEPROM.
  val = EEPROM[ 0 ];

  // Записать первую ячейку EEPROM.
  EEPROM[ 0 ] = val;

  // Сравнить содержимое
  if( val == EEPROM[ 0 ] ){
    // Сделать что-то...
  }
}

void loop(){ /* Пустой цикл */ }
]]>
#22. Подключаем к Arduino джойстик. Управление servo сервоприводом. http://portal-pk.ru/news/251-podklyuchaem-k-arduino-dzhoistik-upravlenie-servo.html Константин Portal-PK 2020-03-18T14:15:57+03:00 Сегодня в уроке подключим джойстик к Arduino UNO. И рассмотрим пару примеров использования джойстика в робототехнике:

  1. Вывод данных о положении стика джойстика в монитор порта.
  2. Управление свечением двух светодиодов с помощью джойстика.
  3. Подключить джойстик и сервопривод к Arduino. Научимся управлять сервоприводами с помощью джойстика.

А для начала рассмотрим, что такое джойстик, из чего он состоит и как устроен.

Устройство аналогово джойстика и принцип работы.

Устройство аналогово джойстика и принцип работы.

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

Устройство аналогово джойстика и принцип работы.

Управляет всем стик. При изменении положения стика по оси X - вращается потенциометр, выход которого outX, а при перемещении по оси Y - меняется значение потенциометра с выводом outY. По сути, это 2 потенциометра, с которых снимаем показания. Стик устроен таким образом, что он возвращается самостоятельно в центральное положение. Что обеспечивает центрование потенциометров. В данном состоянии джойстика на выходах outX, outY будет 511.

Управляет всем стик. При изменении положения стика по оси X

Но на практике это значение может быть другим, оно зависит от точности сборки, качества потенциометров и прочих факторов. Подробнее данную ситуацию рассмотрим на примере.

На плате установлена тактовая кнопка. Использовать ее или нет решать вам. При создании пульта для радиоуправляемой машинки я использовал данную кнопку для переключения режима работы: с джойстика или с акселерометра. Если интересно читайте на странице проекта: Машинка на радиоуправлении. Arduino + nrf24l01 + пульт.

Для урока понадодиться:

Вывод данных о положении стика джойстика в монитор порта.

Вывод данных о положении стика джойстика в монитор порта.

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

подключим джойстик к Arduino UNO по схеме.

После чего нужно загрузить код в Arduino UNO.

После чего нужно загрузить код в Arduino UNO.

В мониторе порта будут вот такие данные.

В мониторе порта будут вот такие данные.

Как видите, они отличаются от 511. Показание отличаются на разных осях X=507, Y=510. Эти данные нам пригодятся в следующем примере.

Если мы подвигаем стик джойстика, то увидим изменение значений от 0 до 1023 по каждой оси.

Если мы подвигаем стик джойстика, то увидим изменение значений от 0 до 1023 по каждой оси.

На выходе мы получаем значение до 1023. Данный диапазон значений практически не применим в проектах на Ардуино, поэтому давайте приведем это значение к диапазону от 0 до 255, для этого воспользуемся функцией map().

 Данный диапазон значений практически не применим в проектах на Ардуино

После чего в мониторе порта мы получим вот такие значения.

После чего на мониторе порта мы получим вот такие значения.


Управление свечением двух светодиодов с помощью джойстика.

Управление свечением двух светодиодов с помощью джойстика.

Чтобы усложнить ситуацию, сделаем так, чтобы светодиод не светился при центральном положении джойстика, а при отклонении джойстика светодиод плавно увеличивал яркость. Для этого нужно подключать светодиоды к пинам с ШИМ. Подключим джойстик и светодиоды к Ардуино по схеме.

Подключим джойстик и светодиоды к Ардуино по схеме

Так как мы знаем значение при центральном положении стика, для оси Х это 507, а для оси Y 510, используя функцию map(), приведем к необходимому диапазону, например для оси Х от 507 до 1023 к диапазону от 0 до 255. Код будет вот таким.

Так как мы знаем значение при центральном положении стика

Данный пример применим при разработке пульта радиоуправления.


Подключить джойстик и сервопривод к Arduino. Научимся управлять сервоприводами с помощью джойстика.

Подключить джойстик и сервопривод к Arduino. Научимся управлять сервоприводами с помощью джойстика.

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

 двух servo подключённых к Arduino UNO по схеме

Для данного примера устанавливать дополнительные библиотеки не нужно, так как библиотека servo устанавливается вместе с Arduino IDE.

Код для управления сервоприводами с помощью джойстика будет небольшим и достаточно простым.

Код для управления сервоприводами с помощью джойстика будет небольшим и достаточно простым.

Итог: Как видим из примеров, применение джойстика достаточно большое в разработке проектов на Arduino и в робототехнике.

 двух servo подключённых к Arduino UNO

Если вас интересует дополнительная информация о джойстике, пишите об этом в комментариях.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
#21. Подключаем к Arduino Шаговый двигатель 28BYJ-48 на драйвере ULN2003 http://portal-pk.ru/news/250-podklyuchaem-k-arduino-shagovyi-dvigatel-28byj-48-s-pomoshchyu.html Константин Portal-PK 2020-03-06T13:02:07+03:00 Сегодня в уроке подключим шаговый двигатель 28BYJ-48 к Arduino и научимся вращать вал двигателя в разные стороны и изменять скорость вращения с помощью потенциометра и энкодера KY-040.

Кратко, что такое шаговый двигатель (ШД) - это двигатель, который способен осуществлять вращение на 1 шаг. Шаг — это угол, который обусловлен устройством каждого конкретного шагового двигателя.

Характеристики шагового двигателя 28BYJ-48:

Характеристики шагового двигателя 28BYJ-48:

Размера шагового двигателя 28BYJ-48. Необходимы при проектировании деталей для 3D печати.

Размера шагового двигателя 28BYJ-48. Необходимы при проектировании деталей для 3D печати.

Вот так выглядит схема шагового двигателя 28BYJ-48

Вот так выглядит схема шагового двигателя 28BYJ-48

Подавая сигналы в определённом порядке на выводы двигателя, двигатель можно вращать по часовой стрелке.

Для шагового режима.

Для шагового режима.

Для полушагового режима.

Для полушагового режима.

Для урока понадодиться:

Прямое подключение шагового двигателя 28BYJ-48 к Arduino.

В связи с тем, что двигатель 28BYJ-48 работает от 5в и при небольших токах, его можно подключить на прямую к Arduino.

Схема подключения к Arduino UNO будет следующая.

В связи с тем, что двигатель 28BYJ-48 работает от 5в и при небольших токах, его можно подключить на прямую к Arduino.

Для вращения ШД достаточно подавать сигналы по схеме, которую мы рассмотрели выше.

Для этого можно сделать массив подачи сигнала на пины микроконтроллера.

Для этого можно сделать массив подачи сигнала на пины микроконтроллера.

И в цикле выполнять каждую строчку массива. Но есть решение с более компактным кодом. Нашел я данный пример на канале Дмитрия Осипова. За что ему отельное спасибо!

Код для вращения в одну и в другую сторону будет вот таким.

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Пример подключения шагового двигателя 28BYJ-48 (5V)с использованием драйвер ULN2003.

Также у Дмитрия Осипова есть код для изменения скорости вращения с помощью потенциометра. Я его немного доработал, сделал обработку нажатия кнопки без задержки в 500 мс. Сейчас двигатель стал вращаться в обратную сторону без видимой задержки.

Для подключения буду использовать модуль SBT0811 на драйвере ULN2003.

Для подключения буду использовать модуль SBT0811 на драйвере ULN2003.

Драйвер устроен вот таким образом.

Драйвер устроен вот таким образом.

Соответственно, наш код будет работать и с данным драйвером.

Подключим все по схеме и загрузим код в Arduino NANO.

Подключим все по схеме и загрузим код в Arduino NANO.

Схема подключения для Arduino UNO будет аналогичной.

Как видим, двигатель без проблем вращается по часовой стрелке и против часовой, при нажатии на кнопку вращается в противоположном направлении. При вращении потенциометра в одну сторону - скорость уменьшается, при вращении в противоположном направлении скорость увеличивается.

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Пример управления шаговым двигателем 28BYJ-48 с помощью Энкодера.

Для уменьшения количества элементов в схеме решил заменить потенциометр и тактовую кнопку на энкодер вращения KY-040. Как подключить энкодер вращения к Arduino рассказывал в предыдущем уроке.

Подключаем шаговый двигатель 28BYJ-48 и энкодер к Arduino по схеме.

Подключаем шаговый двигатель 28BYJ-48 и энкодер к Arduino по схеме.

Проводим небольшую доработку кода и получим вот такой результат.

Если нажать на энкодер, меняется направление вращения. А при вращении энкодера по часовой стрелке - скорость увеличивается. Если вращать против часовой стрелки - скорость снижается.

Если нажать на энкодер, меняется направление вращения. А при вращении энкодера по часовой стрелке - скорость увеличивается. Если вращать против часовой стрелки - скорость снижается.

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Вы также можете без проблем воспользоваться примером из стандартной библиотеки Stepper, которая позволит сделать тоже самое и при меньшем объёме кода. Но библиотека не даст вам понять, как это все устроено.

стандартной библиотеки Stepper

А вот сам пример вращения в одну сторону, а затем в другую с использованием библиотеки Stepper.

А вот сам пример вращения в одну сторону, а затем в другую с использованием библиотеки Stepper.

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

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

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
#20 Плейлисты, воспроизводим случайную композицию DFPlayer Mini и Arduino. http://portal-pk.ru/news/249-pleilisty-vosproizvodim-sluchainuyu-kompoziciyu-dfplayer-mini.html Константин Portal-PK 2020-03-04T13:18:26+03:00 В продолжение урока: Делаем MP3-плеер на DFPlayer Mini и Arduino. Рассмотрим, как можно создавать плейлисты для воспроизведения композиции с автоматическим определением количества плейлистов и количества треков в каждом плейлисте. А также сделаем воспроизведение случайного трека и зациклим воспроизведение композиции в одной папке.

В продолжение урока:Делаем MP3-плеер на DFPlayer Mini и Arduino. Рассмотрим, как можно создавать плейлисты

После того, как я сделал урок с использованием MP3-плеера написал мне подписчик: «познавательное видео! а можешь рассказать как сделать, например, 10 папок с музыкой и в них 10 музыкальных фрагментов, как подключаются кнопки выбора по папкам, и оставить громкость + - , воспроизведение и стоп? Я видел схему с множеством резисторов, для определения, например, каждой кнопки - музыкальному отрывку, но не нашел как подключить кнопки выбора папок - буду признателен за помощь!»

После того, как я сделал урок с использованием MP3-плеера написал мне подписчик

Решил я помочь подписчику и сделать урок с использованием DFPlayer и Arduino. Реализовать выбор папки и включение нужного mp3 файла. Но как сделать так, чтобы не нужно было каждый раз прописывать в коде, сколько у нас папок и сколько треков в каждой папке. А чтобы Arduino проделывала роботу по определению количества папок и треков. Ограничение DFPlayer Mini - максимум плейлистов 99, и треков в плейлисте 999, - и этого достаточно для решения, практически, любой задачи.

Данный пример поможет не только воспроизводить треки из папок, но и использовать при реализации различных уведомлений. Например, когда у вас много различных треков, которые нужно разделить по папкам, чтобы не перепутать, и из нужной папки воспроизводить трек или набор треков.

Для урока MP3-плеера на Arduino нам понадобится:


Подключаем MP3-плеера DFPlayer к Arduino по схеме.

Подключаем MP3-плеера DFPlayer к Arduino по схеме.

Пример работы с выбором папок, и композиции в них на DFPlayer.

Приступим к реализации просьбы подписчика. На карте памяти сделаем несколько папок с порядковыми номерами 01, 02, 03, 04 .. 11. В моем случае 11 папок, вы можете сделать любое количество.

На карте памяти сделаем несколько папок с порядковыми номерами 01, 02, 03, 04 .. 11.

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

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

За основу возьмем код из предыдущего урока и немного его доработаем. Добавим переменные, которые будут отвечать за папки и треки.

 Добавим переменные, которые будут отвечать за папки и треки.

В блоке Setup добавим код, который будет считать, сколько у нас папок на карте памяти. И сохраним это значение в переменную folders.

В блоке Setup добавим код, который будет считать, сколько у нас папок на карте памяти. И сохраним это значение в переменную folders.


Переменная folders получается на 1 больше, чем на карте. Сейчас мы можем, без проблем, добавлять папки на нашу карту памяти и MP3-плеер автоматически определит сколько их. Папок может быть не больше 99, и название должно состоять из 2 цифр.

Посчитаем сколько треков в первом каталоге.

Посчитаем сколько треков в первом каталоге.

Включим воспроизведение нашего первого файла в первой папке и выводим информацию об этом в монитор порта.

Включим воспроизведение нашего первого файла в первой папке и выводим информацию об этом в монитор порта.


Кнопка buttonNext будет переключать папки, а buttonPrevious – будет переключать по трекам в выбранной папке.

Переключать по трекам и по папкам будем в сторону увеличения. Можно сделать переключение в обратную сторону, но нужно добавить еще 2 кнопки. И дописать соответствующий код. Это вы сможете сделать самостоятельно, если это будет вам необходимо.

Рассмотрим код переключения по папкам:

Рассмотрим код переключения по папкам:

При нажатии кнопки переключаем на следующую папку, проверяя, чтобы количество папок не превышало полученное значение папок на флешке, и минус 1. Почему нужно вычитать 1 рассказывал выше.

 Почему нужно вычитать 1 рассказывал выше.

Затем нам нужно подсчитать, сколько треков в данной папке.

Затем нам нужно подсчитать, сколько треков в данной папке.

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

включаем первый трек из данной папки

Если вы планируете воспроизводить с первого трека при переключении между папками, нужно убрать условие и оставить j = 1;. Осталось воспроизвести трек и вывести информацию в монитор порта номер трека и номер папки, в которой находится трек.


Осталось воспроизвести трек и вывести информацию в монитор порта номер трека и номер папки, в которой находится трек.

Это не оптимальный код. Его можно упростить и сделать быстрее, но для понятия будет сложнее.

Приступим к переключению треков в выбранной папке.

Приступим к переключению треков в выбранной папке.

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

В мониторе порта это будет выглядеть вот так:

В мониторе порта это будет выглядеть вот так:

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

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

Если трек последний, то при следующем нажатии на кнопку, переключаемся на первый трек в текущей папке.

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

Все работает, но для использования данного примера в качестве музыкального плеера не очень удобно. Хочется сделать, чтобы все работало просто и без лишнего переименования файлов. Для этого я сделал следующий пример.


Зациклить воспроизведение композиций в папке, и случайное воспроизведение всех треков на DFPlayer и Arduino.

Данный пример отлично подойдёт для реализации плеера. Можно создать набор папок, каждая является отдельным плейлистом: по жанрам, настроению и пр. Перелистываем и выбираем, что хотели бы послушать. Также можно сделать список плейлистов, и выводить из какого плейлиста играет музыка. Планирую данный алгоритм работы добавить в умные часы на дисплее Nextion. Поэтому подписывайтесь на канал и вступайте в группу Вконтакте, чтобы не пропустить новые уроки и проекты на Arduino.

Схема подключения будет аналогично предыдущему примеру.

Схема подключения будет аналогично предыдущему примеру.

Код тоже возьмём из предыдущего примера и немного его изменим. Переменных нам нужно будет меньше:

Код тоже возьмём из предыдущего примера и немного его изменим. Переменных нам нужно будет меньше:

Кнопка buttonNext будет переключать воспроизведение папок.

Кнопка buttonNext будет переключать воспроизведение папок.

Как видно из кода мы переключаем на следующую папку и включаем зацикливание воспроизведения всех треков в выбранной папке.

На кнопку buttonPrevious помешаем случайное воспроизведение трека из всех доступных на карте памяти.

На кнопку buttonPrevious помешаем случайное воспроизведение трека из всех доступных на карте памяти.

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

Используя предоставленные примеры можно реализовать различные проекты на DFPlayer и Arduino, которые позволяют воспроизводить музыку по расписанию, в заданном порядке и определенными сборками.

Пишите ваши предложения и пожелания в комментариях. Чем больше будет откликов, тем чаше будут выходить проекты и уроки на сайте.

Слушать музыку онлайн

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Проекты часов на Arduino. От часов на светодиодах до часов на дисплее Nextion. http://portal-pk.ru/news/248-proekty-chasov-na-arduino-ot-chasov-na-svetodiodah-do-chasov.html Константин Portal-PK 2020-03-03T18:24:51+03:00 Разрабатываю часы на Arduino уже несколько лет подряд. Решил поместить все свои проекты часов на Arduino на одну страницу, чтобы самому знать, сколько часов сделано, и, при необходимости, показать заинтересованным читателям, знакомым и родственникам.

Это я решил сделать в связи с тем, что часто спрашивают:

  • А что ты можешь сделать?
  • Например, часы - отвечаю я.
  • А покажи примеры!

И тут я начинаю искать по сайту, что показать. А в конце вопрос: это ты сделал 5 различных часов на Arduino? Или больше? И тут начинаем листать обратно, считая сколько часов я сделал.

Поэтому решил все часы выложить тут:

6. Часы на OLED дисплее SSD1306 и Arduino.

Oled часы с выводом температуры на Arduino своими руками. Еще один интересный проект часов на OLED дисплее SSD1306 и Arduino. Данные часы небольшого размера, но обладают функциями полноценных часов. Часы выводят температур, дату и время. Благодаря двум тактовым кнопкам можно настроить дату и время.

5. Часы без кнопок с сенсорным дисплеем Nextion и Arduino.

Часы на Arduino и дисплее Nextion с выводом температуры и влажности.

Вам не нравятся часы с вечно чикающими кнопками? Представляю вашему вниманию часы с сенсорным экраном Nextion, и Arduino.

Часы выводят дату, время температуру и влажность. Также позволяют настраивать время и дату. И все это делается на экране без единой внешней кнопки. Как это по-современному.

Часы будут доработаны, и ожидается новая версия часов на Arduino с дисплеем Nextion с еще большим функционалом.

4. Часы матрица на Arduino и адресных светодиодах WS2812.

Светодиодные часы своими руками на ардуино (Arduino) WS2812 управляемых (адресных)

После того, как я купил себе 3D принтер, стал активно делать проекты с использованием 3D печати. Одним их проектов стали часы-матрица с выводом времени и даты на матрицу 16х5 пикселей. Получились отличные часы с возможностью настраивать время и дату. Но в связи с тем, что печатал решётку для светодиодов пластиком PLA, то на внешних контурах он потрескался уже через полгода. Нужно перепечатать внешнюю решётку ABS пластиком. Но пока не доходят руки.

3. LEGO часы на Arduino.

Часы-будильник на Arduino. Корпус сделан из конструктора LEGO.  LEGO Arduino

Задали ребёнку сделать «умный проект в доме». После недолгих размышлений решили сделать Arduino часы из LEGO. Добавили в часы спикер, и кнопку для отключения будильника. Часы не только работали и показывали текущее время, но и в них был запрограммирован будильник, который срабатывал в 07:00. Все отлично, но работал будильник каждое утро, и даже в выходные дни. Не смотря на то, что часы нравились ребенку, они проработали недолго. Ребенок разобрал корпус для своего строения из LEGO.

2. Светодиодные часы на адресных светодиодах WS2812 и Arduino.

Классные самодельные настенные светодиодные часы на arduino

Часы состоят из 3 круглых контуров, по которым располагаются светодиоды. Внешний контур показывает минуты с кратностью 5. Если светиться 1 светодиод, значит 5 мин, 2 – 10 мин и т.д. По аналогии работы стрелочных часов. Средний контур, с выфрезерованными цифрами 3,6,9,12, – это часовой индикатор, который показывает сколько часов. И маленький контур с 4 светодиодами указывает сколько минут нужно добавить к минутам, которые получаются на внешнем контуре, т.е если на внешнем контуре светиться 3 светодиода, а на маленьком 2 то значит сейчас 17 минут (15+2). Заполняем минуты, которые нельзя показать на внешнем контуре.

Часы сделал 2 года, и они до сих пор работают и висят у меня в коридоре, удивляя гостей своей необычной формой.

1.Arduino часы на сдвиговых регистрах и 28 светодиодах. С выводом температуры и влажности на семисегментный индикатор TM1637.

Arduino часы - Видео 4. Делаем корпус и собираем Arduino часы

Часы состоят из 28 светодиодов, которые показывают тегирующее время. Также время дублируется на семисегментный индикатор TM1637. Также на TM1637 выводится влажности и температура в помещении. Время настраивается с помощью пульта дистанционного управления.

]]>
Урок 19. Делаем MP3-плеер на DFPlayer Mini и Arduino. http://portal-pk.ru/news/247-delaem-mp3-pleer-na-dfplayer-mini-i-arduino.html Константин Portal-PK 2020-02-28T14:05:54+03:00 Как воспроизвести аудиофайлы в формате wav я уже рассказывал в уроке: Arduino SD карта. Воспроизводим звуки и музыку в wav формате. Данный способ подходит, когда нужно воспроизвести файлы не очень высокого качества, например, уведомления, оповещение и пр. Если же надо воспроизводить файлы в формате mp3, нам поможет модуль DFPlayer Mini.

модуль DFPlayer Mini

MP3-плеер DFPlayer Mini позволяет воспроизводить аудиофайлы, записанные на карту памяти формата microSD. С помощью этого плеера можно управлять музыкой: приостановка и возобновление воспроизведения аудиофайла. А также можно установить громкость из 30-ти уровней громкости и одни из 6-ти режимов эквалайзера.

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

Характеристики DFPlayer MP3 mini:

Характеристики DFPlayer MP3 mini:

  • Напряжение питания: 3,3–5 В
  • Количество каналов: 1 моно, 3 Вт + 2 стерео, без усилителя
  • Поддерживаемые частоты дискретизации: 8, 11, 12, 16, 22, 24, 32, 44,1, 48 кГц
  • Разрядность ЦАП: 24 бита
  • Поддерживаемые файловые системы: FAT16, FAT32
  • Максимальный объём SD-карты: 32 ГБ
  • Количество каталогов композиций: до 100
  • Количество композиций в каталоге: до 255
  • Форматы аудиофайлов: MP3, WAV, WMA
  • Кол-во уровней громкости: 30
  • Режимов эквалайзера: 6 (Normal/Pop/Rock/Jazz/Classic/Base)

Для реализации самого простого плеера не нужно подключать DFPlayer к Arduino. Достаточно подключить несколько кнопок вот по такой схеме.

Для реализации самого простого плеера не нужно подключать DFPlayer к Arduino.

Но у нас уроки про Arduino, поэтому рассмотрим простой пример подключения MP3-плеер к Arduino, который подключается по аппаратному или программному UART порту (пины RX и TX) Ардуино.

Код с выводом отладочной информацией будет вот таким. Данный код взят с сайта библиотеки DFRobotDFPlayerMini. Также нам понадобится библиотека для работы спрограммным UART портом SoftwareSerial.Скачать библиотеки можно внизу статьи, в разделе материалы для скачивания.

Для воспроизведения аудиофайла необходимо поместить на карту памяти microSD один трек. Файлы рекомендуется помещать в папку mp3 и называть порядковыми номерами вот в таком формате 0001.mp3. Мой опыт показывает, что можно скидывать файлы с любым названием и помещать в корень флешки, но воспроизводиться файлы будут в том порядке, в каком их загрузилина карту памяти. При пакетной загрузке одни файлы загружаются быстрее, а другие медленнее, из-за чего воспроизведение треков идет в хаотичном порядке.

Пример MP3-плеера на DFPlayer Mini и Arduino с возможностью выбора трека и изменением громкости.

Давайте сделаем полноценный MP3-плеера на Arduino. Для этого нам понадобится:

Все компоненты нашего будущего MP3-плеера на DFPlayer соединяем по схеме.

Все компоненты нашего будущего MP3-плеера на DFPlayer соединяем по схеме.


Загрузим файлы с треками на карту памяти microSD, я использую 3 трека с YouTube, чтобы можно было воспроизводить музыку в видеоролике и не получить бан. Архив с треками можно скачать внизу статьи, в разделе материалы для скачивания.

Загрузим файлы с треками на карту памяти microSD, я использую 3 трека с YouTube

Код для MP3-плеера на DFPlayer Mini и Arduino с возможностью выбора трека и изменением громкости будет вот такой.

#include "DFRobotDFPlayerMini.h"
// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект mySoftwareSerial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 10, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 11, необходимо соединить с выводом RX дисплея
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX для плеера DFPlayer Mini 
DFRobotDFPlayerMini myDFPlayer;
int buttonNext = 2;   // кнопка следующий трек
int buttonPause = 3;  // кнопка пауза/ пуск
int buttonPrevious = 4; // кнопка предыдущий трек 
int buttonVolumeUp = 5; // кнопка увеличение громкости
int buttonVolumeDown = 6; // кнопка уменьшение громкости
boolean isPlaying = false; // статус воспроизведения/пауза
void setup() {
  pinMode(buttonPause, INPUT_PULLUP); 
  pinMode(buttonNext, INPUT_PULLUP);
  pinMode(buttonPrevious, INPUT_PULLUP);
  pinMode(buttonVolumeUp, INPUT_PULLUP);
  pinMode(buttonVolumeDown, INPUT_PULLUP);
  mySoftwareSerial.begin(9600); 
  Serial.begin(9600);
  delay(1000);
  Serial.println();
  Serial.println("DFPlayer Mini Demo");
  Serial.println("Initializing DFPlayer...");
  if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println("Unable to begin:");
    Serial.println("1.Please recheck the connection!");
    Serial.println("2.Please insert the SD card!");
    while (true);
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.setTimeOut(300);
  //----Set volume----
  myDFPlayer.volume(15); //Set volume value (0~30).
  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
  myDFPlayer.play(1); //Воспроизведение первого mp3
  isPlaying = true; // воспроизводим
  Serial.println("Playing..");
  //----Читать информацию----
  Serial.println(myDFPlayer.readState()); //читать состояние mp3
  Serial.println(myDFPlayer.readVolume()); //Текущая громкость 
  Serial.println(myDFPlayer.readEQ()); // читаем настройку эквалайзера
  Serial.println(myDFPlayer.readFileCounts()); // читать все файлы на SD-карте
  Serial.println(myDFPlayer.readCurrentFileNumber()); // текущий номер файла воспроизведения
}
void loop() {
  if (digitalRead(buttonPause) == LOW) {
    if (isPlaying) { // если было воспроизведение трека
      myDFPlayer.pause(); // пауза
      isPlaying = false; // пауза
      Serial.println("Paused..");
    } else {        // иначе
      isPlaying = true; // воспроизводим
      myDFPlayer.start(); //запускаем mp3 с паузы
    }
    delay(500);
  }
  if (digitalRead(buttonNext) == LOW) {
    if (isPlaying) {
      myDFPlayer.next(); //Next Song
      Serial.println("Next Song..");
    }
    delay(500);
  }
  if (digitalRead(buttonPrevious) == LOW) {
    if (isPlaying) {
      myDFPlayer.previous(); //Previous Song
      Serial.println("Previous Song..");
    }
    delay(500);
  }
  if (digitalRead(buttonVolumeUp) == LOW) {
    if (isPlaying) {
      myDFPlayer.volumeUp(); //Volume Up
      Serial.println("Volume Up..");
    }
    delay(500);
  }
  if (digitalRead(buttonVolumeDown) == LOW) {
    if (isPlaying) {
      myDFPlayer.volumeDown(); //Volume Down
      Serial.println("Volume Down..");
    }
    delay(500);
  }
}

У платы Arduino NANO всего один аппаратный Serial Port, поэтому будем использовать программный порт. Для этого нужно установить и подключить библиотеку SoftwareSerial.h.

подключить библиотеку SoftwareSerial.h.

Чтоб проверить, подключен или нет DFPlayer используется условие:

Чтоб проверить, подключен или нет DFPlayer используется условие:

Если в мониторе порта мы видим надпись «DFPlayer Mini online.» все подключено правильно и работает.

Данные строки кода

Включают первый трек. И выводят в монитор порта информацию об этом.

Включают первый трек. И выводят в монитор порта информацию об этом.

Строки ниже выводят в монитор порта полезную информацию о статусе работы.

Строки ниже выводят в монитор порта полезную информацию о статусе работы.

Первая строчка выводит статус: цифра с кодом.

Вторая строчка выводить уровень текущей громкости от 0 до 30

Третья выводит настройки эквалайзера, также в цифровом значении.

Четвертая выводит, сколько треков найдено на карте памяти.

Последняя стока выводит, какой трек воспроизводится сейчас.

В мониторе порта это будет выглядеть вот так:

В мониторе порта это будет выглядеть вот так:

В основном цикле loop выводим условия проверки нажатия той или иной кнопки. И выполняем нужную команду.

  if (digitalRead(buttonNext) == LOW) {
    if (isPlaying) {
      myDFPlayer.next(); //Next Song
      Serial.println("Next Song..");
    }
    delay(500);
  }

Это одно условие для примера, остальные устроены аналогично, их рассматривать не будем. Список команд для работы с DFPlayer Mini myDFPlayer.next(); // Воспроизвести следующий mp3

  myDFPlayer.previous();  // Воспроизвести предыдущий mp3
  myDFPlayer.play(1);  //Воспроизведение первого mp3
  myDFPlayer.loop(1);  //зациклить первый mp3
  myDFPlayer.pause();  //приостановить mp3
  myDFPlayer.start();  //запускаем mp3 с паузы
  myDFPlayer.playFolder(15, 4);  //воспроизводить определенный mp3 в SD: /15/004.mp3; Имя папки (1 ~ 99);
  myDFPlayer.enableLoopAll(); //зациклить все mp3 файлы.
  myDFPlayer.disableLoopAll(); //остановить цикл всех mp3 файлов.
  myDFPlayer.playMp3Folder(4); //воспроизводить конкретный mp3 в SD: /MP3/0004.mp3; Имя файла (0 ~ 65535)
  myDFPlayer.advertise(3); //рекламируем конкретный mp3 в SD: /ADVERT/0003.mp3; Имя файла (0 ~ 65535
  myDFPlayer.playLargeFolder(2, 999); //воспроизводить конкретный mp3 в SD: /02/004.mp3; Имя папки (1 ~ 10); Имя файла (1 ~ 1000)    
  myDFPlayer.loopFolder(5); //зациклить все mp3 файлы в папке SD: / 05.
  myDFPlayer.randomAll(); //Произвольное воспроизведение всех mp3.  
  myDFPlayer.enableLoop(); //включить цикл.
  myDFPlayer.disableLoop(); //отключить цикл

Как видите, не так много кода и алгоритм работы достаточно несложный. Планирую реализовать пару проектов с использованием модуля DFPlayer Mini и Arduino, ESP8266, ESP32 для публикации на сайте. Благо, опыт работы с этим модулем и данными платформами есть.

ару проектов с использованием модуля DFPlayer Mini и Arduino, ESP8266, ESP32 для публикации на сайте.

Пишите ваши предложения и пожелания в комментариях. Чем больше будет откликов, тем чаше будут выходить проекты и уроки на сайте.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Ночник со стеклянными шарами на Arduino своими руками. http://portal-pk.ru/news/246-nochnik-so-steklyannymi-sharami-na-arduino-svoimi-rukami.html Константин Portal-PK 2020-02-27T15:06:47+03:00 Сегодня расскажу про светильник, который сделал своими руками на Arduino (DigiSpark). В качестве рассеивателя установил стеклянные шарики, которые фиксируются с помощью оргстекла молочного цвета.

Заготовки для светильника вырезал на своем самодельном фрезерном ЧПУ станке больше года назад. После склейки корпуса установил электронику и протестировал работу. Но меня не устроили некоторые моменты и проект отложил. И вот, дошли руки его доработать. Изначально стеклянные шарики прижимались куском фанеры, и свет плохо рассеивался. Чтобы устранить данный конструктивный изъян заменил верхнюю часть на 2 детали. Стеклянные шарики зажимаются оргстеклом и для того, чтобы стекло сильно не прогибалось, фиксирую его куском фанеры. Такая конструкция позволяет надежно зафиксировать шарики без прогиба оргстекла.

Сегодня расскажу про светильник, который сделал своими руками на Arduino (DigiSpark).

К сожалению, раскроя фанеры нет, так как у меня сломался жёсткий диск, и часть информации было утеряно, в том числе и раскрой фанеры для данного светильника. Но возможно, осталась копия на рабочем компьютере, который стоит для управления самодельным ЧПУ станком на Arduino. Если найду, то обязательно выложу внизу стати в разделе материалы для скачивания.

А пока хочу с вами поделиться информацией которую узнал недавно. А именно Дедик сервер – это устоявшееся название выделенного сервера, который используется под всевозможные задачи. Также он называется dedicated или dedicated server. Купить дедик на месяц и год предпочитают многие и зачастую именно у нас, поскольку такой мощный по конфигурации и продуктивности сервер подключен к интернету с высокой скоростью и функционирующий долгое время без перезагрузок и отключений. Все это позволяет решать разные задачи.

Покрасил все заготовки в белый цвет и собрал. Вот что получилось.

Покрасил все заготовки в белый цвет и собрал. Вот что получилось.

Электроника и схема подключения самодельного светильника на Arduino (DigiSpark).

Для проекта нам понадобится:

  • Digispark
  • Адресные светодиоды WS2812
  • Резистор 10 кОм
  • Бокс под батарейки 4 x AA
  • Кнопка без фиксации
  • Кнопка с фиксацие

Подключаем все компоненты светильника на Arduino по вот такой схеме.

Подключаем все компоненты светильника на Arduino по вот такой схеме.

Вместо DigiSpark можно использовать Arduino NANO. Подключить кнопку и адресные светодиоды можно к любому цифровому пину Arduino.

Данный проект, по электронным комплектующим и схеме подключения, схож с проектом светофора на адресных светодиодах WS2812.

Прошивка для самодельного светильника на Arduino.

#include <Adafruit_NeoPixel.h>
#define PIN 0
#define STRIPSIZE 3
byte button_rejim = 1;  // кнопка режим
int rejim = 0;       // текущий режим
int yarkast = 250;       // текущая яркасть
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
int wait = 15;
uint16_t j = 0;
uint16_t i = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(STRIPSIZE, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
  pinMode(button_rejim, INPUT); // настроить пин кнопки
  strip.begin();
}
boolean debvance (boolean last) //убираем дребизг 2
{
  boolean current = digitalRead (button_rejim); // считываем данные с кнопки
  if (last != current) // Если текущее состояни еотличететься от предыдущего
  {
    delay (5);   // Ждем 5 милисек.
    current = digitalRead (button_rejim); // Присваеваем текущее состояние кнопки
    return current;
  }
}
void loop() {
  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    rejim++; // изменяем режим
    i = 0;
    if (rejim == 3)
      rejim = 0;
  }
  lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки
  if (rejim == 0)
  {
    if (j < 256) {
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel((i + j) & 255));
      }
      delay(wait);
      j++ ;
    }
    if (j == 255)
      j = 0;
  }
  else if (rejim == 1)
  {
    if (j < 256 * 5) { // 5 cycles of all colors on wheel
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
      }
      delay(wait);
      j++;
    }
    if (j == 255)
      j = 0;
  }
  else if (rejim == 2) // радуга из центра
  {
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, strip.Color(255, 255, 255));
      delay(wait);
    }
  }
  strip.setBrightness(yarkast);  // Lower brightness and save eyeballs!
  strip.show(); // Initialize all pixels to 'off'
}
uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
void colorWipes(uint32_t c, int num) {
  for (i = 0; i < strip.numPixels(); i++) {
    if (i == num)
      strip.setPixelColor(i, c);
    else
      strip.setPixelColor(i, strip.Color(0, 0, 0));
  }
  strip.setPixelColor(num, c);
  strip.show();
  delay(1);
}

Перед установкой электроники нужно запрограммировать DigiSpark или Arduino.

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

Как запрограммировать Arduino смотрите тут. Загрузка скетча в DigiSpark происходит немногого по-другому. Сначала нажимаете кнопку загрузить код, после того как код скомпилируется и выйдет надпись, у вас будет 60 секунд для подключения DigiSpark к компьютеру.

Загрузка скетча в DigiSpark происходит немногого по-другому.

. Сначала нажимаете кнопку загрузить код, после того как код скомпилируется и выйдет надпись, у вас будет 60 секунд для подключения DigiSpark к компьютеру.

Кнопка с фиксацией включает и выключает питание. Тактовая кнопка переключает режимы.

У светильника есть 3 режима роботы:

  • Плавная смена цвета всех светодиодов одновременно.
  • Смена цветов у каждого светодиода свой цвет.
  • Белый цвет свечения всех светодиодов.

Светильник запрограммирован и собран. Можно приступить к тестированию.

Светильник запрограммирован и собран. Можно приступить к тестированию. Светильник нравится детям. Не смотря на то, что стеклянные шарики достаточно сильно прижимаются и достать их не так и просто, дети смогли все таки один достать. Но сломать ночник не смогли. Поэтому можно считать, что светильник тестирование детьми прошёл успешно.

Батареек самых дешевых хватит примерно на 5-7 ночей. Это достаточно неплохой результат.

Батареек самых дешевых хватит примерно на 5-7 ночей. Это достаточно неплохой результат.

И еще немного фото самодельного светильника на Arduino (DigiSpark).

И еще немного фото самодельного светильника на Arduino (DigiSpark).

Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.

На этом всё. Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
ESP32-CAM сохраняем фотографии на флешку при движении http://portal-pk.ru/news/245-esp32-cam--sohranyaem--fotografii-na-fleshku-pri-dvizhenii.html Константин Portal-PK 2020-02-20T12:33:42+03:00 Сегодня в проекте на ESP32 научим ESP32-CAM модуль делать фотографии при движении объекта и сохранять фотографии на флешку. Название кадра будет содержать дату и время, когда было сделано фото.

научим ESP32-CAM модуль делать фотографии при движении объекта и сохранять фотографии на флешку

У PIR датчика HC-SR501 на выходе 3,3в, что позволяет нам подключить датчик движения к ESP32 без дополнительных преобразователей и пр.

Спонсор видео NextPCB. 0$ первый пробный заказ печатных плат от NextPCB.

Корпус для esp32 cam ov2640.

Корпус самостоятельно делать не пришлось, так как готовые варианты есть в интернете. Скачал я пару моделей и напечатал на 3D принтере. Вот что получилось.

 Скачал я пару моделей и напечатал на 3D принтере. Вот что получилось.

Один корпус на подвижной ножке, что отлично подходит для данного проекта. Скачать модели для печати можете тут и тут. Или внизу статьи, в разделе материалы для скачивания.

Кроме модуля можно установить разъем micro-USB, что позволит подключать ESP32-CAM wifi к телефонному зарядному устройству или power bank.

Кроме модуля можно установить разъем micro-USB

Для проекта нам понадобиться:

Для проекта нам понадобиться: ESP32-CAM модуль ov2640.

Приступим к установке, настройке необходимого ПО и прошивке ESP32. Для удобства я разделил всё на несколько этапов:

1. Установка дополнения ESP32
В этом примере будем использовать Arduino IDE для программирования платы ESP32-CAM. Установите Arduino IDE, и настройте работу с ESP32. Если этого у вас не сделано, воспользуетесь следующей инструкцией:

Установка, прошивка платы ESP32 в Arduino IDE (Windows, Mac OS X, Linux)

2. Код проекта. Меняем все необходимые параметры.
В среде Arduino IDE открываем код:

В среде Arduino IDE открываем код:

Перед загрузкой прошивки в модуль ESP32 CAM необходимо указать ваши данные для подключения к Wi-Fi сети.

String _ssid= "Имя_точки_wi-fi "; // Для хранения SSID
String _password = "пароль_от_wi-fi // Для хранения пароля сети

Больше настраивать не нужно, код готов к загрузке в ESP32.

3. Прошивка ESP32-CAM

Для прошивки я использую самый недорогой TTL программатор. И всё прошивается и работает отлично.

Подключаю всё вот по такой схеме:

 Прошивка ESP32-CAM

Важно! GPIO 0 должен быть подключен к GND, чтобы вы смогли загрузить код.

Чтобы загрузить код, выполните следующие действия:

  • Перейдите в меню Инструменты > Плата и выберите модуль Al Thinker ESP32-CAM
  • Перейдите в меню Инструменты > порт и выберите COM-порт, к которому подключен ESP32
  • Нажмите кнопку ESP32-CAM on-board RESET
  • Затем нажмите кнопку Загрузка, чтобы загрузить код

Перейдите в меню Инструменты выберите модуль Al Thinker ESP32-CAM

Важно! Если вы не можете загрузить код, то еще раз проверьте, что GPIO 0 подключен к GND и, что вы выбрали правильные настройки в меню Инструменты. Вы также должны нажать кнопку сброса на борту, чтобы перезагрузить ESP32 в режиме программирования.

Код загружен, сейчас нужно все собрать в корпус.


ESP32-CAM схема подключения.

Для проверки работы собираем все элементы на макетной плате по схеме.

Для проверки работы собираем все элементы на макетной плате по схеме.

Вот так это выглядит в живую.

Вот так это выглядит в живую.

При движении получаются вот такие фото.

Котэ попал в кадр. Модуль работает.

Котэ попал в кадр. Модуль работает.

Для подключения к micro usb dip 5 pin нужно припаять 4 провода. Как-то вот так.

Для подключения к micro usb dip 5 pin

Укладываем все в корпус. В задней крышке сделал отверстия для проводов, которые подключаются к PIR датчику HC-SR501. Датчик приклеил на двухсторонний скотч сверху, так чтобы был доступ к подстроечным резисторам.

Датчик приклеил на двухсторонний скотч сверху, так чтобы был доступ к подстроечным резисторам.

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

Установил ESP32-CAM sending photo на техническую полку выше холодильника.

Установил ESP32-CAM sending photo на техническую полку выше холодильника.

Настроил время срабатывания и дистанцию PIR датчика HC-SR501. Смотрел вот по такому примеру.

Настроил время срабатывания и дистанцию PIR датчика HC-SR501.

К сожалению, у меня время срабатывания максимум секунд 30, но этого достаточно для данного проекта. Если время срабатывания датчика настроить 5 сек или меньше, то у модуля esp32 cam получается очередь, так как время на фотографирование и сохранение в память занимает больше 5 секунд. И пока не закончиться очередь, он будет фотографировать, если даже в поле срабатывания ни кто не двигается.

В итоге получаются вот такие фото.

В итоге получаются вот такие фото.

Качество не очень, так как в коридоре освещение, как правило, делают не яркое. У меня не исключение. Да и модуль камеры ov2640 снимает с качеством 2МРх. Что от него ожидать?

Без освещения камера включает свою подсветку, и результат получается вот такой.

Без освещения камера включает свою подсветку, и результат получается вот такой.

Проект интересный, но есть пару недочётов. Первый - это время для имени файлов берется из интернета, поэтому нужно подключение к интернету. Можно обойтись и без времени, но тогда мы не будем знать, когда сделано фото.

Второй минус - это запрет на многие символы в названии файлов, поэтому время и дата выводятся не совсем в привычном формате, но все равно понятном.

Второй минус - это запрет на многие символы в названии файлов, поэтому время и дата выводятся не совсем в привычном формате, но все равно понятном.

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

На этом всё. Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
#18. Урок Nextion дисплей на русском, анимация на дисплее без Arduino. http://portal-pk.ru/news/244-urok-nextion-displei-na-russkom-animaciya-na-displee-bez.html Константин Portal-PK 2020-02-18T14:08:47+03:00 Сегодня в уроке научимся делать анимацию и выводить ее на дисплей Nextion. Вся программная часть будет реализована с использованием возможностей Nextion Editor, без использования Arduino.

Для урока понадодиться:

Подготавливаем картинки для вывода анимации на экран Nextion.

Nextion display не умеет выводить gif анимацию или видео на экран. Это касается старых моделей. Новые модели, скорее всего, умеют воспроизводить видео и звук, так как в Nextion Editor появились инструменты позволяющие добавлять элементы медиа. Но у меня нет таких дисплеев, поэтому будем делать анимацию по старинке. То есть покадрово. Для того, чтобы разбить gif анимацию на кадры я использую онлайн сервис picasion.

разбить gif анимацию на кадры я использую онлайн сервис picasion

Внизу статьи вы можете скачать gif анимацию, которую я использовал. А также для самых ленивых прикрепил архивы с разобранной анимацией по кадрам.

Анимация процесса загрузки.

Самая простая анимация, но при этом одна из самых распространенных - это анимация загрузки. Для начала создадим новый проект в Nextion Editor, если вы не знаете, как это сделать, смотрите урок: Nextion Editor урок 1. Скачиваем и первый пример hmi.

Анимация процесса загрузки.

Затем загрузим картинки для анимации. Для этого в панели Picture 1- нажмем на кнопку в виде плюса. В отрывшемся окне 2 выберем нужные картинки и нажмем на копку «Открыть» – 3.

панели Picture У нас получиться список картинок с порядковыми номерами от 0 до 51, которые мы и будем использовать.

 список картинок с порядковыми номерами

В панели инструментов «Toolbox» выбираем элемент «Timer», этот элемент невидимый и он появиться в панели элементов данного типа.


Выбираем элемент «Timer», его название - tm0

Выбираем элемент «Timer», его название - tm0. Установим значение 50 в параметре tim, это интервал срабатывания в миллисекундах, то есть картинка будет меняться каждые 50 мс. Теперь нам нужно написать код, который будет обновлять картинки, это будет небольшое условие.

На поле экрана нужно добавить картинкус номером 0. Это будет первый кадр.

На поле экрана нужно добавить картинкус номером 0. Это будет первый кадр.

Можно проверять Nextion пример анимации.

Можно проверять Nextion пример анимации.

Две кнопки по краям это просто перенаправление на другие страницы урока. Nextion hmi и tft nextion можно скачать внизу статьи, в разделе материалы для скачивания.


Эквалайзер при воспроизведении музыки.

Второй пример основан на первом. Загружаем nextion картинки и добавляем таймер.

Загружаем nextion картинки и добавляем таймер.

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

Давайте загрузим картинки для кнопок.

Давайте загрузим картинки для кнопок.

Давайте загрузим картинки для кнопок.

И добавим нужные элементы в проект.

И добавим нужные элементы в проект.

Напишем

следующий код для нажатия кнопки.


Напишем следующий код для нажатия кнопки.


Будем включать и выключать таймер 0, а также менять картинку кнопки.

Еще один nextion пример готов.Осталось запустить и проверить.

Nextion hmi и tft nextion можно скачать внизу статьи, в разделе материалы для скачивания.

Анимация по времени.

В проектах часто приходится делать вывод времени и обработку событий по определённому расписанию или через определённый интервал. В следующем примере будем производить отсчет времени на дисплее nextion без использования Ардуино. Для этого разместим элементы на экране.

 отсчет времени на дисплее nextion без использования Ардуино

Загрузим картинки для кнопок и для анимации.

Анимация тут будет без повтора, поэтому код будет видоизменен.

Загрузим картинки для кнопок и для анимации.

Также добавим второй таймер и переменную. На панели невидимых элементов это будет выглядеть вот так.

Также добавим второй таймер и переменную.Переменная va0 остается без изменений, а параметр val должен быть равен 0.

Переменная va0 остается без изменений, а параметр val должен быть равен 0.

Для второго

таймера пропишем вот такой код.


Для второго таймера пропишем вот такой код.

Интервал tim для второго счетчика устанавливаем 500 мс. Рассмотрим код подробнее.


if(p1.pic==96)
{
  p1.pic=97
  p2.pic=97
}else
{
  p1.pic=96
  p2.pic=96
n0.val++
}

Если мы оставим только лишь эти строки, то мы увидим мигание точек у часов. Картинки 96 и 97 -это токи и просто белый фон. Они меняются местами с интервалом в пол секунды.

n0.val++ - добавляет ежесекундно «1» к числу в данном поле. И мы видим секунды на наших импровизированных часах.

va0.val=n0.val%10
  if(n0.val>=60)
  {
    n0.val=10
  }
  if(va0.val==0)
  {
    p0.pic=79
  }
  if(va0.val==2)
  {
    p0.pic=102
  }

va0.val=n0.val%10 получаем остаток от деления на 10 и сохраняем в переменнуюva0.val.

Когда время достигло 60 сек., то меняем значение на 10. Но по-хорошему это должен быть 0. Тогда будет полноценное изменение времени. Тут можно добавить прибавление минут ко второму числу часов, но я не стал писать много кода, чтобы было более понятно.

if(va0.val==0)
  {
    p0.pic=79
  }
  if(va0.val==2)
  {
    p0.pic=102
  }

Тут мы проверяем, какое значение в нашей переменной. Если остаток от деления равен 0, тогда задаём начальную картинку анимации, что автоматически запустит анимацию. Это прописано в нашем первом таймере. Если остаток от деления равен 2, то выводим белую картинку. Это закрывает последний кадр анимации.

По данному алгоритму анимация повторяется каждые 10 секунд. «Интервал», «время» и прочие параметры можно настроить и дописать для решения вашей задачи.

Чтобы запустить анимацию с использованием Arduino достаточно отправит на nextion display

значения для включения таймера.Как это сделать смотрите в nextion уроке: Дисплей Nextion урок 2. Подключаем и передаем данные на Arduino.

Если вам интересна эта тема, смотрите мой проект часов: Часы на Arduino и дисплее Nextion с выводом температуры и влажности. В данном проекте нашел пару недочётов, скоро будет доработанная версия с еще большим функционалом.

Пишите ваши предложения и пожелания в комментариях. Чем больше будет откликов, тем чаше будут выходить проекты и уроки с использованием дисплея Nextion.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Урок 17. Подключаем энкодер к Arduino. http://portal-pk.ru/news/243-podklyuchaem-enkoder-k-arduino.html Константин Portal-PK 2020-02-12T11:05:53+03:00 В данном уроке рассмотрим энкодер вращения и подключим его к Arduino.

Модуль KY-040 является энкодером вращения. Из названия понятно, что принцип его работы это вращение. А именно преобразование угла поворота в сигнал. Сигнал может быть цифровым и аналоговым. Более подробную информацию о видах энкодеров и принципе их действия можно почитать в интернете. Цель нашего урока подключить конкретный модуль к Arduino и научиться управлять внешними устройствами с помощью энкодера.

В данном уроке рассмотрим энкодер вращения и подключим его к Arduino.

Характеристики Энкодера KY-040:
Функция нажатия: Да
Количество импульсов на 360 гр. : 20
Число рабочих циклов: 30000
Вес: 5 грамм

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

Для урока понадодиться:


Подключаем энкодер KY-040 к Arduino.

 Энкодер KY-040

Модуль имеет 5 контактов, это:

  • + и GND - линии питания и земли. Данный энкодер является механическим, питание для него не требуется, линии нужны для цепи с подтягивающими резисторами.
  • SW - вывод кнопки имеет потягивающий резистор, существует модули у которых при нажатии вывод замыкается на землю;
  • CLK и DT - выводы энкодера, они подтянуты к линии питания резисторами 10кОм;

Подключаем Энкодер KY-040 к Arduino UNO по схеме.

Подключаем Энкодер KY-040 к Arduino UNO по схеме.

Пример кода вывода информации о положении энкодера в монитор порта.

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

#define pin_CLK 2
#define pin_DT  4
#define pin_Btn 3
unsigned long CurrentTime, LastTime;
enum eEncoderState {eNone, eLeft, eRight, eButton};
uint8_t EncoderA, EncoderB, EncoderAPrev;
int16_t counter;
bool ButtonPrev;
eEncoderState GetEncoderState() {
  // Считываем состояние энкодера
  eEncoderState Result = eNone;
  CurrentTime = millis();
  if (CurrentTime - LastTime >= 5) {
    // Считываем не чаще 1 раза в 5 мс для уменьшения ложных срабатываний
    LastTime = CurrentTime;
    if (digitalRead(pin_Btn) == LOW ) {
      if (ButtonPrev) {
        Result = eButton; // Нажата кнопка
        ButtonPrev = 0;
      }
    }
    else {
      ButtonPrev = 1;
      EncoderA = digitalRead(pin_CLK);
      EncoderB = digitalRead(pin_DT);
      if ((!EncoderA) && (EncoderAPrev)) { // Сигнал A изменился с 1 на 0
        if (EncoderB) Result = eRight;     // B=1 => энкодер вращается по часовой
        else          Result = eLeft;      // B=0 => энкодер вращается против часовой
      }
      EncoderAPrev = EncoderA; // запомним текущее состояние
    }
  }
  return Result;
}
void setup() {
  pinMode(pin_DT,  INPUT);
  pinMode(pin_CLK, INPUT);
  pinMode(pin_Btn, INPUT); // Кнопка не подтянута к +5 поэтому задействуем внутренний pull-up резистор
  Serial.begin(9600);
  counter = 0;
}
void loop() {
  switch (GetEncoderState()) {
    case eNone: return;
    case eLeft: {   // Энкодер вращается влево
        counter--;
        break;
      }
    case eRight: {  // Энкодер вращается вправо
        counter++;
        break;
      }
    case eButton: { // Нажали кнопку
        counter = 0;
        break;
      }
  }
  Serial.println(counter);

Для удобства роботы создадим отдельную функцию опроса энкодера. С дребезгом контактов боремся задержкой опроса 1 раз в 5 мс.

Покрутим энкодер по часовой стрелке, после чего увидим в мониторе порта увеличение положительного числа. При нажатии на кнопку у нас сброситься значение в 0. При вращении против часовой стрелки видим отрицательное число.

Если у вас получается противоположное значение, т.е. при вощении против часовой стрелки получаете положительное значение. Исправьте 2 строчки:

      EncoderA = digitalRead(pin_CLK);
      EncoderB = digitalRead(pin_DT);

На вот такие.

       EncoderA = digitalRead(pin_DT);
       EncoderB = digitalRead(pin_CLK);

С выводом в монитор порта разобрались. Давайте используем для управления свечением двумя светодиодами.


Пример управления яркостью светодиодов с помощью энкодера.

Для примера давайте подключаем к схеме выше еще 2 светодиода. В итоге схема подключения управления яркостью двух светодиодов с помощью энкодера и Arduino NANO будет вот такой.

схема подключения управления яркостью двух светодиодов с помощью энкодера и Arduino NANO

Добавим необходимые переменные. Для более наглядного примера вынес условие управления светодиодами. При оптимизации кода от этой конструкции можно избавится.

#define pin_CLK 2
#define pin_DT  4
#define pin_Btn 3
#define pin_led1 5 // пин подключения
#define pin_led2 6 // пин подключения


unsigned long CurrentTime, LastTime;
enum eEncoderState {eNone, eLeft, eRight, eButton};
uint8_t EncoderA, EncoderB, EncoderAPrev;
int8_t counter, brightness1, brightness2;
bool ButtonPrev;

eEncoderState GetEncoderState() {
  // Считываем состояние энкодера
  eEncoderState Result = eNone;
  CurrentTime = millis();
  if (CurrentTime - LastTime >= 5) {
    // Считываем не чаще 1 раза в 5 мс для уменьшения ложных срабатываний
    LastTime = CurrentTime;
    if (digitalRead(pin_Btn) == LOW ) {
      if (ButtonPrev) {
        Result = eButton; // Нажата кнопка
        ButtonPrev = 0;
      }
    }
    else {
      ButtonPrev = 1;
      // EncoderA = digitalRead(pin_DT);
      // EncoderB = digitalRead(pin_CLK);
      EncoderA = digitalRead(pin_CLK);
      EncoderB = digitalRead(pin_DT);
      if ((!EncoderA) && (EncoderAPrev)) { // Сигнал A изменился с 1 на 0
        if (EncoderB) Result = eRight;     // B=1 => энкодер вращается по часовой
        else          Result = eLeft;      // B=0 => энкодер вращается против часовой
      }
      EncoderAPrev = EncoderA; // запомним текущее состояние
    }
  }
  return Result;
}

void setup() {
  pinMode(pin_DT,  INPUT);
  pinMode(pin_CLK, INPUT);
  pinMode(pin_Btn, INPUT); // Кнопка подтянута к GND Иначе используем INPUT_PULLUP

  Serial.begin(9600);
  counter = 0;
}

void loop() {
  switch (GetEncoderState()) {
    case eNone: return;
    case eLeft: {   // Энкодер вращается влево
        counter--;
        break;
      }
    case eRight: {  // Энкодер вращается вправо
        counter++;
        break;
      }
    case eButton: { // Нажали кнопку
        counter = 0;
        break;
      }
  }
  Serial.println(counter);
  if (counter < 0)
  {
    brightness2 = -counter;
    brightness1 = 0;
  }
  else if (counter > 0)
  {
    brightness1 = counter;
    brightness2 = 0;
  }
  else
    brightness1 = 0, brightness2 = 0;
  analogWrite(pin_led1, brightness1);    // устанавливаем значение
  analogWrite(pin_led2, brightness2);    // устанавливаем значен
}

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

Вращение энкодера по часовой стрелке привет к тому, что загорается красный светодиод.

Энкодер широко используется в проектах на Arduino. Например, для управления работы 3D принтером используется как раз энкодер аналогичный KY-040. При разработке панели управления самодельным ЧПУ станком используется также энкодер. И это только малая доля использования энкодера. Большинство проектов, где используется потенциометр его можно заменить на энкодер. Пишите в комментариях, как вы используете энкодер.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Oled часы с выводом температуры на Arduino своими руками. http://portal-pk.ru/news/242-oled-chasy-s-vyvodom-temperatury-na-arduino-svoimi-rukami.html Константин Portal-PK 2020-02-06T12:38:50+03:00 Я люблю разрабатывать различные часы на Arduino . Свои первые часы делал на сдвиговых регистрах, светодиодах и Arduino. Вторая версия светодиодных часов уже была сделана на адресных светодиодах (данные часы до сих пор работают и висят у меня в коридоре). С ребёнком делали часы из Лего, семисегментного индикатора и digispark. Последние, четвёртые, реализованы на Arduino и дисплее Nextion. Подписчики написали мне, что часы получаются достаточно дорогие и собирать их нецелесообразно. Согласен, что дисплей Nextion дорогой, поэтому решил собрать часы на OLED дисплее и Arduino.

Для реализации данного проекта нам понадобится:

Электронную часть OLED часов собрал на макетной плате вот по такой схеме.

Электронную часть OLED часов собрал на макетной плате вот по такой схеме.

Описание работы часов OLED часы на Arduino.

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

Часы имеют стандартный функционал

Как видим, дни недели у нас выводятся на русском языке. Вы скажете, что в интернете достаточно много проектов с данным дисплеем и с выводом информации на русском языке. Да, так оно и есть, информации много, но в 90% случаев русские буквы выводятся с помощью перекодировки символов. И просматривая код непонятно, какое слово будет на дисплее. В данном примере русский текст прописан в коде в точно таком же виде, как он выводится на дисплей.

Устанавливаем и настраиваем библиотеки.

1. Установить библиотеки Adafruit : библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX . Как их установить, я рассматривал в уроке.

2. Скачать файл glcdfont.c и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library. У вас путь до библиотеки может отличаться. Вы можете скачать, библиотеку подготовленную для вывода русского текста, внизу статьи в разделе материалы для скачивания.

3. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно внизу кода.

/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

4. Добавить в блок void setup() {} следующую строчку кода.

display.cp437(true);

5. При выводе русского текста использовать функцию utf8rus() .

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


Код OLED часы на Arduino.

Рассказывать, как устроена программа часов полностью не буду. Тем более у меня на сайте достаточно уроков и примеров по реализации функционалов на дисплеях и работы с часами реального времени. Рассмотрим только основную особенность данного кода - это вывод русского языка в том виде, как он прописан в самом коде. Библиотеку для вывода символов на дисплей мы установили и настроили. Как же сейчас её использовать так, чтобы постоянно не прописывать перекодировку символов? Для этого сделаем функцию, которая будет выводить наш текст с нужным размером шрифта по указанным координатам.

void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
  display.setCursor(x_pos, y_pos);
  display.setTextSize(text_size);
  display.print(utf8rus(text));
  display.display();
}

В данной функции и укажем перекодировку символов. Благодаря этому можно вывести информацию на дисплей на русском языке.

void display_day() { // вывод дня недели
  switch (day) {
    case 1:  draw_text(30, 0, "ВОСКРЕСЕНЬЕ", 1); break;
    case 2:  draw_text(30, 0, "ПОНЕДЕЛЬНИК", 1); break;
    case 3:  draw_text(30, 0, "  ВТОРНИК  ", 1); break;
    case 4:  draw_text(30, 0, "   СРЕДА   ", 1); break;
    case 5:  draw_text(30, 0, "  ЧЕТВЕРГ  ", 1); break;
    case 6:  draw_text(30, 0, "  ПЯТНИЦА  ", 1); break;
    default: draw_text(30, 0, "  СУББОТА  ", 1);
  }
}

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

/*
   Arduino часы с выводом температуры на DS3231 и SSD1306 OLED
   Сайт https://portal-pk.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://portal-pk.ru/page-18/proekty-na-nodemcu-esp8266-esp-01.html
*/
#include <Wire.h>                        // I2C 
#include <Adafruit_GFX.h>                // Включить графическую библиотеку Adafruit
#include <Adafruit_SSD1306.h>            // Включить драйвер OLED Adafruit SSD1306
#define SCREEN_WIDTH 128 // Ширина OLED-дисплея, в пикселях
#define SCREEN_HEIGHT 64 // Высота OLED-дисплея в пикселях
// SSD1306, подключенного к I2C (выводы SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define button1    9                       // Кнопка B1 подключена к контакту Arduino 9
#define button2    8                       // Кнопка B2 подключена к контакту Arduino 8
void setup(void) {
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  delay(1000);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // инициализировать с помощью I2C адресс 0x3C (для 128x64)
  // Очистить дисплей.
  display.clearDisplay();
  display.display();
  display.cp437(true);
  display.setTextColor(WHITE, BLACK);
  display.drawRect(117, 56, 3, 3, WHITE);     // Поставить символ степени ( ° )
  draw_text(0, 56, "ТЕМПЕРАТУРА =", 1);
  draw_text(122, 56, "C", 1);
}
char Time[]     = "  :  ";
char Calendar[] = "  /  /20  ";
char temperature[] = " 00.00";
char temperature_msb;
byte i, second, minute, hour, day, date, month, year, temperature_lsb;
void display_day() { // вывод дня недели
  switch (day) {
    case 1:  draw_text(30, 0, "ВОСКРЕСЕНЬЕ", 1); break;
    case 2:  draw_text(30, 0, "ПОНЕДЕЛЬНИК", 1); break;
    case 3:  draw_text(30, 0, "  ВТОРНИК  ", 1); break;
    case 4:  draw_text(30, 0, "   СРЕДА   ", 1); break;
    case 5:  draw_text(30, 0, "  ЧЕТВЕРГ  ", 1); break;
    case 6:  draw_text(30, 0, "  ПЯТНИЦА  ", 1); break;
    default: draw_text(30, 0, "  СУББОТА  ", 1);
  }
}
void DS3231_display() {
  // Преобразовать в десятичную
  minute = (minute >> 4) * 10 + (minute & 0x0F);
  hour   = (hour >> 4)   * 10 + (hour & 0x0F);
  date   = (date >> 4)   * 10 + (date & 0x0F);
  month  = (month >> 4)  * 10 + (month & 0x0F);
  year   = (year >> 4)   * 10 + (year & 0x0F);
  Time[4]     = minute % 10 + 48;
  Time[3]     = minute / 10 + 48;
  if (second % 2)
    Time[2]   = 32;
  else
    Time[2]   = 58;
  Time[1]     = hour   % 10 + 48;
  Time[0]     = hour   / 10 + 48;
  Calendar[9] = year   % 10 + 48;
  Calendar[8] = year   / 10 + 48;
  Calendar[4] = month  % 10 + 48;
  Calendar[3] = month  / 10 + 48;
  Calendar[1] = date   % 10 + 48;
  Calendar[0] = date   / 10 + 48;
  if (temperature_msb < 0) {
    temperature_msb = abs(temperature_msb);
    temperature[0] = '-';
  }
  else
    temperature[0] = ' ';
  temperature_lsb >>= 6;
  temperature[2] = temperature_msb % 10  + 48;
  temperature[1] = temperature_msb / 10  + 48;
  if (temperature_lsb == 0 || temperature_lsb == 2) {
    temperature[5] = '0';
    if (temperature_lsb == 0) temperature[4] = '0';
    else                     temperature[4] = '5';
  }
  if (temperature_lsb == 1 || temperature_lsb == 3) {
    temperature[5] = '5';
    if (temperature_lsb == 1) temperature[4] = '2';
    else                     temperature[4] = '7';
  }
  draw_text(4,  12, Calendar, 2);                     // Показать дату (формат: дд / мм / гггг)
  draw_text(20, 30, Time, 3);                         // Показать время
  draw_text(80, 56, temperature, 1);                  // Показать температуру
}
void blink_parameter() {
  byte j = 0;
  while (j < 10 && digitalRead(button1) && digitalRead(button2)) {
    j++;
    delay(25);
  }
}
byte edit(byte x_pos, byte y_pos, byte parameter, byte text_size) {
  char text[3];
  sprintf(text, "%02u", parameter);
  while (!digitalRead(button1));                     // Подождите, пока кнопка B1 отпущена
  while (true) {
    while (!digitalRead(button2)) {                  // Если кнопка B2 нажата
      parameter++;
      if (i == 0 && parameter > 31)                  // Если date > 31 ==> date = 1
        parameter = 1;
      if (i == 1 && parameter > 12)                  // Если  month > 12 ==> month = 1
        parameter = 1;
      if (i == 2 && parameter > 99)                  // Если year > 99 ==> year = 0
        parameter = 0;
      if (i == 3 && parameter > 23)                  // Если hours > 23 ==> hours = 0
        parameter = 0;
      if (i == 4 && parameter > 59)                  // Если minutes > 59 ==> minutes = 0
        parameter = 0;
      sprintf(text, "%02u", parameter);
      draw_text(x_pos, y_pos, text, text_size);
      delay(200);                                    // Ждем 200ms
    }
    draw_text(x_pos, y_pos, "  ", text_size);
    blink_parameter();
    draw_text(x_pos, y_pos, text, text_size);
    blink_parameter();
    if (!digitalRead(button1)) {                     // Если кнопка B1 нажата
      i++;                                           // Увеличение «i» для следующего параметра
      return parameter;                              // Вернуть значение параметра и выйти
    }
  }
}
void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
  display.setCursor(x_pos, y_pos);
  display.setTextSize(text_size);
  display.print(utf8rus(text));
  display.display();
}
void loop() {
  if (!digitalRead(button1)) {                       // Если кнопка B1 нажата
    i = 0;
    while (!digitalRead(button1));                   // Дождитесь отпускания кнопки B1
    while (true) {
      while (!digitalRead(button2)) {                // Пока кнопка B2 нажата
        day++;                                       // Инкремент для деня
        if (day > 7) day = 1;
        display_day();                               // Вызовите функцию display_day
        delay(200);                                  // Ждем 200 ms
      }
      draw_text(30, 0, "           ", 1);
      blink_parameter();                             // Вызов функции blink_parameter
      display_day();                                 // Вызовите функцию display_day
      blink_parameter();                             // Вызов функции blink_parameter
      if (!digitalRead(button1))                     // Если кнопка B1 нажата
        break;
    }
    date   = edit(4, 12, date, 2);                      // Изменить дату
    month  = edit(40, 12, month, 2);                    // Изменить month
    year   = edit(100, 12, year, 2);                    // Изменить year
    hour   = edit(20, 30, hour, 3);                     // Изменить hours
    minute = edit(74, 30, minute, 3);                   // Изменить minutes
    // Преобразовать десятичную в BCD
    minute = ((minute / 10) << 4) + (minute % 10);
    hour = ((hour / 10) << 4) + (hour % 10);
    date = ((date / 10) << 4) + (date % 10);
    month = ((month / 10) << 4) + (month % 10);
    year = ((year / 10) << 4) + (year % 10);
    // End conversion
    // Записать данные в DS3231 RTC
    Wire.beginTransmission(0x68);               // Запустите протокол I2C с адресом DS3231
    Wire.write(0);                              // Отправить адрес регистрации
    Wire.write(0);                              // Сбросьте sesonds и запустите генератор
    Wire.write(minute);                         // Запишем минуту
    Wire.write(hour);                           // Запишем  hour
    Wire.write(day);                            // Запишем  day
    Wire.write(date);                           // Запишем  date
    Wire.write(month);                          // Запишем  month
    Wire.write(year);                           // Запишем  year
    Wire.endTransmission();                     // Остановите передачу и отпустите шину I2C
    delay(200);                                 // Ждем 200ms
  }
  Wire.beginTransmission(0x68);                 // Запустите протокол I2C с адресом DS3231
  Wire.write(0);                                // Отправить адрес регистрации
  Wire.endTransmission(false);                  // Перезапуск I2C
  Wire.requestFrom(0x68, 7);                    // Запросите 7 байтов от DS3231 и освободите шину I2C
  second = Wire.read();                         // Считать секунды из регистра 0
  minute = Wire.read();                         // Считать minuts из регистра 1
  hour   = Wire.read();                         // Считать hour из регистра 2
  day    = Wire.read();                         // Считать day из регистра 3
  date   = Wire.read();                         // Считать date из регистра 4
  month  = Wire.read();                         // Считать month из регистра 5
  year   = Wire.read();                         // Считать year из регистра 6
  Wire.beginTransmission(0x68);                 // Запустите протокол I2C с адресом DS3231
  Wire.write(0x11);                             // Отправить адрес регистрации
  Wire.endTransmission(false);                  // Перезапуск I2C
  Wire.requestFrom(0x68, 2);                    // Запрос 2 байта от DS3231 и освобождение шины I2C
  temperature_msb = Wire.read();                // Чтение температуры MSB
  temperature_lsb = Wire.read();                // Считать температуру LSB
  display_day();
  DS3231_display();                             // Время и календарь
  delay(50);                                    // Ждем 50ms
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB8;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

Пишите в комментариях, какие проекты на данном дисплее вы бы хотели видеть.


Возможности OLED часов на arduino.

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

Возможности OLED часов на arduino.

В связи с тем, что используем модуль реального времени ds3231 , в котором встроен датчик температуры, мы можем вывести температуру в помещении. Самая нижняя строчка на дисплее выводит данную информацию.

В связи с тем, что используем модуль реального времени ds3231, в котором встроен датчик температуры, мы можем вывести температуру в помещении.

Это достаточно распространённый функционал любых часов, и поэтому данный проект не получил собственный корпус. На мой взгляд, проект должен быть более серьезным, чтобы заморачиваться с разработкой корпуса. Пишите в комментариях ваше предложение, чтобы вы хотели видеть реализованного на данном дисплее. Может, расширенные возможности данных часов, или совсем другой проект.


На этом всё. Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока. До встречи в новом проекте.


]]>
Обзор USB адаптера (программатора) для ESP-01 на CH340G http://portal-pk.ru/news/241-obzor-usb-adaptera-programmatora-dlya-esp-01-na-ch340g.html Константин Portal-PK 2020-02-04T13:07:38+03:00 Сегодня я расскажу про USB адаптер для ESP-01 на чипе CH340G. И поделюсь своим опытом, как можно переделать данный адаптере в программатор для esp-01.

Описание адаптера для ESP-01.

Адаптер представляет из себя плату чёрного цвета, на которой установлены: микросхема CH340G; разъем с шагом 2,5 мм для установки модуля ESP-01; стабилизатор LM62063; USB разъем для подключения к компьютеру.

Описание адаптера для ESP-01.

Приобрел я на AliExpress USB адаптер для программирования esp-01. Из названия понятно, что это просто адаптер, а не программатор. В интернете достаточно много примеров переделки USB адаптера в программатор, что я и сделал, припаяв вот такую гребенку.

припаяв вот такую гребенку

Чтобы адаптер переходил в режим программирования необходимо GPIO0 замыкать на GND. А во втором положении перемычки, чтобы не замыкала данные контакты.

переделки USB адаптера в программатор

Это решение достаточно удобное. После прошивки микроконтроллера мы можем проверить какую информацию он вводит в монитор порта. Достаточно только поменять положение перемычки.

 поменять положение перемычки

Для работы адаптера на микросхеме CH340G необходимо установить дополнительный драйвер в операционной системе Windows. Драйвер можно скачать внизу статьи, в разделе материалы для скачивания. В операционной системе Linux всё работает без установки дополнительных драйверов.

Для проверки работоспособности программатора можно загрузить скетч мониторинга WiFi сетей

Для проверки работоспособности программатора можно загрузить скетч мониторинга WiFi сетей.

 загрузить скетч мониторинга WiFi сетей

Данный скетч есть в стандартных примерах Arduino IDE в разделе ESP8266WiFi, точнее он ставится вместе с установкой поддержки семейства ESP8266.

 Данный скетч есть в стандартных примерах Arduino IDE в разделе ESP8266WiFi, точнее он ставится вместе с установкой поддержки семейства ESP8266.

Как настроить Arduino IDE для работы с ESP8266

Как настроить Arduino IDE для работы с ESP8266 смотрите тут.

Для прошивки микроконтроллера esp-01 устанавливаем джампер так, чтобы он замыкал GPIO0 на GND. После прошивки переставляем джампер, что позволяет вывести информацию в монитор порта и мы увидим список доступных WiFi сетей.

 увидим список доступных WiFi сетей

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

Недавно нашел на AliExpress уже готовый программатор с переключателем на плате

Он тоже сделан на микросхеме ch340g, и его принцип работы ничем не отличается от переделанного адаптера. А самое обидное то, что этот программатор стоит всего на 50-60 руб дороже, чем адаптер. Оставлю вам ссылку на программатор, чтобы вы не тратили лишнее время на переделку адаптера.

Надеюсь, что моя статья кому-нибудь помогла. Пишите своё мнение про адаптер, программатор и общее впечатление про ESP-01.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Cамодельный сенсорный светильник на Arduino (Digispark). http://portal-pk.ru/news/240-camodelnyi-sensornyi-svetilnik-na-arduino.html Константин Portal-PK 2020-01-30T11:22:11+03:00 На рынке достаточно много светильников с различными сенсорными кнопками . Что бы включить такой светильник необходимо прикоснуться к определённой области на корпусе прибора. Подобное управление я уже реализовывал, и меня не удивить таким управлением. Недавно делал елочную гирлянду, в которой управление сенсорной кнопкой выступало как альтернативное, основное управление реализовано по Wi-fi.

Недавно в гостях мне показали светильник с сенсорным управлением , который можно включить прикоснувшись к самому светильнику. Корпус светильника сделан из алюминиевого профиля. И тут меня посетила идея реализовать с помощью Arduino что-то подобное.

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

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

Теперь необходимо сделать основание корпуса, куда будет уложена электроника. Изначально я планировал начертить свое основание в программе Fusion 360, но на просторах интернета наткнулся вот на такой готовый вариант. Все элементы отлично подошли для моего проекта, пришлось только увеличить отверстие для установки разъёма 5,5 на 2,5 мм.

Теперь необходимо сделать основание корпуса,

Корпус готов. Переходим к электронной части проекта.

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

Для проекта понадобиться:

- digispark

- сенсорная кнопка ttp223

- разъем 5,5 на 2,5 мм

- алюминиевый профиль для светодиодных лент

- немного пластика для 3D принтера

В связи с тем, что в основании не так и много места, управлять всем будет Digispark

Электронику светильника с сенсорным управлением на Arduino (Digispark) собираю вот по такой схеме.

Электронику светильника с сенсорным управлением на Arduino (Digispark) собираю вот по такой схеме.

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

У сенсорной кнопки ttp223

У сенсорной кнопки ttp223 есть места, куда можно припаять выносной сенсор, чем я и воспользовался. Припаял провод к выносному сенсору и зафиксировал так, что кольца фиксации прижимают данный провод плотно к алюминиевому профилю. Правда использовать медный провод нежелательно, потому что в месте соприкосновения алюминия и меди происходит окисление и со временем контакт теряется. Поэтому в своем проекте я использую облуженый медный провод, надеюсь что проблем с контактом не будет.

Укладываем электронику в основание и закрываем заднюю крышку.

Укладываем электронику в основание и закрываем заднюю крышку.


Переходим к программной части.

Чтобы Digispark работал в среде Arduino IDE необходимо настроить поддержку данной платы.

Для этого в Arduino IDE зайдём во вкладку «файл», «настройки» и в открывшемся окне настроек, в поле « Дополнительные ссылки для менеджера плат » указываем вот такую ссылку. Нажимаем кнопку « OK».

Для этого в Arduino IDE зайдём во вкладку

Дополнительные ссылки для менеджера плат

Дальше переходим в меню «инструменты», выбираем пункт «менеджер плат» и в открывшемся окне в строке поиска указываем слово: «Digispark». Производим установку.

Дальше переходим в меню «инструменты»

«Digispark». Производим установку.

После чего переходим в пункт меню «инструменты» и в пункте «платы» выбираем Digispark.

После чего переходим в пункт меню «инструменты» и в пункте «платы» выбираем Digispark.

Для операционной системы Windows необходимо установить дополнительные драйвера, которые вы можете скачать по ссылке или из раздела « материалы для скачивания» в конце статьи.

Прошивка Digispark немного отличается от прошивки Arduino.

Прошивка Digispark немного отличается от прошивки Arduino. Сперва нажимаем кнопку «загрузить», после чего появляется надпись о том, что ожидается подключение устройства. Далее мы подключаем к USB Digispark. Если вы увидели бегущие проценты до 100 и в конце надпись « Thank you!». Значит ваш плата успешно прошита.

 Далее мы подключаем к USB Digispark. Если вы увидели бегущие проценты до 100 и в конце надпись «Thank you!».


Код для светильника сенсорным управлением.

Код прошивки небольшой, максимум, что вам нужно изменить количество светодиодов в вашей ленте. Значение переменной STRIPSIZE как раз отвечает за установку количества светодиодов.

#include <Adafruit_NeoPixel.h>
#define PIN 0               // пин подключения ленты
#define STRIPSIZE 20        // количество светодиодов в ленте
byte button_rejim = 1;      // кнопка режим
byte rejim = 0;             // текущий режим
byte yarkast = 150;         // текущая яркасть 
boolean lastButten = LOW;   // предыдущее состояние кнопки
boolean currentButten = LOW;// текущее состояние кнопки

Если Вы планируете внести изменения в код, то это не составит труда, так как основные функции все подписаны. Есть функция, которая убирает дребезг кнопки. Также прописан интервал через какое время начинается увеличение яркости светодиодов.

С остальным, я думаю, можно разобраться, тут ничего сложного нет.

В итоге вот такой красивый стильный светильник получается.

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

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

Используя режимы радуги и смены цветов, светильник можно использовать как ночник .

Используя режимы радуги и смены цветов, светильник можно использовать как ночник .

Планирую доработать данную версию светильника. Есть идея сделать управление через Bluetooth, wi-fi с помощью мобильного приложения. Пишите в комментариях, и на форуме какую версию проекта вы бы хотели видеть. И что вас интересует, возможно даже не в рамках данного проекта.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем проекте.

]]>
Урок 16.1. Бегущая строка на русском языке. Arduino и MAX7221. http://portal-pk.ru/news/239-begushchaya-stroka-na-russkom-yazyke-arduino-i-max7221.html Константин Portal-PK 2020-01-28T12:40:35+03:00 Сегодня в уроке научимся выводить текст на русском языке на матрицу MAX7221. Для более быстрой смены текста в бегущей строке «научим» Arduino выводить на матрицу полученный текст из монитора порта . Как подключать матрицу MAX7221 к Arduino, рассказывал в предыдущем уроке: Подключаемматрицу Max72xx (MAX7219) к Arduino. Простая анимация.

Подключение светодиодной матрицы 8×8 на MAX7219 к Arduino.

Для выполнения Arduino урока нам понадобится:

Для подключения необходимо пять проводов, которые чаше всего идут в комплекте с матрицей. Подключаем вывод CLK (MAX7219 ) к выводу 13 (Arduino), вывод CS подключаем к выводу 9, вывод DIN подключаем к выводу 11. Питание подключается VCC к +5В и GND к GND.

Схема подключения модуля с 4 матрицами к Arduino UNO .

Схема подключения модуля с 4 матрицами к Arduino UNO.

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO будет вот такой.

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO
Установка библиотек Adafruit_GFX и Max72xxPanel. И настройка для вывода русского текста.

Существует несколько библиотек, доступных для управления матрицей на драйвере MAX7219 . В этом уроке я буду использовать две библиотеки: Adafruit_GFX и Max72xxPanel .

Для установки этих библиотек выполните следующие действия.
1. Откройте Arduino IDE и перейдите в раздел Скетч > Подключить библиотеку > управление библиотеками .

Должен открыться менеджер библиотек.

2. Укажите “ GFX” в поле поиска, выберете из списка и установите библиотеку от Adafruit GFX.

Аналогично установите вторую библиотеку, для этого в поле поиска укажите “GFX”

3. Библиотеку Max72xxPanel можно установить из zip архива. Для этого скачайте архив с библиотекой отсюда или внизу урока из раздела «Файлы для скачивания». В Arduino IDE перейдите в раздел Скетч > Подключить библиотеку > Добавить .ZIP библиотеку . Выбираете архив с библиотекой.

 Библиотеку Max72xxPanel можно установить из zip архива

4. Скачать файл glcdfont.c и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library. У вас путь до библиотеки может отличаться. Вы также можете скачать библиотеку Adafruit-GFX подготовленную для работы с русским текстом внизу статье есть раздел с материалами для урока.

5. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

6. После установки библиотек перезагрузите среду разработки Arduino.


Пример вывода русского текста на матрицу MAX7221.

Пример вывода русского текста на матрицу MAX7221.

Пример 1. Выводим русский текст на матрицу. Текст хранится в переменной. Для смены текста нужно постоянно загружать скетч в Arduino.

В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

String tape = "";
int wait = 100;                             // интервал, чем меньше тем бытрее бежит строка
int spacer = 1;                             // Промежуток между символами (кол-во точек)
int width = 5 + spacer;                     // Ширина шрифта составляет 5 пикселей

void setup() {
  Serial.begin(9600);
  tape = utf8rus("Привет мир! Портал ПК");
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                     // Направление текста 1,2,3,4
}

void loop() {

  for ( int i = 0 ; i < width * tape.length() + matrix.width() - spacer; i++ )
  {
    matrix.fillScreen(LOW);

    int letter = i / width;                   // номер символа выводимого на матрицу

    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2;         // отцентрировать текст по вертикали

    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < tape.length() ) {
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
      }
      letter--;
      x -= width;
    }
    matrix.write();                       // выведим значения на матрицу
    delay(wait);
  }
}

/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB7;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

При выводе русского текста использовать функцию utf8rus() .

Как видно, вывод на матрицу не сильно отличается от вывода русского текста на SSD1306 OLED-диспл ей: SSD1306OLED-дисплей, вывод текста на русскомязыке в Arduino IDE


Пример 2. Выводим на матрицу русский текст, полученный из монитора порта.

Выводим на матрицу русский текст, полученный из монитора порта.

За основу возьмем первый пример. Добавим в него функцию, которая посимвольно считывает значения с монитора порта. Сохраним полученный результат в переменную для вывода значения на MAX7221. А остальная часть кода остается без изменений.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "";
int wait = 100;                             // интервал, чем меньше тем бытрее бежит строка
int spacer = 1;                             // Промежуток между символами (кол-во точек)
int width = 5 + spacer;                     // Ширина шрифта составляет 5 пикселей
void setup() {
  Serial.begin(9600);
  tape = utf8rus("Привет мир! Портал ПК");
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                     // Направление текста 1,2,3,4
}
void loop() {
  if (Serial.available()) {                  // получили данные
    tape = utf8rus(Serial_Read());           // Считываем и сохроняе в переменную
  }
  for ( int i = 0 ; i < width * tape.length() + matrix.width() - spacer; i++ )
  {
    matrix.fillScreen(LOW);
    int letter = i / width;                   // номер символа выводимого на матрицу
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2;         // отцентрировать текст по вертикали
    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < tape.length() ) {
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
      }
      letter--;
      x -= width;
    }
    matrix.write();                       // выведим значения на матрицу
    delay(wait);
  }
}
String Serial_Read() {
  unsigned char c;                        // переменная для чтения сериал порта
  String Serial_string = "";              // Формируемая из символов строка
  while (Serial.available() > 0) {        // Если в сериал порту есть символы
    c = Serial.read();                    // Читаем символ
    if (c == '\n') {                      // Если это конец строки
      return Serial_string;               // Возвращаем строку
    }
    Serial_string = Serial_string + String(char(c)); //Добавить символ в строку
  }
  return Serial_string;
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB7;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

Для проверки работы откроем монитор порта в Arduino IDE. И напишем нужный текст.

Для проверки работы откроем монитор порта в Arduino IDE. И напишем нужный текст.

После чего нужно нажать кнопку « Отправить». Вот, что получается.

Для проверки работы откроем монитор порта в Arduino IDE. И напишем нужный текст.

Один минус. Пока не закончится показ предыдущего текста, новый не будет выводиться на матрицу. Это особенности работы матрицы MAX7221.

Матрицу можно сделать гораздо больше , и на нее выводить текст с анимацией из предыдущего урока. Пишите в комментарии, какой проект на Arduino вы бы хотели увидеть с использованием матриц MAX7221 и Arduino.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Вездеход на гусеницах с радиоуправлением http://portal-pk.ru/news/238-vezdehod-na-gusenicah-s-radioupravleniem.html Константин Portal-PK 2020-01-18T18:26:24+03:00 На подарок купил ребенку конструктор вездеход на гусеницах с радиоуправлением . Ребенок давно хотел радиоуправляемую машинку или танк на гусеничном ходу . А тут еще и конструктор, который можно собрать самому.


Комплектация конструктора с радиоуправлением.

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

 отвертка, которая нужна только для установки батареек в пульт; зарядное устройство, которое подключается к зарядке телефона.

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

Все детали разделены по пакетикам

В комплекте идет достаточно подробная инструкция. На последней странице есть список всех элементов конструктора.

список всех элементов конструктора

На первой странице список пронумерованных пакетов с деталями. А также QR код для установки приложения на телефон с OS Android или ISO.

 На первой странице список пронумерованных пакетов с деталями. А также QR код

Мне еще понравилось то, что для всех деталей прописана длина в сантиметрах, а часть приведена в натуральную величину. Можно просто приложить и понять, подходит деталь сюда или нет. Удобно для детей, которые плохо считаю.

Сборка машинки на гусеничном ходу.

Так как были новогодние праздники, сборка растянулась на несколько дней и все моменты не получилось зафиксировать. Но пару фоток все таки удалось сделать.

сборка растянулась на несколько дней и все моменты не получилось зафиксировать.

Устанавливаем основные элементы на основание машинки. Дальше делается корпус машины.

Устанавливаем основные элементы на основание машинки.

И в конце собираются гусеницы, и устанавливаются на машину.

И в конце собираются гусеницы, и устанавливаются на машину.

И вот какой красивый вездеход на гусеничном ходу с радиоуправлением получается . Модель достаточно больших размеров.

И вот какой красивый вездеход на гусеничном ходу с радиоуправлением получается

Модель достаточно больших размеров.


Установка и использование приложения для управления вездеходом

Для установки приложения нужно сканировать QR код, который находится на первой странице инструкции. Приложение есть для устройств на OS Android и ISO .

Для установки приложения нужно сканировать QR код

При установке приложения на OS Android возникла проблема. Браузер блокирует загрузку приложения. Возможно, есть настройки для устранения данного досадного казуса, но я решил данную ситуацию установкой другого браузера uc browser. После чего приложение скачалось и установилось без проблем. Конечно, пришлось подтвердить, что разрешаю установить приложение, разрешить доступ к фото и пр. функциям.


После установки приложения надо выбрать модель базы, в моем случае это модель 3,0 серии.

После установки приложения надо выбрать модель базы, в моем случае это модель 3,0 серии.

Из списка радиоуправляемых конструкторов, выбираем наш.

Из списка радиоуправляемых конструкторов, выбираем наш.

Нужная для меня модель находиться на 3 странице.

Нужная для меня модель находиться на 3 странице.

После выбора модели в открывшемся меню нажимаем на джойстик.

После выбора модели в открывшемся меню нажимаем на джойстик.

Откроется страница управления в виде джойстика.

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

 Для подключения к внедорожнику нужно нажать на кнопку блютуз.

Еще одна интересная функция - это управление наклоном телефона . Вот так выглядит данное меню. Но будьте осторожнее, так как внедорожник становится очень резким. И при съемках видео, в таком режиме управления, внедорожник у меня начал быстро ездить и чуть не упал со стола. Хорошо, что эта машина является конструктором, ее можно собрать обратно. Кстати, я уже делал машину на Arduino с возможностью управлять наклоном джойстика.

Еще одна интересная функция - это управление наклоном телефона.

В приложении есть функция управления по метке. И даже управление голосом, правда все команды на английском языке. То ли у меня произношение не очень, то ли по какой-то другой причине, но, к сожалению, не получилось протестировать данную функцию. Если вы знаете, в чем может быть проблема, напишите в комментариях.

В приложении есть функция управления по метке

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


С какими сложностями и неудобствами вы можете столкнуться:

1. Еще раз повторюсь. Приложение для управления вездеходом с телефона не скачивается стандартными браузерами с настройками по умолчанию. Для решения этой проблемы можно установить браузер uc browser . Данная проблема актуальна для устройств с операционной системой OS Android . Как обстоят дела с ISO, не проверял.

2. Машинка не соединяется попеременно с пультом и с приложением. Тут может быть несколько причин. Самая банальная заключается в том, что машина не может одновременно подключаться и к пульту и к приложению. Если вы подключены к машине с пульта и решили подключиться с приложения, то нужно сперва выключить пульт и перезагрузить машину, после чего можно подключиться и управлять с приложения. И аналогична обратная ситуация. Если вы управляли с приложения, то нужно отключить приложение и перезагрузить машинку, и после чего подключиться с пульта. Неудобно. Но так устроена работа радиопередачи, нельзя подключиться одновременно по двум каналам. А если дать такую возможность, то как управлять? И получится как в басне И. А. Крылов: «Лебедь, Щука и Рак».

Машинка не соединяется попеременно с пультом и с приложением.

Вывод.

Вездеход на гусеницах с радиоуправлением превзошел ожидания. Не смотря на маленькую базу аккумулятор держит заряд достаточно долго. И при этом машина достаточно мощная и резвая. Конструктор стоит своих денег.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
#16. Подключаем матрицу Max72xx (MAX7219) к Arduino. Простая анимация. http://portal-pk.ru/news/237-podklyuchaem-matricu-max72xx-max7219-k-arduino-prostaya-animaciya.html Константин Portal-PK 2020-01-13T08:44:48+03:00

Сегодня в уроке покажу как подключить к Arduino светодиодную матрицу на MAX7219. Матрица состоит из 8 рядов и 8 столбцов, всего 64 светодиода, которыми управляет драйвер MAX7219 . В этом Arduino уроке буду использовать модуль из 4 матриц на базе драйвера MAX7219 , но это все те же матрицы, просто установлены в модуль с 4 драйверами. В дальнейшем буду подключать и 16, и 32, и, возможно, 64 матрицы. А пока, в рамках данного урока, научу управлять 1 матрицей и поиграю с 4 матрицами данного модуля.

 В этом Arduino уроке буду использовать модуль из 4 матриц на базе драйвера MAX7219

Технические параметры матрицы 8х8.

  • Драйвер: MAX7219;
  • Количество светодиодов на индикаторе 1088BS: 64;
  • Тип индикаторов 1088BS: общий катод;
  • Цвет светодиодов: красный;
  • Диаметр одного светодиода: 3 мм;
  • Интерфейс подключения матрицы: SPI;
  • Напряжение питания: 5 В;
  • Размер матрицы: 32 х 32 х 14 мм;

Как устроена матрица 8х8

Как указывалось ранее, эта матрица имеет 8 столбцов и 8 строк. Каждый светодиод индексируется от 0 до 7. Вот рисунок для лучшего понимания:

Технические параметры матрицы 8х8 на базе драйвера MAX7219

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

Например, если вы хотите отобразить смайлик, вот что вам нужно сделать:

Например, если вы хотите отобразить смайлик, на матрицу MAX7219

Подключение светодиодной матрицы 8×8 на MAX7219 к Arduino.

Для выполнения Arduino урока нам понадобится :

Для подключения необходимо пять проводов, которые чаше всего идут в комплекте с матрицей. Подключаем вывод CLK (MAX7219 ) к выводу 13 (Arduino), вывод CS подключаем к выводу 9, вывод DIN подключаем к выводу 11. Питание подключается VCC к +5В и GND к GND.

Подключение матрицы MAX7219 к Arduino

Подключение матрицы MAX7219 к Arduino NANO аналогично.

Подключение матрицы MAX7219 к Arduino NANO

Схема подключения модуля с 4 матрицами ни чем не отличается. Все подключается к тем же пинам Arduino UNO .

Схема подключения модуля с 4 матрицами

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO будет вот такой.

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO

Установка библиотек Adafruit_GFX и Max72xxPanel.

Существует несколько библиотек, доступных для управления матрицей на драйвере MAX7219. В этом уроке я буду использовать две библиотеки: Adafruit_GFX и Max72xxPanel.

Для установки этих библиотек выполните следующие действия.
1. Откройте Arduino IDE и перейдите в раздел Скетч > Подключить библиотеку > управление библиотеками .

Должен открыться менеджер библиотек.

2. Укажите “ GFX” в поле поиска, выберете из списка и установите библиотеку от Adafruit GFX.

Аналогично установите вторую библиотеку, для этого в поле поиска укажите “GFX”

3. Библиотеку Max72xxPanel можно установить из zip архива. Для этого скачайте архив с библиотекой отсюда или внизу урока из раздела «Файлы для скачивания». В Arduino IDE перейдите в раздел Скетч > Подключить библиотеку > Добавить . ZIP библиотеку. Выбираете архив с библиотекой.

 Библиотеку Max72xxPanel можно установить из zip архива

4. После установки библиотеки перезагрузите среду разработки Arduino.


Примеры кода работы с матрицей MAX7219

Пример 1. Вывод двух точек на матрицу MAX7219 в среде Arduino IDE.

Вывод двух точек на матрицу MAX7219 в среде Arduino IDE.

Данный пример достаточно прост и не многим отличается от включения светодиода.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.drawPixel(3, 3, HIGH);            // Включаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(6, 7, HIGH);            // Включаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(6, 7, LOW);             // Выключаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(3, 3, LOW);             // Выключаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(6, 7, LOW);             // Выключаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
}

Для работы вам нужно подключить библиотеки, определить пины подключения, после чего, используя библиотеку Max72xxPanel, укажите координаты светодиода, который вы планируете включать или выключать. Точки могут быть любыми и не ограничиваться координатами одной матрицы 8х8.

Пример 2 . Построчное заполнение матрицы MAX7219.

Построчное заполнение матрицы MAX7219 в среде Arduino IDE.

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

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  for (int y = 0; y < 8; y++ ) {
    for (int x = 0; x < 32; x++ ) { // Передача массива
      matrix.drawPixel(x, y, HIGH);
      matrix.write();
      delay(200);
    }
  }
}


Пример 3 . Вывод линий по диагонали матрицы MAX7219.

Вывод линий по диагонали матрицы MAX7219 в среде Arduino IDE.

Используя предыдущий пример немного изменю код. Предлагаю не заполнять построчно, а сделать перемещение по оси Y на 1, при каждом перемещении на 1 по оси X, до тех пор, пока не спуститесь до последнего пикселя матрицы.После чего начните заново выводить линию сверху матрицы. Можно таким же образом выводить зигзаг, изменить данный пример для данной цели не составит большого труда.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
    for (int x = 0; x < 32; x++ ) { // Передача массива
      matrix.drawPixel(x, y, HIGH);
      matrix.write();
      delay(200);
      y++;
      if (y>=8)
        y=0;
    }
}

Пример 4 . Рисуем квадрат по контуру матрицы MAX7219.


Рисуем квадрат по контуру матрицы MAX7219 в среде Arduino IDE.

Такой вариант вы, наверное, уже видели на табло с бегущей строкой. Реализуется данный эффект достаточно просто. Попиксельно заполняются нужные строки по горизонтали и по вертикали, используя координаты начальной и конечной точки, просто рисуем линии.

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

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int x = 0;
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  y = 0;
  for (int x = 0; x < 32; x++ ) { // Передача массива
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  x = 31;
  for (int y = 1; y < 8; y++ ) {
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  y = 7;
  for (int x = 31; x > 0; x-- ) { // Передача массива
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  x = 0;
  for (int y = 8; y > 0; y-- ) {
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  y = 0;
  for (int x = 0; x < 32; x++ ) { // Передача массива
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
  x = 31;
  for (int y = 1; y < 8; y++ ) {
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
  y = 7;
  for (int x = 31; x > 0; x-- ) { // Передача массива
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
  x = 0;
  for (int y = 8; y > 0; y-- ) {
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
}

Код для урока не оптимизирован. Можно сделать отдельно одну функцию, которая по координатам будет рисовать линии, и вторую, которая будет удалять линии, также по указанным координатам.


Пример 5 . Мигающий прямоугольник контура матрицы MAX7219.

Мигающий прямоугольник контура матрицы MAX7219 в среде Arduino IDE.

Данный пример реализован на предыдущем примере, но с незначительнымиизменениями. В этомпримере сделан вывод прямоугольника по контуру матрицы не попиксельно, а одновременно. После чего выполняется функция, которая чистит матрицу. И снова повторяется цикл вывода квадрата и чистки матрицы и т.д. Достаточно простой пример, но при этом он используется часто в бегущих строках.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int x = 0;
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  delay(500);
  y = 0;
  for (int x = 0; x < 32; x++ ) { // 
    matrix.drawPixel(x, y, HIGH);
  }
  x = 31;
  for (int y = 1; y < 8; y++ ) {
    matrix.drawPixel(x, y, HIGH);
  }
  y = 7;
  for (int x = 31; x > 0; x-- ) { // 
    matrix.drawPixel(x, y, HIGH);
  }
  x = 0;
  for (int y = 8; y > 0; y-- ) {
    matrix.drawPixel(x, y, HIGH);
  }
  matrix.write();
  delay(500);
}

Пример 6 . Вывод графических элементов на MAX7219 в среде Arduino IDE.

Вывод графических элементов на MAX7219 в среде Arduino IDE.

Выше уже был приведен пример вывода смайлика на матрицу. Если вы заметили, для каждого ряда справа представлен двоичный код. 1 - светодиод включен, 0 - выключен. Используя данный массив можно на матрицу вывести графические элементы. В нашем примере это 3 самйлика.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int x = 0;
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  const byte hf[8] = {                    // Создаем массив "Смайл"
    0b00111100,                               //    ####
    0b01000010,                               //   #    #
    0b10100101,                               //  # #  # #
    0b10000001,                               //  #      #
    0b10100101,                               //  # #  # #
    0b10011001,                               //  #  ##  #
    0b01000010,                               //   #    #
    0b00111100                                //    ####
  };                                          
  byte nf[8] = {B00111100, B01000010, B10100101, B10000001, B10111101, B10000001, B01000010, B00111100};
  byte sf[8] = {B00111100, B01000010, B10100101, B10000001, B10011001, B10100101, B01000010, B00111100};
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  for (int y = 0; y < 8; y++ ) {            // Передача массива
    for (int x = 0; x < 8; x++ ) {
      matrix.drawPixel(x, y, hf[y] & (1 << x));
    }
  }
  matrix.write();
  delay(1000);
  for (int y = 0; y < 8; y++ ) {            // Передача массива
    for (int x = 0; x < 8; x++ ) {
      matrix.drawPixel(x, y, nf[y] & (1 << x));
    }
  }
  matrix.write();
  delay(1000);
  for (int y = 0; y < 8; y++ ) {            // Передача массива
    for (int x = 0; x < 8; x++ ) {
      matrix.drawPixel(x, y, sf[y] & (1 << x));
    }
  }
  matrix.write();
  delay(1000);
}

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

Для того чтобы выводить графические элементы на матрицу можно написать макрос для Excel или воспользоваться программой. При написании данного урока случайно нашел вот такую программу PixelToMatrix, которая облегчает рисование на матрице 8х8.

 программу PixelToMatrix

Скачать программу можно внизу урока из раздела « Файлы для скачивания»

Итоги урока.

Как видно из примеров, выводить информацию на матрицу достаточно просто. В следующем уроке покажу как выводит текст на Русском языке на MAX7219 в среде Arduino IDE .

 как выводит текст на Русском языке на MAX7219 в среде Arduino IDE

Не забывайте оставлять ваше мнение и предложения в комментариях.


Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Виды направляющих для станков с ЧПУ. http://portal-pk.ru/news/236-vidy-napravlyayushchih-i-podshipnikov-dlya-stankov-s-chpu.html Константин Portal-PK 2019-12-26T12:05:02+03:00 На протяжении нескольких лет мое хобби - это создание проектов на Arduino. В том числе разработка станков с ЧПУ на базе Arduino. Сделал я уже несколько видов ЧПУ станков, от лазерного гравировального, до фрезерного станка с ЧПУ. Также модернизировал свой 3D принтер Anet A8.

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


Направляющие полированный вал.

Самый распространенный вид направляющих для небольших станков и 3D принтеров.

Направляющие полированный вал.

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

Минус данных направляющих заключается в провисании при использовании длинных направляющих, так как нет дополнительной опоры, только крепление в 2-х точках.

шариковые втулки

Для этих направляющих используют шариковые втулки. Данные подшипники не рассчитаны для работы под большим весом. Это второй фактор, который указывает на использование таких направляющих для небольших станков.


Шлицевой вал.

Шлицевой вал.

Этот вид направляющих валов отличаются только шлицами (пазами) по длине вала. Данная конструкция валов имеет меньший люфт по сравнению с полированными валами, но при этом значительно дороже, и поэтому применяется реже.


Направляющая вал на опоре.

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

Направляющая вал на опоре

Подшипники для вала на опоре делаются в виде каретки, что обеспечивает простоту крепления. Но, в отличие от обычного вала, данный вид направляющих имеет разные характеристики при разнонаправленной нагрузке, что приводит к снижению качества.

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


Шариковые профильные рельсовые направляющие.

Благодаря дорожкам качения нагрузка распределяется, что значительно снижает люфт и увеличивает грузоподъемность и износоустойчивость.

Шариковые профильные рельсовые направляющие.

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

Минусом данных направляющих является высокое требование к поверхности монтажа и качеству крепления.

В связи с высоким требованием к производству такие направляющие стоят достаточно дорого и производителей на рынке не так много. И они дорожат своей репутацией, поэтому качество на достаточно высоком уровне.

Роликовые профильные направляющие.

Роликовые направляющие являются одним из подвидов рельсовых направляющих. Их отличие в том, что в каретке добавлены ролики и, соответственно, профиль направляющей сделан так, что в нем есть паз под ролики.

Роликовые профильные направляющие.

Это увеличивает грузоподъемность и износоустойчивость.

Роликовые профильные направляющие применяются в станках для обработки черных металлов, камня и стали.


Направляющие ласточкин хвост.

Это увеличивает грузоподъемность и износоустойчивость.

Направляющие типа «ласточкин хвост» являться достаточно точными и применяются в металлообрабатывающих станках, но в связи со сложностью их ремонта и замены используются редко.


Роликовые каретки (ролики) для алюминиевого профиля.

Роликовые каретки (ролики) для алюминиевого профиля.

Для 3D принтеров и для лазерных станков очень распространены роликовые каретки, которые перемещаются по алюминиевому профилю, который в свою очередь выступает рамой станка. Очень экономичное и достаточно эффективное решение.

Ролики бывают пластиковые и нейлоновые.

Профиль для ЧПУ (CNC) - экструзионный, он же станочный, он же openbuilds профиль. Бывает T-slot и V-slot.

Для роликовых направляющих нужно покупать профиль V-slot. Это важную мелочь упускают начинающие разработчики ЧПУ станков.

Профиль для ЧПУ (CNC) - экструзионный, он же станочный, он же openbuilds профиль. Бывает T-slot и V-slot.

Это еще не все виды направляющих для ЧПУ станков. Свои варианты и предложения пишите в комментариях.


Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующей статье.

]]>
Елочная смарт-гирлянда с управлением через мобильное приложение. http://portal-pk.ru/news/235-elochnaya-smart-girlyanda-s-upravleniem-cherez-mobilnoe.html Константин Portal-PK 2019-12-12T13:36:27+03:00 Привет всем. Сегодня расскажу про вторю версию новогодней гирлянды . Управлять данной смарт-гирляндой можно с телефонного приложения , или с помощью сенсорной кнопки .

Версия 2020 с поддержкой ESP32.

Интерфейс приложения вот такой:

Интерфейс приложения вот такой

Гирлянда со звездой выглядит вот так:

Гирлянда со звездой выглядит

Основные возможности самодельной смарт-гирлянды:

1. 15 световых эффектов.

2. Возможность изменить набор режимов из предустановленных 55, которые устанавливаются с библиотекой WS2812FX. Достаточно выбрать номер режима и нужный эффект. Список доступных эффектов будет ниже.

3. Авто режим. Автоматически переключает режимы по кругу. Продолжительность одного режима настраивается в прошивке.

4. Настройка скорости эффектов.

5. Настройка яркости.

6. Управление сенсорной кнопкой: переключение режимов и изменение яркости.

7. Выбор цвета по умолчанию. Некоторые режимы используют один цвет, этот цвет и можно изменить. Палитра из 6 цветов.

Более подробное описание программы и приложения читайте ниже.

Для обсуждения сделал темуна форуме. Ваше мнение и предложения помогут улучить гирлянду, возможно, это будет что-то больше, чем Новогодняя смарт-гирлянда.


Первая версия новогодней гирлянды с управлением со смартфона.

В прошлом году, перед самым новым годом, спаял из адресных светодиодов новогоднюю гирлянду .

В прошлом году, перед самым новым годом, спаял из адресных светодиодов новогоднюю гирлянду.

И сделал простое приложение для управления.

 простое приложение для управления

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


Доработка гирлянды.

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

нарезать из матового оргстекла квадратики, чтобы обклеить каждый светодиод с двух сторон, для рассеивания света

Звезда на елке у меня уже 2, или даже 3 года, покупал в Фикс прайсе .

Звезда на елке у меня уже 2, или даже 3 года, покупал в Фикс прайсе.

Светит она достаточно тускло и при работе гирлянды такой тусклый свет практически не видно. Поэтому разобрал звезду и спаял 5 адресных светодиодов WS2812 , установил по светодиоду на каждый луч звезды.

спаял 5 адресных светодиодов WS2812, установил по светодиоду на каждый луч звезды.

Вот, что получилось. Светит звезда достаточно ярко .

Светит звезда достаточно ярко

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


Доработка электроники

Первая версия гирлянды подключалась к NodeMCU и питание подавалось прямо на разъем отладочной платы. Не было ни какой коробки, плата так и висела в воздухе, благо размер маленький и ее не было видно, по крайней мере, если не смотреть туда, куда ходят провода от блока питания.

Поэтому решил в этом году все спрятать в белую коробку.

Поэтому решил в этом году все спрятать в белую коробку. Благо NodeMCU помещается в данную коробку с точностью до миллиметра. Сделал разъем 5,5 мм для подключения питания. Кроме этого, решил установить кнопку с фиксацией для включения гирлянды, и сенсорную кнопку для переключения режимов.

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

Так как во время праздника телефон не всегда под рукой. Да и ребенку хочется самому поуправлять гирляндой.

Собрал все вот по такой схеме.

Собрал все вот по такой схеме.

Android приложение для управления смарт-гирляндой .

Приложение для Android переписал полностью. Также как и в первом варианте есть 2 страницы.

Основная, на которой производим управление светодиодами. И Страница настроек.

Настройки.

Первое, что нам нужно, - это установить ip адрес нашей гирлянды . Как его узнать расскажу в описании прошивки.

 ip адрес нашей гирлянды

Также у нас есть выбор режимов для гирлянды.

Также у нас есть выбор режимов для гирлянды.

Выбираем номер режима и в поле «Название эффекта» покажет какой эффект у вас установлен.

Пишем номер эффекта от 1 до 55 и нажимаем на круглую кнопку со стрелками. После чего название эффекта должно смениться на новое.

И так можно изменить все 15 режимов. Количество режимов можно увеличить или уменьшить. Это делается в прошивке в среде Arduino IDE .

Список доступных эффектов. На английском.

1. Blink - Normal blinking. 50% on/off time.
2. Breath - Does the "standby-breathing" of well known i-Devices. Fixed Speed.
3. Color Wipe - Lights all LEDs after each other up. Then turns them in that order off. Repeat.
4. Color Wipe Inverse - Same as Color Wipe, except swaps on/off colors.
5. Color Wipe Reverse - Lights all LEDs after each other up. Then turns them in reverse order off. Repeat.
6. Color Wipe Reverse Inverse - Same as Color Wipe Reverse, except swaps on/off colors.
7. Color Wipe Random - Turns all LEDs after each other to a random color. Then starts over with another color.
8. Random Color - Lights all LEDs in one random color up. Then switches them to the next random color.
9. Single Dynamic - Lights every LED in a random color. Changes one random LED after the other to a random color.
10. Multi Dynamic - Lights every LED in a random color. Changes all LED at the same time to new random colors.
11. Rainbow - Cycles all LEDs at once through a rainbow.
12. Rainbow Cycle - Cycles a rainbow over the entire string of LEDs.
13. Scan - Runs a single pixel back and forth.
14. Dual Scan - Runs two pixel back and forth in opposite directions.
15. Fade - Fades the LEDs on and (almost) off again.
16. Theater Chase - Theatre-style crawling lights. Inspired by the Adafruit examples.
17. Theater Chase Rainbow - Theatre-style crawling lights with rainbow effect. Inspired by the Adafruit examples.
18. Running Lights - Running lights effect with smooth sine transition.
19. Twinkle - Blink several LEDs on, reset, repeat.
20. Twinkle Random - Blink several LEDs in random colors on, reset, repeat.
21. Twinkle Fade - Blink several LEDs on, fading out.
22. Twinkle Fade Random - Blink several LEDs in random colors on, fading out.
23. Sparkle - Blinks one LED at a time.
24. Flash Sparkle - Lights all LEDs in the selected color. Flashes single white pixels randomly.
25. Hyper Sparkle - Like flash sparkle. With more flash.
26. Strobe - Classic Strobe effect.
27. Strobe Rainbow - Classic Strobe effect. Cycling through the rainbow.
28. Multi Strobe - Strobe effect with different strobe count and pause, controlled by speed setting.
29. Blink Rainbow - Classic Blink effect. Cycling through the rainbow.
30. Chase White - Color running on white.
31. Chase Color - White running on color.
32. Chase Random - White running followed by random color.
33. Chase Rainbow - White running on rainbow.
34. Chase Flash - White flashes running on color.
35. Chase Flash Random - White flashes running, followed by random color.
36. Chase Rainbow White - Rainbow running on white.
37. Chase Blackout - Black running on color.
38. Chase Blackout Rainbow - Black running on rainbow.
39. Color Sweep Random - Random color introduced alternating from start and end of strip.
40. Running Color - Alternating color/white pixels running.
41. Running Red Blue - Alternating red/blue pixels running.
42. Running Random - Random colored pixels running.
43. Larson Scanner - K.I.T.T.
44. Comet - Firing comets from one end.
45.Fireworks - Firework sparks.
46. Fireworks Random - Random colored firework sparks.
47. Merry Christmas - Alternating green/red pixels running.
48. Fire Flicker - Fire flickering effect. Like in harsh wind.
49. Fire Flicker (soft) - Fire flickering effect. Runs slower/softer.
50. Fire Flicker (intense) - Fire flickering effect. More range of color.
51. Circus Combustus - Alternating white/red/black pixels running.
52. Halloween - Alternating orange/purple pixels running.
53. Bicolor Chase - Two LEDs running on a background color (set three colors).
54. Tricolor Chase - Alternating three color pixels running (set three colors).
55. ICU - Two eyes looking around.

Номер и название выводиться при выборе эффекта для режима.

Номер и название выводиться при выборе эффекта для режима.

Если кто-то готов помочь с переводом режимов, буду благодарен.


Основная страница.

Тут, я думаю, все понятно. Стрелочки влево и вправо это выбор режима. Переключатель «Авто» включает или выключает Авто режим.

Переключатель «Авто» включает или выключает Авто режим.

Верхний бегунок - настройка яркости. Второй бегунок - настройка скорости эффектов.

«Цвет по умолчанию» — это выбор цвета для режимов, где используется один цвет.

Набор режимов сохраняется в энергонезависимую память микроконтроллера, и он не сбрасывается при выключении гирлянды. Остальные настройки хранятся в приложении телефона, поэтому стартовый цвет и авто режим при отключении гирлянды всегда будет сбрасываться.


Скетч для NodeMCU

Для того, чтобы загрузить прошивку в NodeMCU Необходимо:

1. Установить Arduino IDE. Как это сделать читайте тут: Программа Arduino IDE бесплатно для Windows, Mac OS, linux. Прошиваем Arduino

2. Настроить Arduino IDE для работы с NodeMCU: Что такое NodeMCU? Программируем в среде Arduino IDE

3. Установить библиотеки: WS2812FX, ESP_EEPROM. Скачать их можно внизу страницы, там же и все исходники.

4. Скачать прошивку, архивы внизу страницы, настроить все необходимые параметры.

Для подключения к вашей Wi-Fi сети нужно заполнить поля:

    String _ssid     = "Wi-Fi"; // Для хранения SSID
    String _password = "1234567"; // Для хранения пароля сети

Указав логин и пароль от вашей Wi-Fi сети.

Если эти поля не заполнять, то NodeMCU поднимет точку доступа с параметрами:

    IPAddress apIP(192, 168, 4, 1);
    String _ssidAP = "PortalPKGarland";   // SSID AP точки доступа
    String _passwordAP = "012345"; // пароль точки доступа

То есть в списке wi-fi сетей появится сеть " PortalPKGarland". Пароль для подключения к которой будет "012345". В таком случае в приложении нужно указать вот такой IP адрес: «192.168.4.1».

Как узнать ip если мы подключились к действующей wi-fi сети?

Для этого откройте монитор порта в Arduino IDE.

монитор порта в Arduino IDE.

И нажмите на кнопку RST на плате NodeMCU. На монитор порта выйдет информация.

Это Ip вашей гирлянды, его нужно указать в настройке приложения для управления умной гирляндой.

Приложение и исходники внизу страницы, для скачивания вам необходимо зарегистрироваться на сайте.

Устанавливайте приложения и пользуйтесь.

Управлять можно не только гирляндой , но и лентой на адресных светодиодах WS2812b. У меня на окне висит такая. Поэтому планирую дописать приложение для управления несколькими устройствами. В моем случает, это светодиодная лента и гирлянда. Конечно, можно пользоваться и так, но есть пару моментов, которые затруднят быструю и эффективную работу. А именно придется вручную переписывать Ip адрес устройства. А также нет обратной связи от устройств. Как я написал выше, часть настроек храниться в приложении, это приведет к синхронизации различных параметров обоих устройств.


Для обсуждения и ваших предложений сделал тему на форуме. Ваше мнение и предложения помогут улучшить гирлянду, возможно это будет что-то больше чем Новогодняя гирлянда.

Скоро будет продолжение. не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем проекте.

]]>
#15.2 Дисплей SSD1306. Вывод растрового изображения. http://portal-pk.ru/news/234-displei-ssd1306-vyvod-rastrovogo-izobrazheniya-na-ekrane.html Константин Portal-PK 2019-12-03T11:58:55+03:00 На OLED-дисплее SSD1306 можно отображать одноцветные растровые изображения размером 128×64 пикселя.

Первое, что нужно сделать, это изменить размер фотографии или изображения, и сохранить его в виде монохромного растрового изображения. Если вы находитесь на ПК с Windows, вы можете использовать Paint.

Для урока понадодиться:

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

изображение водяного знака для сайта

свою фотографию

Как сделать свое изображение.

В сети есть множество инструментов для преобразования изображений в массив байт. Какие-то из них необходимо устанавливать, есть даже те, что работают онлайн. Кстати, такой формат изображений называется X-Bitmap. Я же буду использовать бесплатную программу LCD Image Converter. Данная программа умеет конвертировать картинки в массив данных для вывода изображений на дисплей, например на OLED-дисплей SSD1306. Программа из коробки имеет русский язык , достаточно его выбрать по умолчанию.

бесплатную программу LCDImage Converter

Затем в программе LCD Image Converter выберете «Новое изображение».

Затем в программе LCD Image Converter выберете «Новое изображение».

В открывшемся окне укажите имя, я оставил по умолчанию.

В открывшемся окне укажите имя, я оставил по умолчанию.

Для загрузки изображения нажимаем Изображение → Импортировать .

Для загрузки изображения нажимаем Изображение

Вот так выглядит моя фотография до конвертирования. Нажимаем «Преобразование»

Вот так выглядит моя фотография до конвертирования

Здесь вам нужно произвести настройки программы LCD Image Converter, как показано на картинке ниже.

Здесь вам нужно произвести настройки программы LCD Image Converter

настройки программы LCD Image Converter

Также измените параметры на вкладке «Изображения»

Также измените параметры на вкладке «Изображения»

Настройки программы LCD Image Converter на этом закончились. Сейчас можно преобразовать ваше изображение для вывода на дисплей для Arduino проектов.

преобразовать ваше изображение для вывода на дисплей для Arduino проектов.

Укажите имя файла и тип файла «.с» и сохраните файл.

Укажите имя файла и тип файла «.с» и сохраните файл.


Код Arduino для вывода растрового изображения на SSD1306 дисплей.

Файл, который вы получили содержит массив «C» с изображением. Откройте этот файл в текстовом редакторе и скопируйте массив.

static const uint8_t image_data_Image[1024] = {
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x05, 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3b, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xef, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xf6, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xdf, 0xdb, 0xab, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x22, 0xb4, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x00, 0xaa, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x00, 0x58, 0x01, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x00, 0x78, 0x55, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8d, 0x80, 0x7c, 0x02, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x20, 0xbc, 0x01, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8d, 0xa2, 0xfe, 0x0f, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xd4, 0xff, 0x57, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xd7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xaa, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb, 0x90, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0x51, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x80, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x00, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x50, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x02, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xf5, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x80, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0x80, 0xa3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa3, 0x43, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xbf, 0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x49, 0x46, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xa2, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf7, 0xab, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfe, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xee, 0xbf, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xfe, 0xfb, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xbf, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0d, 0xff, 0xeb, 0xff, 0xe8, 0x7f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xfe, 0xff, 0xfd, 0x01, 0xf7, 0xef, 0xdf, 0xbf, 
    0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xfe, 0xff, 0x77, 0xff, 0xfa, 0x00, 0x1f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x4b, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x6b, 0x07, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0x7f, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfc, 0x40, 0x3d, 0x03, 0xff, 0xff, 0xff, 0xf0, 0xfd, 0xef, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfb, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0xe4, 0x18, 0x10, 0x3f, 0xff, 0xff
};

Вставьте массив в скетч. Затем, чтобы отобразить массив, используйте drawBitmap() метод, который принимает следующие аргументы (х, у, массив изображения, ширина изображения, высота изображения, вращение). Координаты (x, y) определяют место начала отображения изображения.

Код в среде Arduino IDE будет выглядит вот так.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
static const uint8_t image_data_Image[1024] = {
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x05, 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3b, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xef, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xf6, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xdf, 0xdb, 0xab, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x22, 0xb4, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x00, 0xaa, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x00, 0x58, 0x01, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x00, 0x78, 0x55, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8d, 0x80, 0x7c, 0x02, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x20, 0xbc, 0x01, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8d, 0xa2, 0xfe, 0x0f, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xd4, 0xff, 0x57, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xd7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xaa, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb, 0x90, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0x51, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x80, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x00, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x50, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x02, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xf5, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x80, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0x80, 0xa3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa3, 0x43, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xbf, 0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x49, 0x46, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xa2, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf7, 0xab, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfe, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xee, 0xbf, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xfe, 0xfb, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xbf, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0d, 0xff, 0xeb, 0xff, 0xe8, 0x7f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xfe, 0xff, 0xfd, 0x01, 0xf7, 0xef, 0xdf, 0xbf, 
    0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xfe, 0xff, 0x77, 0xff, 0xfa, 0x00, 0x1f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x4b, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x6b, 0x07, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0x7f, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfc, 0x40, 0x3d, 0x03, 0xff, 0xff, 0xff, 0xf0, 0xfd, 0xef, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfb, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0xe4, 0x18, 0x10, 0x3f, 0xff, 0xff
};
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000); // Pause for 2 seconds
  // Clear the buffer.
  display.clearDisplay();
  // Draw bitmap on the screen
  display.drawBitmap(0, 0, image_data_Image3, 128, 64, 1);
  display.display();
}
void loop() { 
}

Но работать он будет только на NodeMCU.

Но работать он будет только на NodeMCU.

Arduino, даже семейство MEGA, не сможет отобразить ваше изображение. Это связано с тем, что нужно добавить PROGMEM, которая дает понять компилятору, что данную переменную необходимо хранить во flash памяти, а не в SRAM. Подробнее про PROGMEM можете прочитать тут.

У нас было:

static const uint8_t image_data_Image[1024]

Должно быть вот так:

static const PROGMEM uint8_t image_data_Image[1024]

Код вывода растровых изображений на дисплей SSD1306 для Arduino будет вот таким.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

static const PROGMEM uint8_t image_data_Image3[1024] = {
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x05, 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3b, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xef, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xf6, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xdf, 0xdb, 0xab, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x22, 0xb4, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x00, 0xaa, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x00, 0x58, 0x01, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x00, 0x78, 0x55, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8d, 0x80, 0x7c, 0x02, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x20, 0xbc, 0x01, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8d, 0xa2, 0xfe, 0x0f, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xd4, 0xff, 0x57, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xd7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xaa, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb, 0x90, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0x51, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x80, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x00, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x50, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x02, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xf5, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x80, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0x80, 0xa3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa3, 0x43, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xbf, 0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x49, 0x46, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xa2, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf7, 0xab, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfe, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xee, 0xbf, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xfe, 0xfb, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xbf, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0d, 0xff, 0xeb, 0xff, 0xe8, 0x7f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xfe, 0xff, 0xfd, 0x01, 0xf7, 0xef, 0xdf, 0xbf, 
    0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xfe, 0xff, 0x77, 0xff, 0xfa, 0x00, 0x1f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x4b, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x6b, 0x07, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0x7f, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfc, 0x40, 0x3d, 0x03, 0xff, 0xff, 0xff, 0xf0, 0xfd, 0xef, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfb, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0xe4, 0x18, 0x10, 0x3f, 0xff, 0xff
};
 
void setup() {
  Serial.begin(115200);
 
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000); // Pause for 2 seconds
 
  // Clear the buffer.
  display.clearDisplay();
  
  // Draw bitmap on the screen
  display.drawBitmap(0, 0, image_data_Image3, 128, 64, 1);
  display.display();
}
 
void loop() {
  
}

Загрузите в Arduino NANO и получите результат.

Загрузите в Arduino NANO и получите результат.

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

Если вы уменьшите растровое изображение

Для нормального отображения картинки и фото, редактируйте их перед тем, как конвертировать. Программа для редактирования растровой графики GIMP может конвертировать изображения с расширением .xbm, а это то, что нам нужно для дисплея. Правда, я не дружу с подобными программами.

Подправил я картинку, и вот что получилось.

GIMP может конвертировать изображения с расширением .xbm

Не идеально, но уже лучше. При необходимости, это можно довести до ума, даже с моими знаниями работы с растровой графикой.


На этом цикл уроков по дисплею SSD1306 заканчиваю. Если есть вопросы и предложения по урокам, пишите в комментариях .

Предыдущие уроки по дисплею SSD1306:

#15Дисплей SSD1306 подключаем к Arduino. Выводимтекст, рисуем фигуры.

#15.1SSD1306 OLED-дисплей, вывод текста на русскомязыке в Arduino IDE

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#15.1 SSD1306 OLED-дисплей, вывод текста на русском языке в Arduino IDE http://portal-pk.ru/news/233-ssd1306-oled-displei-vyvod-teksta-na-russkom-yazyke-v-arduino-ide.html Константин Portal-PK 2019-11-28T09:03:55+03:00 Как и обещал в предыдущем уроке ДисплейSSD1306 подключаем к Arduino. Выводим текст,рисуем фигуры. расскажу, как вывести текст на русском языке на 0,96-дюймовый SSD1306 OLED-дисплей в среде Arduino IDE.

 вывести текст на русском языке на 0,96-дюймовый SSD1306 OLED-дисплей в среде Arduino IDE

Для урока понадодиться:

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

1. Установить библиотеки Adafruit : библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX . Как их установить, я рассматривал в предыдущем уроке.

2. Скачать файл glcdfont.c и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library. У вас путь до библиотеки может отличаться.

3. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

<code>/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
</code>

4. Добавить в блок void setup() {} следующую строчку кода.

<code>display.cp437(true);
</code>

5. При выводе русского текста использовать функцию utf8rus().

За основу возьмите скетч из урока 15. вывод “Hello, world!” на OLED-дисплей .

И сделайте все по инструкции выше . Замените строчку

<code>display.println("Hello,world!");
</code>

на

<code>display.println(utf8rus("Привет МИР!"));
</code>

В итоге. у вас должен получится код:

<code>#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println("SSD1306 allocation failed");
    for(;;);
  }
  delay(2000);
  display.cp437(true);
  display.clearDisplay();
  display.setTextSize(1);             
  display.setTextColor(WHITE);        
  display.setCursor(0,20);             
  display.println(utf8rus("Привет МИР!"));
  display.display();
  delay(2000); 
}
void loop() {
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
</code>

Вы уже умеете работать с выводом теста на дисплей

Вы уже умеете работать с выводом теста на дисплей , поэтому сможете отформатировать его: изменить размер текста и расположить по центру дисплея , чтобы получилось вот так.

изменить размер текста и расположить по центру дисплея

Скетч данного примера будет вот таким.

<code>#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.cp437(true);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(27, 0);
  // Display static text
  display.setTextSize(2); // Draw 2X-scale text
  display.println(utf8rus("Привет"));
    display.setCursor(32, 30);
  // Display static text
  display.setTextSize(3); // Draw 3X-scale text
  display.println(utf8rus("МИР!"));
  display.display(); 
}
void loop() {
}
/* Recode russian fonts from UTF-8 to Windows-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
</code>

Ниже скетч вывода русского алфавита и вывода некоторых спец символов на 0,96-дюймовый SSD1306 OLED-дисплем в среде Arduino IDE :

<code>#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println("SSD1306 allocation failed");
    for(;;);
  }
  delay(2000);
  display.cp437(true);
  display.clearDisplay();
  display.setTextSize(1);             
  display.setTextColor(WHITE);        
  display.setCursor(0,0);             
  display.println(utf8rus("АБВГДЕЖЗИЙКЛМНОП"));
  display.println(utf8rus("РСТУФХЦЧШЩЪЫЬЭЮЯ"));
  display.println(utf8rus("абвгдежзийклмноп"));
  display.println(utf8rus("рстуфхцчшщъыьэюя"));
  display.println(utf8rus("Ёё123ABCabc!@#\xBC\xBD"));
  display.println(utf8rus("10\x83 10\x8A\x82 10\x81\x80 2\x85"));
  display.display();
  delay(2000); 
}
void loop() {
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
</code>

вывода русского алфавита и вывода некоторых спец символов на 0,96-дюймовый SSD1306 OLED-дисплем в среде Arduino IDE

И напоследок, вот такой пример вывода спец символов букв и цифр , найден на просторах интернета.

<code>#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
unsigned char i1,i2,c3;
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.cp437(true);
  display.clearDisplay();
}
void loop() {
  TEST_display_1();
  delay(10000);
  TEST_display_2();
  delay(10000);
  TEST_display_3();
  delay(8000);
  TEST_display_4();
  delay(4000);
}
void TEST_display_1()
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  for(i1=0; i1<8; i1++) {
    for(i2=0; i2<16; i2++) {
      c3=i1*16+i2;
      if(c3 == 0x0A || c3 == 0x0D) display.print(" ");
      else display.write(c3);
    }
    display.println("");
  }
  display.display();
}
void TEST_display_2()
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  for(i1=8; i1<16; i1++) {
    for(i2=0; i2<16; i2++)
      display.write(i1*16+i2);
    display.println("");
  }
  display.display();
}
void TEST_display_3()
{
  display.clearDisplay(); 
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.println(utf8rus("АБВГДЕЖЗИЙКЛМНОП"));
  display.println(utf8rus("РСТУФХЦЧШЩЪЫЬЭЮЯ"));
  display.println(utf8rus("абвгдежзийклмноп"));
  display.println(utf8rus("рстуфхцчшщъыьэюя"));
  display.println(utf8rus("Ёё123ABCabc!@#\xBC\xBD"));
  display.println(utf8rus("10\x83 10\x8A\x82 10\x81\x80 2\x85"));
  display.display();  
}
void TEST_display_4()
{
  display.clearDisplay(); 
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.setTextSize(1);
  display.println(utf8rus("Размер шрифта 1"));
  display.setTextSize(2);
  display.println(utf8rus("Размер 2"));
  display.setTextSize(3);
  display.println(utf8rus("Разм 3"));
  display.display();  
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
</code>

 вывода русского алфавита работает не только с SSD1306, но и с дисплеем Nokia 5110 (PCD8544), и с дисплеем 2.8" TFT Touch Shield 320x240

 вывода русского алфавита работает не только с SSD1306, но и с дисплеем Nokia 5110 (PCD8544), и с дисплеем 2.8" TFT Touch Shield 320x240

Данный метод вывода русского алфавита работает не только с SSD1306, но и с дисплеем Nokia 5110 (PCD8544), и с дисплеем 2.8" TFT Touch Shield 320x240.

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

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#15 Дисплей SSD1306 подключаем к Arduino. Выводим текст, рисуем фигуры. http://portal-pk.ru/news/232-displei-ssd1306-podklyuchaem-k-arduino-vyvodim-tekst-risuem.html Константин Portal-PK 2019-11-22T12:05:44+03:00 В этом уроке расскажу, как работать с 0,96-дюймовый SSD1306 OLED-дисплем в среде Arduino IDE . Покажу как вывести текст и нарисовать фигуры . Как выводить текст на русском языке покажу в следующем уроке.

Для урока понадодиться:

OLED-дисплей, который я буду использовать в этом уроке, - это модель SSD1306: 0,96-дюймовый с разрешением 128×64 пикселя, как показано на фото ниже.

0,96-дюймовый SSD1306 OLED-дисплем

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

Дисплей поможет вам автоматизировать ваше производства, а полиэтиленовый рукав поковать вашу продукцию. Где полиэтиленовый рукав купить ? На сайте МТ-ПАК ТОРГ.

SSD1306 OLED-дисплем в среде Arduino IDE

Модель, которую я использую, имеет четыре контакта и взаимодействует с любым микроконтроллером, используя протокол связи I2C. Есть, которые используют протокола связи SPI. Есть модели, которые поставляются с дополнительным выводом сброса.

Технические параметры дисплея SSD1306:

  • Технология дисплея: OLED
  • Разрешение дисплея: 128 на 64 точки
  • Диагональ дисплея: 0,96 дюйма
  • Угол обзора: 160°
  • Напряжение питания: 2.8 В ~ 5.5 В
  • Мощность: 0,08 Вт
  • Габариты: 27.3 мм х 27.8 мм х 3.7 мм

Дисплей OLED SSD1306 Описание подключения.
Поскольку OLED-дисплей использует протокол связи I2C, подключение очень простое. Как подключить к Arduino UNO или Arduino NANO смотрите в таблице ниже.

Pin

Arduino UNO или Arduino NANO

Vin

5v

GND

GND

SCL

A5

SDA

A4

Схема подключения SSD1306 к Arduino UNO

Схема подключения SSD1306 к Arduino UNO

Установка библиотеки SSD1306 OLED

Существует несколько библиотек, доступных для управления OLED-дисплеем. В этом уроке я буду использовать две библиотеки Adafruit: библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX .

Для установки этих библиотек выполните следующие действия.
1. Откройте Arduino IDE и перейдите в раздел Скетч > Подключить библиотеку > управление библиотеками.

Должен открыться менеджер библиотеки.

2. Укажите “ SSD1306” в поле поиска, выберете из списка и установите библиотеку от Adafruit SSD1306

Должен открыться менеджер библиотеки.

3. Аналогично установите вторую библиотеку, для этого в поле поиска укажите “ GFX

Аналогично установите вторую библиотеку, для этого в поле поиска укажите “GFX”

4. После установки библиотеки перезагрузите среду разработки Arduino.


Тестирование OLED-дисплея
После подключения OLED-дисплея к Arduino и установки всех необходимых библиотек, вы можете использовать один пример из библиотеки, чтобы увидеть, все ли работает правильно.

В вашей среде разработки Arduino, выберите Файл > Примеры > Adafruit SSD1306 и выберете тип вашего дисплея. В моем случае это 128х64_i2c.

Вот код примера для моего дисплея SSD1306

Вот код примера для моего дисплея SSD1306

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES     10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT   16
#define LOGO_WIDTH    16
static const unsigned char PROGMEM logo_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000 };
void setup() {
  Serial.begin(9600);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  // Show initial display buffer contents on the screen --
  // the library initializes this with an Adafruit splash screen.
  display.display();
  delay(2000); // Pause for 2 seconds
  // Clear the buffer
  display.clearDisplay();
  // Draw a single pixel in white
  display.drawPixel(10, 10, SSD1306_WHITE);
  // Show the display buffer on the screen. You MUST call display() after
  // drawing commands to make them visible on screen!
  display.display();
  delay(2000);
  // display.display() is NOT necessary after every single drawing command,
  // unless that's what you want...rather, you can batch up a bunch of
  // drawing operations and then update the screen all at once by calling
  // display.display(). These examples demonstrate both approaches...
  testdrawline();      // Draw many lines
  testdrawrect();      // Draw rectangles (outlines)
  testfillrect();      // Draw rectangles (filled)
  testdrawcircle();    // Draw circles (outlines)
  testfillcircle();    // Draw circles (filled)
  testdrawroundrect(); // Draw rounded rectangles (outlines)
  testfillroundrect(); // Draw rounded rectangles (filled)
  testdrawtriangle();  // Draw triangles (outlines)
  testfilltriangle();  // Draw triangles (filled)
  testdrawchar();      // Draw characters of the default font
  testdrawstyles();    // Draw 'stylized' characters
  testscrolltext();    // Draw scrolling text
  testdrawbitmap();    // Draw a small bitmap image
  // Invert and restore display, pausing in-between
  display.invertDisplay(true);
  delay(1000);
  display.invertDisplay(false);
  delay(1000);
  testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps
}
void loop() {
}
void testdrawline() {
  int16_t i;
  display.clearDisplay(); // Clear display buffer
  for(i=0; i<display.width(); i+=4) {
    display.drawLine(0, 0, i, display.height()-1, SSD1306_WHITE);
    display.display(); // Update screen with each newly-drawn line
    delay(1);
  }
  for(i=0; i<display.height(); i+=4) {
    display.drawLine(0, 0, display.width()-1, i, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  delay(250);
  display.clearDisplay();
  for(i=0; i<display.width(); i+=4) {
    display.drawLine(0, display.height()-1, i, 0, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  for(i=display.height()-1; i>=0; i-=4) {
    display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  delay(250);
  display.clearDisplay();
  for(i=display.width()-1; i>=0; i-=4) {
    display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  for(i=display.height()-1; i>=0; i-=4) {
    display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  delay(250);
  display.clearDisplay();
  for(i=0; i<display.height(); i+=4) {
    display.drawLine(display.width()-1, 0, 0, i, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  for(i=0; i<display.width(); i+=4) {
    display.drawLine(display.width()-1, 0, i, display.height()-1, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  delay(2000); // Pause for 2 seconds
}
void testdrawrect(void) {
  display.clearDisplay();
  for(int16_t i=0; i<display.height()/2; i+=2) {
    display.drawRect(i, i, display.width()-2*i, display.height()-2*i, SSD1306_WHITE);
    display.display(); // Update screen with each newly-drawn rectangle
    delay(1);
  }
  delay(2000);
}
void testfillrect(void) {
  display.clearDisplay();
  for(int16_t i=0; i<display.height()/2; i+=3) {
    // The INVERSE color is used so rectangles alternate white/black
    display.fillRect(i, i, display.width()-i*2, display.height()-i*2, SSD1306_INVERSE);
    display.display(); // Update screen with each newly-drawn rectangle
    delay(1);
  }
  delay(2000);
}
void testdrawcircle(void) {
  display.clearDisplay();
  for(int16_t i=0; i<max(display.width(),display.height())/2; i+=2) {
    display.drawCircle(display.width()/2, display.height()/2, i, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  delay(2000);
}
void testfillcircle(void) {
  display.clearDisplay();
  for(int16_t i=max(display.width(),display.height())/2; i>0; i-=3) {
    // The INVERSE color is used so circles alternate white/black
    display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);
    display.display(); // Update screen with each newly-drawn circle
    delay(1);
  }
  delay(2000);
}
void testdrawroundrect(void) {
  display.clearDisplay();
  for(int16_t i=0; i<display.height()/2-2; i+=2) {
    display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i,
      display.height()/4, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  delay(2000);
}
void testfillroundrect(void) {
  display.clearDisplay();
  for(int16_t i=0; i<display.height()/2-2; i+=2) {
    // The INVERSE color is used so round-rects alternate white/black
    display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i,
      display.height()/4, SSD1306_INVERSE);
    display.display();
    delay(1);
  }
  delay(2000);
}
void testdrawtriangle(void) {
  display.clearDisplay();
  for(int16_t i=0; i<max(display.width(),display.height())/2; i+=5) {
    display.drawTriangle(
      display.width()/2  , display.height()/2-i,
      display.width()/2-i, display.height()/2+i,
      display.width()/2+i, display.height()/2+i, SSD1306_WHITE);
    display.display();
    delay(1);
  }
  delay(2000);
}
void testfilltriangle(void) {
  display.clearDisplay();
  for(int16_t i=max(display.width(),display.height())/2; i>0; i-=5) {
    // The INVERSE color is used so triangles alternate white/black
    display.fillTriangle(
      display.width()/2  , display.height()/2-i,
      display.width()/2-i, display.height()/2+i,
      display.width()/2+i, display.height()/2+i, SSD1306_INVERSE);
    display.display();
    delay(1);
  }
  delay(2000);
}
void testdrawchar(void) {
  display.clearDisplay();
  display.setTextSize(1);      // Normal 1:1 pixel scale
  display.setTextColor(SSD1306_WHITE); // Draw white text
  display.setCursor(0, 0);     // Start at top-left corner
  display.cp437(true);         // Use full 256 char 'Code Page 437' font
  // Not all the characters will fit on the display. This is normal.
  // Library will draw what it can and the rest will be clipped.
  for(int16_t i=0; i<256; i++) {
    if(i == '\n') display.write(' ');
    else          display.write(i);
  }
  display.display();
  delay(2000);
}
void testdrawstyles(void) {
  display.clearDisplay();
  display.setTextSize(1);             // Normal 1:1 pixel scale
  display.setTextColor(SSD1306_WHITE);        // Draw white text
  display.setCursor(0,0);             // Start at top-left corner
  display.println(F("Hello, world!"));
  display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
  display.println(3.141592);
  display.setTextSize(2);             // Draw 2X-scale text
  display.setTextColor(SSD1306_WHITE);
  display.print(F("0x")); display.println(0xDEADBEEF, HEX);
  display.display();
  delay(2000);
}
void testscrolltext(void) {
  display.clearDisplay();
  display.setTextSize(2); // Draw 2X-scale text
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(10, 0);
  display.println(F("scroll"));
  display.display();      // Show initial text
  delay(100);
  // Scroll in various directions, pausing in-between:
  display.startscrollright(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrollleft(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrolldiagright(0x00, 0x07);
  delay(2000);
  display.startscrolldiagleft(0x00, 0x07);
  delay(2000);
  display.stopscroll();
  delay(1000);
}
void testdrawbitmap(void) {
  display.clearDisplay();
  display.drawBitmap(
    (display.width()  - LOGO_WIDTH ) / 2,
    (display.height() - LOGO_HEIGHT) / 2,
    logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);
  display.display();
  delay(1000);
}
#define XPOS   0 // Indexes into the 'icons' array in function below
#define YPOS   1
#define DELTAY 2
void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  int8_t f, icons[NUMFLAKES][3];
  // Initialize 'snowflake' positions
  for(f=0; f< NUMFLAKES; f++) {
    icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());
    icons[f][YPOS]   = -LOGO_HEIGHT;
    icons[f][DELTAY] = random(1, 6);
    Serial.print(F("x: "));
    Serial.print(icons[f][XPOS], DEC);
    Serial.print(F(" y: "));
    Serial.print(icons[f][YPOS], DEC);
    Serial.print(F(" dy: "));
    Serial.println(icons[f][DELTAY], DEC);
  }
  for(;;) { // Loop forever...
    display.clearDisplay(); // Clear the display buffer
    // Draw each snowflake:
    for(f=0; f< NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE);
    }
    display.display(); // Show the display buffer on the screen
    delay(200);        // Pause for 1/10 second
    // Then update coordinates of each flake...
    for(f=0; f< NUMFLAKES; f++) {
      icons[f][YPOS] += icons[f][DELTAY];
      // If snowflake is off the bottom of the screen...
      if (icons[f][YPOS] >= display.height()) {
        // Reinitialize to a random position, just off the top
        icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());
        icons[f][YPOS]   = -LOGO_HEIGHT;
        icons[f][DELTAY] = random(1, 6);
      }
    }
  }
}

Если ваш OLED дисплей не имеет pin сброса, вы должны установить переменную OLED_RESET в значение -1, как показано ниже.

#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)

Не забудьте выбрать нужную плату и COM порт в меню Инструменты.

Загрузите код в Arduino, после чего вы должны получить серию различных анимаций, как показано на фота ниже.


Если ваш OLED-дисплей ничего не показывает:
Убедитесь, что OLED-дисплей правильно подключен к Ардуино.
Также вы должны изменить OLED-адрес в следующей строке, например на 0x3D, если это необходимо. В моем случае адрес 0x3C.

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {


Вывод текста на дисплей

Библиотека Adafruit для OLED-дисплея поставляется с несколькими функциями для вывода текста. В этом разделе вы узнаете, как писать и прокручивать текст с помощью функций библиотеки.
“Hello, world!” OLED-дисплей
Следующий код отображает Hello, world! сообщение на дисплее.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println("SSD1306 allocation failed");
    for(;;);
  }
  delay(2000);
  display.setFont(&FreeSerif9pt7b);
  display.clearDisplay();
  display.setTextSize(1);             
  display.setTextColor(WHITE);        
  display.setCursor(0,20);             
  display.println("Hello, world!");
  display.display();
  delay(2000); 
}
void loop() {
}

После загрузки кода вот, что вы получите в вашем дисплее.

Следующий эскиз отображает Hello, world! сообщение на дисплее.


Рассмотрим скетч подробнее.

Импорт библиотек
Во-первых, вам нужно импортировать необходимые библиотеки. Библиотека для использования I2C и библиотеки Adafruit для вывода информации на дисплей: Adafruit_GFX и Adafruit_SSD1306

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Инициализация OLED-дисплея
Затем, вы определяете свою ширину и высоту дисплея. В этом примере я использую OLED-дисплей 128×64. Если вы используете другие размеры, вы можете изменить это в переменных SCREEN_WIDTH и SCREEN_HEIGHT

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Затем инициализируйте экранный объект, с шириной и высотой, определенными ранее с помощью протокола связи I2C (&Wire).

dafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

Параметр (-1) означает, что ваш OLED-дисплей не имеет pin сброса. Если ваш OLED-дисплей имеет пин сброса, то он должен быть подключен к GPIO. В этом случае вы должны передать номер GPIO.
В setup () инициализируйте последовательный монитор на скорости передачи данных 9600 бод для отладки.

Serial.begin(9600);

Инициализируйте OLED-дисплей с помощью метода begin() следующим образом

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
  Serial.println("SSD1306 allocation failed");
  for(;;); // Don't proceed, loop forever
}

Этот фрагмент выводит сообщение на последовательный монитор, если вы не можете подключиться к дисплею.

Так же, вам может потребоваться изменить адрес OLED. В моем случае адрес 0x3C.

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {

Рассказывал об этом выше.

После инициализации дисплея добавьте двухсекундную задержку, чтобы OLED имел достаточно времени для инициализации перед написанием текста.

delay(2000);

Очистить дисплей, установить размер шрифта, цвет и написать текст.

После инициализации дисплея очистите буфер дисплея с помощью метода clearDisplay().

 display.clearDisplay();

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

Установите размер шрифта с помощью метода setTextSize().

Установите цвет шрифта с помощью метода setTextColor().

display.setTextColor(WHITE);

WHITE устанавливает белый шрифт и черный фон.

Определите позицию, с которой начинается текст, используя метод setCursor(x, y). В этом случае, вы устанавливаете текст, чтобы начать с координат (0,10).

Наконец, можно отправить текст на дисплей с помощью метода println (), как показано ниже.

display.println("Hello, world!");

Затем, вам нужно вызвать метод display (), чтобы фактически отобразить текст на экране.

Наконец, можно отправить текст на дисплей с помощью метода println (), как показано ниже

Библиотека Adafruit OLED предоставляет полезные методы для легкой прокрутки текста.

startscrollright(0x00, 0x0F): прокрутка текста слева направо
startscrollleft(0x00, 0x0F): прокрутка текста справа налево

Следующий скетч реализует методы прокрутки текста:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  // Display static text
  display.println("Scrolling Hello");
  display.display(); 
  delay(100);
}
void loop() {
  // Scroll in various directions, pausing in-between:
  display.startscrollright(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrollleft(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
}


Нарисуйте фигуры на OLED-дисплее

Библиотека Adafruit OLED предоставляет полезные методы для рисования пикселей, линий и фигур. Давайте рассмотрим эти методы.

Чтобы нарисовать пиксель на OLED-дисплее, можно использовать метод drawPixel(x, y, color), который принимает в качестве аргументов координаты x и y, где появляется пиксель, и цвет. Например

display.drawPixel(64, 32, WHITE);

Чтобы нарисовать пиксель на OLED-дисплее

Нарисовать линию

Используйте метод drawLine(x1, y1, x2, y2, color) для создания линии. Координаты (x1, y1) указывают начало линии, а координаты (x2, y2) указывают, где заканчивается линия.

Например

display.drawLine(0, 0, 127, 20, WHITE);

Нарисовать линию

Нарисуйте прямоугольник

DrawRect (x, y, width, height, color) обеспечивает простой способ рисования прямоугольника. Координаты (x, y) указывают на верхний левый угол прямоугольника. Затем вам нужно указать ширину, высоту и цвет.

display.drawRect(10, 10, 50, 30, WHITE);

Вы можете использовать fillRect(x, y, width, height, color) для рисования заполненного прямоугольника. Этот метод принимает те же аргументы, что и drawRect.

Нарисуйте прямоугольник

Библиотека также предоставляет методы для отображения прямоугольников с закругленными углами : drawRoundRect () и fillRoundRect (). Эти методы принимают те же аргументы, что и предыдущие методы, плюс радиус угла. Например

display.drawRoundRect(10, 10, 30, 50, 2, WHITE);

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

Или заполненный со скругленными углами прямоугольник:

display.fillRoundRect(10, 10, 30, 50, 2, WHITE);

Чтобы нарисовать круг, используйте метод drawCircle(x, y, radius, color). Координаты (x, y) указывают на центр окружности. Вы также должны передать радиус в качестве аргумента. Например

display.drawCircle(64, 32, 10, WHITE);

Чтобы нарисовать круг

Таким же образом, чтобы построить заполненный круг, используйте метод fillCircle() с теми же аргументами:

display.fillCircle(64, 32, 10, WHITE);

Нарисуйте треугольник

Используйте метод drawTriangle(x1, y1, x2, y2, x3, y3, color) для построения треугольника. Этот метод принимает в качестве аргументов координаты каждого угла и цвет.

display.drawTriangle(10, 10, 55, 20, 5, 40, WHITE);

Нарисуйте треугольник

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

display.fillTriangle(10, 10, 55, 20, 5, 40, WHITE);

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

Инвертирование

Библиотека предоставляет дополнительный метод, который можно использовать с фигурами или текстом: метод invertDisplay (). Передайте true в качестве аргумента, чтобы инвертировать цвета экрана, или false, чтобы вернуться к исходным цветам.

Если вы вызываете следующую команду после определения треугольника

display.invertDisplay(true);

Вы получите черный треугольник, а фон будет подсвечен.

Библиотека предоставляет дополнительный метод, который можно использовать с фигурами или текстом

Код для рисование всех фигур
Загрузите следующий скетч в Arduino, который реализует каждый фрагмент кода, который я рассмотрел ранее, и выведет все фигуры.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000); // Pause for 2 seconds
  // Clear the buffer
  display.clearDisplay();
  // Draw a single pixel in white
  display.drawPixel(64, 32, WHITE);
  display.display();
  delay(3000);
  // Draw line
  display.clearDisplay();
  display.drawLine(0, 0, 127, 20, WHITE);
  display.display();
  delay(3000);
  // Draw rectangle
  display.clearDisplay();
  display.drawRect(30, 10, 50, 30, WHITE);
  display.display();
  delay(3000);
  // Fill rectangle
  display.fillRect(30, 10, 50, 30, WHITE);
  display.display();
  delay(3000);
  // Draw round rectangle
  display.clearDisplay();
  display.drawRoundRect(10, 10, 30, 50, 2, WHITE);
  display.display();
  delay(3000);
  // Fill round rectangle
  display.clearDisplay();
  display.fillRoundRect(10, 10, 30, 50, 2, WHITE);
  display.display();
  delay(3000);
  // Draw circle
  display.clearDisplay();
  display.drawCircle(64, 32, 10, WHITE);
  display.display();
  delay(3000);
  // Fill circle
  display.fillCircle(64, 32, 10, WHITE);
  display.display();
  delay(3000);
  // Draw triangle
  display.clearDisplay();
  display.drawTriangle(10, 10, 55, 20, 5, 40, WHITE);
  display.display();
  delay(3000);
  // Fill triangle
  display.fillTriangle(10, 10, 55, 20, 5, 40, WHITE);
  display.display();
  delay(3000);
  // Invert and restore display, pausing in-between
  display.invertDisplay(true);
  delay(3000);
  display.invertDisplay(false);
  delay(3000);
}
void loop() {
}

Планировал добавить вывод русского текста на дисплей SSD1306, но урок получился и так большой. Поэтому вывод русского текст будет в следующем уроке.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.


]]>
Часы на Arduino и дисплее Nextion с выводом температуры и влажности. http://portal-pk.ru/news/231-chasy-na-arduino-i-displee-nextion-s-vyvodom-temperatury-i.html Константин Portal-PK 2019-11-14T14:07:05+03:00 Медленно, но верно разрабатываю часы на Arduino с дисплеем Nextion, с выводом температуры и влажности. Данные часы не ограничатся функционалом, о котором расскажу в данной статье. Будут еще 2-3 этапа доработки проекта на Arduino и сенсорным дисплеем Nextion. Скетч и прошивку для дисплея можно скачать внизу статьи. Для этого вам нужно зарегистрироваться на сайте Portal-PK.ru.

часы на Arduino с дисплеем Nextion

Так как проект будет модернизироваться и конечный набор элементов пока не известен, корпус решил сделать максимально простым и экономичным. Взял банку из под чипсов.

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

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

1. Обклеили скотчем.

Обклеили скотчем.

2. Покрасили из баллончика.

Обклеили скотчем.

Опрос в нашей группе «В Контакте» показал, что покрашенный корпус для часов нравится больше , поэтому используем именно его для примера. В качестве ножек использовал болты М6.


Электронные комплектующие , которые я использовал при создании часов на Arduino с дисплеем Nextion:

1. Arduino Nano V3.0 (ATmega328). Версия Arduino Nano V2.0 (ATmega168) не подойдет, так как для текущего функционала недостаточно памяти.

2. Дисплей Nextion 2,8 дюйма. Можно и другого размера.

3. Датчик температуры и влажности SHT3x (SHT31) .

4. Часы реального времени (RTC) DS3231, я использовал версию mini.

5. Разъем 5.5 мм, для подключения питания часов.

Соединяем электронику часов по схеме :

Соединяем электронику часов на Arduino с дисплеем Nextion по схеме

Электроника на макетной плате выглядит так.

Электроника на макетной плате выглядит так.

После чего осталось установить все в корпус. Пару винтов, гаек, термоклей, изолента и часы готовы.

После чего осталось установить все в корпус

Собрать электронику можно без пайки . Для этого я использовал соединительные разъемы 2,54 мм. Правда паяльник все же пришлось взять в руки, так как нужно припаять провода питания к разъему 5,5 мм . А так же Arduino NANO у меня была без ножек.

Правда паяльник все же пришлось взять в руки, так как нужно припаять провода питания к разъему 5,5 мм.

На данный момент часы умеют:

1. Выводить дату и время в энергосберегающем режиме. Как я его назвал «Экран бездействия». На него часы переключаются автоматически по истечению 30 сек, если вы ни чего не делаете.

2. На основном экране кроме даты и времени выводить температуру и влажность . А также дополнительное меню, в котором, на данный момент, работает только одна кнопка настроек часов.

3. Выводить меню настроек часов . Тут не все так прост. Есть две кнопки, в виде стрелок, вверх и вниз. Если активна стрелка вверх, то при нажатии на любое значение даты или времени, оно будет увеличиваться. А если нажать кнопку вниз, то все значения даты и времени будут уменьшаться. Возможно, не очень удачная реализация. Напишите ваше мнение в комментарии.

Вот такие замечательные часы на Arduino с дисплеем Nextion, с выводом температуры и влажности, получились.

Вот такие замечательные часы на Arduino с дисплеем Nextion, с выводом температуры и влажности , получились.

Скоро будет продолжение. не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем проекте.

]]>
#14 Подключаем к Arduino датчик влажности и температуры серии SHT3x (SHT31) http://portal-pk.ru/news/230-podklyuchaem-k--arduino-datchik-vlazhnosti-i-temperatury.html Константин Portal-PK 2019-11-08T08:45:21+03:00 Существует большое количество датчиков для Arduino, которые измеряют температуру и влажность. Сегодня я хотел бы рассказать про датчик серии SHT3x (SHT31). Данный сенсор достаточно новый и про него мало информации в сети интернет. После его проверки у меня остались положительные впечатления. Датчик достаточно точный и не сильно инерционный.

 датчик серии SHT3x (SHT31)

Точность этого модуля составляет ± 2% RH (для относительной влажности) и ± 0.3 °C (для температуры). Модуль осуществляет связь с последовательной шиной I2C и может работать со скоростью до 1 МГц.

Характеристики модуля температуры и влажности серии SHT3x :
- Входное напряжение (Vcc): 3.3 В или 5 В;
- I/O логический уровень: 3.3 В или 5 В (основывается на Vcc);
- Рабочий ток: 100 мА;
- Рабочая температура: -40...+125 ℃;
- Диапазон измерения температуры: -40...+125 ℃ ±0.3°C;
- Диапазон измерения RH: 0...100% ±2%;
- Сенсор: SHT31;


Уроки про другие датчики температуры и влажности:

Урок 10 - Датчик температуры DS18B20, подключаем к Arduino.

Урок 9 - Подключаем датчик температуры и влажности DHT11 к Arduino


Для данного урока нам понадобятся:

1. Arduino UNO или Arduino NANO .

2. Датчик SHT3x.

3. Беспаечная макетная плата .

4. Соединительные провода .

Подключаем к Arduino датчик влажности и температуры серии SHT3x (SHT31) по схеме:

Подключаем к Arduino датчик влажности и температуры серии SHT3x (SHT31) по схеме

Для работы нам понадобится библиотека Adafruit_SHT31.

Которую можно скачать тут.

После установки библиотеки, выберем пункт в меню Arduino IDE:

Файл > Примеры > Adafruit SHT31 Library > SHT31test

Adafruit SHT31 Library

Откроется вот такой скетч, который загружаем в Arduino.

#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
  Serial.begin(9600);
  while (!Serial)
    delay(10);     // will pause Zero, Leonardo, etc until serial console opens
  Serial.println("SHT31 test");
  if (! sht31.begin(0x44)) {   // Set to 0x45 for alternate i2c addr
    Serial.println("Couldn't find SHT31");
    while (1) delay(1);
  }
}
void loop() {
  float t = sht31.readTemperature();
  float h = sht31.readHumidity();
  if (! isnan(t)) {  // check if 'is not a number'
    Serial.print("Temp *C = "); Serial.println(t);
  } else { 
    Serial.println("Failed to read temperature");
  }
  if (! isnan(h)) {  // check if 'is not a number'
    Serial.print("Hum. % = "); Serial.println(h);
  } else { 
    Serial.println("Failed to read humidity");
  }
  Serial.println();
  delay(1000);
}

Откроем монитор порта и увидим вот такой результат:

Откроем монитор порта и увидим вот такой результат

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

Мое личное мнение:

Датчик мне понравился. При своих небольших габаритах работает достаточно точно и быстро.

Если вы считаете иначе, пишите в комментариях. Да просто пишите свое мнение о датчике, уроках и сайте. Ваше мнение помогает развивать сайт группу и канал.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
#13.4 Считывание данных с SD карты, и сохранение их как «переменные» http://portal-pk.ru/news/229-134-schityvanie-dannyh-s-sd-karty-i-sohranenie-ih-kak.html Константин Portal-PK 2019-11-07T08:36:39+03:00 Объем энергонезависимой памяти EEPROM в Arduino небольшой. И как же хранить больш ой объем данных без потери при перезагрузке? Для решения этой задачи на помощь приходит SD карта .

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

#13.1.Arduino SD карта. Создаем, удаляем файлы.Чтение, запись файлов.

Урок 13.3 Arduino строим графики по данным c sd карты.

Arduino без проблем может создавать, удалять файлы, а также записывать данные в файлы.

Для данного урока нам понадоб ятся:

1. Arduino UNO или Arduino NANO

2. Модуль SD карты .

3. Беспаечная макетная плата .

4. Соединительные провода .

Подключаем SD-модуль к Arduino UNO по такой схеме.

Подключаем SD-модуль к Arduino UNO по такой схеме.

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

    7,20;
    7,00;
    7,20;
    6,40;
    7,00;
    9,00;
    9,00;

Я использую символы: точка запятой - это конец строки, и запятая - это разделитель между значениями (разделители можно использовать любые).

Назовем файл config.txt. Установим карту памяти в SD-модуль.

Назовем файл config.txt. Установим карту памяти в SD-модуль.

Напишем небольшой скетч, который будет считывать данные с SD-карты и сохранять данные в «переменные». И выводить полученное расписание будильника на монитор порта.

#include <SPI.h>
#include <SD.h>
File myFile;
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 8;
//Массив времени будильника. Можем использовать в любой строчке кода
char* names[7][2];
void setup() 
{
  // Открыть последовательное соединение и ждать открытия порта:
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  // вызавим функцию для загрузки расписания будильника.
  configSD();
}
void loop() 
{
  // после завершения настройки ничего не делать.
}
void configSD() // функции чтения конфигурационного файла с SD
{
  // вспомогательные переменные
  int h = 0; 
  int q = 0;       
  int d=7;
  char array[d][10];
  char *buffer;
  char symbol2 = 0;
  File configFile = SD.open("config.txt");
  if (configFile) 
  {
      Serial.println("config.txt open OK");
      // файл существует считываем из него данные 
        while  (configFile.available())   
        {
          // считываем байт входящего файла
          symbol2 = configFile.read();
          if (symbol2==';') // символ конца строки
          {
            array[q][h]='\0'; 
            q++; 
            h=0; 
          }
          else // если еще не конец строки посимвольно добавляем 
          {
            array[q][h] = symbol2; 
            h++;
          }
          delay(2);
        }
      configFile.close(); // закрываем файл
  }
  char *p;
  byte t;
  // разберем полученные строки разделитель запятая
  for (int j=0; j < d; j++) 
  {
    t = 0;
    for( buffer = strtok_r(array[j], ",", &p); buffer; buffer = strtok_r(NULL, ",", &p) )
    {
      names[j][t]=buffer; // запишем в массив часы и мин.
      t++;
    }
  }
  for (byte j = 0; j < d; j++) { // Выведем данные в монитор порта 
// данные из массива names[j][0] можно использовать в коде. 
         Serial.print(names[j][0]); // вывод часов 
         Serial.print(":");         // разделитель
         Serial.print(names[j][1]); // вывод минут
     }
}

Давайте подробнее рассмотрим код.

Считывание файла с SD карты вынесено в отдельную функцию. Вызываем данную функцию в блоке void setup(). Так как нам достаточно 1 раз считать расписание будильника, сохранить в «переменную» и использовать в дальнейшем. При необходимости изменить расписание будильника можно повторно вызвав данную функцию.

// вызавим функцию для загрузки расписания будильника.
  configSD();

Массив char* names[7][2]; находится в разделе «глобальных переменных» не случайно. Так как данную «переменную» мы сможем использовать в любом месте кода, и, соответственно, получить расписание будильника .

// файл существует считываем из него данные 
       while  (configFile.available())   
        {
          // считываем байт входящего файла
          symbol2 = configFile.read();
          if (symbol2==';') // символ конца строки
          {
            array[q][h]='\0'; 
            q++; 
            h=0; 
          }
          else // если еще не конец строки посимвольно добавляем 
          {
            array[q][h] = symbol2; 
            h++;
          }
          delay(2);
        }
      configFile.close(); // закрываем файл

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

// разберем полученные строки разделитель запятая
  for (int j=0; j < d; j++) 
  {
    t = 0;
    for( buffer = strtok_r(array[j], ",", &p); buffer; buffer = strtok_r(NULL, ",", &p) )
    {
      names[j][t]=buffer; // запишем в массив часы и мин.
      t++;
    }
  }

В этом цикле мы разбираем наши строки на элементы разделенные запятой. И сохраняем в наш массив char* names[7][2];

Сейчас мы можем оперировать нашим расписанием.

Для обработки большего количества данных вы можете воспользоваться, например, Arduino MEGA

Давайте выведем в монитор порта наше расписание. Для этого напишем вот такой небольшой цикл:

  for (byte j = 0; j < d; j++) { // Выведем данные в монитор порта 
// данные из массива names[][] можно использовать в коде. 
         Serial.print(names[j][0]); // вывод часов 
         Serial.print(":");         // разделитель
         Serial.print(names[j][1]); // вывод минут
     }

Данный пример можно доработать, чтоб обрабатывать другое количество данных с SD карты средствами Arduino. Но вы должны помнить, что чем больше данных вы будете сохранять в «переменную», тем больше вам понадобится динамической памяти, которой не так и много в Arduino UNO или NANO . Для обработки большего количества данных вы можете воспользоваться, например, Arduino MEGA или другой отладочной платой с большим объемом динамической памяти.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
ESP32-CAM ov2640, потоковое видео в среде Arduino IDE. http://portal-pk.ru/news/228-esp32-cam-ov2640-potokovoe-video-v-srede-arduino-ide.html Константин Portal-PK 2019-11-05T13:26:12+03:00 Эта статья представляет собой краткое руководство по началу работы для платы ESP32-CAM. Я расскажу как настроить веб-сервер потокового видео менее, чем за 5 минут с помощью Arduino IDE.

Примечание: в этой статье я использую пример из библиотеки arduino-esp32, но не рассматриваю как его изменить.

ESP32-камера - это очень маленький модуль камеры с чипом ESP32-S

ESP32-камера - это очень маленький модуль камеры с чипом ESP32-S, который стоит около $ 10. Помимо камеры OV2640 и нескольких GPIO для подключения периферийных устройств, он имеет слот для карт microSD, который может быть полезен для хранения изображений, сделанных с помощью камеры, или хранения файлов.


Основные характеристики ESP32-CAM:

Беспроводной модуль - ESP32-S WiFi 802.11 b/g/n + модуль Bluetooth;

Внешнее хранилище - слот для карт micro- SD ёмкостью до 4 ГБ;

Поддержка камер OV2640 (продаётся с платой) или OV7670;

Формат изображения - JPEG (только OV2640), BMP, оттенки серого;

Светодиодная вспышка.

Контакты – 16 с интерфейсами UART, SPI, I2C, PWM

Напряжение питания - 5 В;

Потребляемая мощность:

  • при выключенной вспышке - 180 мА;
  • при включенной вспышке - 310 мА;
  • глубокий сон - 6 мА;
  • модем-сон - 20 мА;
  • лёгкий сон - 6,7 мА.

Размеры - 40,5 х 27 х 4,5 мм

Температурный диапазон:

  • рабочий: 20 – 85 ℃;
  • хранение: -40 - 90 ℃ при 90% относительной влажности.

Карты памяти на 4 Гб не было под рукой, поэтому проверить не получилось. Ставил на 16 Гб. Не сохраняет.

На следующем рисунке показаны выводы ESP32-CAM.

показаны выводы ESP32-CAM

Есть три вывода GND и два вывода для питания: 3.3 V, либо 5V.

GPIO 1 и GPIO 3 - это последовательные контакты. Вам нужны эти контакты, чтобы загрузить код на вашу плату. Кроме того, GPIO 0 играет важную роль, поскольку он определяет, находится ли ESP32 в режиме программирования или нет. Когда GPIO 0 подключен к GND, ESP32 находится в режиме программирования.


Для программирования ESP32-камеры понадобятся следующие компоненты:


Приступим к установке, настройке необходимого ПО и прошивке ESP32. Разделим вс ё на несколько этапов:

1. Установка дополнения ESP32
В этом примере я использую Arduino IDE для программирования платы ESP32-CAM. Установите Arduino IDE, и настройте работу с ESP32. Если этого у вас не сделано, воспользуетесь следующей инструкцией:

Установка, прошивка платы ESP32 в Arduino IDE (Windows, Mac OS X, Linux)

2. Пример Кода CameraWebServer
В среде Arduino IDE выберите пример для работы с камерой для этого перейдите:

Файл > Примеры > ESP32 > Camera>CameraWebServer

Пример Кода CameraWebServer

Откроется пример скетча работы с камерой ESP32:

Откроется пример скетча работы с камерой ESP32:

Если вы не можете найти данный пример, то можете его скачать с нашего сайта. Внизу статьи есть ссылка для скачивания материала. Внимание! Для того, чтобы скачать файлы с сайта вам нужно зарегистрироваться.

После загрузки распакуйте папку и откройте файл скетча для esp32 cam ov2640: CameraWebServer.ino.

Перед загрузкой прошивки в модуль ESP32 CAM необходимо указать ваши данные для подключения к Wi-Fi сети.

const char* ssid = "Имя_точки_wi-fi";
const char* password = "пароль_от_wi-fi";

Затем убедитесь, что вы выбрали правильный модуль камеры. В данном случае используйте модель AI-THINKER Model. Для этого закомментируйте все другие модели и раскомментируйте указанную ниже:

 данном случае используйте модель AI-THINKER Model.

#define CAMERA_MODEL_AI_THINKER

Теперь код готов к загрузке на вашу ESP32.

3. Прошивка ESP32-CAM

Для прошивки я использую самый недорогой TTL программатор. И всё прошивается и работает отлично.

Подключаю всё вот по такой схеме:

Прошивка ESP32-CAM

Важно! GPIO 0 должен быть подключен к GND, чтобы вы смогли загрузить код.


Чтобы загрузить код, выполните следующие действия:

  • Перейдите в меню Инструменты > Плата и выберите модуль ESP32 Wrover
  • Перейдите в меню Инструменты > порт и выберите COM-порт, к которому подключен ESP32
  • В меню Инструменты > Partition Scheme , выберите “Huge APP (3MB No OTA)
  • Нажмите кнопку ESP32-CAM on-board RESET
  • Затем нажмите кнопку Загрузка, чтобы загрузить код

Чтобы загрузить код, выполните следующие действия:

Важно! Если вы не можете загрузить код, то еще раз проверьте, что GPIO 0 подключен к GND и, что вы выбрали правильные настройки в меню Инструменты. Вы также должны нажать кнопку сброса на борту, чтобы перезагрузить ESP32 в режиме программирования.

4. Получение IP-адреса и подключение к камере.

После загрузки кода отключите GPIO 0 от GND. Подключите питание на 5 В. На 3,3 В у меня камера не заработала.

Откройте последовательный монитор со скоростью передачи данных 115200. Нажмите кнопку ESP32-CAM on-board Reset.

IP-адрес ESP32 должен быть выведен в последовательном мониторе.

IP-адрес ESP32 должен быть выведен в последовательном мониторе.

Теперь вы можете получить доступ к серверу потоковой передачи камеры в локальной сети. Откройте браузер и введите IP-адрес ESP32-CAM . Нажмите кнопку Start Streaming, чтобы начать потоковую передачу видео.

Нажмите кнопку Start Streaming, чтобы начать потоковую передачу видео.

У вас так же есть возможность делать фотографии, нажав на кнопку Get Still. К сожалению, этот пример не сохраняет фотографии, но вы можете изменить его, чтобы использовать встроенную карту microSD для хранения полученных фотографий.

Есть еще несколько настроек камеры, с которыми вы можете поиграть, чтобы настроить параметры изображения.

Есть еще несколько настроек камеры, с которыми вы можете поиграть, чтобы настроить параметры изображения.

Если вы откроете монитор порта во время работы камеры, то вы получите подробную информацию о количестве кадров в секунду, о скорости обработки и пр.

Если вы откроете монитор порта во время работы камеры, то вы получите подробную информацию о количестве кадров в секунду

Чем выше качество потокового вещания, тем меньше кадров. Комфортно работает при разрешении 600х800.

Если вы откроете монитор порта во время работы камеры, то вы получите подробную информацию о количестве кадров в секунду

Можно реализовать распознавание лиц. Но, пока, в данном направлении я не экспериментировал. Как будут результаты, обязательно напишу статью, или сделаю проект.

Подписывайтесь на наш канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующей статье.

]]>
Функция strtok_r() – разбиение строки на части по указанному разделителю. Arduino IDE http://portal-pk.ru/news/227-funkciya-strtok_r---razbienie-stroki-na-chasti-po.html Константин Portal-PK 2019-11-05T12:11:59+03:00 Функция strtok_r() – разбиение строки на части по указанному разделителю. Arduino IDE

char *strtok_r(char *str, const char *delim, char **saveptr);

Пример работы функции

void testsChar()
{
  char *str;
  char sz[] = "wills,this,works,40,43";
  char *p = sz;
  while ((str = strtok_r(p, ",", &p)) != NULL) 
    {
     Serial.println(str);
    }
}
]]>
Установка, прошивка платы ESP32 в Arduino IDE (Windows, Mac OS X, Linux) http://portal-pk.ru/news/226-ustanovka-proshivka-platy-esp32-v-arduino-ide-windows-mac-os-x-linux.html Константин Portal-PK 2019-11-03T17:06:22+03:00 Существует надстройка для Arduino IDE, которая позволяет программировать ESP32 с использованием Arduino IDE и его языка программирования. В этой статье мы покажем вам, как установить плату ESP32 в Arduino IDE, не зависимо от используемой вами операционной системы: Windows, Mac OS X или Linux.

Урок 1. Веб-сервер ESP32 (ESP8266) в среде Arduino IDE

Если у вас возникли какие-либо проблемы во время процедуры установки, сообщите об этом на форуме.

esp32 devkit

Необходимые условия: Arduino IDE последней версии.
Перед началом установки убедитесь,что на вашем компьютере установлена последняя версия Arduino IDE. Если у вас стоит не последняя версия, сперва удалите текущую версию и затем установите более новую версию. В противном случае, данная инструкция может не сработать.
Имея последнюю версию Arduino IDE, установленную с официального сайта, продолжайте установку по данной инструкции.


Установка дополнения ESP32 в Arduino IDE

Чтобы установить плату ESP32 в Arduino IDE, выполните следующие действия:
1. В вашем Arduino IDE перейдите в Файл> Настройки

установить плату ESP32 в Arduino IDE

2. Войдите https://dl.espressif.com/dl/package_esp32_index.json. в поле "Дополнительные ссылки для менеджера платы", как показано на рисунке ниже. Затем нажмите кнопку OK.

Дополнительные ссылки для менеджера платы

Внимание: Если вы у вас установлена в Arduino IDE ESP8266 то добавьте 2 строки или через запятую:

    https://dl.espressif.com/dl/package_esp32_index.json

    http://arduino.esp8266.com/stable/package_esp8266com_index.json

3. Откройте Менеджер плат. Перейдите в меню Инструменты > Платы > Менеджер плат

Менеджер плат

4. Ищем ESP32. И нажимаем кнопку Установка.

Ищем ESP32

5. Вот и все. Через пару минут у вас все установиться.


Первая загрузка скетча в ESP32.

Подключите плату ESP32 к компьютеру. Открываем Arduino IDE и выполним следующие действия:

1. Выберите доску в меню Инструменты > Плата (в моем случае это DOIT ESP32 DEVKIT V1 )

Инструменты WiFiScan

Плата (в моем случае это DOIT ESP32 DEVKIT V1)" width="382" height="240" style="display: block; margin: auto; width: 382px; height: 240px;" rel="display: block; margin: auto; width: 382px; height: 240px;">

2. Выберите порт (если вы не видите COM-порт в Arduino IDE, вам необходимо установить драйверы CP210x USB to UART Bridge VCP). В моем случае ком порт отображается по другому. Это связанно с тем что я использую OS Linux.

Выберите порт

3. Открыть в следующем примере в Файл > Примеры > WiFi > WiFiScan

Примеры WiFiScan

4. В вашей среде Arduino IDE откроется новый скетч.

Arduino IDE откроется новый скетч

5. Нажмите кнопку Загрузить в Arduino IDE. Подождите несколько секунд, пока код компилируется и загружается на вашу плату.

 Загрузить в Arduino IDE

Внимание! Если у вас бежит строка с повторяющимися точками и линиями. Нажмите кнопку Boot на плате и удерживайте ее пока не побегут проценты загрузки. После чего кнопку можно отпустить.

Нажмите кнопку Boot

6. Откройте последовательный монитор Arduino IDE со скоростью передачи данных 115200.

 Откройте последовательный монитор Arduino IDE

7. Нажмите кнопку EN на борту ESP32 , и вы увидите список сетей, доступных для вашей ESP32.

Распиновка ESP32 DEVKIT V1

Подведение итогов.
Это краткое руководство, которое иллюстрирует, как подготовить ваш Arduino IDE для ESP32 на компьютере с ОС Windows, Mac OS X или Linux. Если во время установки возникнут какие-либо проблемы, пишите на форум.

Теперь вы можете начать создавать свои собственные проекты IoT с ESP32.

Подписывайтесь на наш канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующей статье.

]]>
Урок 13.3 Arduino строим графики по данным c sd карты. http://portal-pk.ru/news/225-arduino-stroim-grafiki-po-dannym-c-sd-karty.html Константин Portal-PK 2019-10-18T14:59:30+03:00 Сегодня в уроке мы сохраним данные и время считывания данных в файл. Который можно открыть в Excel и построить график.

Как вывести график на смартфон, в режиме реального времени смотрите тут: Arduino SD карта. Воспроизводим звуки и музыку в wav формате.

Arduino строим графики

Для урока нам понадобиться:

1. Arduino UNO или Arduino NANO

2. Модуль SD карты .

3. Беспаечная макетная плата .

4. Соединительныепровода.

5. Модуль реального времени DS3231


Модуль DS3231 выбрал не случайно. В нем есть датчик температуры . И мы можем сохранять значение температуры и время замеров .

Это наглядный пример использования легирование показаний с датчиков . Вы можете использовать другое датчики: DS18B20, DHT11, DHT22 . Также вы можете использовать одновременно несколько датчиков и сохранять показание с них.

Подключаем SD-модуль и модуль реального времени DS3231 к Arduino UNO по схеме.

Подключаем SD-модуль и модуль реального времени DS3231 к Arduino UNO по схеме.

Для работы нам понадобиться библиотека DS3231.h. Скачать ее можно с сайта разработчика или в разделе для скачивания файлов внизу страницы.

Мы уже научились работать с картой, если возникнут сложности посмотрите предыдущий урок: Arduino SD карта. Создаем, удаляем файлы. Чтение, запись файлов.

Перейдем сразу к модулю времени DS3231 . Для его подключения нужно добавить всего пару строк:

#include <DS3231.h> // Библиотека для часов реального времени 
// Подключаем часы реального времени 
DS3231  rtc(SDA, SCL);    //(A4 = SDA, A5 = SCL)
void setup() {
....
rtc.begin(); // инициализируем часы реального времени   
}

Для вывода текущего времени и температуры есть 2 функции.

#include <SD.h>
#include <SPI.h>
#include <DS3231.h> // Библиотека для часов реального времени 
File myFile;
// Подключаем часы реального времени 
DS3231  rtc(SDA, SCL);    //(A4 = SDA, A5 = SCL)
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
void setup() {
 // Открыть последовательное соединение и ждать открытия порта:
  Serial.begin(9600);
  Serial.println("Initializing SD card...");
  if (!SD.begin(chipSelect)) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  rtc.begin(); // инициализируем часы реального времени   
}
void loop() {
  // выведим время и черз запятую температуру с дачика модуля DS3231
  Serial.print(rtc.getTimeStr());
  Serial.print(",");
  Serial.println(int(rtc.getTemp()));
 // открываем файл для записи
  myFile = SD.open("test.csv", FILE_WRITE);
  if (myFile) {  /// записываем данные черз запятую  
    myFile.print(rtc.getTimeStr());
    myFile.print(",");    
    myFile.println(int(rtc.getTemp()));
    myFile.close(); // закрываем файл
  }
  // Если не получилось открыть файл для записи выводим ошибку
  else {
    Serial.println("error opening test.txt");
  }
  delay(10000); /// ждем 10 сек. И повторяем запись данных в файл.
}

Для примера работы выведем время и показания в монитор порта.

Для примера работы выведем время и показания в монитор порта.

И точно такие же показания будем сохранять в наш файл.

 А можно сохранить в файл TEST.csv.

Можно сохранять в текстовый файл. А можно сохранить в файл TEST.csv.

 Просто я погрел пальцами модуль времянки. И после он постепенно остывал.

Это тоже текстовый файл. Но его можно сразу открыть в Excel.

 TEST.csv. Это тоже текстовый файл. Но его можно сразу открыть в Excel.

Осталось только построить график по полученным данным.

У вас наверное возникнет вопрос, почему у меня так скачет температура? Нет у меня нет резкого изменения температуры в комнате. Просто я погрел пальцами модуль времянки. И после он постепенно остывал.

Этот небольшой урок дает представления о возможностях легирования данных с использованием Arduino и SD карты.

Этот небольшой урок дает представления о возможностях легирования данных с использованием Arduino и SD карты.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.


]]>
Обзор панели управления самодельного ЧПУ. Запуск фрезерования. http://portal-pk.ru/news/224-obzor-paneli-upravleniya-samodelnogo-chpu-zapusk.html Константин Portal-PK 2019-10-15T08:29:31+03:00 Продолжаю обзор самодельного фрезерного ЧПУ станка с дисплеем . И сегодня рассмотрим панель управления. И основные настройки станка. Обзор станка и пример фрезерования смотрите тут: Самодельный ЧПУ фрезерный станок на Arduino с дисплеем

Продолжаю обзор самодельного фрезерного ЧПУ станка с дисплеем.

Немного предыстории. Как-то раз сидел я за компьютером дела модель для своего 3D принтера Annet A8. Про который я уже рассказывал. И делал модернизацию. И вот сижу и думаю. Почему 3Д принтеры так популярны. Даже в нашем небольшом городе их достаточно много.

Да, стоят они недорого. Но это не основной критерий их популярности, по моему мнению. Основной фактор такой большой популярности это относительно простата сборки и использования. У меня отец предпенсионного возраста без проблем печатает на 3Д принтер. Также принтеры имеют небольшой размер, что позволяет их поставить даже в квартире. Возможно добавить дешевый и разнообразный выбор пластика. Но мы живем в России и проблем с разнообразием древесины у нас нет. И стоимость фанеры у нас небольшая. Так что этот фактор рассматривать не буду. А вы как как думаете? Пишите ваше мнение в комментариях.

И тут я задался вопросом. А можно ли сделать более доступный ЧПУ фрезерный станок? Для этого нужно сделать его небольших размеров и с простым управлением. На подобии 3D принтера. Стоимость скорее всего сильно снизить не получиться.

А для предпринимателей, которые хотели бы автоматизировать свой бизнес. Предлагаю обратить внимание на 1С. А у Ортикона полно решений для бизнеса на основе 1С.

Взял за основу одну из распространенных прошивку для 3D принтеров Marlin.

Вот такая панель управления ЧПУ станком в итоге у меня получилась. Боле подробный обзор смотрите в видео.

Есть ряд недочетов.Основная которая бросается в глаза это местами проскакивает слова «печать» и не все перевел на русский язык. Но это дела техники.

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

Самодельный фрезерный станок с ЧПУ основную задачу выполняет.

Самодельный фрезерный станок с ЧПУ основную задачу выполняет. На нем можно работать без компьютер . Достаточно скинуть файл на карту памяти . Выбрать и станок все отфрезерует.

В следующей статье расскажу подробнее о электронике и прошивке поэтому не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем проекте.

]]>
#13.2 Arduino SD карта. Воспроизводим звуки и музыку в wav формате. http://portal-pk.ru/news/223-arduino-sd-karta-vosproizvodim-zvuki-i-muzyku-v-wav-formate.html Константин Portal-PK 2019-10-14T13:45:40+03:00 Продолжаем работу с SD картой в среде Ardino IDE. И сегодня мы будем воспроизводить мелодии и уведомления с карты памяти .

Качество воспроизводимой музыки не очень хорошее . Смотрите пример в виде. Звук тихий так как мелодии и оповещения воспроизводятся без какого либо усиления. Так звук воспроизводит Arduino. Не забудьте добавить звук при просмотре видео.

Это связанно с вычислительными способностями Arduino. Поэтому требования к аудио файлам будут напрямую зависеть от возможности микроконтроллера данной отладочной платы:

  • частота дискретизации: 16000 Гц;
  • количество каналов: моно;
  • количество бит: 8.

Давайте подготовим файлы для нашего проекта. Скачаем нужные нам треки или уведомления и конвертируем их. Для этого я использую онлайн конвектором аудио файлов.

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

 Скачаем нужные нам треки или уведомления и конвертируем их

После чего скачиваем полученный трек и загружаем его на флешку.

После чего скачиваем полученный трек и загружаем его на флешку.

Я подготовил 6 различных файлов. Скачать их можно внизу страницы урока. В разделе файлы для скачивания.

Для урока нам понадобиться:

1. Arduino UNO или Arduino NANO

2. Модуль SD карты .

3. Беспаечная макетная плата .

4. Соединительные провода .

5. Динамик. Я использую от ноутбука.

Подключаем SD-модуль и динамик к Arduino UNO по такой схеме.

Подключаем SD-модуль и динамик к Arduino UNO по такой схеме.

Для данного урока нам понадобится библиотека TMRpcm, которая умеет асинхронного воспроизведения PCM/WAV файлов напрямую с SD карты.

Скачать и более подробная документация смотрите на GitHub .

Основные функции библиотеки TMRpcm.


music.play("sound.wav");      // Воспроизвести файл на выходе 0
music.play("sound.wav",30,1); // Воспроизвести файл, начиная с 30-ой секунды, на выходе 1
music.play("sound.wav",0);    // play(имя_файла, выход 0 или 1) определяется speakerpin или speakerpin2
music.stopPlayback(0);     // Может принимать номер выхода 0 или 1
music.volume(0,1);         // Уменьшить громкость на выходе 1

Давайте сделаем на основе предыдущего урока небольшую программу воспроизведения 6 файлов.


#include <SD.h>             // необходимо включить SD библиотеку
#include <TMRpcm.h>         // также необходимо включить данную библиотеку...
#include <SPI.h>
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
TMRpcm music;   // создать объект для использования в данном скетче
void setup()
{
  // Открыть последовательное соединение и ждать открытия порта:
  Serial.begin(9600);
  Serial.println("Initializing SD card...");
  if (!SD.begin(chipSelect)) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д.
  music.setVolume(5);    //   от 0 до 7. Установка уровня громкости
  music.quality(1);        //  1 для 2x передескритезации, 0 for для нормального режима
}
void loop()
{  
  music.play("sounds/2.wav");
    Serial.println("Play 2.wav");
    delay(30000);
  music.play("sounds/1.wav");
    Serial.println("Play 1.wav");
    delay(10000);
  music.play("sounds/3.wav");
    Serial.println("Play 3.wav");
    delay(10000);
  music.play("sounds/4.wav");
    Serial.println("Play 4.wav");
    delay(3000);
  music.play("sounds/5.wav");
    Serial.println("Play 5.wav");
    delay(3000);
  music.play("sounds/6.wav");
    Serial.println("Play 6.wav");
    delay(3000);
}

Как видим наши уведомления и музыка воспроизводятся. В мониторе порта можно увидить какя мелодия сейчас воспроизводиться.

 Как видим наши уведомления и музыка воспроизводятся. В мониторе порта можно увидить какя мелодия сейчас воспроизводиться.

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

Управлять будем через Монитор порта.

Команды:

1 - воспроизводим трек

2 - воспроизвести трек, начиная с 30-ой секунды

3 - поставить воспроизведение на паузу / продолжить воспроизводить

4 - устанавливает уровень громкости 0 — выключаем.

5 - устанавливает уровень громкости 5 -включаем (макс. 7).

0 - выключаем воспроизведение трека.


#include <SD.h>             // необходимо включить SD библиотеку
#include <TMRpcm.h>         // также необходимо включить данную библиотеку...
#include <SPI.h>
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
int ser = 0;  // значение из порта
TMRpcm music;   // создать объект для использования в данном скетче
void setup()
{
 // Открыть последовательное соединение и ждать открытия порта:
  Serial.begin(9600);
  Serial.println("Initializing SD card...");
  if (!SD.begin(chipSelect)) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д.
  music.setVolume(5);    //   от 0 до 7. Установка уровня громкости
  music.quality(1);        //  1 для 2x передескритезации, 0 for для нормального режима
}
void loop()
{  
 if (Serial.available() > 0) // пришли данные
 {
   ser = Serial.read();
    if (ser =='1')
    {
      music.play("sounds/2.wav");
        Serial.println("Play 2.wav");
    //delay(30000);
    }
    else if (ser =='2')
    {
      music.play("sounds/2.wav",30); // воспроизвести файл, начиная с 30-ой секунды
        Serial.println("Play 2.wav starting at 30 sec.");
    }
    else if (ser =='3')
    {
      music.pause();  // поставить воспроизведение на паузу / снять с паузы
        Serial.println("Pause");
    }
    else if (ser =='4')
    {
      music.setVolume(0); // от 0 до 7. Устанавливает уровень громкости.
        Serial.println("Set volume 0");
    }
    else if (ser =='6')
    {
      music.setVolume(5); // от 0 до 7. Устанавливает уровень громкости.
        Serial.println("Set volume 5");
    }
    else if (ser =='0')
    {
      music.disable(); // выключить таймер на выходном выводе и остановить воспроизведение
        Serial.println("Stop");
    }
  }
}

В мониторе порта видим что у нас все работает отлично.

В мониторе порта видим что у нас все работает отлично.

На основе данного урока можно сделать Arduino часы с будильникам. Или сделать нормальный звук серены для радио управляемой машины . Уведомления для умного дома и много другое.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
#13.1. Arduino SD карта. Создаем, удаляем файлы. Чтение, запись файлов. http://portal-pk.ru/news/222-131-arduino-sd-karta-sozdaem-udalyaem-faily-chtenie-zapis.html Константин Portal-PK 2019-10-10T15:10:03+03:00 Во втором уроке просвещенном работе с SD картой . Научимся создавать и удалять файлы с помощью Arduino. Также запишем информацию в файл и считаем её. Как получить информацию о карте памяти и файлах хоронящихся на карте смотрите в предыдущем уроке: Урок13. Библиотека SD Arduino. Выводим информацию о SD карте.

Для роботы нам понадобится библиотека SD.h которую можно установить через менеджер библиотек.

библиотека SD.h которую можно установить через менеджер библиотек

Для урока нам понадобиться:

1. Arduino UNO или Arduino NANO

2. Модуль SD карты .

3. Беспаечная макетная плата .

4. Соединительные провода .

Подключаем SD-модуль к Arduino UNO по такой схеме.

Подключаем SD-модуль к Arduino UNO по такой схеме.

Давайте создадим файл на флешке, для этого используется функции SD.open(). Которая открывает файл на SD карте. Если файл открывается для записи, и если он еще не существует, то он будет создан (но содержащий его каталог уже должен существовать).

Remove() - Удаляет файл.

SD.exists() - проверяет существует ли файл.

Простой пример скетча для создания и удаления файлов с помощью библиотеки SD.

#include <SPI.h>
#include <SD.h>
File myFile;
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
void setup() 
{
  // Открыть последовательное соединение и ждать открытия порта:
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  // проверим есть ли такой файл на флешке
  if (SD.exists("example.txt")) 
  {
    Serial.println("example.txt Есть такой. ");
  } 
  else 
  {
    Serial.println("example.txt нет. ");
  }
  // открыть новый файл и немедленно закрыть его
  Serial.println(" Создаем example.txt... ");
  myFile = SD.open("example.txt", FILE_WRITE);
  myFile.close();
  // проверить, существует ли файл:
  if (SD.exists("example.txt")) 
  {
    Serial.println(" example.txt Есть такой. ");
  } 
  else 
  {
    Serial.println("example.txt нет.");
  }
  // удалить файл:
  Serial.println("  Удаляем example.txt... ");
  SD.remove("example.txt");
  if (SD.exists("example.txt")) 
  {
    Serial.println(" example.txt есть такой. ");
  } 
  else 
  {
    Serial.println(" example.txt нет. ");
  }
}
void loop() 
{
  // после завершения настройки ничего не делать.
}

После загрузке в мониторе порта мы увидим вот такую информацию.

создания и удаления файлов с помощью библиотеки SD.

Сперва мы проверяем на существование файла, создаем файл. Проверяем еще раз, что файл создан. Удаляем файл. И проверяем, что файла больше нет на карте памяти.

Если нам не нужно удалять файл, можно закомментировать строку отвечающую за удаления и уведомления, что будем удалять файл тоже лучше закомментировать.

// удалить файл:
 // Serial.println("  Удаляем example.txt... ");
 // SD.remove("example.txt");

Сейчас наш файл создан и не удален. С ним можно работать.

Сейчас наш файл создан и не удален. С ним можно работать.

Давайте создадим файл и запишем информацию в него. Код будит не очень сильно измене.

#include <SPI.h>
#include <SD.h>
File myFile;
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
void setup() 
{
  // Открыть последовательное соединение и ждать открытия порта:
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  // Открыть файл. Обратите внимание, что в какой-либо момент может быть открыт только один файл,
  // поэтому вы должны закрыть один файл перед открытием следующего.
  myFile = SD.open("test.txt", FILE_WRITE);
  // если файл открыт, то записать в него:
  if (myFile) 
  {
    Serial.print(" Запись в файл test.txt... ");
    myFile.println(" Текст: 1, 2, 3.");
    // закрыть файл:
    myFile.close();
    Serial.println("Ok.");
  } 
  else 
  {
    // если файл не открыт, то вывести сообщение об ошибке:
    Serial.println("ошибка открытия test.txt");
  }
  // снова открыть файл для чтения:
  myFile = SD.open("test.txt");
  if (myFile) 
  {
    Serial.println("test.txt:");
    // читать из файла, пока в нем ничего не останется:
    while (myFile.available()) 
    {
      Serial.write(myFile.read());
    }
    // закрыть файл:
    myFile.close();
  } 
  else 
  {
    // если файл не открыт, то вывести сообщение об ошибке:
    Serial.println("ошибка открытия test.txt");
  }
}
void loop() 
{
  // после завершения настройки ничего не делать.
}

В мониторе порта мы увидим, что файл создан и удачно сохранился наш текст.

В мониторе порта мы увидим, что файл создан и удачно сохранился наш текст.

Если перезагрузить Arduino. То текст запишется еще раз в файл.

Если перезагрузить Arduino. То текст запишется еще раз в файл.

Это отличное решение для сохранения показаний с датчика.

Файл на карте памяти выглядит вот так.

Файл на карте памяти выглядит вот так.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
Урок 13. Библиотека SD Arduino. Выводим информацию о SD карте http://portal-pk.ru/news/221-urok-13-biblioteka-sd-arduino-vyvodim-informaciyu-o-sd-karte.html Константин Portal-PK 2019-10-08T07:51:18+03:00 Сегодня в уроке начнем изучать работу с SD картой . Для этого подключим библиотеку SD . И выедим информацию о карте и файлах которые хранятся на карте памяти.

Сегодня в уроке начнем изучать работу с SD картой. Для этого подключим библиотеку SD.

Для урока нам понадобиться:

1. Arduino UNO или Arduino NANO

2. Модуль SD карты.

3. Беспаечная макетная плата.

4. Соединительные провода.


Подключаем SD-модуль к Arduino UNO вот по такой схеме.

Подключаем SD-модуль к Arduino UNO вот по такой схеме.

SD карта подключается к шине SPI следующим образом:

  • MOSI - вывод 11
  • MISO - вывод 12
  • CLK - вывод 13
  • CS - зависит от вашей платы расширения или модуля SD карты.

SD карта подключается к шине SPI следующим образом:

Здесь, как и в других примерах Arduino, используется вывод 4.Подключение к Arduino NANO аналогично. К пинам с теме же номерами. Подключение других модулей или шилдов с SD картой может отличаться.

Подключаем Arduino к компьютеру и загружаем код:

// Подключить библиотеку SD:
#include <SPI.h>
#include <SD.h>
// Задать переменные, использующие функции вспомогательной библиотеки SD:
Sd2Card card;
SdVolume volume;
SdFile root;
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
void setup() {
  // Открть последовательный порт и ждать выполнения его открытия:
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  // мы будем использовать код инициализации из вспомогательных библиотек,
  // так как мы только проверяем, работает ли карта!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) 
  {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    while (1);
  } 
  else 
  {
    Serial.println("Wiring is correct and a card is present.");
  }
  // тип карты
  Serial.println();
  Serial.print("Card type:         ");
  switch (card.type()) 
  {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }
  // попробуем открыть "том"/"раздел" - он должен быть FAT16 или FAT32
  if (!volume.init(card)) 
  {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    while (1);
  }
  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());
  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();
  // напечатать тип и размер первого тома FAT-типа
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);
  volumesize = volume.blocksPerCluster();    // кластеры это коллекции блоков
  volumesize *= volume.clusterCount();       // у нас будет много кластеров
  volumesize /= 2;                           // блоки SD карты всегда равны 512 байт (2 блока равны 1KB)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);
  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);
  // перечислить все файлы на карте с датой и размером
  root.ls(LS_R | LS_DATE | LS_SIZE);
}
void loop(void) 
{
}

Открываем монитор порта и видим информацию о карте.

Открываем монитор порта и видим информацию о карте.

Информация включает в себя форматирование ( FAT16 или FAT32 ) и файловую структуру, а также количество свободного и используемого пространства на карте.

Один минус файлы с русским названием не отображает. Вместо русских букв одни почерки.

Один минус файлы с русским названием не отображает. Вместо русских букв одни почерки.

Это первый и самый простой пример работы с SD картой. Продолжение следует.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
Самодельный ЧПУ фрезерный станок на Arduino с дисплеем http://portal-pk.ru/news/220-samodelnyi-chpu-frezernyi-stanok-na-arduino-s-displeem.html Константин Portal-PK 2019-10-03T14:09:29+03:00 Кто следит за моими проектами на сайте или в группе Вконтакте. Знают, что я делаю новый ЧПУ станок на Arduino . Особенность данного станка в том, что он работает как 3D принтер . У него есть дисплей и флешка для загрузки управляющей программы. Остальное все по аналогии работы на 3D принтере . Выбираем файл и станок фрезерует . На дисплее отображается минимальную информацию о процессе.

 Для распечатки деталей ушло больше 2 кг. ABS пластика.

Разработку начал с распечатки всех комплектующих для станка. Для распечатки деталей ушло больше 2 кг. ABS пластика . За основу взял готовую конструкцию Root3 Lite CNC. Так как версия Lite. В данном проекте не все заготовок выложены в отрытый доступ. И кое что по ходу работы пришлось сделать самостоятельно.

При сборке механической части использовал алюминиевый профиль в качестве направляющих по оси X и Y. По оси Z установил линейные направляющие 8 мм, аналогичные используются в 3D принтере.

При сборке механической части использовал алюминиевый профиль в качестве направляющих по оси X и Y. По оси Z установил линейные направляющие 8 мм, аналогичные используются в 3D принтере.

Вот что понадобилось для сборки механической части:

- Шаговые двигателя Nema17 -4 шт. Подробнее ...

- Зубчатые шкивы и ремни GT2 . Подробнее ...

- Шпиндель 500W . Подробнее ...

- Полированный вал 8 мм и линейные подшипник. Подробнее ...

- Подшипники качения двух размеров. Подробнее ...

- Болты, винты, гайки, шайбы и пр.

Для управления ЧПУ изначально купил комплект Mega2560 R3 + RAMPS 1.4+ DVR8825 + 2004 LCD . Загрузил прошивку Marlin . Произвел минимальные настройки прошивки Marlin , подробнее о настройках читайте тут.

И понял, что дисплей выбрал неудачно . Он маленький и не видно всю необходимую информацию.

Купил графический дисплей lcd 12864.

При настройки прошивки марлин столкнулся с такой проблемой. Для работы по оси Y двух шаговых двигателей необходимо произвести настройки, а в интернете информации нет. Кому интересно решение читайте на форуме: Marlin подключаем 2 двигателя к оси Y или X. Назначаем вторым двигателем E1

Так как Marlin поддерживает Русский язык , перевел все пункты меню. Так же переименовал часть пунктов меню. Но пака еще встречаются слова «Печать» и «Принтер». Но это не так страшно. Со временим все подправлю.

Первый запуск выгладил вот так.

Для управления ЧПУ изначально купил комплект Mega2560 R3 + RAMPS 1.4+ DVR8825 + 2004 LCD .

Все прошло успешно. Но нашел пару багов в прошивке. Но в целом все получилось.

После чего напечатал кабель укладчики и корпус под дисплей . Уложил все провода. Электронику установив в небольшой электрический щиток. Предварительно его пришлось немного модернизировать. Сверху щитка установил вентилятор с защитной решеткой . Которую также напечатал на 3D принтере.

Вот такой самодельны фрезерный ЧПУ станок с дисплеем получился.

Вот такой самодельны фрезерный ЧПУ станок с дисплеем получился.

Работать на станке очень просто. Главное сделать и проверить управляющую программу. Которую можно сделать и проверить в онлайн сервисах о которых уже рассказывал:

Бесплатныйонлайн генератор G-Code для ЧПУ станка —MakerCAM

Онлайнпрограмма для симуляции готового G-Codeдля ЧПУ.

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

После чего скидываем код на карту памяти и можно фрезеровать. Ка к происходит выбор файла и прочее рассказываю в видео.

Станок без проблем справляется с фанерой 12 мм.

Станок без проблем справляется с фанерой 12 мм.

На фрезерном станке с ЧПУ можно делать достаточно красивые вещи .

На фрезерном станке с ЧПУ можно делать достаточно красивые вещи .

Такое не сделать на станке лазерной резки.

Такое не сделать на ЧПУ станке лазерной резки.

Такое не сделать на станке лазерной резки.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем проекте.

]]>
Восстановление данных с жесткого диска или флешки http://portal-pk.ru/news/219-vosstanovlenie-dannyh-s-zhestkogo-diska-ili-fleshki.html Константин Portal-PK 2019-09-26T12:29:16+03:00 Сегодня не найти организацию которая бы хранила документацию в бумажном виде. Все хранится на компьютерах. Что облегчает работу с документами и распечатать можно в любой момент и в любом количестве.

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

Возможно ли восстановить данных с жестких дисков?

Если ваш офис находиться в Москве вы можете воспользоваться услугами лаборатории восстановления данных 24. Официальный сайт https://data-recovery-24.ru.

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

То вы ошибаетесь.

Лучше обращаться сразу к профессионалам. Так как для восстановления данных нужно профессиональное оборудование . Также знание и опыт в данном вопросе играют решающую роль.

Восстановление данных с флешки, если ваше флешка

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

Одной из сложных задач это восстановления данных с устройств продукции Apple. В лаборатории восстановления данных 24. Помогут со срочным восстановление данных c жёстких или гибридных накопителей Mac, MacBook, iMac, Mac Pro, Time Capsule . А также восстановление с ssd дисков iMac, Mac Pro, Macbook Air .

Замечательная лаборатория находиться в Москве по адресу ул. Беговая улица д. 7.

Если вам нужно срочно восстановить данные. Обращайтесь в Лабораторию восстановления данных 24. Вам обязательно помогут.

]]>
Строим график на телефоне по данным с датчика. http://portal-pk.ru/news/218-stroim-grafik-na-telefone-po-dannym-s-datchika.html Константин Portal-PK 2019-09-26T07:16:31+03:00 Показание с подключенного датчика к Arduino можно вывести на семи сегментный индикатор, на дисплей или в приложении. Как сделать самое простое приложения для вывода данных с датчика на Android телефон рассказывал тут Показание с датчика температуры и влажности на телефоне. dht11 + esp8266

Но как сделать боле наглядный вывод показаний? Можно вывести в виде графика на дисплей или на смартфон. Второй вариант сегодня и рассмотрим.

графика на дисплей или на смартфон

Для этого подключим к Arduino NANO, Bluetooth модель HC-06 и потенциометр, который будет выполнять роль датчика. Почему именно потенциометр, а не реальный датчик. С помощью потенциометра можно сделать более наглядные графики . А принцип тот же, что и с подключенным датчиком.

 подключим к Arduino NANO, Bluetooth модель HC-06 и потенциометр

Bluetooth модель HC-06 подключаем к пинам 0 и 1 по аппаратному UART порту .

Bluetooth модель HC-06 подключаем к пинам 0 и 1 по аппаратному UART порту .

Поэтому подключать к компьютеру во время работы нельзя. Как пользоваться программный UART портом рассказываю тут в середине статьи: 12.2- Дисплей Nextion урок 2. Подключаем и передаемданные на Arduino.

Если возникли вопросы пишите на форум.

Дальше грузим в Ардиино вот такой небольшой код .

int in = A0;
void setup() {
  Serial.begin(9600);
  pinMode(in,INPUT);
}
void loop() {
  byte val = map(analogRead(in),0,1024.0,0,255);    //аналоговое значение 1024 приводим к 255  
  Serial.print(val);                               //отправляем данные   
  delay(400);                                        
}

Приступим к приложению для телефона на Android . Как сделать подключение по Bluetooth к приложению я рассказывал вот в этой статье: BluetoothHC-06 и ардуино. Приложение андроид дляуправления Реле с телефона.

Приступим к приложению для телефона на Android

Дизайн Android приложения , как всегда будет минимальным и немного аскетичным.

Нам понадобятся 2 невидимых компонента - это Bluetooth и часы для отчета интервалов для построения графика.

Блоки программы в mit app inventor.

Блоки программы в mit app inventor.

Создадим переменные для постройки графика.

Переменную Y берем с показаний которые поступают по Bluetooth. X увеличиваем на 1. Вся программа работает внутри счетчика часов.

Переменную Y берем с показаний которые поступают по Bluetooth. X увеличиваем на 1

Сам график строиться по 2 точкам. Предыдущая и текущая.

Сам график строиться по 2 точкам. Предыдущая и текущая.

Когда блок для выводы у нас заполняется мы его чистим.

Когда блок для выводы у нас заполняется мы его чистим.

Можно сделать сдвиг в лево. Но тут будут больше кода. Для понимания работы постарался сделать как можно проще.

В итоге у нас получаются вот такие графики.В итоге у нас получаются вот такие графики.

В добавок можно изменить стиль оформления графиков.

В добавок можно изменить стиль оформления графиков. Изменить толщину и цвет линии графика.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем проекте.

]]>
Машинка на радиоуправлении. Arduino + nrf24l01 + пульт. http://portal-pk.ru/news/217-mashinka-na-radioupravlenii-arduino-nrf24l01-pult.html Константин Portal-PK 2019-09-19T09:01:58+03:00 Давно я уже не делал радио управляемые модели . Решил оживить свой старый проект: Радиоуправлениена Arduino + NRF24L01 + гироскоп GY-521 MPU-6050. Но не просто оживить. Но и доработать. Так как у меня есть 3D принтер . Раму для машины решил напечатать новую. Так же с кодом решил немного поработать. За это время знаний стало больше и на старые проекты уже смотрю совсем по другому. Но обо всем по порядку.

И так напечатал раму для Ардуино машинки . Фото уже выкладывал в группе в ВК. Вот что получилось:

напечатал раму для Ардуино машинки

Исходники для печати можете скачать тут.

Установил электронику: Arduino UNO, драйвер L298n, два мотор-редуктора с колесами и конечно же радио модуль nrf24l01.

Arduino UNO, драйвер L298n, два мотор-редуктора с колесами

Все комплектующие лучше покупать в Китае. Например на сайте aliexpress. Потратите в 2 раза меньше. И доставка у недорогих товаров бесплатная или очень маленькая. А если купить у одного проводка. То можно сэкономить на доставке . Для этого берем 1 товар с платной доставкой. А остальные с бесплатной. И вам все положат в одну посылку и ВСЕ отправят платной доставкой. Вот такой небольшой ЛайфХак.

Установить переключатель

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

Установил 2 бокса под аккумуляторы 18650

Установил 2 бокса под аккумуляторы 18650. Соединил их последовательно и подключил к драйверу L298n. Так как у драйвера есть понижающий стабилизатор на 5 вольт. С соответствующих разъемов мы берм 5в и подключаем Arduino UNO. Но тут есть минус. Нужно следить, чтобы аккумуляторы не пере разрядились. Иначе они выйдут из строя. Остальная часть схемы ни чем не отличается от предыдущего проекта.

Схема подключения Ардуино машинки на радио управлении

Пульт управления берем из предыдущего проекта. Схема подключения пульта управления на Arduino + NRF24L01 + гироскоп GY-521 MPU-6050 . Выглядит вот так.

Схема подключения пульта управления на Arduino + NRF24L01 + гироскоп GY-521 MPU-6050

Скетч тоже без изменений.

#include <SPI.h>          
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9, 10);
byte button_jostik = 8;  // кнопка джостика
byte button_1 = 2;  // кнопка
byte button_2 = 3;  // кнопка 
byte button_3 = 4;  // кнопка 
byte button_4 = 4;  // кнопка 
byte button_5 = 5;  // кнопка 
byte button_6 = 7;  // кнопка 
byte transmit_data[9]; // массив, хранящий передаваемые данные
byte latest_data[9]; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных
// Гироскоп ///
#include <Wire.h>
#include "Kalman.h"
Kalman kalmanX;
Kalman kalmanY;
uint8_t IMUAddress = 0x68;
/* IMU Data */
int16_t accX;
int16_t accY;
int16_t accZ;
int16_t tempRaw;
int16_t gyroX;
int16_t gyroY;
int16_t gyroZ;
double accXangle; // Angle calculate using the accelerometer
double accYangle;
double temp;
double gyroXangle = 180; // Angle calculate using the gyro
double gyroYangle = 180;
double compAngleX = 180; // Calculate the angle using a Kalman filter
double compAngleY = 180;
double kalAngleX; // Calculate the angle using a Kalman filter
double kalAngleY;
uint32_t timer;
/* переменные */
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
int status = 0;       // текущий статус
void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК
  pinMode(button_jostik, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_1, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_2, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_3, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_4, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_5, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_6, INPUT_PULLUP); // настроить пин кнопки
  radio.begin();
    delay(50);
    radio.setChannel(9);
    radio.setPayloadSize(8);
    radio.setRetries(1,1);
    radio.setDataRate(RF24_250KBPS);
    radio.setPALevel(RF24_PA_HIGH);
    radio.openWritingPipe(pipe);
  /// Гтроскоп 
    Wire.begin();
  i2cWrite(0x6B,0x00); // Disable sleep mode
  if(i2cRead(0x75,1)[0] != 0x68) { // Read "WHO_AM_I" register
    Serial.print(F("MPU-6050 with address 0x"));
    Serial.print(IMUAddress,HEX);
    Serial.println(F(" is not connected"));
    while(1);
  }    
  kalmanX.setAngle(180); // Set starting angle
  kalmanY.setAngle(180);
  timer = micros();
}
void loop() {
  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW 
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    status = !status; // инвертируем Статус 
  }
  lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки
  if (status == true)
  {
    transmit_data[1] = map(analogRead(A0), 0, 1023, 0, 255); // получить значение
    // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
    transmit_data[2] = map(analogRead(A1), 0, 1023, 0, 255);
    }
  else
  {
    /* Update all the values */
    uint8_t* data = i2cRead(0x3B,14);
    accX = ((data[0] << 8) | data[1]);
    accY = ((data[2] << 8) | data[3]);
    accZ = ((data[4] << 8) | data[5]);
    tempRaw = ((data[6] << 8) | data[7]);
    gyroX = ((data[8] << 8) | data[9]);
    gyroY = ((data[10] << 8) | data[11]);
    gyroZ = ((data[12] << 8) | data[13]);
    /* Calculate the angls based on the different sensors and algorithm */
    accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
    accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG;  
    double gyroXrate = (double)gyroX/131.0;
    double gyroYrate = -((double)gyroY/131.0);
    gyroXangle += gyroXrate*((double)(micros()-timer)/1000000); // Calculate gyro angle without any filter
    gyroYangle += gyroYrate*((double)(micros()-timer)/1000000);
    //gyroXangle += kalmanX.getRate()*((double)(micros()-timer)/1000000); // Calculate gyro angle using the unbiased rate
    //gyroYangle += kalmanY.getRate()*((double)(micros()-timer)/1000000);
    compAngleX = (0.93*(compAngleX+(gyroXrate*(double)(micros()-timer)/1000000)))+(0.07*accXangle); // Calculate the angle using a Complimentary filter
    compAngleY = (0.93*(compAngleY+(gyroYrate*(double)(micros()-timer)/1000000)))+(0.07*accYangle);
    kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter
    kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000);
    timer = micros();
    temp = ((double)tempRaw + 12412.0) / 340.0;
    Serial.print(kalAngleX);Serial.print("\t");
    Serial.print(kalAngleY);Serial.print("\t");
    //Serial.print(temp);Serial.print("\t");
    Serial.print("\n");
     int y = compAngleY;
     if (y>250) y=250;
     if (y< 110) y= 110;
     int x = compAngleX;
     if (x>250) x=250;
     if (x< 110) x= 110;
    transmit_data[1] = map(x, 110, 250, 0, 255); // получить значение
    // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
    transmit_data[2] = map(y, 110, 250, 0, 255);
  }
  transmit_data[0] = !digitalRead(button_jostik); // инвертированный (!) сигнал с кнопки
  transmit_data[3] = !digitalRead(button_1); // инвертированный (!) сигнал с кнопки
   transmit_data[4] = !digitalRead(button_2); // инвертированный (!) сигнал с кнопк
   transmit_data[5] = !digitalRead(button_3); // инвертированный (!) сигнал с кнопки
   transmit_data[6] = !digitalRead(button_4); // инвертированный (!) сигнал с кнопки
   transmit_data[7] = !digitalRead(button_5); // инвертированный (!) сигнал с кнопки
   transmit_data[8] = !digitalRead(button_6); // инвертированный (!) сигнал с кнопки
  for (int i = 0; i < 9; i++) { // в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
      flag = 1; // поднять флаг отправки по радио
      latest_data[i] = transmit_data[i]; // запомнить последнее изменение
    }
  }
  //if (flag == 1) { 
  //  radio.powerUp(); // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
 //   flag = 0; //опустить флаг
  //  radio.powerDown(); // выключить передатчик
  // }
}
boolean debvance (boolean last) //убираем дребизг
{
  boolean current = digitalRead (button_jostik); // считываем данные с кнопки
  if (last != current) // Если текущее состояни еотличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (button_jostik); // Присваеваем текущее состояние кнопки
    return current; 
  }
}
void i2cWrite(uint8_t registerAddress, uint8_t data){
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.write(data);
  Wire.endTransmission(); // Send stop
}
uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) {
  uint8_t data[nbytes];
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.endTransmission(false); // Don't release the bus
  Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading
  for(uint8_t i = 0; i < nbytes; i++)
    data[i] = Wire.read();
  return data;
}

Пульт планирую переделывать. Тем более он выглядит не очень красиво.

Пульт планирую переделывать

И ребенок у меня его модернизировал. Проводки пере подключал. Я конечно все восстановил. Но работает немного не так как раньше. Смотрите в видео всем отличие.


Искать причину почему радио пульт стал так работать нет времени и желания. Как говорил все ровно его буду переделывать.

#include <SPI.h>        
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = 0xF0F1F2F3F4LL; 
RF24 radio(9, 10); 
byte msg[9];
const int in1 = 2;    // direction pin 1
const int in2 = 4;    // direction pin 2
const int in3 = 7;    // PWM pin to change speed
const int in4 = 8;    // direction pin 2
const int ena = 5;    // PWM pin to change speed
const int enb = 6;    // PWM pin to change speed
/* определяем два массива с перечислением пинов для каждого мотора */
unsigned char RightMotor[3] =   {in1, in2, ena};
unsigned char LeftMotor[3] =   {in3, in4, enb};
/*
   управление скоростью мотора
   motor - ссылка на массив пинов
   v - скорость мотора, может принимать значения от -100 до 100
*/
void Wheel (unsigned char * motor, int v)
{
  if (v>100) v=100;
  if (v<-100) v=-100;
  if (v>0) {
    digitalWrite(motor[0], HIGH);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], v*2.55);
  }
  else if (v<0) {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], HIGH);
    analogWrite(motor[2], (-v)*2.55);
  }
  else {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], 0);
  }
}
void setup(){
  pinMode(in1, OUTPUT);      // connection to L298n
  pinMode(in2, OUTPUT);      // connection to L298n
  pinMode(in3, OUTPUT);      // connection to L298n
  pinMode(in4, OUTPUT);      // connection to L298n
  pinMode(ena, OUTPUT);      // connection to L298n;
  pinMode(enb, OUTPUT);      // connection to L298n;
  Serial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
 delay(50);
 radio.begin();
 radio.setChannel(9); 
 radio.setPayloadSize(8);
 radio.setDataRate(RF24_250KBPS);  
 radio.setPALevel(RF24_PA_HIGH); 
 radio.openReadingPipe(1,pipe); 
 radio.startListening(); 
}
void loop() {   
 if (radio.available()){ 
radio.read(&msg, sizeof(msg));
} 
else
{
msg[1]=127;
msg[2]=127;}
int x= map(msg[2], 0, 255, -100, 100);
int y= map(msg[1], 0, 255, -100, 100);
 /* управляем правым мотором */
  Wheel (RightMotor, x - y);
  /* управляем левым мотором */
  Wheel (LeftMotor, x + y); 
//Serial.println(msg[1]);
}

Переделал код для машинки. В предыдущей версии жаловались, что при включении крутиться одно колесо. Исправил. Проблема была вот в этом куске кода.

int x= map(msg[2], 0, 255, -100, 100);
int y= map(msg[1], 0, 255, -100, 100);

При отсутствии связи данные параметры были равны 0. А ноль по коду мы приводим к -100. Вращаем колесо в обратную сторону. Вот от сюда и проблема.

машинка на Arduino радио модуле nrf24l01 с пультом управления

В итоге получилась вот такая машинка на Arduino радио модуле nrf24l01 с пультом управления. Который управляет машиной при наклоне пульта. Не нужно нажимать на кнопки.

Машинка и пульт управления на Ардуино

Планирую доработку пульта и машинки. Так что Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Грузоподъемность мини квадрокоптера Eachine H8 Mini http://portal-pk.ru/news/216-gruzopodemnost-mini-kvadrokoptera-eachine-h8-mini.html Константин Portal-PK 2019-09-11T13:56:41+03:00 Сегодня проверим грузоподъемность мини квадрокоптера Eachine H8 Mini . Вы наверное решили, что я впал в детства! Не совсем так. Тут в первую очередь я планирую получить знание, что сможет поднять квадрокоптер. И получиться ли на него что либо подмешать. Ну и поиграть, в нашем детстве даже машинок на пульте ДУ не было. Не говоря уже про квадрокоптер.

Подготовил я вот такие грузы

Подготовил я вот такие грузы. Эталоном будет банка с канифолью 20 грамм . Правда вес увеличиться не на 20 грамм. Больше, так как тут еще сама банка под канифоль и двухсторонний скотч. Но без крепежа ни куда.

Квадрокоптер справился со всеми грузами до банки с канифолью. Тут начались небольшие трудности. Так как аккумулятор к тому времени уже был немного разряжен. Квадрокоптер не смог поднять 20 грамм. Но после полной зарядки данный груз поддался. Высота полета составляет всего 2-5 см над поверхностью. Но все же он летит. Если поставит новый аккумулятор. Возможно что он поднимется на 1-2 метра. Но не факт.

 Квадрокоптер не смог поднять 20 грамм.

Подробнее испытания на грузоподъемность квадрокоптера Eachine H8 Mini смотрите в видео.

Вывод можно сделать следующий. Квадрокоптер не предназначен для подъема даже небольших грузов. И под вешать на него даже микрокамеру не получится. Так как кроме камеры нужно будет еще использовать аккумулятор и передающее устройство.

 Квадрокоптер не предназначен для подъема даже небольших грузов.

Постараюсь за зиму собрать квадрокоптер. Как я люблю из говна и палок. Возможно и камеру прицеплю. Но это уже совсем другая история!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
LEGO роботы. http://portal-pk.ru/news/215-lego-roboty.html Константин Portal-PK 2019-09-04T09:05:57+03:00 Конструкторы ЛЕГО одни из самых распространенных. И не зря, так как из них можно собрать здание, транспорт. Даже целые космические станции и города. Но у данных конструкторов есть один небольшой минус. Они не умеют самостоятельно двигаться и издавать звуки.

Конструкторы ЛЕГО

На самом деле это не так. Есть наборы ЛЕГО. Которые включают в себя микроконтроллер, дачки и исполнительные монизмы. Что позволяет из конструктора собрать машинку которая будет самостоятельно ездить, различные сборные приборы для изучения физики. Но это не все. Также вы можете без труда собрать автономного робота. Который будет оснащен датчиками и сенсорами, позволяющие ему самостоятельно обходить препятствие и выполнять заданные действия. При этом вы можете делать модификации, добавлять датчики, что позволит вашему LEGO роботу совершать новые действия и становиться более умным.

LEGO робот

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

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

]]>
Обзор приставки которую можно собрать за 3 т. руб. http://portal-pk.ru/news/214-obzor-pristavki-kotoruyu-mozhno-sobrat-za-3-t-rub.html Константин Portal-PK 2019-09-04T07:24:43+03:00 Для любителей игр сейчас очень большой выбор. Поиграть можно на ПК или на игровой приставке. Сегодня речь пойдет про игровую консоль которую я собрал за 3 тыс. руб .

Поиграть можно только в ретро игры. В современные игры не поиграть. Но что вы хотели за такие деньги. А если учесть что в магазине старые приставки (Sega, Playstation, Nintendo и пр.) стоят в приделах стоимость в которую обошлась мне приставка на Orange Pi Lite. То тут еще и сэкономить можно.

приставка на Orange Pi Lite

Начнем все по порядку. Что необходимо для создания данного девайса? И сколько все стоит ?

- Orange Pi Lite с блоком питания - 1500 руб.

- Джойстики - 980 руб.

- Вентилятор для охлаждения - 120 руб.

- Карта памяти на 16 Gb - 420 руб.

Orange Pi Lite с блоком питания

Стоимость указана на момент покупки. Сейчас ситуация возможно немного другая.

Корпус для приставки напечатал на 3D принтере. Скачать модель для печати можно тут. Радиаторы выпилил из старых алюминиевых радиаторов от компа.

Корпус для приставки напечатал на 3D принтере

Какую операционную систему установить на одно платный компьютер, для создания игровой приставки?

Я установил RetrOrange Pi , почему именно эта операционная систему рассказываю вот тут: Игроваяконсоль на orange pi. Выбор железа и ОС.

На данном вопросе останавливаться не буду в данной статье.

Какие приставки поддерживает и из них я играю :

  • Playstation
  • PSP
  • Sega Dreamcast
  • Sega Master System / Game Gear / Mega Drive
  • Game Boy
  • Nintendo

и пр.

Какие приставки поддерживает и из них я играю

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

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Обзор мини квадрокоптера. Покупал по очень низкой цене. http://portal-pk.ru/news/213-obzor-mini-kvadrokoptera-pokupal-po-ochen-nizkoi.html Константин Portal-PK 2019-09-03T07:25:04+03:00 Вы наверное знаете что я увлекаюсь разработкой проектов на Arduino, ESP8266, ESP32 и на однопалатных компьютерах. Как и все Ардуинщики мне охота собрат как можно больше интересных проектов, в том числе квадрокоптер. Но к сожалению ни на все хватает времени и средств.

я решил купить ребенку квадрокоптер

Поэтому на Новый год я решил купить ребенку квадрокоптер. Пока я его соберу на базе Ардуино может пройти еще пару лет.
Посылка не успела к новому году, хотя заказывал за 40 дней до НГ. Пришла неделю спустя после нового года.

Коробка немного помятая, но при этом все целое.

В комплекте:

  1. Квадрокоптер.
  2. Джойстик для управления.
  3. Инструкция на английском и китайском языках.
  4. Usb зарядка.
  5. 2 запасных винта.

Eachine H8 Mini прошел сырой снег, ветер, кусты и провода.

Плохо что не заказал с дополнительными аккумуляторами. Заряда хватает всего на 5 мин. А спустя 3-4 месяца летать стал еще меньше времени.

Eachine H8 Mini прошел сырой снег, ветер, кусты и провода. Но спустя 9 месяцев он до сих пор работает. Немного разломали разъем коннектора подключения аккумулятора, перестал работать 1 синий светодиод (видать от падений в сырой снег). На корпусе появились царапины, но без них ни куда не деться. Подробнее смотрите в видео обзоре мини квадрокоптер Eachine H8 Mini.

Плюсы:

  • низкая стоимость,
  • живучесть, но это возможно мне повезло,

Минусы

  • относительно небольшое время полета,
  • легкий сдувает даже небольшим ветром,
  • управление немного тяжелое, резко набирает высоту, плохо держится на месте. На улице летать отлично.


квадрокоптер Eachine H8 Mini.

Вывод можно сделать только один. Покупать можно, для детей. Ребенок научится управлять своим первым квадрокоптером. И при этом если ребенок сломает своего летающего дрона ни так жалка. Но если у вас был квадрокоптер данный вам не понравиться.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
12.2 - Дисплей Nextion урок 2. Подключаем и передаем данные на Arduino. http://portal-pk.ru/news/212-122---displei-nextion-urok-2-podklyuchaem-i-peredaem-dannye-na.html Константин Portal-PK 2019-08-30T07:57:42+03:00 Создавать проекты, и загружать картинки в Nextion Editor мы научились в предыдущем уроке. Сегодня продолжаем осваивать работу с дисплеем Nextion, также подключим данный устройство к Arduino.

 работу с дисплеем Nextion, также подключим данный устройство к Arduino.

Но прежде чем начать сегодняшний урок хотелось бы напомнить некоторые особенности работы с дисплеям.

Знание которых поможет вам сэкономить время при разработке проектов:

1. Команды заканчивается тремя байтами "0xff 0xff 0xff"
2. Все команды и параметры находятся в ASCII
3. Все команды написаны строчными буквами.

Любая электроника нуждается в корпусе, исполнительном механизме. Где же заказать изготовление деталей? Для данных работ отлично подойдет ООО «М-Техника».

Основные направления деятельности компании:

  • изготовление деталей и металлических изделий различной сложности;
  • нанесение защитных и декоративных покрытий гальваническим способом на металлоизделия заказчика;
  • термообработка металлоизделий;

Вернемся к нашему уроку. Первое что мы сделаем это добавим страницу в наш проект для этого воспользуемся областью вывода списка страниц.

Добавляем Страницу с названием Button.


Добавляем страницу с названием Button.

Сейчас у нас есть 2 страницы. Как же нам сделать переключения между страницами. Переключает между страницами можно командой:

page Button или page 1

Переключение происходит по имени страницы или по ее индикатору. Для меня проще по имении. Вы можете использовать и по индексу страница.

Куда же добавить данную команду?
В данном уроке мы сделаем переключение со страница Logo с задержкой в 3 сек на страницу Button.
Для этого нажмем на страницу Logo и в обработчике событий загрузки страницы добавим следующие строки.

В данном уроке мы сделаем переключение со страница Logo с задержкой в 3 сек

Первая строка delay=3000 работает аналогично delay() в Arduino IDE. Задержка 3000 мс.

Все параметры и команды вы можете посмотреть в официальной документации. Здесь есть кое-какие ошибки в синтаксисе. Но описано все подробно.

Давайте сделаем индикатор загрузки, через сколько мы будем перенаправлены на с траницу Button. Для этого добавим прогресс бар, и в его свойствах добавим цикл.

добавим прогресс бар

Как поменять цвет прогресс бара, и прочие настройки расскажу в видео.

прогресс бар, и в его свойствах добавим цикл.

Из цикла видно, что мы добавляем по 1 к свойству j0.val. Это значение заполнения школы в свойствах прогресс бара.

Прогресс бар. Отображает заполненную на заданное значение процентов линейку.

  • Sta – возможные значения: solid color и image
  • dez – направление. Возможные значения:
    • horizontal – по горизонтали
    • vertical – по вертикали
  • bco – цвет при заполнении 0%. Этот атрибут появляется при выборе значения solid color в атрибуте sta
  • pco – цвет при заполнении 100%. Этот атрибут появляется при выборе значения solid color в атрибуте sta
  • bpic – индекс картинки кнопки при заполнении в 0%. Этот атрибут появляется при выборе значения image в атрибуте sta
  • ppic – индекс картинки при заполнении в 100%. Этот атрибут появляется при выборе значения image в атрибуте sta
  • val – наполнение. Возможные значения: от 0 до 100.
  • x и y – координаты вставки прогресс бара
  • w и h – ширина и высота прогресс бара.

Прогресс бар не будет обновляться если не добавить переменную

doevents //обновление экрана во время цикла

Приветственная страница готово.


Оформим страницу Button.

Оформим страницу Button.

Добавим прогресс бар и кнопку с двумя состояниями.

-Кнопка с двумя положениями.

  • bco0 – цвет переключателя в положении 0. Этот атрибут появляется при выборе значения solid color в атрибуте sta
  • bco1 – цвет переключателя в положении 1. Этот атрибут появляется при выборе значения solid color в атрибуте sta
  • pic0 – индекс картинки переключателя в положении 0. Этот атрибут появляется при выборе значения image в атрибуте sta
  • pic1 – индекс картинки переключателя в положении 1. Этот атрибут появляется при выборе значения image в атрибуте sta
  • picс0 – индекс вырезанной картинки переключателя в положении 0. Этот атрибут появляется при выборе значения crop image в атрибуте sta
  • picс1 – индекс вырезанной переключателя в положении 1. Этот атрибут появляется при выборе значения crop image в атрибуте sta
  • val – положение переключателя. Возможные значения 0 и 1
  • x и y – координаты вставки кнопки
  • w и h – ширина и высота кнопки.

В атрибутах кнопки sta поменяем значение на image

В атрибутах кнопки sta поменяем значение на image. И подгрузим картинки в поля: pic0 и pic1.

И подгрузим картинки в поля: pic0 и pic1

В свойствах кнопки добавим такой код, который отправится на Arduino при нажатии.

В свойствах кнопки добавим такой код, который отправится на Arduino при нажатии.

Просто я не использую стандартную библиотеку Nextion.h. Поэтому формировать команды нужно вручную. Но на мой взгляд это оправданно. Как вы считаете, пишите в комментариях.

С дизайном и подготовкой в Nextion Editor закончили. Сейчас нашу прошивку можно загрузить в дисплей.
Подключаем дисплей Nextion к Arduino NANO по схеме.

Подключаем дисплей Nextion к Arduino NANO по схеме.

Подключение к Arduino UNO аналогично.

// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект mySerial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 8, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 9, необходимо соединить с выводом RX дисплея
SoftwareSerial mySerial(8, 9);
byte flag = 0;
byte i = 0;
// переменная для хранения данных
String data;
// функция отправки конца команды
// команда поступающая в дисплей должна кончаться символами «0xFF0xFF0xFF»
void comandEnd() {
  for (int i = 0; i < 3; i++) {
    mySerial.write(0xff);
  }
}
// отправка на Nextion (номер экрана, название переменной) + данные
void SendInt(String dev, int data)
{
  mySerial.print(dev);   // Отправляем данные dev(номер экрана, название переменной) на Nextion
  mySerial.print("=");   // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion 
  mySerial.print(data);  // Отправляем данные data(данные) на Nextion
  comandEnd();
  dev = "";    // Очищаем переменную
  data = "";   // Очищаем переменную
}
void setup() {
   // открываем последовательный порт
  mySerial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
    // ждём данные от дисплея
if (mySerial.available()) {
    char inc;
    inc = mySerial.read();
    data += inc;
    if (inc == 0x0A) { //конец команды
      // если пришёло 'on'
        if (data.indexOf("on") >= 0) {
          flag = !flag;
          digitalWrite(LED_BUILTIN, flag);   // turn the LED on (HIGH is the voltage level)
          SendInt("Button.bt0.val", flag);
        }
      data = "";
    }
  }
  if (flag)
  {
    SendInt("Button.j0.val", i);    //Передаем Свойства и чифры
    i++;
    delay(20);
      if (i==100)
        {
          flag = 0;
          digitalWrite(LED_BUILTIN, flag); 
          i=0;
          SendInt("Button.j0.val", i);    //Передаем Свойства и чифры
          SendInt("Button.bt0.val", flag);    //Передаем Свойства и чифры
        }
    }
}

Скетч также подойдет для обоих плат. При желании можно использовать и на A rduino MEGA, ESP32, ESP8266 и пр.

У данной платы всего 1 аппаратный Serial Port. Будем использовать программный порт. Для этого нужно установить и подключить библиотеку SoftwareSerial.h.

// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект mySerial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 8, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 9, необходимо соединить с выводом RX дисплея
SoftwareSerial mySerial(8, 9);

Следующие две функции формируют и отправляют цифровые параметры на дисплей.

// функция отправки конца команды
// команда поступающая в дисплей должна кончаться символами «0xFF0xFF0xFF»
void comandEnd() {
  for (int i = 0; i < 3; i++) {
    mySerial.write(0xff);
  }
}
// отправка на Nextion (номер экрана, название переменной) + данные
void SendInt(String dev, int data)
{
  mySerial.print(dev);   // Отправляем данные dev(номер экрана, название переменной) на Nextion
  mySerial.print("=");   // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion 
  mySerial.print(data);  // Отправляем данные data(данные) на Nextion
  comandEnd();
  dev = "";    // Очищаем переменную
  data = "";   // Очищаем переменную
}

Здесь мы считываем полученные параметры и сравниваем, если пришла команда то выполняем.

    // ждём данные от дисплея
if (mySerial.available())  // ждём данные от дисплея
{
    char inc;
    inc = mySerial.read();
    data += inc;
    if (inc == 0x0A) { //конец команды
        if (data.indexOf("on") >= 0) // если пришёло 'on'
        { 
        // делаем что-то
        }
      data = "";
    }
  }

Эта строчка отправляет состояние кнопки на дисплей. Для чего это нужно? Чтобы не получилось так, что на дисплее кнопка нажата, а светодиод не горит.

    SendInt("Button.j0.val", i);    //Передаем значение для заполнения прогрксс бара

Эта функции отправляет процент заполнения прогресс бара.

    SendInt("Button.bt0.val", flag);    //Передаем состояние кнопки

Более подробно объясняю в видео. Если есть вопросы пишите на форум.

Если вам интересна данная тема пишите в комментарии.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
Файловая система SPIFFS в ESP8266 и ESP32 http://portal-pk.ru/news/211-failovaya-sistema-spiffs-v-esp8266-i-esp32.html Константин Portal-PK 2019-08-27T16:24:22+03:00 У микроконтроллеров ESP8266 и ESP32 есть своя файловая система SPIFFS (Serial Peripheral Interface Flash File System). Из названия понятно, что она работает по шине SPI.

SPIFFS аналогична файловой системе компьютера , но имеет ряд ограничений. Она позволяет создавать, редактировать файлы в тестовых форматах.
Загрузить можно файлы в формате: "txt", "htm", "html", "js", "json", "c", "h", "cpp", "css", "xml" и другие текстовые документы. Данные документы можно без труда отредактировать удалить. Также можно загрузить графические элементы в формате: "png", "jpg", "gif", "ico" и пр. Что позволяет реализовать веб-интерфейс для управления ESP8266 или ESP32.
В интернет источниках не раз встречал информацию о том, что нельзя создавать директории в файловой системе SPIFFS. Но в уроках Сергея Третьякова по созданию web-интерфейса, используются и папки. Возможно, что ситуация изменилась и создания директорий доработали.
Кстати у Сергея достаточно понятные и доступные видео уроки по созданию web-интерфейся для управления проектом на ESP8266. При желании можно доработать данные примеры и реализовать, что-то подобное на ESP32.

Создать текстовый документ можно напрямую в коде. Но вот для загрузки картинки понадобиться специальный плагин, который устанавливается в Arduino IDE. Для каждой версии ESP свой плагин.

Для установки в папке программы Arduino создайте папку tools. Если ее нет и скопируйте туда содержимое вот из этого архива.
Должно получиться вот так.

Arduino создайте папку tools

Одна папка для работы с файловой системой ESP32, вторая с ESP8266 .
Затем необходимо перезагружаем Arduino IDE.

перезагружаем Arduino IDE

После чего перейдем в пункт меню Инструменты. И у нас должны появиться еще 2 пункта меню. Если у вас нет данных пунктов в меню, попробуйте обновить Arduino IDE до более новой версии.

папке со скетчем создать папку data

Чтобы загрузить файлы, необходимо в папке со скетчем создать папку data. И поместить туда нужные файлы.
Я бы порекомендовал взять пример для проверки вот от сюда. Здесь реализована работа с файловой системой и плюс визуальный редактор.
Причем скетч адоптирован для обоих плат и для 32 и для 8266.

Скачиваем архив. Заходим в папку FSBrowser. Открываем файл FSBrowser.ino. Ставим все необходимые библиотеки. Они ставятся из менеджера библиотек.
Прошиваем плату и загружаем файлы для этого наживаем на загрузчик.

Прошиваем плату и загружаем файлы для этого наживаем на загрузчик.

Внимание! При прошивке и загрузке файлов на некоторых версиях ESP32 нужно нажимать кнопку boot, которая расположена на плате. Это нужно сделать когда начинается прошивка. Удерживаем ее около 3 сек. После чего побегут проценты загрузки.

После удачной загрузки заходим в монитор порта и смотри наш Ip адрес.

заходим в монитор порта

В браузере переходим по адресу http://<ваш_IP>/edit И видим редактор и список всех загруженных файлов.

едактор и список всех загруженных файлов

Ссылка http://esp8266fs.local/edit не работает. Понятно что проблема с DNS, но пока не проверял по какой причине. Если есть предложения как решить данную задачу пишите, буду благодарен.
В данном редакторе можно создавать и редактировать текстовые документы. Загружать напрямую на ESP32 или ESP8266 файлы .

Возможности данного редактора можно расширить. Если кому интересно пишите на форум. Подскажу или напишу статью, что нужно для этого сделать.

Визуальный редактор неоглядно показывает роботу файловой системы. И упрощает работу с ними.


Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Esp32 управляем реле по средствам bluetooth. Arduino ide http://portal-pk.ru/news/210-esp32-upravlyaem-rele-po-sredstvam-bluetooth-arduino-ide.html Константин Portal-PK 2019-08-26T15:14:35+03:00 Как управлять реле по Wi-Fi и bluetooth уже рассказывал. Сегодня немного расширим данную тему и попробуем в работе новый, быстрый мокро контроллер у которого на бору двух ядерный процессор, Wi-Fi и bluetooth. Да! Вы правильно поняли, сегодня будем подключать реле к ESP32. Посмотрим на сколько данный МК быстрее стандартных bluetooth модулей: HC-05 и HC-06.

Итак приступим. Для начало подключим все вот по такой схеме.

подключать реле к ESP32

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

Код для ESP32 и управление через bluetooth.

#include "BluetoothSerial.h" // библиотека
BluetoothSerial ESP_BT; // Объект для Bluetooth
int incoming; // значение с Bluetooth
const int relayPin = 2; // пин подключения реле
void setup() {
  ESP_BT.begin("Portal-PK"); // Имя Bluetooth
  pinMode (relayPin, OUTPUT);// подключаем реле
}
void loop() {  
  if (ESP_BT.available()) // Если получили по Bluetooth 
  {
    incoming = ESP_BT.read(); // Считываем информацию
    if (incoming == 48)
        {
        digitalWrite(relayPin, LOW); // реле включили
        ESP_BT.println("Relay On — Portal-Pk.ru");
        }      
    if (incoming == 49)
        {
        digitalWrite(relayPin, HIGH); // реле выключиди 
        ESP_BT.println("Relay Off — Portal-Pk.ru");
        }     
  }
  delay(20);
}

Код прокомментирован и в видео объясняю с «заиканием» каждую строчку. Если, что то не понятно задавайте вопросы на форуме.

Таблица ASCII

Таблица ASCII

При съемках видео ступил. Символы выводил как число. Просто нужно получаемую информацию из порта получать как char. И не нужно заморачиваться с таблицей ASCII.

#include "BluetoothSerial.h" // библиотека

BluetoothSerial ESP_BT; // Объект для Bluetooth

char incoming; // значение с Bluetooth
const int relayPin = 2; // пин подключения реле

void setup() {
  ESP_BT.begin("Portal-PK"); // Имя Bluetooth
  pinMode (relayPin, OUTPUT);// подключаем реле
}

void loop() {
  
  if (ESP_BT.available()) // Если получили по Bluetooth 
  {
    incoming = ESP_BT.read(); // Считываем информацию

    if (incoming == '0')
        {
        digitalWrite(relayPin, LOW); // реле включили
        ESP_BT.println("Relay On — Portal-Pk.ru");
        }
        
    if (incoming == '1')
        {
        digitalWrite(relayPin, HIGH); // реле выключиди 
        ESP_BT.println("Relay Off — Portal-Pk.ru");
        }     
  }
  delay(20);
}    

Для управления можно воспользоваться bluetooth терминалом. Как рассказываю тут: Урок11 - Bluetooth модуль HC-06. Управление Arduino стелефона.

Или установить приложение которое можно скачать ниже.

приложение которое можно скачать ниже

Вывод можно сделать следующий. ESP32 работает быстрее и стабильнее. При этом стоимость дешевле чем купить Arduino NANO и Bluetooth модуль HC-06.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Образовательная робототехника http://portal-pk.ru/news/209-obrazovatelnaya-robototehnika.html Константин Portal-PK 2019-08-23T07:48:21+03:00 Каждый мальчишка, да и многие девочки мечтают построить свою ракету, робота, самолет и т.д. Полететь в космос или на луну. Бороздить бесконечные просторы космоса. На данной почве интерес к современным технологиям у молодежи с каждым годом растет. Одно из самых перспективных направлений, это робототехника. Данное направление становиться все более перспективным и доступным. Сегодня не нужно придумывать из чего собрать робота. Где и что купить для открытия класса робототехники. Компания Базис предлагает готовые решения для вашего ребенка. И так же для вашего класса робототехники. Даже если у вас уже действующая школа робототехники на сайте компании вы найдете новые и уникальные Образовательные робототехнические модули ТЕХНОЛАБ

Для вашего ребенка хорошим выбором будет: Образовательный робототехнический модуль "Предварительный уровень"

Образовательный робототехнический модуль "Предварительный уровень"

Данный набор ориентирован на то, чтобы ваш ребенок собрал пару вариантов различных роботов. И даст возможность ребенку раскрыть свой творческий потенциал.

Классам робототехники и продвинутым юным конструкторам роботов будет интересен Образовательный робототехнический модуль "Экспертный уровень"

Образовательный робототехнический модуль "Экспертный уровень

Набор предназначен для проведения занятий в классах углубленного изучения информатики и робототехники.
Модуль способствует развитию системы универсальных учебных действий в составе личностных, регулятивных, познавательных и коммуникативных действий и практико-ориентированной деятельности обучающихся, в т. ч. с использованием информационно-коммуникационных технологий (ИКТ).
Кроме образовательных модулей на сайте можно найти конструктор модульных станков.

конструктор модульных станков

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

Еще одной полезным инструментом для школы робототехники будет Образовательный модуль "3D Прототипирования"

3D Прототипирования"

Который научить работать с 3D моделями:
1. Сканирование объемных деталей.
2. Научит печатать деталей на 3D принтере.
Работа с 3D принтером и сканером помогут на наглядном примере изучит программы для создания и редактирования 3D моделей и основы работы с ЧПУ станками.

Как видно из возможных вариантов в классе робототехники можно открыть несколько веток развития. И распределить образовательный процесс по интересам учеников.

]]>
Урок 12.1 -Nextion Editor урок 1. Скачиваем и первый пример hmi. http://portal-pk.ru/news/208-nextion-editor-urok-1-skachivaem-i-pervyi-primer-hmi.html Константин Portal-PK 2019-08-22T10:10:15+03:00 Для моего недавнего проекта была поставлена задача управление с дисплея. И достаточно красивая графика. Выбор пал на дисплей линейки Nextion.

дисплей линейки Nextion

Это обусловлено тем, что у данного дисплея есть ряд преимуществ:

1. Собственный редактор прошивки Nextion Editor. В котором достаточно просто сделать интерфейс, при этом не нужно много писать кода.

Nextion Editor

2. Сенсорный экран. Все активные элементы привязываются автоматически и нет требуется калибровка. Все дисплеи идут откалиброванные с завода.

3. Не расходует мощности нашей Arduino. Так как дисплей оснащен своим микроконтроллером.


Минусы на мой взгляд:

1. Резистивный сенсор. Срабатывает только при нажатии. Что достаточно не привычно. Но при этом срабатывает достаточно быстро и точно.

2. Ограничения разработки возможностью редактора nextion editor . Некоторые задачи не возможно реализовать. Или приходиться делать костыли.

3. Nextion Editor достаточно коряво выводит русские буквы и нет переноса по словам. Только буквенный перенос на новую строчку для любого шрифта.

4. Не поддерживаются картинки с прозрачным фоном . Заливает их черным фоном.

Но это не так критично. Сделать можно очень красивые и сложные панели управления.

Купить дисплей Nextion можно тут .

Скачать редактор Nextion Editor можно тут.

Скачать редактор Nextion Editor

Также можно установить Nextion Editor на OS Linux . Я установил на Ubuntu. Для этого устанавливаем PlayOnLinux. Ищем наше приложения.

Также можно установить Nextion Editor на OS Linux

Нажимаем установить и программа PlayOnLinux автоматически все установит.

После установки запускаем программу. Создаем новый проект для этого в пункте меню выбираем New, вводим название проекта lesson-one и сохраняем. Наш проект будет сохранен в файл lesson-one. hmi. В окне Setting во вкладке Device выберем модель дисплея.

Setting во вкладке Device

Во вкладке Display выбираем ориентацию дисплея и кодировку iso-8859-5, для поддержки русского языка. Во вкладке project можно установить пароль для доступ к проекту.

кодировку iso-8859-5

После создания проекта откроется рабочее поле

После создания проекта откроется рабочее поле

1. Главное меню.

2. Меню управления выравниванием и порядком элементов.

3. Библиотека элементов.

4. Область отображения.

5. Список страниц проекта.

6. Библиотека изображений /Библиотека шрифтов.

7. Окно вывода результатов компиляции.

8. Окно для ввода кода, выполняемого при возникновении события.

9. Зона редактирования атрибутов выбранного элемента.


Давайте добавим картинку в наш проект на Arduino для этого воспользуемся вкладкой загрузки изображений в проект. Загружать нужно картинки соответственного размер. Если разрешение вашего экрана 480х320. Картинка должна быть такого же размера. Программа не умеет подгонять размеры картинок. Это касается и других элементов.

Также не поддерживается прозрачный фон, он его заливает черным цветом.

Давайте добавим картинку в наш проект на Arduino

Основные элементы
— Добавить изображение. При нажатии этой кнопки откроется стандартное окно выбора файла изображения на диске.
— Удалить выделенное изображение.
— Заменить выделенное изображение.
— Вставить новое изображение перед выделенным.
— Поднять изображение в списке вверх. Индексы изображений будут пересчитаны для обеспечения последовательности сверху вниз.
— Опустить изображение в списке вниз.
— удалить все изображения.

Сейчас мы можем использовать наше изображение в проект.

Давайте сделаем его фоном нашей первой страницы.

свойства страницы pages0, sta на image

Поменяем свойства страницы pages0, sta на image и выберем нашу картинку.

свойства страницы pages0, sta на image

Наш первый проект готов.

Нажимаем кнопку Debug в панели меню. В новом окне откроется пример, как это будет отображаться на дисплее Nextion.

Давайте переименуем страницу с нашим логотипом на Logo. В следующем уроке расскажу для чего я это сделал.

 переименуем страницу с нашим логотипом на Logo

И еще один небольшой нюанс использования программы Nextion Editor . Пока вы не нажмете кнопку Debug или Compile. Бинарный файл для прошивке не обновиться. Можно сделать много изменения, загрузить на дисплей, а изменений нет. Возможно это в моей версии программы или в Linux она себя так ведет. Но у меня такая ситуация была.


Прошить дисплей Nextion можно двумя способами:

1. С помощью UART программатора. Для прошивки воспользуйтесь пунктом меню Upload. Это достаточно долгий процесс. И в Linux нужно заморочиться с портами. Поэтому я пользуюсь вторым способом.

 С помощью UART программатора

2. П рошивка с Sd карты . Для этого в пункте меню file выбираем open builed folder.

Прошивка с Sd карты

Выбираем файл lesson-one.tft и копируем его на карту памяти. Карту предварительно нужно отформатировать в формате FAT32. Карта памяти должна быть 10 класса.


Прошивка дисплея Nextion.

Отключаем дисплей. Ставим флешку. Подаем питание на дисплей. Если у вас дисплей задумался и после вывел демонстрационную информацию. Ваша флешка не подходит. Если загрузил экран на котором показывает скорость 9600 и больше ни чего не происходит значит у вас на флешке есть постороннии файлы.

Прошивка дисплея Nextion.

При прошивке у вас побегут проценты загрузки прошивки. При завершении прошивка. Отключите дисплей. Достаем флешку. И можно пользоваться дисплее.

дисплея Nextion

В нашем случае мы вывели логотип. В следующем уроке научим дисплей общаться с Arduino.

Если вам интересна данная тема пишите в комментарии.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
Orange pi для игры, мультимедийная станции и для работы в офисе. http://portal-pk.ru/news/207-orange-pi-dlya-igry-multimediinaya-stancii-i-dlya-raboty-v.html Константин Portal-PK 2019-08-20T12:05:19+03:00 Однопалатных компьютеров сегодня очень много. Разных производителей и различных моделей. Можно найти mini PC для решения различных задач.
Сегодня я расскажу про недорогую линейку однопалатных мини ПК Orange pi. Данный однопалатным компьютером я пользуюсь уже больше 2 лет.

недорогой одноплатный компьютер Orange pi win plusТак как у меня постоянно не хватало свободного ПК Для работе в офисе или для просмотра youtube. Поэтому больше 2 лет назад я купил недорогой одноплатный компьютер Orange pi win plus. Почему именно этот мини ПК? Дело в том, что он был недорогой с хорошими характеристики. Подробные характеристики и фото смотрите тут.
Но после покупки я понял, что для него очень мало операционных систем и стабильно работает только Armbian. Также пришлось потратить много времени, что бы настройкой воспроизведения видео. Пару дней танцев с бубном. Пк заработок. Работает по сей день. Что я на нем делаю:
1. Редактирование документов и выкладываю материалы на сайт.
2. Смотрю youtube.
И на этом его возможности задачи заканчиваются. Может у вас совсем другие результаты и вы можете подсказать более интересное решения для использования данного Одноплатника. Пишите в комментарии.

Второй однопалатный компьютер Orange pi LiteВторой однопалатный компьютер Orange pi Lite, я приобрел для создания ретро приставки. Для данного однопалатного мини ПК доступно много дистрибутивов. И сделать на нем можно мультимедийную станции, также использовать как персональный компьютер. Подробнее почему именно данный Mini PC я использую и какую ОС поставить читайте в моей статье: Игровая консоль на orange pi. Выбор железа и ОС.
Приставку я собрал и играем с ребенком. Да и гости не прочь поиграть. Так же есть желающие, чтобы я помог им собрать такую же.
Если вам интересна данная тема пишите в комментарии. Если будут комментарии я в свою очередь напишу статью как собрать ретро приставку на недорогом одно платном ПК и может сниму видео. Фото и характеристик Orange pi Lite сотрите тут.

Orange pi Lite менее производительный чем Orange pi win plus

Технические моменты не буду сравнивать, в интернете их очень много. Только поделюсь своим мнением об использовании данный мини ПК. Несмотря на то что Orange pi Lite менее производительный чем Orange pi win plus у него больше возможностей из-за большего выбора дистрибутивов ОС. И при этом они намного стабильнее работают. За 2 года использования Orange pi win plus из всех ОС Обновилась только Armbian. Многие вообще перестали поддерживать данную плату. И на официальных сайтах уделены дистрибутивы. И найти их можно на торрентах или на файлообменниках. Что не внушает доверия.

Orange pi Lite

Конечно это все для различения. Данную линейку мини ПК я планирую использовать в качестве Сердца моего умного дома. Но об это в следующий раз.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Онлайн программа для симуляции готового G-Code для ЧПУ. http://portal-pk.ru/news/206-onlain-programma-dlya-simulyacii-gotovogo-g-code-dlya-chpu.html Константин Portal-PK 2019-08-12T09:51:47+03:00 Я уже рассказывал как можно сделать чертеж в формате .svg: Inkscape где скачать русскую версию. Настройка Inkscape. И потом из данного файла сгенерировать G-code для ЧПУ станка: Бесплатный онлайн генератор G-Code для ЧПУ станка — MakerCAM.

Как же легко и безболезнен проверить полученный код. Можно воспользоваться управляющей программой для ЧПУ станка. Например universal g-code sender. Как скачать и установить данную программу тоже рассказывал Universal G-Code Sender программа для управления ЧПУ станком.

Но что делать если работать нужно с флешки. И у станка нет монитора. Например как у моего последнего ЧПУ станка. Или у станка стоит компьютер без интернета или без возможности редактировать G-Code. Также на производстве нет времени на это.
Для проверки G-code онлайн я использую вот такую программу: G-Code Q'n'dirty toolpath simulator.
Данная программа работает в любом браузере.

G-Code Q'n'dirty toolpath simulator.

Для проверки кода достаточно перетащить файл или скопировать код и вставить в поле слева.

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

время обработки, минимальное и максимальное перемещение по осям.Справой стороны у нас выводиться 3D модель. Которую можно покрутить. Красными линиями обозначен холостое перемещение. Белыми траектория обработки.

выводиться 3D модель
Ниже приведен вид сверху.

Ниже приведен вид сверху

Вот так будет выглядеть G-code, который мы сделали в MakerCAM в статье: Бесплатный онлайн генератор G-Code для ЧПУ станка — MakerCAM.
будет выглядеть G-code, который мы сделали в MakerCAM
Данная программа очень похожа на universal g-code sender.
И пользоваться ей на столько же просто.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Бесплатный онлайн генератор G-Code для ЧПУ станка — MakerCAM http://portal-pk.ru/news/205-besplatnyi-onlain-generator-g-code-dlya-chpu-stanka-—-makercam.html Константин Portal-PK 2019-07-23T11:40:19+03:00 Я уже рассказывал как в Inkscape можно начертить 2D деталь. Если не читали смотреть тут: Inkscape где скачать русскую версию. Настройка Inkscape
После создания чертежа в формате .svg из него нужно сделать G-code. Это можно сделать и с помощью Inkscape. Но в данной программе делать, это достаточно долго и много ненужных операций. Для себя открыл онлайн генератор кода MakerCAM.

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

Данная программа доступна из любого современного браузера. Не нужно ни чего скачивать на компьютер.

 инструменты которые позволяют нарисовать круг, прямоугольник, эллипс, многоугольник и даже звезду
В MakerCAM можно создавать простые элементы тут есть инструменты которые позволяют нарисовать круг, прямоугольник, эллипс, многоугольник и даже звезду .

MakerCAM можно создавать простые элементы

Но рисовать все ровно проще в Inkscape.
Итак, возьмем заготовку которая сделана в Inkscape. И сделаем наш первый G-code в MakerCAM.

Выбираем файл с компьютера, в меню выберем File - Open SVG File

Итак, возьмем заготовку

Выбираем файл с компьютера, в меню выберем File - Open SVG File .

меню CAM


В меню CAM находятся все основные операции обработки.
Пункт меню drill operation отвечает за сверление.
Выбираем все нужные отверстия удерживая клавишу Shift. И настраиваем сверление.

drill operation отвечает за сверление
name - название операции, можно не менять;
tool diameter - диаметр инструмента;
target depth - глубина сверления;
drill location - центр отверстия, оставляем path center;
hole spacing - расстояние между отверстиями;
safely height - безопасная высота перемещения;
stock surface - начальная высота сверления;
peck distance - заглубление сверла за один прием, выставляем в зависимости от жесткости материала;
plunge rate - скорость врезания режущего инструмента;
После заполнения всех полей должны получить вот такой результат.

После заполнения всех полей должны получить вот такой результат.
Как видим, диаметр сверла выставил 5 мм. А отверстия изначально нарисованы 8 мм. Но несмотря на это сверление будет производиться в центре отверстия.


Сейчас выберем центральный круг сделаем выборку на глубину 3 мм. Выбираем пункт меню pocket operation.

Сейчас выберем центральный круг
name - название;
tool diameter - диаметр фрезы;
target depth - глубина фрезерования;
safely height - безопасная высота перемещения;
stock surface - начальная высота обработки;
step over - процент выборки от диаметра фрезы, не рекомендую ставить больше 50%.
step down - глубина фрезерования за один проход;
feed rate - скорость подачи по осям X, Y;
plunge rate - скорость врезания режущего инструмента;
direction - направление движения рабочего инструмента: по часовой стрелке, или против .

Дальше вырежем нашу деталь, для этого воспользуемся пунктом меню profile operation.

вырежем нашу деталь, для этого воспользуемся пунктом меню profile operation

name - название;
tool diameter - диаметр инструмента;
target depth - глубина фрезерования;
Inside/Outside - вырезать внутри или снаружи, ставим Outside (снаружи);
safely height - безопасная высота перемещения инструмента;
stock surface - начальная высота обработки;
step down - глубина реза за один проход;
feed rate - скорость подачи режущего инструмента;
plunge rate - скорость фрезерования;
direction - направление движения рабочего инструмента: по часовой стрелке, или против .


Обработку детали выбрали сейчас нужно все перепробовать в G-code. Для этого в меню CAM выбираем пункт calculate all.
После чего все траектории обработки будут помечены красным полупрозрачным цветом.

calculate all
Сейчас нужно сохранить в файл.
Выбираем в CAM пункт export gcode.

CAM пункт export gcode
Не забутке выделить все операции. Они должны подсвечиваться синим цветом. В противном случае у вас будет обработка операции которая была выделена остальные не сохраняться.


Сейчас можно зайти в любую программах в которой можно проверить G-code. В Linux нет нормальных программ для эмуляции работы ЧПУ станка. Для проверки кода я пользуюсь программой Universal G-code Sender. Про данную программу уже рассказывал вот тут: Universal G-Code Sender программа для управления ЧПУ станком.
Готовый код можно скачать тут.


Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Доработка бюджетного 3D принтера Anet A8 - Prusa i3. http://portal-pk.ru/news/204-dorabotka-byudzhetnogo-3d-printera-anet-a8---prusa-i3.html Константин Portal-PK 2019-07-19T07:01:10+03:00 В интернете очень много негативных отзывов о бюджетном 3D принтере Anet A8. Но покупая 3D принтер за 8-9 т. руб. Не стоит ожидать что он будет точным, быстрым и вам не нужно будет его калибровать и модернизировать. Калибровать нужно даже самый дорогой принтер .
Я как счастливый обладатель нового принтера Anet , печатал пластикам PLA и без дополнительных доработок. Но когда возникла потребность печатать ABS пластики по 8-10 часов в день. Без модернизации тут не обойтись.

Немного рекламы. Заходите на сайт спонсора данной статьи арминда.рф. На сайте вы найдете много полезно для вашего производства в том числе Насосы для пропана и нефтепродуктов, компрессоры для СУГ.


Список моих доработок:

1. Распечатал крепления двигателя по оси Y. Крепление с 2 шпильками которые проходят по всему основанию и фиксируются во втором креплении. Данные шпильки играют роль начинателя ремня по оси Y .
Скачать модели для печати можно тут https://www.thingiverse.com/thing:2045010

Распечатал крепления двигателя по оси Y

шпильки по оси Y.

Данные шпильки играют роль начинателя ремня по оси Y.
2. Сделал более надежную фиксацию, для пружинок крепления стола . Для этого распечатал вот такие модельки.

пружинок крепления стола

надежную фиксацию
Скачать модели для печати можно тут https://www.thingiverse.com/thing:2350276


3. Напечатал крепления для вентилятора обдува экструдера . Также кнопку для винтика нажима механизма заправки филамента в экструдер.

крепления для вентилятора обдува экструдера
Скачать модели для печати можно тут https://www.thingiverse.com/thing:2257772


4. Поменял свисток на турбине. Но это не нужная модификация при печати ABS пластиком . Все модернизации которые сделал сразу после покупки 3Д принтера тут: Обзор 3D принтера Anet A8. Сборка. Наладка. Примеры печати


5. Сделал дополнительную направляющую для пластика .

дополнительную направляющую для пластика


Скачать модели для печати можно тут http://www.thingiverse.com/thing:1795148


6. Так как шпильки по оси Z находятся в воздухе , при перемещении и при печати они очень сильно раскачиваются. Что приводит к ухудшению качества. Для решения данной проблему установил вот такие накладки с пластиковыми втулками, которые практически убрали данный колебания.

накладки с пластиковыми втулками

накладки с пластиковыми втулками
Скачать модели для печати можно тут http://www.thingiverse.com/thing:2174461


7. Также сделал натяжитель ремня по оси X .

натяжитель ремня по оси X
Скачать модели для печати можно тут http://www.thingiverse.com/thing:2291602


8. Для комфортной работы и для уменьшения нагрузки на шаговый двигатель экструдера . Сделал фиксаторы для катушки с филаментом. После чего катушка стала вращаться очень легко. И проворачивается по инерции.

уменьшения нагрузки на шаговый двигатель экструдера
Скачать модели для печати можно тут https://www.thingiverse.com/thing:1998669


9. Установил кнопку включения с предохранителем и со стандартным разъемом для подключения. Кнопку покупал тут http://s.click.aliexpress.com/e/b2LO95Gc

кнопку включения с предохранителем
Скачать модели для печати можно тут


10. На блок питания установил киллер 80х80. Который покупал тут http://s.click.aliexpress.com/e/bVb0pACo

11. Добавил 2 MOSFET транзистора . Один для нагрева стола второй для нагрева экструдера . Подключаем все вот по такой схеме.

Добавил 2 MOSFET транзистора для anet a8 по схеме
MOSFET транзисторы покупал вот тут http://s.click.aliexpress.com/e/FCc0VzA

Добавил 2 MOSFET транзистора

Один для нагрева стола второй для нагрева экструдера.


Скачать модели для печати можно тут https://www.thingiverse.com/thing:2086107

Более подробнее про доработку 3д принтера anet a8 смотрите в видео. Так как тут не все что я изменил. Просто нет фото и сделать сейчас не могу. Принтер стоит в закрытом корпусе.

Первая печать ABS пластиком после модернизации станка.

Первая печать ABS пластиком после модернизации станка.
Напечатал детали для фрезерного ЧПУ станка. Ушло около 2 кг пластика.

Напечатал детали для фрезерного ЧПУ станка. Ушло около 2 кг пластика.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
PathCAM — Программа генерации g-code для фрезерного ЧПУ станка из 3D моделей .stl или .obj. http://portal-pk.ru/news/203-pathcam-—-programma-generacii-g-code-dlya-frezernogo-chpu.html Константин Portal-PK 2019-07-18T07:13:32+03:00 Наткнулся недавно на программу которая может сгенерировать траекторию движения для фрезерных ЧПУ станков из 3D моделей в формате .stl или .obj .

Оборотите внимание также на конвертер интерфейсов. Повторители и конвертеры интерфейсов — это специализированное оборудовании, которое позволяет преодолеть ограничение определенных сред передачи данных. Реализуется этот процесс путем конвертирования информации в форму, доступную для применения в соответствующей среде.

И так вернемся обратно к наше программе. Вот что пишет автор о своем программном обеспечении:

«PathCAM - Программное обеспечение для генерации траекторий для роботов с ЧПУ! PathCAM - это простой и удобный инструмент для создания 2,5-мерных траекторий для вырезания форм из заготовки с помощью фрезерного станка с ЧПУ. PathCAM может подключаться напрямую к некоторым роботам с ЧПУ и может экспортировать простой .gcode для других.

PathCAM - Программное обеспечение для генерации траекторий для роботов с ЧПУ

PathCAM находится в стадии активной разработки! Помогите, попробовав инструмент и предоставив обратную связь и запросив дополнительные функции.»


Установить в PathCAM

Установить в PathCAM

Ubuntu

Сборка и запуск с помощью этих команд:

sudo apt-get install mono-devel mono-gmcs
git clone https://github.com/xenovacivus/PathCAM.git
cd PathCAM
xbuild
mono GUI/bin/Debug/PathCAM.exe

Windows

  • Скачать пакет PathCAM MSI
  • Кроме того, вы можете создавать исходные коды с помощью Mono или Visual Studio 2012.

Использование.

Начните с загрузки файла .stl или .obj - вы можете просто перетащить файл из файловой системы или воспользоваться кнопкой «Открыть файл».Перед загрузкой файла убедитесь, что раскрывающийся список для масштаба установлен правильно (большинство файлов в Thingiverse указаны в миллиметрах). Вы можете перемещать модели. Получив все, что вам нужно, попробуйте сгенерировать несколько путей.

  • Границы контрольных путей: добавляет траекторию, которая следует за ограничительной рамкой объекта на безопасной высоте перемещения. Полезно делать пробный прогон и следить за тем, чтобы инструмент был свободен от всех зажимов и т. Д.

Начните с загрузки файла .stl или .obj

  • Добавить контуры периметра: добавляет траектории, которые следуют за краями объекта. Траектории будут разделены на слои в зависимости от «Максимальной глубины резания» и будут выполнять два прохода вдоль каждого края: один черновой разрез, удаление основной массы материала и чистый разрез, подгоняя край до точного размера.


Сгенерированные пути инструмента вы можете сохранить их в файл .gcode

Сгенерированные пути инструмента вы можете сохранить их в файл . gcode или запустить их непосредственно из PathCAM на определенных станках (включая машины с GRBL !!!). Подключения к большему количеству станкам будут добавлены в будущем - если вы об этом думаете, скажите что-нибудь, и, возможно, он будет добавлен раньше!


Программа работает но у меня на Linux глючит. Возможно на Windows будет работать стабильнее.

Программа не является идеально. Но может кому-нибудь пригодиться.

]]>
Bluetooth HC-06 и ардуино. Приложение андроид для управления Реле с телефона. http://portal-pk.ru/news/202-bluetooth-hc-06-i-arduino-prilozhenie-android-dlya-upravleniya.html Константин Portal-PK 2019-07-16T11:34:25+03:00 Как подключить Bluetooth модель HC-06 или HC-05 рассказывал в Уроке 11 - Bluetooth модуль HC-06. Управление Arduino с телефона.

В уроке мы использовали стороннее приложения для Android телефона или планшета. Сегодня мы напишем свое приложение в mit app inventor. Подправим скетч из Arduino урока11, для работы с низкоуровневым реле. С высоко уровненным рее работать будет без изменения скетча. Чем отличаются высоко уровневые реле от низко уровневых. Низко уровневые включается, когда на сигнальны Пин реле подается LOW. Высоко уровневый включается, когда подадим HIGH. Конструктивные особенности и более подробную информацию ищите в интернете.

Приступим к приложению для Андроида , для этого воспользуемся самым простым решением app inventor 2. Если у вас возникли сложности с данной средой разработки у меня на сайте есть боле простые примеры написания приложений в данной среде разработки : Wi-Fi реле на NodeMCU. Управление Android приложением
Интерфейс программы будет выглядеть вот так.

Интерфейс программы app inventor 2
В приложение нужно добавить: BluetoothClient1 и Clock1 с интервалом обновления 100.
Кнопка «Bluetooth» осуществляет подключение к hc-06 модулю.
Копка «Disconnect» разрывает соединение.
Кнопки «On» и «Off» включают и выключают реле.
Блоки программы для подключения и отключения модулю HC-06 :

Блоки программы для подключения и отключения модулю HC-06:
Блок управления и вывода информации на дисплей.

Блок управления и вывода информации на дисплей.
Копка включения отправляет по блютуз каналу значение равное 1. Кнопка отключения отправляет 0.
Cloc1 это часы, проверяют информацию которая пришла по Bluetooth и выводит ее в текстовое поле Info.
Приложение на Android устройстве выгладить вот так.

Приложение на Android устройстве
После нажатия на кнопку «Bluetooth». У вас откроется окно выбора устройства.

После нажатия на кнопку «Bluetooth». У вас откроется окно выбора устройства.

Выбираете ваше устройство. После чего можно управлять реле. При нажатии на кнопку «On».

При нажатии на кнопку «On»

В поле Info выведется информация «Rele On — Portal-Pk.ru». При выключении реле на экран телефона будет строка «Rele Off — Portal-Pk.ru»

При выключении реле на экран телефона будет строка «Rele Off — Portal-Pk.ru»
Подключаем к Arduino UNO реле и модуль по схеме. Подключаем к Arduino UNO реле и модуль по схеме
Если у вас Arduino NANO, то реле и bluetooth модуль hc 06 подключить по схеме.

Arduino NANO, то реле и bluetooth модуль hc 06 подключить по схеме
Скетч bluetooth реле ардуино будет вот таким.

int LED = 5;
int val = 0;
void setup() {
  Serial.begin(9600); //Инициирует последовательное 
  //соединение и задает скорость передачи данных в бит/c (бод)
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}
void loop() {
  if (Serial.available() > 0) // пришли данные
  {
    val = Serial.read();
    if (val=='1')         // если 1 то включаем светодиод
     {
      digitalWrite(LED,LOW);
      Serial.print("Rele On - "); // вывод данных
      Serial.println("Portal-Pk.ru"); // вывод данных с переносом строки
     }
    if (val=='0')         // если 0 то выключаем светодиод
      {
        digitalWrite(LED,HIGH);
        Serial.print("Rele Off - "); // вывод данных
        Serial.println("Portal-Pk.ru");  // вывод данных с переносом строки
      }
  }
}

Если вы сделали все правильно, то у вас получиться вот такой результат.

 Arduino из урока: Bluetooth модуль HC-06. Управление Arduino с телефона

 bluetooth реле ардуино
Подключенная нагрузка будет включаться и выключаться . Если у вас работает наоборот возьмите код для Arduino из урока: Bluetooth модуль HC-06. Управление Arduino с телефона.

Сегодня мы разобрали связку ардуино андроид bluetooth . Планирую сделать машину с управлением по bluetooth . И много другое.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Урок 11 - Bluetooth модуль HC-06. Управление Arduino с телефона. http://portal-pk.ru/news/201-bluetooth-modul-hc-06-podklyuchenie-k-arduino-upravlenie.html Константин Portal-PK 2019-06-29T15:30:28+03:00 В предыдущей статье УправляемArduino через USB. Библиотека Serial.Я рассказал как можно управлять Arduino с компьютера. Bluetooth модуль устроит так, что он работает с библиотекой Serial. Поэтому Bluetooth является самым простым инструментом для беспроводного управления. Но у него тоже есть свои минусы и ограничения о которых я расскажу в следующих проектах.

Рассмотрим подключения на примере Bluetooth модуля HC-06 . Модуль подключается к 0 и 1 пинам ардуины.

Bluetooth модуля HC-06

Схема подключения Bluetooth модуля HC-06 к Arduono UNO.

Схема подключения Bluetooth модуля HC-06 к Arduono UNO

Схема подключения Bluetooth модуля HC-06 к Arduono NANO .

Схема подключения Bluetooth модуля HC-06 к Arduono NANO

Будите внимательны. Подключать нужно RX =>TXD, TX =>RXD.
Скетч будим использовать из статьи: Управляем Arduino через USB. Библиотека Serial .

int LED = 13;
int val = 0;

void setup() {
  Serial.begin(9600); //Инициирует последовательное 
  //соединение и задает скорость передачи данных в бит/c (бод)
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop() {
  if (Serial.available() > 0) // пришли данные
  {
    val = Serial.read();
    if (val=='1')         // если 1 то включаем светодиод
     {
      digitalWrite(LED,HIGH);
      Serial.print("Led On - "); // вывод данных
      Serial.println("Portal-Pk.ru"); // вывод данных с переносом строки
     }
    if (val=='0')         // если 0 то выключаем светодиод
      {
        digitalWrite(LED,LOW);
        Serial.print("Led Off - "); // вывод данных
        Serial.println("Portal-Pk.ru");  // вывод данных с переносом строки
      }
  }
}

Чтобы ни чего самостоятельно не писать для Android. Воспользуемся готовым приложением который умеет подключаться к Bluetooth устройствам и отправлять и получать данные в терминал - Bluetooth Terminal.

Скачать его можно в Плей маркете. В поиск вбиваем Bluetooth Terminal.

В поиск вбиваем Bluetooth Terminal

Устанавливаем приложение.

Устанавливаем приложение

Запускаем его и ищем наше устройство.

Запускаем его и ищем наше устройство.Почему-то мое устройство видит как HC-05. Но это не страшно работают данные модули одинаково.

Сейчас оправим в терминале 1. Светодиод на плате включается, при этом мы получаем в терминал ответ «Led On - Portal-Pk.ru»

Сейчас оправим в терминале 1. Светодиод на плате включается, при этом мы получаем в терминал ответ «Led On - Portal-Pk.ru»

Led On - Portal-Pk.ru

Если отправим 0, выключается, при этом мы получаем в терминал ответ «Led Off - Portal-Pk.ru»

Если отправим 0, выключается, при этом мы получаем в терминал ответ «Led Off - Portal-Pk.ru»

Это самый простои пример управления с помощью Bluetooth модуля. Планирую сделать несколько проектов по данной теме. Написать приложение для Android.

Больше фото смотрите тут: Урок 10 - Датчик температуры DS18B20, подключаем к Arduino.

Предыдущий урок: Фото для урока 11. Bluetooth модуль HC-06. Управление Arduino с телефона.

Если вам интересна данная тема пишите в комментарии.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем уроке.

]]>
Управляем Arduino через USB. Библиотека Serial. http://portal-pk.ru/news/200-upravlyaem-arduino-cherez-usb-biblioteka-serial.html Константин Portal-PK 2019-06-18T08:44:23+03:00 Набор функций Serial служит для связи устройства Ардуино с ПК или другими устройствами, поддерживающими последовательный интерфейс обмена данными. Все платы Arduino имеют хотя бы один последовательный порт (UART). Для обмена данными Serial используют цифровые порты ввод/вывода 0 (RX) и 1 (TX) , а также USB порт. Важно учитывать, что если вы используете функции Serial, то нельзя одновременно с этим использовать пины 0 и 1 для других целей.

Среда разработки Arduino IDE имеет встроенный монитор порта. Для начала обмена данными необходимо запустить монитор нажатием кнопки « Монитор порта » и выставить ту же скорость связи, с которой вызвана функция begin().

Основные функции Serial
  • begin()
  • end()
  • available()
  • read()
  • flush()
  • print()
  • println()
  • write()
  • peek()

В нашем примере мы рассмотрим только часть функция Serial.

Serial.write() – записывает в порт данные в двоичном виде.

Serial.print() - может иметь много значений, но все они служат для вывода информации в удобной для человека форме. Например, если информация, указанная как параметр для передачи, выделена кавычками – терминальная программа выведет ее без изменения. Если вы хотите вывести какое-либо значение в определенной системе исчисления, то необходимо добавить служебное слово: BIN-двоичная, OCT – восьмеричная, DEC – десятичная, HEX – шестнадцатеричная. Например: Serial.print(25,HEX).

Serial.println() делает то же, что и Serial.print(), но еще переводит строку после вывода информации.

SerialEvent() Автоматически вызывается при поступлении новых данных.

Serial.begin() Инициирует последовательное соединение и задает скорость передачи данных вбит/c (бод). Для обмена данными с компьютером используйте следующие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200.

Первое что мы с вами сделаем это будем управлять встроенным светодиодом на плату Arduino который подключен к 13 пину.

int LED = 13;
int val = 0;
void setup() {
  Serial.begin(9600); //Инициирует последовательное 
  //соединение и задает скорость передачи данных в бит/c (бод)
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}
void loop() {
  if (Serial.available() > 0) // пришли данные
  {
    val = Serial.read();
    if (val=='1')         // если 1 то включаем светодиод
      digitalWrite(LED,HIGH);
    if (val=='0')         // если 0 то выключаем светодиод
      digitalWrite(LED,LOW);
  }
}

В монитор порта ни какой информации не возвращается. Также можно вывести в монитор порта информацию полученную от Arduino.

В монитор порта ни какой информации не возвращается

При включении светодиода выведем: « Светодиод вкл .». И также выведем слово « Portal-Pk.ru», с переносом строки. Чтобы следующая запись выводилась строчкой ниже.

При выключении светодиода выведем: «Светодиод выкл.». И также выведем слово «Portal-Pk.ru» с переносом строки.

int LED = 13;
int val = 0;
void setup() {
  Serial.begin(9600); //Инициирует последовательное 
  //соединение и задает скорость передачи данных в бит/c (бод)
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}
void loop() {
  if (Serial.available() > 0) // пришли данные
  {
    val = Serial.read();
    if (val=='1')         // если 1 то включаем светодиод
     {
      digitalWrite(LED,HIGH);
      Serial.print("Светодиод вкл. "); // вывод данных
      Serial.println("Portal-Pk.ru"); // вывод данных с переносом строки
     }
    if (val=='0')         // если 0 то выключаем светодиод
      {
        digitalWrite(LED,LOW);
        Serial.print("Светодиод выкл. "); // вывод данных
        Serial.println("Portal-Pk.ru");  // вывод данных с переносом строки
      }
  }
}

При выключении светодиода выведем: «Светодиод выкл.». И также выведем слово «Portal-Pk.ru»

Данный инструмент помогает при отладки программы . В монитор порта модно вывести состояние оборудования, на коком этапе выводит ошибку и пр.

Смотрите также: Уроки Arduino: Подключение датчиков и модулей к Arduino

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 10 - Датчик температуры DS18B20, подключаем к Arduino. http://portal-pk.ru/news/199-datchik-temperatury-ds18b20-podklyuchaem-k-arduino.html Константин Portal-PK 2019-06-16T11:20:24+03:00 В предыдущем уроке мы рассмотрели подключения датчика температуры и влажности DHT11 к Arduino. И выяснили что данный датчик не очень точный. Чем же его можно заменить? Одним из распространенных датчиков для измерения температуры являться DS18B20. Рассмотрим в данном уроке варианты подключения датчика, пару примеров программного решения.

Одним из распространенных датчиков для измерения температуры являться DS18B20

Характеристики датчика DS18B20:

  • Погрешность измерения не больше 0,5 С (для температур от -10С до +85С). Не требуется дополнительная калибровка.
  • Диапазон измерений от -55 С до +125 С.
  • Напряжение питания от 3,3В до 5В.
  • Датчик обладает своим уникальным серийным кодом.
  • Не требуются дополнительные внешние элементы.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу Wire.
  • Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода. Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

Датчик выпускается в открытом корпусе в виде транзистора для измерения температуры воздуха.

Датчик DS18B20 выпускается в открытом корпусе в виде транзистора для измерения температуры воздухаМожно купить датчик в виде модуля DS18B20. Распаренный на плате.

Можно купить датчик в виде модуля DS18B20Также датчик DS18B20 продеться в закрытом корпусе для измерения температуры жидкости.

Также датчик DS18B20 продеться в закрытом корпусе для измерения температуры жидкости

Для урока нам понадобиться:

Подключаем датчик DS18B20 к Arduino NANO вот по такой схеме.

Подключаем датчик DS18B20 к Arduino NANO

Подключение датчика DS18B20 к Arduino UNO будет вот таким.

Подключение датчика DS18B20 к Arduino UNO

Для написания программы нам понадобиться библиотека OneWire.

Данную библиотеку можно установить из менеджера библиотек или скачать отсюда.

Код ниже будет выводить показание температуры в монитор порта каждую секунду.

 <code>#include <OneWire.h>
OneWire ds(2);
void setup() {
    Serial.begin(9600);
}
void loop() {
    byte i;
    byte data[12];
    byte addr[8];
    float celsius;
    // поиск датчика
    if ( !ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
    }
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1); // измерение температуры
    delay(1000);
    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); // начало чтения измеренной температуры
    //показания температуры из внутренней памяти датчика
    for ( i = 0; i < 9; i++) {
        data[i] = ds.read();
    }
    int16_t raw = (data[1] << 8) | data[0];
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
    else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
    else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
    // преобразование показаний в градусы Цельсия 
    celsius = (float)raw / 16.0;
    Serial.print("t=");
    Serial.println(celsius);
}
</code>

Код ниже будет выводить показание температуры в монитор порта каждую секунду

Но данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature. Данная библиотека ставиться поверх OneWire. Т.е. для ее роботы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

Мы рассмотрим более простотой пример.

<code>#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void){
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  Serial.print("Celsius temperature: ");
  //  в Цельсиях:
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" - Fahrenheit temperature: ");
  //  в Фаренгейтах:
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}
</code>

В данном примере температура выводиться 1 раз в секунду. И при этом выводится температура в Цельсиях и фарингитах.

В данном примере температура выводиться 1 раз в секунду.

Как видите данный пример намного меньше и более понятен для новичка.


На одну шину можно подключить до 127 датчиков вот по такой схеме.

На одну шину можно подключить до 127 датчиков вот по такой схеме

С библиотекой DallasTemperature идут примеры которые позволяют получать данные с датчиков при током подключении.

Больше фото тут: Фото для урока 10. Подключаем DS18B20 к Arduino

Предыдущий урок: Урок 9 - Подключаем датчик температуры и влажности DHT11 к Arduino


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Светодиодные часы своими руками на ардуино (Arduino) WS2812 управляемых (адресных) http://portal-pk.ru/news/198-svetodiodnye-chasy-svoimi-rukami-na-arduino-arduino-ws2312.html Константин Portal-PK 2019-06-13T08:28:48+03:00 После очередной модернизации своего 3D принтера . Кстати статья и видео по модернизации Anet 8A скоро выложу.

И так о чем это я. Ах да. И вот решил я напечатать плоские и большие детали. Именно они у меня отрывались от стала 3D принтера. Даже бывало отрывало вместе со скотчем.

Новая версия Часов!

Нашел я модель светодиодных часов . Скачать модель можно со страницы автора.

Нашел я модель светодиодных часов

Для проекта желательно взять плату Arduino Nano , и модуль часов DS3231.

Сборка часов на Arduino и адресных светодиодах WS2812:

1. Печатаем все детали на 3D принтере.

Печатаем все детали на 3D принтере

2. Приклеиваем светодиодную ленту на 2 пластины и спаиваем их зигзагом.

Приклеиваем светодиодную ленту на 2 пластины и спаиваем их зигзагом

Нашел я модель светодиодных часов.

3. Устанавливаем решетки поверх ленты. Получим вот такой результат. Устанавливаем решетки поверх ленты

4. Укладываем все в корпус часов и крепим все на винтики М3.

Укладываем все в корпус часов и крепим все на винтики М3

5. Ставим крепление для ножек и крепим ножки.

Ставим крепление для ножек и крепим ножки.

6. Подключаем электронику по схеме.

Подключаем электронику по схеме.

Подключаем электронику по схеме.

7. Загружаем прошивку в Arduino. Автор использует Arduino Pro Mini, я решил использовать Arduino NANO v2 (ATmega168).

Загружаем прошивку в Arduino. Автор использует Arduino Pro Mini, я решил использовать Arduino NANO v2 (ATmega168)

Прошивка у автора мне не понравилась и я решил ее полностью переписать. В связи с тем что у часов всего 5 строк. То стандартные библиотеки для вывода текста на матрицу не подошли. И пришлось самостоятельно создавать каждый символ.

В итоги у часов получились вот такие возможности:

1. Настройка цвета циферблата.

2. Изменение яркости 10 режимов.

3. Вывод текущей даты в виде бегущей строки.

4. Сохранение всех настроек в энергонезависимую память. При выключении часы сохраняются все настройки.

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

6. Прошивка уменьшаться на Arduino Nano V2.0 (ATmega168) . При увеличение функционала часов необходимо использовать Arduino Nano V3.0 (ATmega328) .

В итоги у часов получились вот такие возможности

В связи с тем что я использовал Arduino Nano V2.0 (ATmega168), дальше расширять функционал не получится. Нет свободной памяти. Но если поставить Arduino Nano V3.0 (ATmega328) в которой памяти в 2 раза больше . Соответственно функционал можно расширят:

1. Сделать авто регулировку яркости. Поставив фото резистор.

2. Поставить спикер и написать настройку будильника.

3. К функциям будильника можно сделать стробоскоп. Мигать просто белым или как полицейская сирена одна сторона синим другая красным.

4. Поменять Arduino Nano на NodeMCU и сделать управление часами через смартфон. Вывести погоду, курс валюты. Грубо говорят сделать информер. Но так как дисплей часов не очень большой. Большая информация будет не очень читабельная.

У автора корпуса есть доработанные версии часов. Например подставка сделана уже побольше и часы более устойчивые. Также сделаны накладки которые закрывают провода с задней стороны.

Больше фото по проекту сотрите тут: Светодиодные часы своими руками на ардуино (Arduino) WS2312

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Урок 9 - Подключаем датчик температуры и влажности DHT11 к Arduino http://portal-pk.ru/news/197-podklyuchaem-datchik-temperatury-i-vlazhnosti-dht11-k-arduino.html Константин Portal-PK 2019-06-11T04:53:26+03:00 Датчик температуры и влажности DHT11 очень распространен в Ардуино проектах. Например в умных домах. Даже не смотря на характеристики:

  • Потребляемый ток – 2,5 мА (максимальное значение при преобразовании данных);
  • Измеряет влажность в диапазоне от 20% до 80%. Погрешность может составлять до 5%;
  • Применяется при измерении температуры в интервале от 0 до 50 градусов (точность – 2%)
  • Питание – от 3 до 5 Вольт;
  • Одно измерение в единицу времени (секунду). То есть, частота составляет 1 Гц;

Как видим датчик DHT11 не очень точный. Но он достаточна дешевый. И для измерение в бытовых помещениях подходит.

датчик DHT11

Датчик может быть в виде модуля и у него всего 3 ноги для подключения. Как в моем случае.

Так и самостоятельный датчик. С 4 ногами. Схема подключения для него будет вот такая.

 датчик DHT11 С 4 ногами

Мы рассмотрим подключения модуля. Подключение отличается не очень сильно.

Схема подключения DHT11 к Arduino NANO

Схема подключения DHT11 к Arduino NANO

Схема подключения DHT11 к Arduino UNO

Схема подключения DHT11 к Arduino UNO

Программа для обоих вариантов будет одинаковая.

Для подключения датчика DHT11 к Arduino потребуется библиотека DHT. Скачать можно здесь.

Для подключения датчика DHT11 к Arduino потребуется библиотека DHT

Для работы нежно установить еще и Adafruit_Sensor.

После установки библиотек выбираем пример в Arduino IDE для этого преходим (Файл -> Примеры -> DHT sensor -> DHTtester).

Или копируйте вот этот код. Это то же пример из библиотеки.

 
#include "DHT.h"
#define DHTPIN 2     // контакт, к которому подключаемся
// и расскомментировать строчку датчика:
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
// инициализируйте датчик DHT 
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!"); 
  dht.begin();
}
void loop() {
  delay(2000);
  // считывание данных температуры и влажности
  float h = dht.readHumidity();
  // температура в Цельсиях:
  float t = dht.readTemperature();
  // температура в Фаренгейте:
  float f = dht.readTemperature(true);
  // проверяем, корректно ли прочитались данные,
  // и если нет, то пробуем еще раз:
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    // "Не данных с DHT!"
    return;
  }
  // рассчит теплового индекса;
  float hi = dht.computeHeatIndex(f, h);
  Serial.print("Humidity: ");  //  "Влажность: "
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");  //  "Температура: "
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");  //  "Тепловой индекс: "
  Serial.print(hi);
  Serial.println(" *F");
}


После загрузки кода в плату откроем монитор порта.

После загрузки кода в плату откроем монитор порта

Данные температуры и влажности выводятся в виде строки с интервалом 2 сек.

Данные температуры и влажности выводятся

Также выводится температура в Фаренгейтах и тепловой индекс.


Больше фото урока Подключаем датчик температуры и влажности DHT11 к Arduino. Смотрите тут.

Предыдущий урок: Урок 8 — Подключаем реле к Arduino. Пример работы и скетч

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Приложение с одной кнопкой для управления Wi-Fi реле http://portal-pk.ru/news/196-prilozhenie-s-odnoi-knopkoi-dlya-upravleniya-wi-fi-rele.html Константин Portal-PK 2019-05-15T13:42:07+03:00 Управлять нагрузкой с помощью реле достаточно просто. Можно сделать автоматизацию данного процесса. Или даже сделать Wi-Fi реле на базе NodeMCU. Об этом подробно рассказываю в своем предыдущем проекте: Wi-Fi реле на NodeMCU. Управление Android приложением
Управлять одним реле с помощью двух кнопок не очень удобно. Да и место занимает на экране много. Поэтому решил переделать приложения для Android. Прошивка для NodeMCU остается без изменений и останавливаться на ее описании не буду.
Переделаем дизайн Android приложения в MIT App Inventor. У меня получилось вот так.

дизайн Android приложения в MIT App Inventor


Объявим глобальную переменную flag в данной переменной будем хранить статус реле. Включен он или нет.
Ip адрес устройства будем хранить в базе данных TinyDB1. Для того, чтобы при отключении приложения не приходилась заново прописывать адрес устройства.

Объявим глобальную переменную flag
При нажатии кнопку Button2 Мы сохраняем Ip который указан в поле TextBox1.
Кнопка Button1 Это наша кнопка ради которой я пишу данную статью. Включение и выключение реле. При нажатие которой отправляем запрос. Если переменная flag равна 1 на выключения реле и если 0 то на включения реле. У вас может работать на оборот все зависит от типа реле.

Сейчас в веб обработчике Web1 сделаем так, чтобы кнопка меняла цвет и надпись при нажатии на кнопку.

Сейчас в веб обработчике Web1 сделаем так, чтобы кнопка меняла цвет и надпись при нажатии на кнопку.

Проверяем, что приложение отвечает и все работает нормально. Это обозначает код 200. Дальше проверяем, что мы получили от приложения. Если получаем значение OFF значит наше устройство выключено и соответственно меняем цвет кнопки на красный и пишем надпись на Выключить. Иначе если получено значение значение On значить наше реле включено, меняем цвет кнопки на зеленый и меняем надпись на Включить.

На телефоне данное приложение выглядит вот так.

На телефоне данное приложение выглядит вот так

На телефоне данное приложение выглядит вот так
Сейчас можно добавить красивые картинки для включения и выключения. К промеру вот такие.

красивые картинки
Это будет для вас домашнее задание. Попробуйте самостоятельно это сделать. И напишите получилось у вас или нет.


Понравилась статья пишите в комментарии.Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Где послущать музыку в 21 веке. http://portal-pk.ru/news/195-gde-poslushchat-muzyku-v-21-veke.html Константин Portal-PK 2019-05-04T09:25:06+03:00 Майские праздники в самом разгаре. И каждый выбирает отдых под себя. Одни едут на дачу, для того чтобы культурно отдохнуть, пожарить шашлык. Другие ходят в гости. Третьи наслаждаются отдыхом дома. Но отдых не отдых без любимой музыки.

Сегодня очень много сервисов, где можно послушать музыку. От Яндекс музыка или музыка в контакте. Но везде есть свои ограничения. В Яндекс музыке можно бесплатно слушать музыку не в самом лучшем качестве. Также не все новинки присутствуют. В контакте также есть свои минусы. Например название песен иногда не соответствуют. Это ситуации усложняет выбор сервисов, где можно слушать зарубежную музыку бесплатно.

Слушать радио. На мой взгляд можно слушать только в тех случаях, когда нет доступа к музыке которая нравиться. На радио чаще всего включают музыку различных направлений и исполнителей. И процент действительно интересныхкомпозиций не так и много.

Вывод один. В век информационной технологий и цифровой техники не так просто найти нужный источник информации и сервисы для различения. Это связано в первую очередь из-за большого разнообразия.

]]>
Bluetooth колонки своими руками http://portal-pk.ru/news/194-bluetooth-kolonki-svoimi-rukami.html Константин Portal-PK 2019-05-03T13:44:37+03:00 Весна в самом разгаре. Все выезжают на дачи, в сады и просто на природу. Чтобы культурно отдохнуть или заняться посадкой культурных растений. Для того чтобы веселее работалось, да и отдых не отдых без музыки. Для этих целей отлично подходят беспроводные колонки. Но достаточно мощные стерео Bluetooth колонки не всем по карману. Да и тратить деньги чтобы раз в месяц послушать на даче музыку, сомнительное решение для семейного бюджета. Поэтому я решил сделать из старых колонок которые лежат у меня без дела уже больше 5 лет.

Для переделки нам понадобиться:
1. Старые колонки.
2. Блютуз модуль.
3. Разъем для подключения источника питания.
4. Для подключения на природе может понадобиться Power bank.


Из колонок выкидываю всё лишнее.

Из колонок выкидываю всё лишнее

И устанавливаю Bluetooth модуль.

 Bluetooth модуль


Данный модуль имеет на борту усилитель. Поэтому к нему можно подключить 2 динамика по 3Вт. Динамики, которые стоят в колонках отлично подошли.

Динамики, которые стоят в колонках отлично подошли


Питание модуля 5В. Подойдет зарядное устройство от телефона или Power bank. Поэтому я сделал из usb провод для подключения я к колонке.

сделал из usb провод для подключения я к колонке

Ответною часть установил в колонку.

Ответною часть установил в колонку

Все спаиваем и получаем наши беспроводные Bluetooth колонки.

Для дачи подойдут отлично. При посиделках часто бывает гости не могут решить что послушать. А на телефонах у каждого есть любимые треки.

Понравилась статья пишите в комментарии или на форум. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Урок 9 - Бегущие огни на Arduino UNO http://portal-pk.ru/news/193-begushchie-ogni-na-arduino-uno.html Константин Portal-PK 2019-05-02T12:52:03+03:00 Продолжаем уроки в которых мы используем Arduino, резисторы и светодиоды. Мы уже делали Светофор, полицейский стробоскоп, отправляли сигнал sos и пр.
Сегодня мы будем делать бегущие огни. Бегущие огни уже были в другом блоке уроков на Arduino: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни
При подключении к сдвиговому регистру всего при подключении по 3 проводам мы можем управлять 8 светодиодами. Но вот чтобы подключить 10 светодиодов, нужно подключать 2 сдвиговых регистра и использовать всего 2 выхода из 8 доступных в регистре. Это не очень логично. Иногда бывает проще подключить к плате Arduino нужное количество светодиодов. Что я и планирую сделать. В примере будет 5 самых простых режимов бегущих огней на Arduino.

Для урока нам понадобится:

  • Arduino UNO или Arduino Nano
  • Плата макетная беспаечная
  • Резисторы 220 ОМ
  • Соединительные провода папа-папа
  • Светодиоды 3 или 5 мм.

Для урока нам понадобится

Подключим наши 10 светодиоды вот по такой схеме.

Подключим наши 10 светодиоды вот по такой схеме



В живую будет выгладить так.

режимов бегущих огней на Arduino

Вы наверное скажите что схема не правильная и к пинам 0 и1 подключать не желательно. Вот именно не желательно, но можно если не использовать Serial port. А для облегчения кода нам будет очень удобно использовать данные пины. При загрузки кода в Ардуину светодиоды подключенные к 0 и 1 выходам будут мигать. Также при работе нашего скетча. Вместе с данными светодиодами на плате Arduino UNO буду включаться светодиода RX и TX. Но как я говорил в данном случаи ни чего старшного в этом нет.

Описывать все режимы не буду. В видео немного поясняю. Немного корява и может не совсем понятно. Но я думаю по комментариям к коду можно разобраться.

Первый пример бегущих огней на Arduino, последовательное включение одного светодиода с 1 по 10. По пинам на ардуино будет с 0 по 9. Это нужно учитывать при написании кода.

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
  for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(j, LOW); //гасим все светодиоды
  }
}

Немного изменим данный пример и сделаем 2 цикла. Получим включение всех светодиодов и выключение в обратном направлении.

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
  for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
  }
  for (int j = last_pin-1; j >= 0; j--) { //перебираем пины с 0 до last_pin
       digitalWrite(j, LOW); //гасим все светодиоды
    delay(300); //задержка 300мсек
  }
}

Объединив код первого и второго примера получим включение одного светодиода в прямом и обратном направлении. Во втором цикли ставим j-2, потому что у нас пины начинаются с 0, а число светодиодов с 1 до 10. Также чтобы 10 светодиод не включался 2 раза вычитаем еще 1.

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
  for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(j, LOW); //гасим все светодиоды
  }
  for (int j = last_pin-2; j > 0; j--) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(j, LOW); //гасим все светодиоды
  }
}

Сходящиеся огни. Тут все по аналогии. Добавим переменную в которой будим рассчитывать половину светодиодов. Поэтому количество светодиодов должно быть четным. Либо что-то делать с центральным светодиодом. Можно оставить его постоянно включенным или наоборот всегда включенным.

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
int half = last_pin/2; //last_pin должгно быть четным числом 
  for (int j = 0; j < half; j++) { //перебираем пины с 0 до last_pin
    int k = last_pin-j-1;
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    digitalWrite(k, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(k, LOW); //гасим все светодиоды
    digitalWrite(j, LOW); //гасим все светодиоды
  }
}

И по аналогии делаем расходящиеся огни.

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
int half = last_pin/2; //last_pin должгно быть четным числом 
  for (int j = half; j > 0; j--) { //перебираем пины с 0 до last_pin
    int k = last_pin-j;
    digitalWrite(j-1, HIGH); //зажигание следующего светодиода
    digitalWrite(k, HIGH); //зажигание следующего светодиода
    delay(500); //задержка 300мсек
    digitalWrite(k, LOW); //гасим все светодиоды
    digitalWrite(j-1, LOW); //гасим все светодиоды
  }
}

Как видно без использования сдвигового регистра код получается намного проще и меньше строчек. Один минус количество ограничено. Максимум 20 светодиодов можно подключить к Arduino Uno и 22 к Arduino NANO. Думаете что я ошибся с цифрами. Подписывайтесь на канал. И в следующем уроке в данном блоке уроков я покажу как можно это реализовать.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Роль авто в современном мире. http://portal-pk.ru/news/190-rol-avto-v-sovremennom-mire.html Константин Portal-PK 2019-04-21T09:31:33+03:00 Наш мир с каждым днем становиться все более динамичный. Движение становиться все более быстрым. Что диктует тенденцию наличия автомобиля, не только в каждой семье но и у каждого члена семьи, старше 18 лет. Авто необходимо не только для личного использования. Для торговых представителей, менеджеров, машине является незаменимым инструментом в работе. Точность поставки играет решающую роль. Поэтому авто должно быть еще и надежное.

Как говориться спрос рождает предложение. Сегодня автомобилей каких только нет от эконом варианта до бизнес класса. Модельный ряд пополняется ежегодно новыми моделями и марками. Что приводит к большой конкуренции. И производитель стараются сделать свою продукцию как можно дешевле. И автомобили сегодня стали доступны по стоимость.

Но это еще не все, экономика также способствует покупке автомобилей. Сегодня можно без проблем взять в кредит авто. Кредит очень гибкий и можно выбрать тот вариант которой подойдет именно под ваш бюджет.

Исходя из этого приобрести машину достаточно не сложно.

]]>
Светодиодный ночник в виде куба. http://portal-pk.ru/news/189-svetodiodnyi-nochnik-v-vide-kuba.html Константин Portal-PK 2019-04-21T07:47:22+03:00 Расширяя используемы материалы и технологии в разработке проектов на Arduino. Сегодня расскажу про светодиодный куб напечатанный на 3d принтере .

светодиодный куб напечатанный на 3d принтере

По традиции в своих разработках использую только бесплатное программное обеспечение . При создании 3D моделей встал вопрос с помощью какой бесплатной программы можно делать достаточно быстро и красивые детали. Еще один момент я работаю только на Linux. Подсмотрел весь спектр программного обеспечения для 3D моделирования. Мне понравились 2 программы:

1. Blender

2. FreeCad

Blender достаточно неплохой графический редактор. Но он больше подходит для создания дизайнерских деталей, а FreeCad предназначен для технической разработки. А я технарь и поэтому я решил использовать FreeCad. Возможно есть более продвинутые бесплатные редакторы объемных моделей, если у вас есть предложения пишите в комментарии.

Светодиодный куб состоит из двух деталей которые нужно напечатать.

Основание светильника .

Основание светильника

Корпус светильника.

Корпус светильника.

Скачать модели можно бесплатно и без регистрации из раздела Мои модели для печати на 3d принтере


Электроника светодиодного куба .

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

Для подключения использую старый зарядное устройство для телефона. Шнур которого является еще и регулируемым подвесом. Куб можно подвесить на любой крючок или полочку.

В демонстрационном видео я подвешивал на окно.

Сборка светодиодного Ночника

Сборка светодиодного Ночника.

Для сборки нам понадобятся 4 винта и оргстекло молочного цвета. Оргстекло нужно нарезать на квадраты 38х38 мм. Соединяем основание с корпусом с помощью винтов и у нас получается вот такой симпатичный куб.

Светодиодный куб

симпатичный куб

Скетч для светильника.

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

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif
#define PIN 6
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.
void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}
void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue
//colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
  // Send a theater pixel chase in...
  theaterChase(strip.Color(127, 127, 127), 50); // White
  theaterChase(strip.Color(127, 0, 0), 50); // Red
  theaterChase(strip.Color(0, 0, 127), 50); // Blue
  rainbow(20);
  rainbowCycle(20);
  theaterChaseRainbow(50);
}
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}
void rainbow(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
      delay(wait);
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();
      delay(wait);
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Тенденции развития. http://portal-pk.ru/news/188-tendencii-razvitiya.html Константин Portal-PK 2019-04-09T18:40:10+03:00 В современном, динамически растущем мире. Стремительное развитие происходит не только в робототехнике и в сфере микроконтроллерной техники. Но также сферы продаже и услуг не стоят на месте.

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

Потребители услуг и покупали также способствуют тенденции улучшения интерьера магазинов. Если покупатель по инерции ходил бы всегда в один магазин или бутик. То у конкурентов не было бы и желания менять дизайн. И покупать современное оборудование. Но покупатель реагирует не только на товар или услугу но и место где предлагают тавра. Также можно заметить все боле красочные витрины и анимированную рекламу. Современную умную подсветку делают на базе микроконтроллеров. Таких, как Arduino.

Вывод один. Маркетологи и мы сами подталкиваем на неизбежное изменение окружающей среды.

]]>
Лазерный станок с ЧПУ. Основные понятия http://portal-pk.ru/news/187-lazernyi-stanok-s-chpu-osnovnye-ponyatiya.html Константин Portal-PK 2019-04-09T12:32:07+03:00 Лазерный станок с ЧПУ имеет различные применения в отрасли нашего времени. Несмотря на то, что он очень дорогой, сегодня лазерная резка широко используется для производства от небольших бытовых изделий (в качестве рекламных материалов) до специализированных материалов. Есть много предметов, которые изготавливаются с помощью лазерной резки или гравировки, но лишь немногие знают, как они были изготовлены.

Лазерный станок с ЧПУ

История оборудования для лазерной резки начинается с 1965 году, когда машина, разработанная американской компанией Western Electric Engineering Research Center, впервые использовалась для сверления алмазных штампов. Пару лет спустя они начали резать металлы с помощью лазерных струй кислорода, а затем этот метод был использован для резки титана. Эффективность лазерной резки побудила инженеров адаптировать CO2-лазеры для резки неметаллических материалов. Сегодня уже существуют специальные станки для лазерной резки для определенных применений в широком спектре моделей и марок.

Чтобы понять, как работает лазерный станок, сначала необходимо определить, что такое лазер.

CO2-лазеры

Лазер - это устройство, предназначенное для концентрации светового луча в определенной точке; Он состоит из пары зеркал, активной среды, которая позволяет усиливать свет (в твердом, газообразном или жидком состоянии) и пучка света или электрического тока, который будет отдавать энергию активной среде. Название этого устройства - усиление света стимулированным излучением, лазер - его аббревиатура на английском языке (Light Amplification by Stimulated Emission of Radiation), и сегодня оно имеет множество промышленных применений, медицинских и телекоммуникационных.

Лазер обычно находится на задней части режущих машин и излучает луч света в направлении ряда зеркал, которые отвечают за отражение луча к лазерной головке, где свет будет направлен вниз. Прежде чем свет покидает машину, он проходит через активную среду, которая отвечает за усиление луча. В машинах на CO2 углекислый газ является средой, которая выполняет эту задачу, в то время как в другом оборудовании для усиления светового пучка используется (Nd YAG). Материалы, из которых изготовлено это оборудование, могут различаться, и хотя самые лучшие зеркала и линзы, которыми они могут быть оснащены, – это алмаз и золото, из-за высокой стоимости этих материалов они редко используются. Вместо этого используются кремниевые зеркала и линзы из цинка или германия и селена, которые столь же прочны и эффективны, как золото и алмаз.

Станок для лазерной резки

Станок для лазерной резки позволяет создавать сложные конструкции, достигая высокой точности, потому что лазер способен перемещаться по любой траектории с высокой скоростью. Кроме того, в зависимости от мощности резки, можно резать различные материалы средней плотности. Это оборудование в настоящее время имеет автоматизированную работу благодаря ЧПУ (числовое управление с помощью компьютера), которое позволяет, помимо поддержания постоянного расстояния между поверхностью материала и излучателем света, программировать команды, которые управляют скоростью и конструкцией, которой следует следовать в соответствии с потребностями каждого среза и материала.

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

Лазерная резка становиться все боле доступной и постепенно начинает вытеснять фрезерные станки с ЧПУ.


Понравилась статья пишите в комментарии или на форум. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Простая аркадная игра на базе Arduino и дисплее LCD – 16x2 http://portal-pk.ru/news/186-prostaya-arkadnaya-igra-na-baze-arduino-i-displee-lcd-16x2.html Константин Portal-PK 2019-04-05T07:55:41+03:00 Игра с использованием Arduino и жидкокристаллического дисплея 16 × 2 . Простая и недорогая реализация игры с минимальными компонентами и простым программированием.

Это хорошая отправная точка для создания собственных ЖК-игры. Здесь предоставлен пример игры в прыжки с боковой прокруткой. Arduino LCD Game . Один минус в том, что используется всего одна кнопка для управления игрой.

Игра с использованием Arduino и жидкокристаллического дисплея 16 × 2

Инструкция по воспроизведению

Необходимо нажать на черную кнопку, чтобы начать игру и заставить героя перепрыгнуть через препятствия. Счет – это пройденное расстояние.

Игра на Arduino это здорово. Но пиграть лучьше на новеньком телефоне. Рекомендую посмотреть Отзывы на смартфон Honor Play 64Г .

С микроконтроллерами Arduino очень легко создавать множество вещей. В этой статье расписано, как создать простую 1-кнопочную видеоигру.

подключить ЖК-дисплей 16 × 2 к Arduino UNO

Автор проекта предоставляет принципиальную схему и список необходимых компонентов, из которых можно получить представление о том, насколько проста реализация проекта. Все, что для этого нужно, это подключить ЖК-дисплей 16 × 2 к Arduino UNO , а также добавить кнопку прерывания.

Список компонентов: Arduino UNO ЖК-экран (16 x 2 символа)

Список компонентов:

Работа с видеоигрой с использованием Arduino

После выполнения всех соединений в соответствии со схемой, нужно загрузить предоставленный на этой странице автором код в Arduino и включить схему. В тот момент, когда включается питание, игра начинается с отображения «START GAME» на ЖК-дисплее. Как только игра начнется, ее можно переключить с помощью кнопки прерывания.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
От программирования на php до разработки роботов и ЧПУ. http://portal-pk.ru/news/185-ot-programmirovaniya-na-php-do-razrabotki-robotov-i-chpu.html Константин Portal-PK 2019-03-28T18:10:49+03:00 Как я рассказывал, программирование микроконтроллеров в среде Arduino IDE и проектирование ЧПУ станков, это мое хобби. Также последнее время я ударился в робототехнику. Планирую собирать от самых простых роботов, до сложных дротов. Но это пока планы. Которые я постепенно реализую.

Основная моя специальность уже больше 8 лет является разработка сайтов различной сложности. Кстати данный сайт сделан на моей самопиской CMS.

Как же происходит разработка сайта под ключ? Это достаточно сложный процесс. Первое составляется техническое задание. В котором расписываются все требование к дизайну сайта, функции сайта и разделы.

После чего происходит поэтапная разработка.

1. Изначально происходит разработка макета страницы, на основе которой делается верстка.

2. По разработанной структуре приложения разрабатывается структура базы данных.

3. Написание движка сайта на различных языках. Я пишу на php.

4. Тестирование нового сайта

5. Доработка найденных недочетов.

Это основные этапы которые просто не возможно пропустить. В противном случае качество сайта не будет отвечать всем требованиям которые были указанны в техническом задании.

Про разработку сайтов можно рассказывать очень долго. Но вкратце - это выглядит вот так.

]]>
Экология на производстве. http://portal-pk.ru/news/184-ekologiya-na-proizvodstve.html Константин Portal-PK 2019-03-28T17:45:31+03:00 Любое предприятия или производства используют большое количество различных материалов. При этом ни одно производство не может обойтись без горюче самосмазочных материалов. Это увеличивает аварийного разлива данных материал. Разлив нефтепродуктов наносит большой вред природе и обитающим поблизости насекомым и животным. Причем влияние разлива нефтепродуктов влияют не только на том участке, где был разлив вредных для природы продуктов. Но и прилегающим территории также страдает. Это связанно стем, что дождями и грунтовыми водами нефть разноситься по близ лежащим территориям. Более сложная ситуации разлива нефти в близи водоемов, рек. В таких случае распространение опасных для природы веществ происходит с катастрофически быстрой скоростью. За считанные часы загрязненная территория может увеличиться в разы.
Что делать в таких случаях и как происходит ликвидация разливов нефти?
Для этого есть специализированное оборудование которое помогает остановить загрязнение окружающей среды. И в кротчайшие сроки ликвидировать разлив нефтепродуктов, но и утилизировать последствие аварии.

]]>
Декорирование и покрытее поверхностей самоделок и проектов на Arduino http://portal-pk.ru/news/183-dekorirovanie-i-pokrytee-poverhnostei-samodelok-i.html Константин Portal-PK 2019-03-24T10:31:14+03:00 Как вы знаете что я делаю проекты на Arduino и разливные самоделки из фанеры дерева и МДФ. Сделать достаточно интересную и функциональную вещь это часть работы при создании моих самоделок. Их нужно еще декорировать и покрыть поверхность, что бы они была красивыми и выглядела не только функционально но и аккуратно и симпатично. Для этого есть много различных материалов в том числе мебельный воск. Который придает изделиям очень презентабельный вид. Многие считаю, что воск однообразный и не очень крас сивого цвета. Но современный воск отличается от наших представлений и подойдет практически для любой вещи сделанной из дерева,фанеры и не только.

У вас наверное возник вопрос, где купить воск мебельный? Переходите по ссылке и вы сможете ознакомиться с палитрой и техническим описанием.

Сейчас я начел делать проекты на своем 3D принтере. Меня интересует чем можно покрывать изделия напечатанные из PLA и ABS пластика? Чем пользуетесь вы? Пишите в комментарии.


]]>
Робот на Arduino, Motor Shield L293D и ультразвуковом датчике HC-SR04 http://portal-pk.ru/news/182-robot-na-arduino-motor-shield.html Константин Portal-PK 2019-03-23T19:07:39+03:00 Устранение препятствий – это одно из существенных центральных проблем при разработке мобильных роботов. В этом документе представлена конструкция умной машины на базе ардуина , которая самостоятельно может определять препятствия и объезжать их , принимая разумные решения. Это роботизированная машинка собирается на мотор шилде (Adafruit Motor Shield), поэтому для ее сборки не нужно ничего паять. Для сервопривода, который вращает сенсор (глаза робота), предусмотрен также вывод.

конструкция умной машины на базе ардуина

Для обеспечения необходимых автономных функций использовалось программное обеспечение, написанном на языке Arduino. Интеграция ультразвукового датчика расстояния HC-SR04 , установленного на серводвигателе, позволила этому роботу обнаруживать окружающие препятствия.

полностью автономным, робот

Будучи полностью автономным, робот способен перемещаться в незнакомой обстановке без каких-либо столкновений. Этот разработанный метод может быть использован для дальнейших улучшений, чтобы повысить адаптивность обнаружения препятствий в различных ситуациях.

Автономный робот - это тот, который имеет какие-то встроенные функции искусственного интеллекта.

Автономный робот

Для создания робота на Arduino, Motor Shield L293D и ультразвуковом датчике HC-SR04 понадобиться:

Arduino UNO

Motor Shield L293D

Мотор-редуктор с колесами

Серво Micro 9 г Sg90s

Ultrasonic Sensor - HC-SR04 (Generic)

Li-Ion Battery 1000mAh

RGB Diffused Common Cathode

Buzzer

Resistor 330 ohm

Перемычки для макетных плат

Автор рассказывает из каких компонентов сделана робот и предоставляет схему подключения.

схему подключения робота на Arduino, Motor Shield L293D и ультразвуковом датчике HC-SR04

Так же необходимо наличие 2 библиотек в среде Arduino IDE:

AFMotor.h
Servo.h

Скачать код для машины на на Arduino, Motor Shield L293D и ультразвуковом датчике HC-SR04.

Более подробная информация на странице проекта.

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


Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Можно ли автоматизировать бассейн с помощью arduino? http://portal-pk.ru/news/180-mozhno-li-avtomatizirovat-bassein-s-pomoshchyu-arduino.html Константин Portal-PK 2019-03-19T11:41:18+03:00 В современных домах принято делать бассейн. Это неотъемлемая част большинства частных домов. Но не смотря на это бассейн это не просто резервуар с водой. А еще и очень сложная система водоочистки и водоподготовки.

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

Конечно можно попытаться самостоятельно сделать всю автоматизацию. Но тут платформы Arduino будет не достаточно. Но это мое мнение. Как считает вы, можно сделать автоматизацию бассейна на ардуино? Ваше мнение пишите в комментарии.

]]>
Шины для машины или робота http://portal-pk.ru/news/179-shiny-dlya-mashiny-ili-robota.html Константин Portal-PK 2019-03-19T11:12:04+03:00 На улице весна. И погода достаточно не стабильная. Сперва все тает, потом застывает. Что приводит к сложностям в движении на автомобиле. Не только по проселочной дороге, но и по городским шоссе. Для более лучшего сцепление с дорогой нужно выбрать качественные покрышки. Шины cordiant обладают хорошими техническими характеристиками резины Кордиант и логичной ценой изделия. Несмотря на довольно молодой возраст (бренд Cordiant появился всего лишь в 2005 году), эти шины успели завоевать любовь и признание потребителя, и достойно конкурируют с европейскими и японскими аналогами.
Не только автомобилям нужны качественные шины для передвижения по скольской и неровной поверхности. Но и самодельные роботы нуждаются в хороших и надежных колесах. На сайте про робототехнику вы найдете большое количество 3D моделей колес. А также модели роботизированных машин.

]]>
Основные операции обработки на фрезерных станках с ЧПУ. http://portal-pk.ru/news/178-frezernyi-stanok-s-chpu-osnovnye-ponyatiya.html Константин Portal-PK 2019-03-15T20:00:46+03:00 Как только начинается процесс фрезерования с ЧПУ, станок начинает вращать режущий инструмент со скоростью, достигающей тысячи оборотов в минуту. В зависимости от типа используемого фрезерного станка и требований фрезерного инструмента, когда инструмент врезается в заготовку, станок выполняет одно из следующих действий для получения необходимых разрезов на заготовке:

  • Медленно подает заготовку в неподвижный вращающийся инструмент
  • Перемещает инструмент через неподвижную заготовку
  • Перемещает инструмент и заготовку относительно друг друга

Фрезерный станок с ЧПУ. Основные понятия.

В отличие от ручных процессов фрезерования, в фрезерных станках с ЧПУ, как правило, механизм подает подвижные детали вращением режущего инструмента, а не против него. Операции фрезерования, в которых соблюдается это соглашение, известны как процессы фрезерования при скалолазании, тогда как противоположные операции известны как обычные процессы фрезерования.

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

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

Наиболее распространенные операции фрезерования с ЧПУ включают в себя:

  1. Торцевое;
  2. Обычное;
  3. Угловое;
  4. Фрезерование формы.

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

Торцевое фрезерование

Типы торцевого фрезерования включают торцевое и боковое фрезерование, в которых используются концевые и боковые фрезы соответственно.

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

Угловое фрезерование

Фрезерование форм относится к операциям фрезерования, включающим неровные поверхности, контуры и контуры, такие как детали с изогнутыми и плоскими поверхностями или полностью изогнутые поверхности. В этом процессе используются формованные фрезы или фрезы, специально предназначенные для конкретного применения, такие как выпуклые, вогнутые и угловые фрезы.

Фрезерование форм

Другие операции на фрезерных станках

Помимо вышеупомянутых операций, фрезерные станки могут использоваться для выполнения других специализированных операций фрезерования и обработки. Примеры других типов доступных операций фрезерного станка:

Групповое фрезерование – операции, в которых используются два или более резца - как правило, различного размера, формы или ширины - на одной и той же оправке станка. Каждый резак может одновременно выполнять одну и ту же операцию резки или другую, что позволяет создавать более сложные конструкции и сложные детали в более короткие сроки.

Фрезерование профиля – операции, в которых станок создает траекторию резания вдоль вертикальной или наклонной поверхности на заготовке. В этом процессе используется профильное фрезерное оборудование и режущие инструменты, которые могут располагаться параллельно или перпендикулярно поверхности заготовки.

Зубонарезание – это фрезерная операция, в которой используются эвольвентные зуборезные станки для производства зубьев зубчатого колеса. Эти фрезы, тип формованных фрез, доступны в различных формах и размерах шага в зависимости от количества зубьев, необходимых для конкретной конструкции зубчатой передачи. Этот процесс также может быть использован для обработки зубьев зубчатого колеса.

Другие процессы обработки: Так как фрезерные станки поддерживают использование других инструментов, помимо фрезерных, они могут выполнить и сверление, растачивание, расширение и нарезание резьбы.

Понравилась статья пишите в комментарии или на форум. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Классификация станков с ЧПУ: виды, предназначение http://portal-pk.ru/news/177-klassifikaciya-stankov-s-chpu-vidy-prednaznachenie.html Константин Portal-PK 2019-03-12T17:21:25+03:00 Типы станков с числовым программным управлением практически безграничны.
Эти инструменты могут быть классифицированы в соответствии с моделью таких устройств, как т окарный станок с CNC, сверлильный, шлифовальный, зуборезный, инструмент для нарезания резьбы , фрезерный станок, долбежный, протяжной, пильный станок и тд.

  • Второй способ классификации - по точности: стандартная или высокоточная
  • Третий способ классификации - технология, используемая для обработки
  • Модернизированные машины

Типы станков с числовым программным управлением практически

Механический цех может выиграть от модернизации ручного инструмента или с компьютерным управлением для повышения точности и производительности. Модернизация обходится дешевле, чем покупка нового оборудования. Новый ЧПУ может добавить новые возможности станку или улучшить его существующие возможности, делая его лучше, чем когда он был новым.

Фрезерные станки с ЧПУ

Фрезерные станки с ЧПУ

Фрезерные станки с ЧПУ - это управляемые компьютером режущие инструменты для резки дерева, пластмасса и других композитов. Он также широко используется для резки алюминия и других мягких металлов. Маршрутизаторы, как правило, предназначены для оптимизации рабочей нагрузки при заданной стоимости.

Плазменные и лазерные режущие станки с ЧПУ
Лазерные резаки направляют мощные лазеры через оптику, фокусируя выходной луч для резки материала. Типичным коммерческим лазерным резаком будет управлять система ЧПУ (компьютерное цифровое управление). Обычно используются три основных типа станков для лазерной резки.

 Плазменные и лазерные режущие станки с ЧПУ
1. Газовые лазеры, такие как CO2 или Nd / Nd-YAG, производят лазеры, разряжая электрический ток через газ. Они применяются для резки самых разных промышленных материалов (от мягких тканей до титана).
2. Твердотельные, как и волоконные лазеры, применяются для резки отражающего металлического материала.
3. Хотя плазменные резаки часто сравнивают с лазерными резаками, вместо лазеров используются ускоренные струи горячей плазмы. Они режут сталь, алюминий, нержавейку латунь и медь.
Формирователь. В этом устройстве режущий элемент расположен над неподвижной заготовкой, что дает ему возможность свободно перемещаться по линии. Формирователь использует прямолинейное или линейное движение между одноточечным режущим инструментом и заготовкой.

3D принтеры
3D-печать - это процесс, при котором создаются различные твердые детали и предметы из цифрового файла.

3D принтеры

Процесс также известен как аддитивное производство (AM). Термин, который получил широкое распространение в 2000-х годах.

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

Много-осевые механизмы с ЧПУ
Много-осевые механизмы с ЧПУ
Много-осевая обработка – это производственный процесс, в котором изготавливаются детали из металла путем фрезерования избыточного материала. Типичные инструменты с ЧПУ поддерживают перевод по 3 осям; Много-осевые машины также поддерживают вращение вокруг одной или нескольких осей.


Понравилась статья пишите в комментарии или на форум. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Что такое ЧПУ станок. Основные понятия. http://portal-pk.ru/news/176-chto-takoe-chpu-stanok-osnovnye-ponyatiya.html Константин Portal-PK 2019-03-08T08:34:18+03:00 От создания прототипов до создания произведений искусства и производства изделий, обработка, в целом, стала более точной и эффективной с появлением станков с ЧПУ. В дополнение к ускорению производства, эти инструменты автоматизировали многие высокотехнологичные процессы обработки и открыли дверь для изготовления изделий, которые невозможно изготовить вручную. Аббревиатура «ЧПУ» означает «числовое программное управление».

ббревиатура «ЧПУ» означает «числовое программное управление»

Станок с ЧПУ - это устройство с компьютерным управлением, которое может резать, вырезать и фрезеровать запрограммированные конструкции из дерева, МДФ, пластмасс, пен и металлов. При этом используются различные инструменты, часто с широким спектром возможностей резки.

фрезеровать запрограммированные конструкции из дерева, МДФ

Фрезерование металлов

Основные понятия

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

Преимущества станков с числовым программным управлением

Преимущества станков с числовым программным управлением

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

Для предприятий, в частности, оборудования с ЧПУ значительно повышают эффективность, так как они обеспечивают более быстрое производство. Они не только автоматизируют процессы, которые являются трудоемкими и занимают много времени, когда выполняются вручную. Такие станки могут более точно создавать копии готового продукта с высокой скоростью. Это, в свою очередь, позволяет производить больше товаров по более низкой цене.

оборудования с ЧПУ значительно повышают эффективность

Еще одним преимуществом, которое часто упускается из виду, является снижение затрат на продукт за счет повышения эффективности использования материалов.

История станков с ЧПУ

Первые станки с числовым программным управлением появились в 1940-х годах. Сильно отличающиеся от оборудования с ЧПУ, как мы его знаем сегодня, эти ранние модели включали инструменты, которые затем использовалась в качестве формы хранения данных. К 1960-м годам внедрение мини компьютеров привело к падению цен, что вызвало распространение станков с ЧПУ. В последующие годы расширилась доступность, сделав ЧПУ популярным среди отечественных производителей инструментов к концу 80-х годов. Сегодня станки с числовым программным управлением широко используются не только в промышленном производстве и в бизнесе, но и любителями.

История станков с ЧПУ

Обработка на машинах с программным управлением является, пожалуй, самым значительным производственным процессом XXI века, а его функциональные возможности способствуют технологическому прогрессу во всем мире. Это профессия, которая идет в ногу с ростом технологий, и машинисты по всей планете меняют мир, благодаря своим навыкам обработки на станках с CNC (computer numerical control).

Понравилась статья пишите в комментарии или на форум. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Принципиальные особенности и применение шаговых двигателей. http://portal-pk.ru/news/175-principialnye-osobennosti-i-primenenie-shagovyh.html Константин Portal-PK 2019-03-06T12:54:35+03:00 Шаговый двигатель – это электродвигатель постоянного тока, без контактных щеток, у которого полный оборот делится на определенное число равных шагов. Положение данного устройства может затем быть задано для перемещения и удержания на одном из этих этапов без какого-либо датчика положения для обратной связи (контроллер с разомкнутым контуром), при условии, что механизм тщательно подобран для применения в отношении крутящего момента и скорости. Импульсные двигатели с переключением - это очень большие шаговые приборы с уменьшенным числом полюсов и, как правило, с замкнутым контуром.

Шаговый двигатель

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

 шагового двигателя

устроуство шагового двигателя

Области применения

От простых DVD плееров или принтеров в быту до сложнейших станков с ЧПУ или роботизированной руки шаговые двигатели можно найти практически везде. Способность совершать точные движения с электронным управлением позволила этим устройствам найти применение во многих сферах, таких как камеры наблюдения, жесткие диски, станки с ЧПУ, 3D-принтеры, робототехника, сборочные роботы, лазерные резаки и многое другое.

Перед тем, как купить шаговый двигатель, нужно ознакомиться с основными преимуществами и недостатками:

Преимущества

  • Достигнута низкая стоимость контроля;
  • Высокий момент вращения при запуске и низкая скорость;
  • Простота конструкции;
  • Низкие эксплуатационные расходы;
  • Меньше шансов затормозить или поскользнуться;
  • Будет работать в любой среде;
  • успешно используется в робототехнике в широком масштабе;
  • Высокий уровень надежности;
  • Обладает полным крутящим моментом в состоянии покоя (во время нахождения обмоток под напряжением);
  • Большая точность позиционирования и повторяемость движения;
  • Немедленный ответ на запуск / останов / реверс;
  • Обладает высокой степенью надежности, благодаря отсутствию контактных щеток;

Недостатки шагового двигателя

  • Потребляет большее количество энергии по сравнению с двигателями постоянного тока;
  • При более высокой скорости значение крутящего момента уменьшается;
  • Снижение эффективности;
  • Возникает состояние резонанса;
  • На высокой скорости управление невозможно.

Понравилась статья пишите в комментарии или на форум. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Фрезерование. Использование фрез в станках с ЧПУ http://portal-pk.ru/news/174-frezerovanie-ispolzovanie-frez-v-stankah-s-chpu.html Константин Portal-PK 2019-02-28T09:22:59+03:00 Процесс фрезеровки.

Фрезерование - это процесс в результате, которого с заготовки срезаются излишки металла, чтобы получилась деталь необходимой формы и размера. Этот процесс происходит следующим образом, на станке крепится заготовка, которую необходимо обработать, движение происходит относительно друг друга. Процесс резки происходит с помощью двух движений: первое – считается главным, при котором происходит вращение инструмента, второе - при котором заготовка подается поступательно. В процессе обработки используется попутное или встречное фрезерование.

встречное фрезерование

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

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

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

Классификация фрез.

Основным их различием является форма зубьев.

Они бывают: торцевые, дисковые, угловые, концевые, для обработки т-образных пазов, фасонная затылованная и фасонная остроконечная фрезы и многие другие.

торцевые, дисковые, угловые, концевые, для обработки т-образных пазов, фасонная затылованная и фасонная остроконечная фрезыДля работы на своем самодельном фрезерном станке с ЧПУ я использую концевые фрезы.


Фрезы подразделяются на:

1. Фрезы с направляющим подшипником. Использую для фрезерования кромок, выбора пазов. В основном применяются в деревообработке.

Фрезы с направляющим подшипником

Фрезы с подшипником для кромки

Фреза микрошип

2. Фрезы без направляющего подшипника, они позволяют делать обработку изделия в любом месте.

Фрезы без направляющего подшипника

Фрезы без направляющего подшипника

На сегодняшний день фреза является самым востребованным продуктом на рынке режущих инструментов. Главным преимуществом является возможность обработки материала, без каких либо сложностей, нет необходимости в балансировке, повышенная производительность, так как работа идет сразу несколькими зубцами, быстрая замена, безопасная работа во время резки, так как нет лишних деталей, удобство и простота в использовании не требует каких либо определенных навыков.

Фрезерование считается не только экономичным, но и эффективным процессом, который гарантирует высокое качество работы.


Понравилась статья пишите в комментарии или на форум. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Что напечатать на 3D принтере на 8 Марта? Уникальный подарок. http://portal-pk.ru/news/173-chto-napechatat-na-3d-printere-na-8-marta-unikalnyi.html Константин Portal-PK 2019-02-26T17:33:06+03:00 8 Марта не за горами. И пора уже задуматься о подарках. В магазинах очень много различных сувениров. Но даже при таком изобилии бывают случаи, что дарят одинаковые подарки. Как избежать такой ситуации! Можно сделать что-нибудь своими руками. Но сделать можно 1-2. Ну максимум 3 подарка. А если вам нужно поздравлять женский коллектив. Тут своими руками точно не сделать подарки. Девушкам и девочкам можно куклы курн купить. Но если вам нужно большое количество подарков. На помощь приходит 3D принтер. С каждым годом он стоит все дешевле. И расходные материалы стали более разнообразные и боле доступны. Перед новым годом, я купил себе бюджетный 3Д принтер Anet A8. Сейчас я печатаю на нем различные проекты и сувениры.

Итак, что же напевать на 3D принтере на 8 Марта. Есть большое количество готовых моделей сувенирной продукции. Так же различных полезных вещей. Вот что мне понравилось:

1. Статуэтка в виде цифры 8 с розочкой наверху. Достаточно симпатичный и тематичный сувенир.

Статуэтка в виде цифры 8 с розочкой наверху.

2. Какой праздник без цветов. Можно распечатать вот такие симпатичные розы. Это уникальный подарок. Вы можете распечатать их любого цвета. Какой пластик у вас есть под рукой. Они обойдутся вам дешевле чем подкупить живые розы на 8 Марта. Цены на цветы в это время кусаются.

 симпатичные розы

3. Симпатичные цветы. Можно распечатать целый букет.

 Симпатичные цветы

4. Шкатулка в виде сердечка под конфеты.

 Шкатулка в виде сердечка

Данную шкатулку можно распечатать с различными крышками. И каждая шкатулка будет уникальная. Отличный сюрприз на Восьмое Марта.

шкатулку можно распечатать с различными крышками

5. Еще одна шкатулка. Можно использовать как конфетницу. А также как упаковку под более дорогой подарок.

 шкатулка

6. Статуэтка пары лебедей в виде цифры 8. Очень красивый сувенир. Отличный сувенир на международный женский день.

 Статуэтка пары лебедей в виде цифры 8

7. Кулон сердечка. Внутри которого изображена пара.

Кулон сердечка

8. Кулон сердечка с узором.

Кулон сердечка с узором

9. Кулон 3D сердечка. Отличный подарок на 8 мата.

 Кулон 3D сердечка

10. У какой женщины нет косметики. Иногда ее столько, что просто некуда складывать. В таком случае подойдет вот такой симпатичный органайзер под косметику.

симпатичный органайзер под косметику

11. Крепление на ванну в виде подставки с креплением под бокал. Очень романтичный подарок.

 Крепление на ванну в виде подставки с креплением под бокал

12. Если ваша девушка постоянно теряет телефон. Забывает, где его положила. Подарите вот такую симпатичную подставку под телефон. Возможно данный подарок поможет определиться с местом куда положить телефон, и он будет реже теряться.

симпатичную подставку под телефон

13. Раскладная подставка под телефон или планшет. Достаточно полезная вещь не только на 8 Марта.

Раскладная подставка под телефон или планшет

14. Цветы мы уже напечатали. Нам нужна ваза.

 Нам нужна ваза

15. Вазу можно напечатать и попроще.

Вазу можно напечатать и попроще

16. Или более сложную вазу.

более сложную вазу

Можно напечатать на 3D принтере не только данные вещи. Возможно вы планируете напечатать сережки, заколку, кольцо или браслет. Выбор очень большой, что можно напечатать на 3d принтере на восьмое марта. Обо все не рассказать в одной статье.

Я поделился вещами которые понравились мне и часть из них я уже печатал на своем 3D принтере.

Если есть вопросы предложения пишите в комментарии или на форум.



Понравилась статья пишите в комментарии. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Игровая консоль на orange pi. Выбор железа и ОС. http://portal-pk.ru/news/172-igrovaya-konsol-na-orange-pi-vybor-zheleza-i-os.html Константин Portal-PK 2019-02-20T18:13:17+03:00 Немного о моих новых идеях и планах. А именно речь пойдет о самодовольной консоли на однопалатном компьютере. Но обо всем порядку. Для чего она мне нужна и как я решил ее сделать.

Пару месяцев назад решил купит ребенку 8 битную или 16 битную приставку. Посмотрел стоимости в различных магазинах от 1200 и до 5000 руб. Можно и дороже найти. И тут пришла мне идея самостоятельно собрать консоль. Если вас интересует что-то больше чем однопалатный компьютер предлагаю посмотреть комплекс апартаментов бизнес-класса от neopark застройщика.
Начел я изучать данную тему. Первое что понадобиться это железа. Самый оптимальный вариант это Raspberry Pi 3 + игровой kit. Набор с беспроводными джойстиками.

Raspberry Pi 3 + игровой kit. Набор с беспроводными джойстиками.

По стоимости можно уложиться 5 т. руб. (стоимость на момент написание статьи). Но я не ищу легких путей. Поэтому буду делать на более дешевой, но при этом более производительной плате Orange Pi Lite. Возможно у вас есть предложение более логичное. Но на данный момент я считаю, что данный однопалатный компьютер оптимальный по соотношению цена качество.
Дальше нужно выбрать операционную систему которая подойдет для выбранного однопалатного компьютера Orange Pi Lite.

однопалатнsq компьютер Orange Pi Lite.

И при этом можно будет использовать как игровую консоль. Если честно перед выбором платы я уже проштудировал данный вопрос. И изначально я планировал купить Orange Pi One.

Orange Pi One

Но на данный "апельсин" можно установить меньшее количество операционных систем. А чем больше выбор тем больше шансов что в итого получиться наилучший результат. И так приступим к выбору операционной системы.

Для однопалатных компьютеров большое количество операционных систем. Некоторые предназначены для создания ретро консоли на основе одноплатника:

1. Lakka - официальная сборка от авторов RetroArch и LibRETRO.

Скачать дистрибутив для Raspberry Pi.
Скачать для Orange Pi.
Данную ОС можно установить не только на эти одноплатнике но и на других. Также можно установить на старые ПК.

2. RetroPie - изначально сборка RetroArch + EmulationStation под Raspberry Pi, позже адаптирована под иные ОС. Скачать дистрибутив для Raspberry Pi
Скачать дистрибутив для OrangePi — RetroOrangePi

3. Batocera Linux - изначально сборка RetroArch + EmulationStation для ПК.

4. RetroArch + Ubuntu/Debian - оставим это линуксоводам в качестве секс-треножер. =)

5. Recalbox - это еще одна сборка готовой ОС для ретро-гейминга на базе RetroArch + EmulationStation. Подходит только для Raspberry Pi

6. Но мне понравилась RetrOrange Pi
Данная операционная система заточена в основном под Orange Pi. Но это понятно из названия.


Основные эмуляторы которые поддерживает данная ОС:

  • Playstation (Beetle PSX, PCSX_rearmed)
  • Game Boy Advance (VBA-M)
  • Arcade (FBA, Mame 2000-2016)
  • PSP (PPSSPP)
  • Sega Dreamcast (Reicast)
  • Sega Master System / Game Gear / Mega Drive / CD (Genesis Plus GX)
  • Game Boy / Game Boy Color (Gambatte)
  • Nintendo DS (DeSmuMe)
  • Nintendo 64 (Mupen64Plus)
  • Atari 7800 (ProSystem)
  • Atari 2600 (Stella)
  • Atari Jaguar (Virtual Jaguar)

и пр.

При выборе основывался на максимальной экономии. И на простоте настроек и использования. К моменту сборки и запуска возможно что-то измениться. Но Однопалатный компьютер буду использовать Orange Pi Lite. Тем более я его уже заказал и он уже в пути. Так что в ближайшее время будет статья про самодельную консоль на однопалатном компьютере.

Поэтому не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Ардуино светофор на digispark и ws2812b http://portal-pk.ru/news/171-arduino-svetofor-na-digispark-i-ws2812b.html Константин Portal-PK 2019-02-09T16:44:28+03:00 Сегодня речи пойдет про светофор на на DigiSpark и адресных светодиодах WS2812 . Это вторая версия светофора. Про первую я рассказывал вот тут Светофорна Digispark и адресных светодиодах WS2812 —Ардуино светофор. Первая версия получилась достаточно удобная и состояла из меньшего количество деталей. Почему я решил сделать вторую версию? Дело в том, что бокс под батарейки которые, я использовал в первой версии светофора на Arduino, очень подорожал. Некоторые продавцы продают его за 5 долларов на Алиэкспресс. Дороже всей остальной электроники. Поэтому я решил поменять бокс на более дешевый. А раз пришлось переделывать корпус. Принял решение изменить и размер самого светофора и сделать его больше первой версии. Также в ножку светофора добавил металлический стержень для увеличения жесткости. Потому что с первой версией были инциденты. Дети падали на него и отламывали ножку. Поэтому решил усилить.

Если вы любите писать статьи, комментировать посты, ставить лайки и прочее, вам подойдет работа в интернете.

Вырезал заготовки для светофора на адресных светодиодах из МДФ.

 заготовки для светофора на адресных светодиодах из МДФ

Как видно на фото получилось большое количество запчастей. Зачистил заготовки и склеил. Перед склейкой установил вовнутрь светофора 3 адресных светодиода. Можно было использовать обычные светодиоды. Как в Уроке7 - Светофор на Arduino своими руками. Пишескетч используя функции. Но тогда бы не получиться из него сделать красивый ночник с несколькими режимами работы .

В итоге получился вот такой светофор.

 светофор

Теперь его нужно покрасить и подготовить для установки остальной электроники и бокса под батарейки.

электроники и бокса под батарейки

Теперь можно устанавливать электронику:

1. Digispark

2. Адресные светодиоды WS2812

3. Резистор 10 кОм

4. Бокс под батарейки 4 x AA

5. Кнопка без фиксации

6. Кнопка с фиксации

 установка электроники

Перед установки электроники. Нужно запрограммировать DigiSpark . К прошлому видео мне написали много комментариев, с просьбой выложить прошивку. Прошивка достаточно простая. Как подключить адресные светодиоды к DigiSpark рассказывал тут: Digispark подключаем светодиоды ws2812. Программируем в Arduino IDE. Я использую библиотеку NeoPixel. Тут есть пример с включением светодиодов определенном цветом и эффекты которые я использую в светофоре.

Рассказывать для чего все строки кода не буду. Просто выложу рабочую программу светофора. Эффекты режимов выкладывать не буду. Добавляйте на свое усмотрение. Тем более они есть в пример с библиотекой NeoPixel.

Устанавливаем батарейки и включаем. Вот такой светофор получается.

такой светофор получается

ночник

У меня ребенок использует его как ночник. 4 батареек купленных в фикс прайс за 55 руб. за 4 шт., хватает на 7 ночей. Достаточно неплохо. Можно купить и аккумуляторные батарейки, возможно будет более экономичнее. Но я пока не проверял.

Светофор я собрал месяца 3 назад. До сих пор он работает исправно и радует ребенка.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Показание с датчика температуры и влажности на телефоне. dht11 + esp8266 http://portal-pk.ru/news/170-pokazanie-s-datchika-temperatury-i-vlazhnosti-na.html Константин Portal-PK 2019-02-01T12:40:55+03:00 Продолжаем тему NodeMCU и App Inventor. И сегодня по просьбе моих зрителей на канале YouTube. Сделаю вывод показаний с датчика. Не просто одно показание. А значение температуры и влажности. Для этого буду использовать датчик DHT11, он конечно не очень точный (Влажность вообще отвратительно показывает. Может из-за библиотеки.) но для примера работы подойдет. В предыдущем проекте Управляй новогодней гирляндой со смартфона. NodeMCU + App Inventor я делал обратную связь. Но она имела кучу ограничении. Получить можно только одно значение. Конечно можно сделать много страничек и с каждой получать данные от одного датчика. Или данные отделить разделителем и в приложении раскладывает полученную строку на данные. Но это не удобно. И мягко говоря так никто давно не делает. Правильно было бы воспользоваться форматом json. Но к сожалению App Inventor нет готового решения для разбора json. Но зато можно обробатывать данные в формате xml. Поэтому я пошел по пути наименьшего сопротивления. И формировать данные на стороне сервера в xml. В нашем случае NodeMCU.

dht11 + esp8266

Для начала работы нам нужно понимать как будет выглядеть xml страница.

 xml страница

Для того чтобы понимать что будем обрабатывать и какие показание нам нужно получить.

Экспертиза мобильного телефона https://a-aspect.ru/phone_exp1/

Преступим к приложению на App Inventor. Оформление будет простым и название элементов дизайна будут стандартное. Как называет программа App Inventor по умолчанию.

Преступим к приложению на App Inventor
Тут у нас несколько полей. К которые будем выводить значения температуры и влажности.
Кнопка Настройки, как и в предыдущем проекте открывает страницу настроек в которой мы можем указать Ip адрес устройства.
В данном приложении будем использовать новый компонент Clock (часы). В данном проекте будем использовать таймер. Для хранения времени создадим глобальную переменную time, равную 0.

компонент Clock (часы
В таймере первым делом сделаем счетчик. Который будет добавлять 1 к переменновыводить значения температуры и влажностий time, каждую секунду. Дальше сделаем ограничение значения time. Для этого создадим условие. Если time больше 10, тогда обнуляем переменную.
В следующем условии проверяем если переменная time равна 5, тогда выполняем следующее условие. ( Тут можно прировнять к любому числу от 0 до 9, и данные все ровно будут выводиться 1 раз в 10 сек.)
В следующем условии я пытался убрать ошибку, если у нас нет подключения к NodeMCU. Но к сожалению. Ошибка все равно выскакивает. И ругается, что нет может подключиться к странице. Можно конечно сделать флаг в настройках. Но поэкспериментирую в следующий раз.
Дальше мы делаем GET запрос к нашей странице. Этот кусок кода вам должен быть знаком. Если нет посмотрите предыдущие 2 проекта: Управляй новогодней гирляндой со смартфона. NodeMCU + App Inventor, Wi-Fi реле на NodeMCU. Управление Android приложением

Следующее что нам нужно сделать это создать процедуру которая будет обрабатывать XML и сохранять нужные нам значения временные.
Для этого создадим глобальные переменные: list, t и f. В list будем хранить полученные значения из xml, а t- температура, f- влажность.

Процедура listXML
Процедура listXML получает данные и сохраняет в локальную переменную xml. Дальше с помощью стандартной функции App Inventor .XMLTextDecode полученный xml данные преобразуем и сохраняем в переменную list. Так как полученные данные сохраняются в виде массива с разделение в виде скобок нам нужно выделить из него нашу температуру и влажность. Для этого Их массива list сохраняем значение температуры в переменную t. И влажность в переменную f.

Веб-обработчикВеб-обработчик нам знаком. И мы как всегда проверяем код ответа. Если он равен 200. То все данные пришли и их можно передавать в процедуру listXML.
И остается вывести значения температуры и влажности в текстовые поля.

Приложении имеет ряд недоработок. Но как базовый пример использовать можно.

Теперь перейдем к электронике. Подключим датчик DHT11 к NodeMCU.

Подключим датчик DHT11 к NodeMCU

Для написания кода нам понадобиться:
1. Второй урок Третьякова Сергея: ШАГ №2 * WEBSERVER WEB СЕРВЕР
2. Библиотека <DHTesp.h> Ставиться из менеджера библиотек. (У меня влажность показывает максимум 34 % либо глюк датчика. Также возможно библиотека работает некорректно. Температуру показывает нормально, для точности датчика DHT11 .)

Подключаем библиотеки и необходимые переменные.

<code>#include <DHTesp.h>
#define DHTPIN D3
// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHTesp dht;
// Переменные для XML запроса
String XML;
dht.setup(DHTPIN, DHTesp::DHTTYPE); // Connect DHT sensor to GPIO
</code>

Далее во вкладке HTTP_init Добавляем вот этот код.

<code>void HTTP_init(void) {
  HTTP.on("/xml",handleXML); // формирование xml страницы для передачи данных в web интерфейс
  // Запускаем HTTP сервер
  HTTP.begin();
}
void handleXML(){
  buildXML();
  HTTP.send(200,"text/xml",XML);
}
// создаем xml данные
void buildXML(){
  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();
  XML="<?xml version='1.0'?>";
  XML+="<Donnees>"; 
    XML+="<temp_c>";
    XML+=temperature;
    XML+="</temp_c>";
    XML+="<humidity>";
    //XML+=alert_h();
    XML+=humidity;
    XML+="</humidity>";
   // XML+="<time>";
   // XML+=XmlTime();
  //  XML+="</time>";
  XML+="</Donnees>"; 
}
</code>

Тут у нас получение данных с датчика и формирование xml. Вывод данных на страницу /xml.
В следующем проекте планирую объединить функционал из предыдущего видео и вывод данных с помощью XML.


Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.


Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Простые 3D модели для печати. Для новичков в 3D-печати. http://portal-pk.ru/news/169-prostye-3d-modeli-dlya-pechati-dlya-novichkov-v-3d-pechati.html Константин Portal-PK 2019-01-29T13:38:20+03:00 После сборки 3D принтера Anet A8. Необходимо его откалибровать и протестировать печать при различны настройках. Чтобы подобрать оптимальные настройки и режимы печать. А опыта еще нет и печатать что-то сложное нет смысла. Печатать 10 раз калибровочный куб нет смысла! Нужно напечатать на 3D принтере что нибудь полезное для себя и близких. Поэтому я решил печатать веши которые мне понравились. Ну еще и ребенок попросил. Куда тут денешься!

А вот ПВХ завесы и перегородки для автомоек и складов не напечатать на 3D принтере, но можно эластичные полосовые пвх завесы купить.

Десять 3D-моделей которые мне понравились и практически все я напечатал на 3D принтера Anet A8:

1. Для калибровки можно распечатать на 3D принтера кораблик Benchy.

3D принтера кораблик Benchy

Данный кораблик так же используют для настройки и калибровки печати. Поэтому я напечатал его. И мне польза и ребенок доволен.

2. Многие начинают печать с Эйфелевой башни. Но я ее не печатал. И пока не планирую но ссылку на нее оставлю.

печать с Эйфелевой башни

3. До покупки 3D-принтера видел видео на ютюбе про подвижного динозавра. И Он мне понравился. Поискал в интернете и нашел его. Вот он Flexi Rex

Flexi Rex

На момент написание статьи напечатал уже 2 копии.

4. Из той же серии что и Динозавр, гибкая рыбка. Очень интересная 3D-модель для печати на 3Д принтере. И при этом очень нравиться детям.

 гибкая рыбка

5.Робот который печатается собранным. Но при этом у него гнуться руки и ноги. Так же поворачивается голова. Взрослые в недоумении. Как так возможно. Многие не верят, что можно напечатать такого робота целиком на 3D принтере.

Робот который печатается собранным

6. Самолет. Который можно запускать как бумажную воронку. Но почему то у нас с ребенком он не всегда удачно запускается. То летит то ударяется в крючок для запуска. Но при этом это очень интересная замена бумажным самолетикам, которые были у нас в детстве.

 Самолет. Который можно запускать как бумажную воронку

7. Разводной гаечный ключ. Хоть он и пластиковый но им можно крутить гайки. Но конечно усилие большое не приложить. Но что то в доме подтянуть можно. И плюс ребенок доволен.

Разводной гаечный ключ

8. Подставка под телефон или планшет. Имеет небольшие размеры. Можно переносить с собой. Так как подставка складывается в очень тонкую пластинку около 3-4 мм.

Подставка под телефон или планшет.

Кроме этого можно распечатать подставку трех размеров. Удобная и функциональная 3D-модель для 3D-печати.

9. Понравилась вот такая вот коробка. Которая закрывается при вращении нижнего основания. Но к сожалению пока не распечатал.

 коробка

10.Небольшая головоломка. Головоломка которая состоит из 3 деталей и собирается в куб. Легко печатается на 3D принтере и при этом полезна для занимательная игрушка.


Все 3д-модели достаточно несложные для печати. И я практически все печатал. А у меня опыт печати меньше 1 месяца.

Кроме всего делаю модификации 3D-принтера Anet A8. Для чего распечатываю различные 3D-модель на 3D-принтере. Но про это модели я расскажу в следующий раз.


Понравилась статья пишите в комментарии. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.


]]>
Обзор 3D принтера Anet A8. Сборка. Наладка. Примеры печати http://portal-pk.ru/news/168-obzor-3d-printera-anet-a8-sborka-naladka-primery-pechati.html Константин Portal-PK 2019-01-23T08:17:16+03:00 И снова тема 3D принтера. Изначально я планировал собрать данный станок с ЧПУ самостоятельно с нуля. Но тут ко мне пришла лень. Не совсем лень. Просто в интернете очень много статей про сложность сборки 3D-принтера . И что не стоит его собирать если у вас нет опыта пользования сие полезным агрегатом. Очень много рассказов про то, что 3D принтер даже настроить сложно . Очень много моментов которые нужно учитывать. А при сборке самостоятельно можно просто столкнуться с рядовыми проблемами которые решают владельцы принтеров ежедневно. И при этом бросить сборку при пуска-наладке. Ну и все в этом духе.

Посидел, посчитал. Самостоятельно я могу собрать 3D принтер за 7-8 т. руб. На сборку у меня примерно уйдет около 2 месяцев. (это расчетные значении, на самом деле это может заткнуться на 3 - 4 месяца). Посмотрел на Алике, самые дешевые принтеры. И приобрел 3D принтер Anet A8 с доставкой со склада в России. Получил я принтер через 4 дня. Ну очень быстро. Доставка курьером до квартиры. И это всего за 10 т. руб.!!! В подарок дали пластика 0.5 кг.

Управлять 3D принтером можно с ноутбука asus или печатать прям с карты памяти, которая идет в комплекте с принтером.

3D-принтер Anet A8

Собрать 3D-принтер Anet A8 не составить труда, тем более в комплекте идет карта памяти с инструкцией. Если что инструкция тут A8 3D Printer Installation Instructions-161230.pdf. Вдруг кому пригодиться.

Подключение электроники тоже не сложно. Все провода подписаны и есть картинка с подписанными разъемами на русском языке.

Подключение электроники 3D-принтер Anet A8 на Русском

Правда я ее нашел уже когда все подключил.

После сборки нужно обязательно выровнять ось Z, чтобы со сторон ведущих валов было одинаковое состояние до поверхности на которой стоит принтер. Для измерения данного расстояния я использовал угольник.

После сборки нужно обязательно выровнять ось Z

Поворачиваем правый или левый винт оси Z выставляем нужное расстояние. Если у вас есть дети то обязательно убедитесь, чтобы они не настраивали данные винты. У меня ребенок первые 2-3 дна настраивал 3D-принтер Anet A8 . Подкручивал данные винты и мне приходилось заново калибровать 3D принтер .

настроить конечный выключатель оси Z

После чего нужно откалибровать стол. Но сперва нужно настроить конечный выключатель оси Z. Это необходимо для того чтобы экструдер не уперся в стол или не располагался слишком высоко.

Крепления конечного выключателя ости Z имеет прорези для смещения его вниз или вверх. Выставляем его так, чтобы экструдер не касался стола.

с помощью регулировочных винтов настраиваем высоту стола

Дальше с помощью регулировочных винтов настраиваем высоту стола, так чтобы бумажка положенная между экструдером и столом слегка прижималась. Но не сильно. Калибруем все 4 угла стала. Затем повторно проверяем все углы. Иногда при регулировании других углов немного смещается соседний. Также желательно перед первым запуском проверить зазор между экструдером и столом в центре стола. Бывают случаи, что стол приходит не совсем ровный. Слава богу у меня все было ровное!

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

нажмите вернуть домой

Но будьте осторожны, если у вас будет двигаться ось принтера в противоположном направлении у вас двигатель закусит так как там нет конечного выключателя. Для предотвращения данной ситуации просто нажмите на любой конечник и станок перестанет перемещение.

нажмите на любой конечник

У меня по оси X перемещение шло в противоположном направлении. Лечиться это очень легко. Переворачиваем провода одно из обмотки двигателя. ( Нужно прозвонить и найти обмотку и перевернуть данные провода. Если перевернуть любые 2 провода то у вас может перестать работать шаговый двигатель).

И так 3D-принтер Anet A8 откалиброван . Калибровку шаговые двигателя в принципе не нужно. Так как они идут откалиброванные в прошивке на заводе. Если у вас не так пишите в комментарии.

Следующая проблема с которой я столкнулся заключается в конструкции экструдера. Та как он идет в сборе с подающим механизмом. Пластик идет намотанный на катушку, в связи с чем он всегда слегка изогнут. После нескольких минут мучения я понял как это легко можно исправить не разбирая и не переделывая экструдер. Берем и слегка выгибаем филамент для 3d принтера в противоположном направлению радиуса изгиба. И при таком несложном действии пластик очень легко заправляться в экструдер. Можно конечно переделать экструдер. Но я пока не планирую.

Первую тестовую печать я сделал из файла который был на флешки. Получилась у меня вот такая коробочка. Достаточно неплохого качества.

Первую тестовую печать

После покупки 3D-принтер Anet A8 уже прошел месяц.

После покупки 3D-принтер Anet A8 уже прошел месяц.

И я бы выделил минусы данного принтера которые мне не нравятся и которые я планирую переделывать или уже переделал.

1. При первой печати у меня очень сильно свистела турбина которая обдувает деталь. Разобрал я ее и смазал специальной силиконовой смазкой для куллеров. Но свист пе прошел.

свисток который одевается на турбину

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

систему обдува

2. Гудит двигатель оси Y. Остальные оси работают намного тише. Попробовал ослабить ремень но гул так и не прошел. Можно конечно изменить ток на двигателе. Но плата которой оснашен 3D-принтер Anet A8 не имеет потенциометров для регулировки данных параметров. Что очень не удобно. Возможно есть другое решение. Если у вас есть информация по данному вопросу, напишите в комментарии.

3. Акриловая рама не позволяет печатать на большой скорости. Комфортно печатает на скорости 30 мм/сек., внешние стенки и 60 мм/сек. заполнение. На боле большой скорости начинаются проблемы с качеством. Для укрепления корпуса начел распечатывать и устанавливать дополнительные детали.

распечатывать и устанавливать дополнительные детали

4. Возникла проблема с адгезией. (Проблема прилипания пластик к стало.) На скотч который был приклеен к столу, при покупке, очень хорошо все приклеивалось. Но снимать было достаточно сложно. Поэтому скотч очень быстро изорвался. И пришлось искать замену. О том, что я пробовали и на каком варианте остановился расскажу в отдельной статье. Это достаточно интересная и обширная тема. Так как я попробовал некоторые нестондартные компоненты которые пришли в голову.


В качестве программы для генерации G-кода из 3D модели использую Cura которая была на флешке с принтером. Хотя есть новые версии, но пока не доходят руки до освоения новых программ.

Вывод: Не смотря на небольшие недочеты 3D-принтер Anet A8, я доволен покупкой. Все заработало достаточно быстро и качество неплохое. Для домашнего использования в бюджетном сегменте неплохое решение.


В ближайшее время на сайте будут проекты сделанные мной на 3D-принтер Anet A8 . Так что подписывайтесь на новости сайта, канал и вступайте в группу в ВК.

]]>
Управляй новогодней гирляндой со смартфона. NodeMCU + App Inventor http://portal-pk.ru/news/167-upravlyai-novogodnei-girlyandoi-so-smartfona-nodemcu-app.html Константин Portal-PK 2019-01-14T17:11:29+03:00 В прошлом году я делал новогоднюю подсветку: Подсветка на Arduino и ws2812 - На новый год. Arduino UNO управляла данной подсветкой, информация выводилась на ЖК-дисплей 1602. В этом году я решил сделать гирлянду и подсветку под управлением NodeMCU. Это позволило организовать беспроводное управления с выводом информации на смартфон. Для управления можно сделать веб-интерфейс . Но на мой взгляд это не очень удачное решение для управления новогодней подсветкой на NodeMCU и адресных светодиодах ws2812. Так как скорость отклика и время загрузки страниц достаточно большое и в связи с чем возникают небольшие провисание.

Обновленная версия гирлянды тут:

Версия 2020 с поддержкой ESP32.

Елочная смарт-гирлянда с управлением через мобильное приложение.

Новый

год пора признака, салатов и торжества.

Но что делать если ваш холодильник

приболел в самый неподходящий момент.

Найти

запчасти либхер на этом сайте.


гирлянда из 33 ws2812 светодиодов

приложение в App Inventor для управления умной новогодней гирляндой

Поэтому я решил сделать простое приложение в App Inventor для управления умной новогодней гирляндой. Тем более у меня уже есть небольшой опыт по реализации связки NodeMCU и приложений написанных на App Inventor: Wi-Fi реле на NodeMCU. Управление Android приложением

Как я спаивал светодиоды расскажу и покажу в видео. В итоге у меня получилась гирлянда из 33 ws2812 светодиодов. Это оптимальное количество светодиодов для подключения к зарядному для телефона.

Подключил ws2812 к NodeMCU вот по такой схеме.

Подключить ws2812 к NodeMCU схема

Приложение решил разделить на 2 экрана.

Первый экран App Inventor управление светодиодами.

Первый экран App Inventor управление светодиодами.


Второй экран это экран настроек.

Второй экран это экран настроек


Название визуальных элементов оставил по умолчанию, как назвала программа, чтобы вам было понятнее.

Блок обработки нажатия кнопок в App Inventor

Блок обработки нажатия кнопок в App Inventor


Данный блок аналогичен Предыдущему проекту: Wi-Fi реле на NodeMCU. Управление Android приложением и описывать его подробно не буду. Тут только кнопка Button6 не знакома вам, она переключается на экран Screen2. Функционал остальных кнопок:

prev — Предыдущий режим

next — Следующий режим

minus — Уменьшаем яркость

plus — Увеличиваем яркость

auto — Включение Авто-режима.

Авто-режим это переключение режимов по порядку с интервалом 1 мин. (время можно изменить в прошивке NodeMCU.)

У вас иноверное возник вопрос, а где выключение авто-режима. Я нестал делать отдельную кнопку и сделал включение авто-режима при нажатии смены режима: prev или next.

Создал две глобальные переменные:

Создал две глобальные переменные

num — содержит полученный ответ в цифровом формате

list — массив наших режимов.

Веб-обработчик организован по принципу предыдущего проекта

Веб-обработчик организован по принципу предыдущего проекта. Сперва мы получаем ответ от сервера. В нашем случае от NodeMCU. Если ответ 200 ( все в порядке). Дальше проверяем значение ответа.

Если значение Меньше 14. ( у меня просто сделано 13 режимов). Тогда в текстовое поле Label2 выводим режим. Для этого полученное число num сравниваем с массивом list.

В текстовое поле Label6 выводим информацию «Выключен». Это означает, что Авто режим выключен если он был включен. Так же активируем кнопку включения авто режима Button5.

Следующее условие Иначе Если значение больше или ровно 100 и при этом меньше или ровно 350 выполняем следующие действия. Вы наверное поняли, что тут мы будем управлять яркостью.

В текстовое значение Label4 выводим процент яркости. Но для этого от полученного значения вычтем 100. (Я в прошивке специально добавлял 100, чтобы наше значение не совпадали с режимами. ) И умножим на 0.4 - это приведение значения к процентам, так как наше значение яркости 250. Я думаю тут понятно. Это простая математика.

Последнее условие когда значение num равно 400. Это включение авто-режима.

В текстовое поле Label6 выводим информацию «Включен». Это означает, что Авто-режим управления новогодней гирляндой был включен. Так же прячем кнопку Button5.

С Приложением для Android разобрался приступаем к программированию NodeMCU.

Для этого нам понадобиться:

1. Второй урок Третьякова Сергея: ШАГ №2 * WEBSERVER WEB СЕРВЕР

2. Библиотека для работы с ws2812 светодиодами WS2812FX

В библиотеке Есть более 50 световых эффектов. Чтобы выбрать нужные режимы можно загрузить в NodeMCU пример который идет с библиотекой и выбрать понравившиеся режимы. Мне понравились (7,8,10,11,12,17,20,32,33,38,36,42,46).

Добавим в урок Сергея переменные и подключаем библиотеку WS2812FX

#include <WS2812FX.h>
#define LED_COUNT 285 // кол-во светодиодов в гирлянде
#define LED_PIN D4 // пин для вывода на гирлянду
WS2812FX strip = WS2812FX(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
int i = 0; // счётчик индекса в массиве эффектов
int m = 13; // кол-во эффектов, см. массив modes
int l = 0; // индекс прошлого (last) эффекта
#define DEFAULT_SPEED 3000 // задержка в мс, по дефолту 1000
#define TIMER_MS 60000 // время длительности одного эффекта в мс
int j = 25; // максимальнаяя яркасть *10 
boolean auto_rejim = false; // авто режим выкл. 
unsigned long last_change = 0; // предыдущее значениее времени
unsigned long now = 0; //текущее значениее времени
</code>

Затем создадим страницу управления Новогодней подсветкой. И Создадим все необходимые функции:

void HTTP_init(void) {
...
  HTTP.on("/led", handle_Led); // Упровляем Led http://192.168.0.101/led?status=auto
  // Запускаем HTTP сервер
  HTTP.begin();
}
void handle_Led() { 
  int modes[] = {7,8,10,11,12,17,20,32,33,38,36,42,46}; // массив с желаемыми ID эффектов
  String status = HTTP.arg("status");
  if (status == "prev") 
  {
    i++;
      if (i>12)
        i=0;
    strip.setMode(modes[i]);
    //strip.setMode(i);
    String k = String(i+1);
    auto_rejim = false;
    HTTP.send(200, "text/plain", k);
  }
  if (status == "next") 
  {
    i--;
       if (i<0)
          i=12;
    strip.setMode(modes[i]);
    String k = String(i+1);
    auto_rejim = false;
    HTTP.send(200, "text/plain", k);
  } 
  if (status == "minus") 
  {
    j--;
       if (j<1)
          j=1;
    strip.setBrightness(j*10);
    String k = String(j*10+100);
    HTTP.send(200, "text/plain", k);
  } 
  if (status == "plus") 
  {
    j++;
       if (j>25)
          j=25;
    strip.setBrightness(j*10);
    String k = String(j*10+100);
    HTTP.send(200, "text/plain", k);
  } 
  if (status == "auto") 
  {
  auto_rejim = true;
  HTTP.send(200, "text/plain", "400");
  } 
   if(modes[i] == 17 || modes[i] == 42 || modes[i] == 46){
      strip.setSpeed(DEFAULT_SPEED*3); // очень быстрые - х3
    }
    else
     strip.setSpeed(DEFAULT_SPEED); // вернуть скорость на дефолт
}
void Auto_Led() {
 if (auto_rejim)
 { 
  int modes[] = {7,8,10,11,12,17,20,32,33,38,36,42,46}; // массив ID эффектов
  if(now - last_change > TIMER_MS) {
   if(modes[i] == 17 || modes[i] == 42 || modes[i] == 46){
      strip.setSpeed(DEFAULT_SPEED*3); // очень быстро х3
    }
    else
     strip.setSpeed(DEFAULT_SPEED); // вернуть скорость на дефолт
    strip.setMode(modes[i]);
    last_change = now;
    l = modes[i];
    i++;
    if(i == m)
      i = 0;
  }
 }
}

Функция Auto_Led() переключает режимы в авто-режиме. Для ее работы необходимо в основной цикл loop добавить

now = millis();
strip.service();
Auto_Led();

Вот такая небольшая программа у нас получилась, но при этом достаточно функциональная.

Все достаточно несложно, но если у вас появились вопросы пишите их в комментарии.

В следующем Проекте расскажу как, я сделал пяти метровую светодиодную подсветку на окно и управляю данной подсветкой со смартфона . Фишка подсветки в том, что она запитана от 2 А блока питания и все работает. Не веришь!? Подписывайся на мой канала и вступай группу в ВК чтобы не пропустить.

Понравилась статья пишите в комментарии. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Wi-Fi реле на NodeMCU. Управление Android приложением http://portal-pk.ru/news/166-wi-fi-rele-na-nodemcu-upravlenie-android-prilozheniem.html Константин Portal-PK 2018-12-24T18:59:53+03:00 В предыдущем проекте я уже рассказывал как можно управлять реле по Wi-Fi. Но использовать сторонне приложение для управления своими проектами не дальновидно. И нет перспективно. Поэтому я решил написать пару Android приложения для своих новых проектов на ES8266 это просто изыскания для проектирования.

Посмотрел среды разработки под Android и мне понравились:

1. Android Studio

2. MIT App Inventor

Так как я не писал Android приложения, разобраться с Android Studio потребует достаточно большое количество времени. И для вас повторить мои проекты будет гораздо сложнее. Поэтому я решил пойти по самому легкому пути и написал приложение на MIT App Inventor.

написал приложение на MIT App Inventor

Дизайн моего первого Android приложения достаточно простое, но в нем есть пару функций которых не хватало в положении из предыдущего проекта.

Первое. В приложении мы можем указать IP устройства. И нам не нужно постоянно его прописывать в коде NodeMCU.

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

Программа для NodeMCU берем из прошлого проекта без изменений. Сделаем дизайн приложения в MIT App Inventor.

Сделаем дизайн приложения в MIT App Inventor

Элементы я не стал переименовывать, чтобы было понятнее и проще разобраться. Блоки с русским названием добавлял уже после проверки и тестировании. Они сделаны для лучшего расположения основных элементов. Конечно это мой косяк. Переделывать не стал. Постараюсь в следующем проекте чтобы все названия были на английском языке.

Набросаем код блоками и у нас получиться вот что.

Набросаем код блоками

В блоке

обрабатываем нажатие кнопки Button1

Мы обрабатываем нажатие кнопки Button1. Зеленой блок Set отправляет заброс в веб обработчик Web1. Блок Join собирает нашу ссылку из 3 частей. Первая и третья части это просто текстовые поля. Поле TextBox1 берет параметры из поля ввода. В него мы указываем IP адрес подключения.

Кнопка Button2 работает аналогично Button1. Только она отправляет сигнал на отключение реле.

Блок кода Web1 отправляет Get запрос

Блок кода Web1 отправляет Get запрос который мы сформировали с помощью кнопки.

Внутри первого блока условия проверяем код ответа. Если мы получили код ответа 200 (нет ошибок), выполняем следующее условие. Иначе выводим ошибку.

Второе условие проверяет Содержимое ответа. Содержимое мы сформировали сами в программа NodeMCU.

HTTP.on("/rele", handle_Rele);
...
void handle_Rele() {
  String restart = HTTP.arg("status");
  if (restart == "1") 
  {
    digitalWrite(RELE, HIGH);
    HTTP.send(200, "text/plain", "On");
  }
  if (restart == "0") 
  {
    digitalWrite(RELE, LOW);
    HTTP.send(200, "text/plain", "OFF");
  }  
}

On - реле включено

OFF - реле выключено.

В текстовое поле Label1 выводим состояние реле.

Конечно данной программе далеко до идеала. Но я планирую за пару уроков ее улучшить и поделиться полученным результатом с вами

Wi-Fi реле на NodeMCU

Понравилась статья пишите в комментарии.Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 3. TTP223 сенсорная кнопка схема подключения к Arduino http://portal-pk.ru/news/165-ttp223-sensornaya-knopka-shema-podklyucheniya-k-arduino.html Константин Portal-PK 2018-12-12T18:13:52+03:00 Сенсорные кнопки устроенны так, что они реагируют на изменение емкости. Изначально кнопка имеет определенную емкость, которая разная у каждой модели данных датчиков.

Сенсорные кнопки устроенны так

Так как тело человека обладает некоторой емкостью и небольшим реактивным сопротивлением. Если прикоснуться пальцем какого-нибудь проводника, то по нему потечет ток утечки. В сенсорных кнопка установлен чип (в нашем случае TTP223), который определяет данную утечку. При достижении определенного значения происходит срабатывания.

TTP223 сенсорная кнопка

сенсорная кнопка

Технические характеристики TTP223

  • Напряжение питания постоянного тока, В: 2 – 5.5
  • Потребляемый ток (в покое, при VCC= 3 В), мкА: 70
  • Максимальное время срабатывания (при VCC= 3 В), мС: 220
  • Габаритный размер платы, мм: 11x15

Подключим сенсорную кнопку TTP223 в Arduino

Подключим сенсорную кнопку TTP223 в Arduino

Как подключить кнопку к Arduino я рассказывал в Урок1 - Подключение кнопки и светодиода кплате Arduino

Для подключения сенсорной кнопки не нужно дополнительно ставить резистор потягивающий резистор. Все еже реализовано в самой кнопке. И контакт не будет висеть в воздухе.

Проверим будет или нет работать код из урока подключения кнопки к Arduino.

int led_pin=3;          // пин подключения
int button_pin = 4;     // пин кнопки
void setup() { 
    pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
}
void loop() {
   if (digitalRead(button_pin) == HIGH) { // Если кнопка нажата 
      digitalWrite(led_pin, HIGH);// зажигаем светодиод
 }
  else { //Иначе
      digitalWrite(led_pin, LOW);// выключаем светодиод
  }
}

Как видим у нас все работает аналогично обычной кнопке.

При этом есть еще один бонус от использования сенсорной кнопки. Нам не нужно устранять дребезг кнопки. Если вы не знаете что это смотрите : Урок2. Нажатие кнопки без ложных срабатываний.Устраняем дребезг кнопки

Также данную сенсорную кнопку можно сконфигурирован для работы в одном из 4 режимов для этого нужно спаять перемычки А и В на плате:

A

B

Режимы

0

0

На время касания на выходе “1”

1

0

На время касания на выходе “0”

0

1

режим триггера, состояние выхода после касания – “0”

1

1

режим триггера, состояние выхода после касания – “1”

 спаять перемычки А и В
Как мы видим если спаять перемычки А и В. Мы сконфигурирован сенсорную кнопку как логический ключ. И не меняя программу мы можем включать светодиод и выключать при нажатии на сенсорную кнопку TTP223 .

Давайте подключим реле, вместо светодиода, не меняя программу.

подключим реле, вместо светодиода

Как видим, реле также отлично работает включается и выключается.

Если мы можем сконфигурировать кнопку так, что она будет работать как триггер. При нажатии подать положительный сигнал на выход. Для управления простыми устройствами такими как светодиод и реле. Из схемы можно убрать Arduino.

Для подачи напряжения буду использовать MICRO USB адаптер 5pinMICRO USB адаптер 5pin

Подключим светодиод к сенсорной кнопку . Как видим все работает.

Подключим светодиод к сенсорной кнопку

Если же подключить реле к сенсорной кнопке TTP223 .

подключить реле к сенсорной кнопке TTP223

Оно не работает, потому, что кнопку можно подключить как логический ключ. Электродвигателя, реле и пр. (даже на 3-5 В) работать не будут. Сенсорная кнопка просто сгорит. Для примера я подключал параллельно 3 светодиода. И как видно из эксперимента начинаются ложные срабатывания. По техническим характеристикам даже 4 светодиода для данной кнопки много.

Но не обязательно ограничиваться реле. Можно подключать MOSSFET или твердотельное реле.

Проверку на работоспособность с разными материалами: пластик, картон, фанерой. Если на сенсорную кнопку положить материал не толще 2 мм. Кнопка работает отлично. Более 2 мм. Работает только с пластиком. Но это у меня. Возможно у вас будут другие результаты. Как у вас работают сенсорные кнопки пишите в комментарии.

Вывод: Сенсорная кнопка TTP223 имеет ряд преимуществ при использовании в проектах на Arduino , по сравнению с тактовой кнопкой. Но она не может быть использована в силовых цепях.


Подписывайтесь на мой канал на Youtube и вступайте в группы в

Вконтакте и Facebook.

]]>
Управляем реле по wi-fi с телефона. NodeMCU и Arduino IDE http://portal-pk.ru/news/164-upravlyaem-rele-po-wi-fi-s-telefona-nodemcu-i-arduino-ide.html Константин Portal-PK 2018-12-05T11:23:14+03:00 В уроке: Урок8 — Подключаем реле к Arduino. Пример работыи скетч я рассказывал, что реле можно управлять без микроконтроллера. Но если надо управлять реле на расстоянии и без проводов. Например управлять светом по wi-fi. При решении поставленной задаче без микроконтроллера не обойтись. Я планирую использовать распространенную отладочную плату NodeMCU на базе ESP8266.

Упровление светом с помошью Wi-Fi приносит большое уудовольствие, но ни такое как новогодние туры в шри-ланку.

Подключим реле к NodeMCU по схеме.

Подключим реле к NodeMCU по схеме

В связи с достаточно большим объемом памяти, NodeMCU можно использовать как точку доступа и загрузить HTML станицы и управлять реле. Очень хороший пример реализации управления рассказывает в своих уроках Третьяков Сергей. По его урокам реализовать управления с помощью HTML интерфейс будет достаточно легко. Если вам интересна данная тема пишите в комментарии. Обязательно помогу и сниму пару видео по созданию и загрузки HTML в NodeMCU. Но для нашей задаче достаточно: ШАГ №2 * WEBSERVER WEB СЕРВЕР. Из чикла уроков Третьяков Сергя.

NodeMCU + relay

подключении NodeMCU к вашему Wi-Fi роутеру

Описание и код можно найти на странице урока и объяснять. что и как написать не буду. Нам останется дописать одну функцию которая будет посылать Get запрос на включение (http://192.168.0.101/rele?status=1) и выключения (http://192.168.0.101/rele?status=0) реле. «192.168.0.101» это ваш IP при подключении NodeMCU к вашему Wi-Fi роутеру. Можно посмотреть в мониторе порта.


void handle_Rele() {
  String restart = HTTP.arg("status");
  if (restart == "1") 
  {
    digitalWrite(RELE, HIGH);
    HTTP.send(200, "text/plain", "Ok");
  }
  if (restart == "0") 
  {
    digitalWrite(RELE, LOW);
    HTTP.send(200, "text/plain", "OFF");
  }  
}

Для проверки работы можно пройти по одной из получившихся ссылок (http://ваш_IP/rele?status=1 или http://ваш_IP/rele?status=0) и вы увидите, что реле включается и выключается. И в браузере выводит соответствующие надписи: On — Wi-Fi реле включен, Off — Wi-Fi реле выключено.

Теперь перейдем к управлению Wi-Fi реле с телефона . Для этого можно написать приложение для Android, но можно обойтись и без программирования. В этом нам поможет бесплатного приложения HTTP Edit Widget (условно бесплатного).

 приложения HTTP Edit Widget

В итоге у нас должны получиться две кнопки. Название и цветовое оформление выберете под себя. У меня получилась вот так:

должны получиться две кнопки

Для создания таких кнопок в списке виджетов выбираем HTTPEditWidge t. В отрывшемся меню настроек заполняем поля.

виджетов выбираем HTTPEditWidget

В поле « http://» указываем нужный адрес Если для выключения реле то http://192.168.0.101/rele?status=0. Пишем текст который будет выводиться на кнопке. В нашем случае «off». Ниже выбираем цвет кнопки и цвет текста. Кнопка Off готова. Аналогично делаем кнопку On, не забывая то включается реле вот по такому запросу: http://192.168.0.101/rele?status=1.

Если у вас кнопка включения выключает а выключение включает. Ни чего страшного. Вы просто подключили не на тот контакт реле. Поправить можно и в не переключая провода. Прост поменяйте местам значения status.

Если у вас кнопка включения выключает а выключение включает. Ни чего страшного. Вы просто подключили не на тот контакт реле.

Вот и готово наше Wi-FI реле на ESP8266. С повторением данного проекта я думаю у вас не будет проблем. По всем вопросам пишите на форум Управляем реле по wi-fi с телефона . По данномй проету открое топик: Если вы не знаете как пользоваться Arduino IDE. Читайте Программа Arduino IDE бесплатно для Windows, Mac OS, linux. Прошиваем Arduino Так же смотрите уроки по основам программирования Arduino.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 8 — Подключаем реле к Arduino. Пример работы и скетч http://portal-pk.ru/news/163-podklyuchaem-rele-k-arduino-primer-raboty-i-sketch.html Константин Portal-PK 2018-11-28T18:00:02+03:00 Подключить реле к Arduino достаточно просто. Для примера мы будем использовать Скетч и подключения из урока: Урок2. Нажатие кнопки без ложных срабатываний.Устраняем дребезг кнопки

В схеме вместо светодиода с резистором подключим реле. Вот так выглядит схема подключения реле к Arduino UNO . К другим версиям например Arduino NANO схема не будет иметь отличий.

т схема подключения реле к Arduino UNO

Как видим, схема не многим отключается от исходного примера.

Реле может управлять различными бытовыми приборами.

Пара фоток сделанных при снятии видео по данному уроку: Подключение реле к Arduino.

 Подключение реле к Arduino

 Подключение реле к Arduino фото

реле и Arduino

Скетч можно взять из Урок 2. Нажатие кнопки без ложных срабатываний. Устраняем дребезг кнопки без изменений.

Для более красивого и читабельного кода заменим переменную ledPin на relayPin . Так же заменим вспомогательную переменную ledOn на relayOn. У нас получиться вот такой скетч управления реле.


const int buttonPin = 2;      // номер входа, подключенный к кнопке
const int relayPin =  3;        // номер выхода светодиода
/* переменные */
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
boolean relayOn = false;        // текущее состояние свтодиода
void setup() // Функция setup()
{
  // инициализируем пин, подключенный к реле, как выход
  pinMode(relayPin, OUTPUT);     
  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPin, INPUT);   
}
boolean debvance (boolean last) //убираем дребизг
{
  boolean current = digitalRead (buttonPin); // считываем данные с кнопки
  if (last != current) // Если текущее состояние отличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
    return current; 
  }
}
void loop() // Функция loop
{
  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW 
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    relayOn = !relayOn; // инвертируем значение 
  }
  lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки
  digitalWrite(relayPin, relayOn);   // Включаем или выключаем реле (смотря что пришло после инверсии) 
  delay (2);   // Ждем 2 милисек.
}

Вы должны понимать, что управлять реле можно и буз Arduino . Данный пример приведен для ознакомления.

Если подключить реле через кнопку с фиксацией . Вот по такой схеме.

 подключить реле через кнопку с фиксацией

То у нас все будет работать отлично. В качестве источника питания 5В можно использовать MICRO USB адаптер 5pin, при подключении от компьютера или адаптера. Так же можно подключить через понижающий трансформатор, например вот такой.


Вывод: Урок показывает как можно с помощью Arduino упровлять реле. Но в простых схемах управления реле использовать платформу Arduino или другой микроконтроллер не целесообразно.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 7 — Подключаем HC-SR04 к Arduino. Библиотека NewPing http://portal-pk.ru/news/162-podklyuchaem-hc-sr04-k-arduino-biblioteka-newping.html Константин Portal-PK 2018-11-19T08:24:00+03:00 Ультразвуковой датчик HC-SR04 определения расстояния до предметов. Принцип роботы как у сонара, посылается пучок импульсов и получает отражения, и на основании задержки определяется расстояние до предмете. Так как датчик для определения расстояния основан на ультразвуки, он плохо работает для определения расстояния до звукопоглощающих предметов. Идеальными являются предметы с ровной и гладкой поверхностью например ПАНЕЛИ, ВАГОНКА ПВХ.

Ультразвуковой датчик HC-SR04

Описание ультразвукового дальномера HC-SR04

Датчик HC-SR04 является бесконтактным. Точность измерения обеспечивается от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия.

Ультразвуковой дальномер HC-SR04 имеет такие технические параметры:

  • Рабочее напряжение
  • Сила тока в пассивном состоянии < 2 мА
  • Рабочий параметр силы тока – 15 мА
  • Измерительный угол — 30°
  • Обзорный угол — 15°

Ультразвуковой дальномер HC-SR04 имеет такие технические параметры

Контакты подключения:

  • Контакт питания +5В
  • Trig – выход сигнала входа
  • Echo – вывод сигнала выхода
  • GND – «Земля»


Схема подключения ультразвукового датчика HC-SR04 к Arduino UNO

Схема подключения ультразвукового датчика HC-SR04 к Arduino UNO
Самой распространенной библиотекой для работы с датчиком HC-SR04 является NewPing. Описание и подледную версию можно найти на страничке проекта

подключения ультразвукового датчика HC-SR04 к Arduino UNO


Пример скетча который предложен на странице библиотеки NewPing


#include <NewPing.h>
#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
  Serial.begin(115200);
}
void loop() {
  delay(200);
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm());
  Serial.println("cm");
}


Откроем монитор Serial порта.

Откроем монитор Serial порта
Как видим датчик HC-SR04 работает но есть шум. Выводит через определенное время нулевые значения. Данный код можно улучшить.


#include <NewPing.h>
#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float dist_3[3] = {0.0, 0.0, 0.0};   // массив для хранения трёх последних измерений
float middle, dist, dist_filtered;
float k;
byte i, delta;
unsigned long dispIsrTimer, sensTimer;
void setup() {
  Serial.begin(115200);
}
void loop() {
  if (millis() - sensTimer > 200) {                          // измерение и вывод каждые 50 мс
    // счётчик от 0 до 2
    // каждую итерацию таймера i последовательно принимает значения 0, 1, 2, и так по кругу
    if (i > 1) i = 0;
    else i++;
    dist_3[i] = (float)sonar.ping() / 57.5;                 // получить расстояние в текущую ячейку массива
    dist = middle_of_3(dist_3[0], dist_3[1], dist_3[2]);    // фильтровать медианным фильтром из 3ёх последних измерений
    delta = abs(dist_filtered - dist);                      // расчёт изменения с предыдущим
    if (delta > 1) k = 0.7;                                 // если большое - резкий коэффициент
    else k = 0.1;                                           // если маленькое - плавный коэффициент
    dist_filtered = dist * k + dist_filtered * (1 - k);     // фильтр "бегущее среднее"
   Serial.print("Ping: ");
  Serial.print(dist_filtered);
  Serial.println("cm");                // вывести
    sensTimer = millis();                                   // сбросить таймер
  }
}
// медианный фильтр из 3ёх значений
float middle_of_3(float a, float b, float c) {
  if ((a <= b) && (a <= c)) {
    middle = (b <= c) ? b : c;
  }
  else {
    if ((b <= a) && (b <= c)) {
      middle = (a <= c) ? a : c;
    }
    else {
      middle = (a <= b) ? a : b;
    }
  }
  return middle;
}

Как видим датчик HC-SR04 работает но есть шум


Данные стали более стабильные и немного точнее. Но идеальных значений не получить. Потому что значения зависит от расстояния измерения. Чем ближе предмет и более гладкая поверхность тем точнее будут измерения.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельная рама для 3D принтера. Какую модель выбрать? Чертежи http://portal-pk.ru/news/161-samodelnaya-rama-dlya-3d-printera-kakuyu-model-vybrat.html Константин Portal-PK 2018-11-02T12:53:37+03:00 При разработке своих проектов на Arduino и ЧПУ. Я часто упираюсь в то, что на своем самодельном фрезерном станк е я могу сделать только плоские заготовки. А так часто необходимо сделать изогнутую стенку или сложную объемную деталь. Меня регулярно посещает мысль, что нужен 3D-пинтер. Стоят они не очень дорого. Это вам не Перевезти оргтехнику 20т фурой

В Китае можно купить недорогие 3D принтеры:

Анет 3d принтер Delta 3d Принтер CTC 3d принтер

Подробнее

Подробнее

Подробнее

3D принтер с доставкой из России: Анет A6 3D-принтер

Но как вы знаете я не ищу легких путей и люблю собирать самодельные станки с ЧПУ. Поэтому я решил собрать 3D принтер.

И так цель ясна. Теперь нужно поэтапно реализовывать задуманное. Первое что нужно будет сделать это рама (корпус) 3D принтера, на который будет крепиться вся механика и электроника.

Можно купить готовые варианты рамы , цена относительно небольшая:

3d принтеры Reprap Ultimaker рамки фанеры 6 мм/4 мм Prusa i3 рамка 6 мм фанера Анет A8/hesine M505/tronxy 3D-принтер STEK/stek металлический каркас 3d принтера

Подробнее

Подробнее

Подробнее

Подробнее

Но раз я решил самодельны, значит самодельный. Сперва я планировал собрать самый простой 3D-принтер и выпилить основные части корпуса из фанеры вручную. Что то примерно вот такое:

самый простой 3D-принтер

Но посмотрев размеры раскроя, понял что основные заготовки можно будет вырезать на моем самодельном фрезерном станке с ЧПУ. Чертить с нуля достаточно долго и я загуглил вот что нашел.

1. Первая развертка предназначена для вырезки из стали 3 мм.

3d принтер. Чертеж рамы

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

Скачать чертежи 3D-принтера P3Steel

2. Вторая версия имеет те же минусы и недостатки. Но макет сделан из МДФ. Поэтому я решил сделать так же из МДФ. Для примера. А потом на основании данного макета модернизировать чертежи под свои материалы. И почестям пересобрать. И тут я нашел третий вариант.

Самодельная рама из МДФ 3D принтера

раскрой фанеры рамы 3D принтера

Скачать чертежи 3D-принтера I3 CORDOBESA Full Steel

3.Данная версия рамы 3D принтера уже предназначена для раскроя из фанеры 6 мм.

версия рамы 3D принтера уже предназначена для раскроя из фанеры 6 мм

Это то что я искал. Для первой пробной рамы для 3D-принтера, я думаю будет достаточно. Тем более зная себя точно, что нибудь буду переделывать и модернизировать. А как основная база на первый взгляд неплохой вариант. А как вы считаете?

Скачать чертежи 3D-принтера WoodMAX i3

Если у вас есть варианты рам для 3D принтера пишите в комментарии. Буду благодарен!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Часы-будильник на Arduino. Корпус сделан из конструктора LEGO. LEGO Arduino http://portal-pk.ru/news/160-chasy-budilnik-na-arduino-korpus-sdelan-iz-konstruktora.html Константин Portal-PK 2018-10-18T09:25:33+03:00 Пришел у меня 5 летний ребенок из садика и сказал, что ему задали сделать проект умные устройства в доме. Корпус можно сделать из любого подручного конструктора. Можно сделать из LEGO конструктора. Немного поразмыслив решили мы с сыном сделать часы-будильник на Digispark и 7 сегментном индикаторе на TM1637 с часами реального времени DS3231 .

Подключение электроники осуществляется вот по токай схеме.

часы-будильник на Digispark и 7 сегментном индикаторе на TM1637 с часами реального времени DS3231

Корпус из LEGO для чесов мы собрали достаточно быстро, это как кубик рубика заказать.В итоги у нас получились вот такие красивые часы с кнопочкой сбоку. Данная кнопочка отключает будильник.

Корпус из LEGO для чесов

Прошивка для часов на Digispark и 7 сегментном индикаторе на TM1637 с часами реального времени DS3231 в среде Arduino IDE:


#include <TinyWireM.h>
#include "TM1637.h"
#define CLK 4
#define DIO 3 
int soundPin = 1;             // объявляем переменную с номером пина спикера
const int buttonPin = 5;      // номер входа, подключенный к кнопке
int sensorValue = 0;
boolean status = false;
TM1637 tm1637(CLK,DIO);
///// часы ..
byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}
void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   TinyWireM.beginTransmission(0x68);
   TinyWireM.send(0);
   TinyWireM.send(decToBcd(second));    
   TinyWireM.send(decToBcd(minute));
   TinyWireM.send(decToBcd(hour));     
   TinyWireM.send(decToBcd(dayOfWeek));
   TinyWireM.send(decToBcd(dayOfMonth));
   TinyWireM.send(decToBcd(month));
   TinyWireM.send(decToBcd(year));
   TinyWireM.endTransmission();
}
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  TinyWireM.beginTransmission(0x68);
  TinyWireM.send(0);
  TinyWireM.endTransmission();
  TinyWireM.requestFrom(0x68, 7);
  *second     = bcdToDec(TinyWireM.receive() & 0x7f);
  *minute     = bcdToDec(TinyWireM.receive());
  *hour       = bcdToDec(TinyWireM.receive() & 0x3f); 
  *dayOfWeek  = bcdToDec(TinyWireM.receive());
  *dayOfMonth = bcdToDec(TinyWireM.receive());
  *month      = bcdToDec(TinyWireM.receive());
  *year       = bcdToDec(TinyWireM.receive());
}
float get3231Temp(){
  byte tMSB, tLSB; 
  float temp3231;
  TinyWireM.beginTransmission(0x68);
  TinyWireM.send(0x11);
  TinyWireM.endTransmission();
  TinyWireM.requestFrom(0x68, 2);
  if(TinyWireM.available()) {
    tMSB = TinyWireM.receive(); //2's complement int portion
    tLSB = TinyWireM.receive(); //fraction portion
    temp3231 = (tMSB & B01111111); //do 2's math on Tmsb
    temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
  }
  else {
    //oh noes, no data!
  }
  return temp3231;
}
/////////////////
void setup() {
  TinyWireM.begin();
  tm1637.init();
  tm1637.set(7); // яркость, от 0 до 7
  pinMode(soundPin, OUTPUT); //объявляем пин как выход. 
  pinMode(buttonPin, INPUT_PULLUP);
 pinMode(5, INPUT);
    // установка часов 
        //byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;  second = 30;  minute = 50;  hour = 06;  dayOfWeek = 3; 
     // день недели 
     //dayOfMonth = 1; // день 
      ///month = 4; 
      //year = 14;  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); 
}
void loop(){
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; 
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  byte temp = get3231Temp(); 
  int8_t TimeDisp[4]; 
    TimeDisp[0] = hour / 10;
    TimeDisp[1] = hour % 10;
    TimeDisp[2] = minute / 10;
    TimeDisp[3] = minute % 10;  
    if (second%2)
      tm1637.point(POINT_ON); // включаем точки
    else
      tm1637.point(POINT_OFF); // выключаем точки       
//  }
  buttonValue = digitalRead(buttonPin); // считываем данные с кнопки
   if(hour==7)
   {    
     if (minute==00)
     {
       if (second < 30)
         status = true;
       else
         status = false;
     }     
   }
   if (buttonValue)
      status = false;
   if (status)
    {
      tone(soundPin, 1500); // включаем звук частотой 100 Гц
      delay(200);
      tone(soundPin, 1000); // включаем звук частотой 100 Гц
      delay(200);
      tone(soundPin, 500); // включаем звук частотой 100 Гц
      delay(200);
    }
   else
    noTone(soundPin); // выключаем звук
  tm1637.display(TimeDisp); // отправляем массив на экран
}

Звуковой сигнал будет генерировать функция tone(). Как видно из программы настраивать время срабатывания будильника мы не сможем. Это связанна с тем что у Digispark мало пинов. И все уже заняты.

Если данный проект реализовать например на Atduino NANO, тогда можно реализовать настройку времени срабатывания будильника. Написать мелодии будильника и прочие фишки. Если данное видео и статья будут востребованы, то я сниму переделку на Arduino NANO. Но для первого раза я считаю что получилась не плох. А вы как считает? Пишите в комментариях свое мнение.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Новые Arduino проекты и Проекты сделанные на ЧПУ станке http://portal-pk.ru/news/159-novye-arduino-proekty-i-proekty-sdelannye-na-chpu-stanke.html Константин Portal-PK 2018-09-03T18:20:17+03:00 Вот и закончилось лета. И времени на разработку проектов на Arduino становиться больше. И сегодня я планирую рассказать о своих новых проектах которые я делаю на Ардуино и своем самодельном ЧПУ станке. Проекты еще в стадии разработки и не имеют конечного готового вида. Это вам не умз 42164 ремонт. Но все же я решил рассказать о них, чтобы услышит сторонне мнение. На канале видео я выложил раньше написания данной статьи. И первые мнения уже есть. Некоторые положительные, так же есть и отрицательны. Но любое мнение это повод улучить свои проект опираясь на ваше мнение.

Два проекта сделанные под управлением Arduino.
Первый проект про который я бы хотел рассказать это модифицированный и улучшенный светофор на ардуино и адресных светодиодах. Грубо говоря светофор версии 2.0. В данной версии я учел все недостатки и сделал его немного больше. Это видно по корпусу.

светофор на ардуино и адресных светодиодах. Грубо говоря светофор версии 2.0
Второй проект сделан так же на Arduino и адресных светодиодах WS2812. В качестве рассеивателя я использую стеклянные шарики которые рассеивают свет и вокруг каждого шарика и получается очень красивое свечение даже при белом свете. В данный момент уже внес некоторые изменения в данный проект и планируется разработка два направления данных ночников. Но об это в следующих статьях про мои проекты.

Ночник из стеклянных шариков
Третий проект сделан без использования Arduino. Это светильник общей мощностью 8 Вт на обычных светодиодах. Корпус высотой 42 см., выпилен на моем самодельном станке с ЧПУ. Данный корпус планирую использовать и в других моих проектах.

светильник общей мощностью 8 Вт на обычных светодиодах


Какой проект вам понравился больше всего? Пишите в комментарии. На основании ваших интересов буду планировать написание статей про данные проекты.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Аварийные огни + мигалка для автомобиля на Arduino и WS2812 http://portal-pk.ru/news/158-avariinye-ogni-migalka-dlya-avtomobilya-na-arduino-i-ws2812.html Константин Portal-PK 2018-08-08T11:49:31+03:00 Как вы наверное помните я деле машинку: СамодельнаяWifi машинка на NodeMCU. Машина делает дрифт. Мигалку делал на обычных светодиодах. Помещал их встарый корпус и получалась достаточно неплохая мигалка. Установленная на крышу машины. Так называемая крышная установка. На подобии наружной рекламы. Но как сделать мигалку и аварийные огни? В этом нам помогут светодиоды WS2812.

Как спаять последовательно светодиоды я думаю у вас не возникнет сложностей. Если возникнут посмотрите на сайте в проектах на Ардуино, там большое количество светильников на адресных светодиодах WS2812 . Тк же есть схемы подключение и краткое описание данных светодиодов.

Подключать будем к Arduino UNO, можно подключить и к другим моделям, например Arduino NANO подключение ни чем не будет отличаться.

Вход « DIN» на светодиодном модуле подключаем к PIN 6 на Arduino.

Для написания кода будем использовать библиотеку Adafruit NeoPixel. В которой есть пример «standtest». Который будет основой для кода. Также я бы порекомендовал вам посмотреть данный пример. Что он делает и как работает, это поможет вам понять код ниже.

Для примера будем подключать 8 светодиодов.

Режимы работы :

ArrowLeft и ArrowRight - Включение левой и правой секции светодиодов (по 4 шт.).

WigWag — Плавное включение всех светодиодов (8 шт.) Слева на права и наоброт.

WigWag2 — Предыдущий режим только с разными цветами

BlinkOuter - мигают два внешних светодиода

OnOuter - включает два внешних светодиода

ClearLights - отключает все светодиоды


#include 
#ifdef __AVR__
#include 
#endif
#define PIN 6

// All of this stuff below is from the example
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);

//NOTE: I tested this code with an 8 LED module, but you should be able to daisy chain multiple modules
//NOTE: Try changing the "8" to "4" to see how it reacts.

// This warning is from the example, probably worth considering
// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
  // This stuff is from the example, I commented it out since I am not using a Trinket
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  //#if defined (__AVR_ATtiny85__)
  // if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  //#endif
  // End of trinket special code
  strip.begin();
  strip.show();
}

void loop() {
  /*
   * For strip.Color(R, G, B), use 0-255 to set intensity
   * for each color (R)ed, (G)reen, (B)lue
   *
   * The last number is a delay 0-255 range.
   */

  // These are left/right signals
  ArrowLeft(strip.Color(0, 0, 255), 100); // Blue
  ArrowRight(strip.Color(255, 0, 0), 200); //Red

  // These are side to side or wig/wag
  WigWag(strip.Color(255, 0, 0), 200); // Red
  WigWag(strip.Color(0, 0, 255), 63); // Blue faster
  WigWag(strip.Color(0, 0, 255), 127); // Blue medium
  WigWag(strip.Color(0, 0, 255), 255); // Blue slowest
  WigWag(strip.Color(0, 255, 0), 200); // Green
  WigWag(strip.Color(255, 255, 0), 200); // Yellow
  ClearLights();
  delay(1000);
  // This is a 2 color wigwag
  WigWag2(strip.Color(0, 0, 255), strip.Color(255, 0, 0), 200); // Blue and Red
  ClearLights();
  delay(1000);

  // Blinks the outer most lights
  BlinkOuter(strip.Color(0, 0, 255), 200); //Blue
  BlinkOuter(strip.Color(0, 0, 255), 50); //Blue faster
  BlinkOuter(strip.Color(255, 255, 0), 200); //Yellow
  ClearLights();
  delay(1000);

  // Turns the outer most lights on
  OnOuter(strip.Color(63, 0, 0)); // Red 25%
  OnOuter(strip.Color(127, 0, 0)); // Red 50%
  OnOuter(strip.Color(191, 0, 0)); // Red 75%
  OnOuter(strip.Color(255, 0, 0)); // Red 100%
  ClearLights();
  delay(1000);
  OnOuter(strip.Color(0, 0, 255)); // Blue
  OnOuter(strip.Color(0, 255, 0)); // Green
  // Turns off all lights
  ClearLights();
  delay(5000);
}

void ArrowRight(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 4; j++) { // The j<# determines how many cycles
    for (uint16_t i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
    }
    for (uint16_t i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, 0);
    }
    strip.show();
    delay(wait);
  }
}

void ArrowLeft(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 4; j++) { // The j<# determines how many cycles
    for (uint16_t i = strip.numPixels(); i + 1 > 0 ; i--) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
    }
    for (uint16_t i = strip.numPixels(); i + 1 > 0 ; i--) {
      strip.setPixelColor(i, 0);
    }
    strip.show();
    delay(wait);
  }
}

void WigWag(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 10; j++) { // The j<# determines how many cycles
    for (int i = 0; i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, c);
    }
    for (int i = (strip.numPixels() / 2); i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, 0);
    }
    strip.show();
    delay(wait);

    for (int i = 0; i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, 0);
    }
    for (int i = (strip.numPixels() / 2); i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, c);
    }
    strip.show();
    delay(wait);
  }
}


void WigWag2(uint32_t c, uint32_t c2, uint8_t wait) {
  for (int j = 0; j < 20; j++) { // The j<# determines how many cycles
    for (int i = 0; i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, c);
    }
    for (int i = (strip.numPixels() / 2); i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, 0);
    }
    strip.show();
    delay(wait);

    for (int i = 0; i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, 0);
    }
    for (int i = (strip.numPixels() / 2); i < strip.numPixels(); i = i + 1) {
      strip.setPixelColor(i, c2);
    }
    strip.show();
    delay(wait);
  }
}

void ClearLights() {
  for (int i = 0; i < strip.numPixels(); i = i + 1) {
    strip.setPixelColor(i, 0);    //turn every pixel off
  }
  strip.show();
}

void BlinkOuter(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 10; j++) { // The j<# determines how many cycles
    strip.setPixelColor(strip.numPixels() - 1, c);
    strip.setPixelColor(0, c);
    strip.show();
    delay(wait);
    strip.setPixelColor(strip.numPixels() - 1, 0);
    strip.setPixelColor(0, 0);
    strip.show();
    delay(wait);
  }
}

void OnOuter(uint32_t c) {
  strip.setPixelColor(strip.numPixels() - 1, c);
  strip.setPixelColor(0, c);
  strip.show();
  delay(3000);
}

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

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Светодиодные часы на Arduino и светодиодах WS2812b http://portal-pk.ru/news/157-svetodiodnye-chasy-na-arduino-i-svetodiodah-ws2812b.html Константин Portal-PK 2018-08-01T09:18:00+03:00 Ка вы помните я уже делал часы на адресных светодиодах и Arduino. Если вы не в курсе смотрите мой проект: Классные самодельные настенные светодиодные часы на arduino.

Продумать реализацию часов на светодиодах можно много. И сделанных примеров в интернете большое количество. Недавно я нашел примеры реализации часов на 60 светодиодах. Вот некоторый из них:

Пример 1. Часы на Arduino, модуле реального времени RTC 1307 и светодиодной ленте WS2812b.

В качестве корпуса авто использует уже готовые стрелочные часы. Плюс данного корпуса в том, что кроме часового циферблата размечены еще и минутны. Светодиодная лента приклеена на корпус по кругу. Отверстия для стрелок закрыто светодиодом.

Часы на Arduino, модуле реального времени RTC 1307 и светодиодной ленте WS2812b
Вот такие симпатичные часы получаются и за небольшие деньги. Хоть вешай их себе в гостиную. Но для этого нужно подготовить стенку, чтобы часы гармонично вписывались. Интересно обои под покраску, цена данного удовольствия какая?
Код проекта.

/*
This is my sketch for a NEO PIXEL ring LED clock.
*/
//  Includes below:
#include <Wire.h>
#include <stdio.h>
#include <Adafruit_NeoPixel.h>
#include <RTClib.h> 
RTC_DS1307 RTC;             // Create RTC object
//  Define things here and set things up.
#define LED_Loop 60
#define PIN 6    // This is defining which Arduino pin is driving the Pixel ring used pin 6 but any digital will work
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_Loop, PIN, NEO_GRB + NEO_KHZ800);
int LED[LED_Loop];
int THREE = (LED_Loop / 4);
int SIX = (THREE * 2);
int NINE = (THREE * 3);
int TWELVE = (LED_Loop-1);
int HR_Fade = 7;
int MN_Fade;
long HR_Colour;
long SE_Colour = 0x000055;
long THIS_LED;
int Led_Flag;
int argh;
//  trying this way to get colours working.
int HR_R;
int HR_G;
int HR_B;
int HR1_R = 0x55;
int HR1_G = 0;
int HR1_B = 0;
int HR2_R = 0x0D;
int HR2_G = 0;
int HR2_B = 0x0D;
int MN_R = 0;
int MN_G = 33;
int MN_B = 0;
//int SE_R = 0;
//int SE_G = 0;
//int SE_B = 0x55;
int hour_led;
int minute_led;
int second_led;
int new_minute;
//-----------------------------  Set up here -----------------------------//
void setup() 
{
  // put your setup code here, to run once:
  delay(2000);          //  This is just to give you time to open the window and watch.
  Serial.begin(9600);
  Serial.println("-------------------------------");
  Serial.println("Setting up");
  Wire.begin();
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  if (! RTC.isrunning()) 
  {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  Serial.println("Done setting up");
  Serial.println("-------------------------------");
}
//-----------------------------  MAIN LOOP here -----------------------------//
void loop() 
{
  //  Get time
   DateTime now = RTC.now();
   //  24 hour time change colour of hour hand.
   int hr = now.hour();
   if (hr < 12)
   {
     //HR_Colour = HR_Colour1;
     HR_R = HR1_R;
     HR_G = HR1_G;
     HR_B = HR1_B;
   }
   else
   {
     //HR_Colour = HR_Colour2;
     HR_R = HR2_R;
     HR_G = HR2_G;
     HR_B = HR2_B;
   }
   int mins = now.minute();        //  This line is only incase any maths had to be done.
   second_led = now.second();
  //
  //  calculate leds
   hour_led = (((LED_Loop/12) * hr) + (mins / (LED_Loop/5)))%LED_Loop;
   if (hour_led == 60)
   {
     hour_led = 59;
   }
   minute_led = mins;
//  Debug code below
//
//------------------------------------------//
/*    
    Serial.print(now.year());
    Serial.print('/');
    Serial.print(now.month());
    Serial.print('/');
    Serial.print(now.day());
    Serial.print(' ');
    Serial.print(now.hour());
    Serial.print(':');
    Serial.print(now.minute());
    Serial.print(':');
    Serial.print(now.second());
    Serial.println();
*/
//------------------------------------------//
/*
  Serial.println("=========================");
  Serial.println(hr);
  Serial.println(mins);
  Serial.println("-------------------------");
  Serial.println(hour_led);
  Serial.println(minute_led);
  Serial.println(second_led);
*/
//------------------------------------------//
  //
  //  Show LEDs            ------------------   Main loop here -----------------
   //  Keep this at the top so it doesn't mess up any other settings when LEDs are
   //  turned on.
   strip.setPixelColor(second_led-1,SE_Colour/2);
   strip.setPixelColor(second_led-2,SE_Colour/4);
   strip.setPixelColor(second_led-3,SE_Colour/8);
   strip.setPixelColor(second_led-4,SE_Colour/16);
   strip.setPixelColor(second_led-5,0);
  //
  //  show THREE, SIX, NINE and TWELVE
  //
  strip.setPixelColor (THREE, 0x050505);
  strip.setPixelColor (SIX, 0x050505);
  strip.setPixelColor (NINE, 0x050505);
  strip.setPixelColor (TWELVE, 0x050505);
  //
  //  Now start setting LEDs below here.
  //
   if (second_led == 0)
   {
      strip.setPixelColor(LED_Loop-1, SE_Colour/2);
      strip.setPixelColor(LED_Loop-2,SE_Colour/4);
      strip.setPixelColor(LED_Loop-3,SE_Colour/8);
      strip.setPixelColor(LED_Loop-4,SE_Colour/16);
      strip.setPixelColor(LED_Loop-5,0);
      new_minute = 1;
   }
   if (second_led == 1)
   {
      strip.setPixelColor(second_led-1, SE_Colour/2);
      strip.setPixelColor(LED_Loop-1, SE_Colour/4);
      strip.setPixelColor(LED_Loop-2,SE_Colour/8);
      strip.setPixelColor(LED_Loop-3,SE_Colour/16);
      strip.setPixelColor(LED_Loop-4,0);
   }
   if (second_led == 2)
   {
      strip.setPixelColor(second_led-1, SE_Colour/2);
      strip.setPixelColor(second_led-2, SE_Colour/4);
      strip.setPixelColor(LED_Loop-1, SE_Colour/8);
      strip.setPixelColor(LED_Loop-2,SE_Colour/16);
      strip.setPixelColor(LED_Loop-3,0);
   }
   if (second_led == 3)
   {
      strip.setPixelColor(second_led-1, SE_Colour/2);
      strip.setPixelColor(second_led-2, SE_Colour/4);
      strip.setPixelColor(second_led-3, SE_Colour/8);
      strip.setPixelColor(LED_Loop-1,SE_Colour/16);
      strip.setPixelColor(LED_Loop-2,0);
   }
   if (second_led == 4)
   {
      strip.setPixelColor(second_led-1, SE_Colour/2);
      strip.setPixelColor(second_led-2, SE_Colour/4);
      strip.setPixelColor(second_led-3, SE_Colour/8);
      strip.setPixelColor(second_led-4,SE_Colour/16);
      strip.setPixelColor(LED_Loop-1,0);
   }
/*
  if (Led_Flag == 0)
  {
    //
    Led_Flag = 1;
    THIS_LED = strip.getPixelColor(second_led);
    //  This is where I am at.
    Serial.print(second_led);
    Serial.print(" ");
    Serial.println(THIS_LED);
  }
*/  
  /*----------------  Draw SECOND HAND on clock ----------------*/
   strip.setPixelColor(second_led,SE_Colour);
//   strip.setPixelColor(second_led,SE_Colour+THIS_LED);
//   strip.setPixelColor(second_led-1,THIS_LED);
   if (new_minute == 1)
   {
     //new_minute = 0;
//     strip.setPixelColor(minute_led-1,MN_Colour/50);
   }
  /*----------------  Draw MINUTE HAND on clock ----------------*/
   //strip.setPixelColor(minute_led,MN_Colour);
   //  MN_Fade for fading.
   strip.setPixelColor(minute_led,MN_R,MN_G,MN_B);
   strip.setPixelColor(minute_led+1, MN_R,     (MN_G * (second_led*10/6)/100)      , MN_B);
   strip.setPixelColor(minute_led-1, MN_R,     (MN_G * (100-(second_led*10/6))/100)      , MN_B);
  /*----------------  Draw HOUR HAND on clock ----------------*/
   strip.setPixelColor(hour_led,HR_R,HR_G,HR_B);
   //strip.setPixelColor((hour_led-1)%LED_Loop,HR_R/HR_Fade,HR_G,HR_B/HR_Fade);
   //strip.setPixelColor((hour_led+1)%LED_Loop,HR_R/HR_Fade,HR_G,HR_B/HR_Fade);
/*
   strip.setPixelColor(hour_led,HR_Colour);
   strip.setPixelColor((hour_led-1)%LED_Loop,HR_Colour);
   strip.setPixelColor((hour_led+1)%LED_Loop,HR_Colour);
*/   
   if (second_led > minute_led)
   {
     new_minute = 0;
   }
/*
  if (second_led != argh)
  {
     Led_Flag = 0;
     argh = second_led;
  }
*/  
  //
  //  show alarms
  //
  strip.show();
  delay(400);
  //                    ------------------   End of Main loop here -----------------
}


Код я не проверял на работоспособность. Если у вас возникнут трудности пишите в комментарии.

Пример 2. Часы на Arduino, модуле реального времени RTC 1307 и кольце светодиодов WS2812b.

В данном примере автор купил готовое кольцо из 60 светодиодов WS2812b. Циферблат нарисовал самостоятельно, разместив его в центре кольца.

Часы на Arduino, модуле реального времени RTC 1307 и кольце светодиодов WS2812b
В связи с тем, что кольцо было куплено данные часы наварят ли получаться дешевле. А может даже и дороже по сравнению с первый вариантом. Но зато тут меньше проблем с подбором корпуса и светодиодной ленты.

Что понравилось мне в данном пример, это то, что код всего лишь 70 строчек.

#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define PIXEL 60
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL, PIN, NEO_GRB + NEO_KHZ800);
RTC_DS1307 RTC; // Establish clock object
DateTime Clock; // Holds current clock time
byte hourval, minuteval, secondval;
void setup() {
 Serial.begin(9600);
  Wire.begin();            // Begin I2C
  RTC.begin();   // begin clock
    if (! RTC.isrunning()) {
//    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
  }
//  RTC.adjust(DateTime(__DATE__, __TIME__));
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  strip.setBrightness(20);
}
void loop() {
    Clock = RTC.now(); // get the RTC time
    secondval = Clock.second();  // get seconds
    minuteval = Clock.minute();  // get minutes
    hourval = Clock.hour();      // get hours
    if(hourval > 11) hourval -= 12; // This clock is 12 hour, if 13-23, convert to 0-11
    hourval = (hourval*60 + minuteval) / 12;   
    strip.setPixelColor(hourval, 0x008080);strip.setPixelColor(hourval-1, 0x004040);strip.setPixelColor(hourval+1, 0x004040);
//    strip.setPixelColor(hourval-2, 0x001010);strip.setPixelColor(hourval+2, 0x001010);
    strip.setPixelColor(minuteval, 0x800080);
//    strip.setPixelColor(minuteval-1, 0x200020);strip.setPixelColor(minuteval+1, 0x200020);
    strip.setPixelColor(secondval, 0x808000);//strip.setPixelColor(secondval-1, 0x002F00);strip.setPixelColor(secondval+1, 0x002F00);
    strip.show();
    strip.setPixelColor(hourval, 0x000000);strip.setPixelColor(hourval-1, 0x000000);strip.setPixelColor(hourval+1, 0x000000);
    strip.setPixelColor(hourval-2, 0x000000);strip.setPixelColor(hourval+2, 0x000000); 
    strip.setPixelColor(minuteval, 0x000000);strip.setPixelColor(minuteval-1, 0x000000);strip.setPixelColor(minuteval+1, 0x000000);
    strip.setPixelColor(secondval, 0x000000);//strip.setPixelColor(secondval-1, 0x000000);strip.setPixelColor(secondval+1, 0x000000);
  delay(25);
/*
   Serial.print(hourval, DEC);
   Serial.print(':');
  Serial.print(minuteval, DEC);
   Serial.print(':');
   Serial.println(secondval, DEC);
*/
}

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

Появились вопросы. Не стесняйся задавай из в комментарии.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 6 - Свечение светодиода пока нажата кнопка на пульте ДУ (IR) http://portal-pk.ru/news/156-urok-6---svechenie-svetodioda-poka-nazhata-knopka-na.html Константин Portal-PK 2018-07-30T10:53:45+03:00 В предыдущем уроке я уже рассказал как можно подключить IR приемник к Arduino и включать и выключать светодиод с помощью пульта дистанционного управления (ДУ).
После чего мне поступили вопросы :
1. «А возможно ли организовать чтобы, например, включался светодиод но только на время удержания кнопки, и гас сразу после ее освобождения?»,
2. «Подскажите пожалуйста, а возможно ли организовать чтобы, например, включался светодиод но только на время удержания кнопки, и гас сразу после ее освобождения? нигде не получилось найти инфу»
Данный вопрос в принципе простой и я делал машину на пульте управления и Arduino по данному принципу. Поделился ссылкой на материал. Но почему то есть трудности по реализации данного управления. Давайте наденем домашние тапочки и пойдем разбираться.

 подключить IR приемник к Arduino И так рассмотрим пример из предыдущего урока "Управление Arduino с помощью пульта ДУ (IR). Библиотека IRremote", когда мы получаем коды с кнопок.


#include 
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
}
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

При нажатии кнопок пульта ДУ мы получаем вот такой результат.

FF18E7
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFA857
FF02FD
FF5AA5
FFFFFFFF
FFFFFFFF
FFFFFFFF
FF10EF
FF5AA5

Как видим у нас при длительном нажатии выводит вот такой код: «FFFFFFFF». Который не относиться ни к одной кнопки. Этот код выводиться с определенной периодичностью, когда кнопка нажата и мы ее не отпускаем. Отпустив кнопку мы увидим, что данный код больше не выводиться в сериал порт. Используя данный принцип можно написать код под наши нужды. Вот пример условия который нам нужно добавить в код.

   

 if (results.value == 0xFFFFFFFF) // кнопка зажата
      {
        flag = flag;          // собновляем состояние светодиода
      }



Сперва думал сильно не изменять код и сделать на основе урока 5. Но код получается громоздкий и не читабельный. Немного все сократил и получился небольшой код. И более читабельный. Но при этом сложнее для понимания.

//FF10EF   — стрелочка вправо
//FF5AA5   — стрелочка влево
#include "IRremote.h"
IRrecv irrecv(11);           // указываем вывод, к которому подключен приемник
decode_results results;
int flag = 0;                // состояние светодиода 0-выкл. 1- вкл. 
long prestroMillis = 0;      // для отчета времени первоночальное значение
void setup() {
  irrecv.enableIRIn();       // запускаем прием
}
void loop() {
  unsigned long curstroMillis = millis();  // устанавливаем время в сейчас
  if ((curstroMillis - prestroMillis) > 200) // проверяем интервал
  {
    if (irrecv.decode(&results)) { // если получаем данные с пульта ДУ
      if (results.value == 0xFF10EF)
        flag = 1;           // вкл. светодиод
      if (results.value == 0xFFFFFFFF) // кнопка зажата
      {
        flag = flag;          // собновляем состояние светодиода
      }
      irrecv.resume();        // принимаем следующую команду
    }
    prestroMillis = curstroMillis; // обнуляем счетчик для нового цикла 
  } 
  else                     // данные не поступают с пульта ДУ 
  flag = 0;                // выключаем светодиод
 digitalWrite( 13, flag );
}

Возникли вопросы. Пишите в комментарии.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Светофор на Digispark и адресных светодиодах WS2812 — Ардуино светофор http://portal-pk.ru/news/155-svetofor-na-digispark-i-adresnyh-svetodiodah-ws2812-arduino.html Константин Portal-PK 2018-07-27T08:54:02+03:00 В предыдущей статье: « Неудачныепроекты Arduino светильников и светофора» я уже рассказывал про разработку светофора и о том что у меня не получилось сделать его полностью функциональным и работоспособным. Спустя пару недель я доработал его и теперь готов представить самодельный светофор на Ардуино и адресных светодиодах WS2812.

Все заготовки для корпуса выпилил на своем самодельном ЧПУ станке .

аготовки для корпуса выпилил на своем самодельном ЧПУ станке

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

Схема подключения очень простая это вам не ктп трансформаторная подстанция.

Схема подключения

На видео демонстрирую сборку схемы подключения на макетной плате.

 демонстрирую сборку схемы подключения на макетной плате

Светофор готов и что он умеет?

Светофор готов и что он умеет?


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

1. Светофор

2. Смена цветов

3. Радуга

4. Белое свечение.


После сборки данного светофора на Digispark и адресных светодиодах WS2812 прошло больше месяца и я пока не менял батарейки. Не смотря на то что ребенок очень часто играет светофором. Да и гости, не зависимо от возраста готовы посмотреть и поиграть данной самоделкой на Arduino.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Неудачные проекты Arduino светильников и светофора http://portal-pk.ru/news/154-neudachnye-proekty-arduino-svetilnikov-i-svetofora.html Константин Portal-PK 2018-07-26T09:12:08+03:00 Любая разработка приводит к неудачным и промежуточным моделям. Которые не удовлетворяют всем потребностям и ожиданием.

Сегодня я вам расскажу про три моих неудачных проекта светильников на Arduino .


Первый мой проект о котором я хотел бы рассказать это светофор на адресных светодиодах под управлением Digispark — это небольшой борат ардуино, который можно программировать в среде Arduino IDE. Собрал я данный светильник и понял, что данный светофор очень посредственный. Не хватает функционала. И отображения сигнальных огней расплывчато.

светофор на Arduino

Поэтому я сделал вывод, что светофор на Arduino необходимо дорабатывать. И в ближайшее время сделаю новую версию.


Второй проект — это корпус для светильника на Ардуино и адресных светодиодах. В принципе корпус получился неплохой, но тут я столкнулся с двумя проблемами. Первая это нужно сделать рассеиватель. Для этого нужно склеивать 4 кусочка оргстекла или изогнуть оргстекло нужной формы. Что я пока не освоил. Вторая проблема это легкий вес и неустойчивость светильника, что приведет к постоянным падениям и возможны сколам и трещинам на корпусе. Не усиливать углеволокном же корпус. По аналогии, как это делают в строительстве.

корпус для светильника на Ардуино и адресных светодиодах

Пока думаю что можно сделать с данной моделью.


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

 светильник

Обо всем рассказываю подробно в видео.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
ЧПУ станок своими руками на базе arduino. Пошаговая инструкция + видео http://portal-pk.ru/news/153-chpu-stanok-svoimi-rukami-na-baze-arduino-poshagovaya.html Константин Portal-PK 2018-05-08T11:01:56+03:00 Все мои статьи с видео про создание ЧПУ станков на одной странице. Своего рода инструкция.

Данная страница будет пополняться. Не забудьте добавить ее в закладки!

UniversalG-Code Sender программа для управления ЧПУстанком.

Проект №11. Самодельный ЧПУ плоттер на Arduino: 4xiDraw.


Самодельный ЧПУ плоттер на Arduino: 4xiDraw.

ЧПУ плоттер на Arduino необходимые программы

Пишем красивым шрифтом на ЧПУ плоттере

Проект №10.ЧПУ плоттер в виде принтера на Arduino


ЧПУ плоттер в виде принтера на Arduino своими руками.

Неудачная переделка ЧПУ плоттера.

Проект №9. ЧПУ станок для раскраски пасхальных яиц на Arduino.

ЧПУ станок для раскраски пасхальных яиц на Arduino. Своими руками.

Проект №8. ESP32 GRBL плоттер.


ESP32 GRBL плоттер. Конечные выключатели. Позиция Home.

Проект №7. ЧПУ плоттер на Arduino своими руками.

Сборка Самодельного плоттера на Arduino.

Проект №6. Лазерный гравер на ESP32. Прошивка GRBL_ESP32.

Схема подключения лазерного ESP32 + ESP32-CAM.

Проект №5. Самодельный Лазерный гравёр с ЧПУ, в домашних условиях

Самодельный Лазерный гравёр с ЧПУ, в домашних условиях.

Электроника лазерного гравера. Arduino UNO, CNC shield v3, ttl laser driver.

Установка grbl 1.1 на Arduino uno. Основы работы в программе LaserGRBL.

Проект №4. Самодельный ЧПУ фрезерный станок на Arduino с дисплеем

Самодельный ЧПУ фрезерный станок на Arduino с дисплеем

Проект №3. Самодельный CNC станок из мебельных направляющих на базе Arduino UNO

Самодельный ЧПУ CNC фрезерный станок. Часть 2. Электроника

Получив опыт создания самодельных ЧПУ станков. Определился с какой электроникой мне проще работать. Решил вложить немного денег и с делать фрезерный CNC станок на мебельных направляющих .

Заготовке вырезанные на данном ЧПУ станке можно посмотреть тут......

Готовые проекты сотрите тут...

Комплектующие ЧПУ :

Механика для ЧПУ недорого >>>

Расходные материалы для CNC >>>


Проект №2. Лазерный гравировальный станок с ЧПУ (шаговые двигателя от матричного принтера)

Установка электроники на лазерный гравировальный станок с ЧПУ

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

Для управления использовал электронику: Arduino UNO + CNCshield v3 + драйвера A4988

Недорогую электронику для ЧПУ можно купить в Китае >>>


Проект №1. Мой первый ЧПУ станок из матричных принтеров (Не удачная версия)

.Самодельный ЧПУ станок из принтеров своими руками — Часть 2

Для проверки своих сил собрал ЧПУ станок из того что было под рукой. Дополнительно затратил денег не больше 3 тыс. руб.

Станок работал. Но работа была не очень хорошего качества и было много ограничений по функционалу. Но что можно ожидать от CNC станка за 3 000 руб.

Для сборки ЧПУ станка из деталей от принтера были использовано:

  1. 3 Матричных принтера формата А3.
  2. Мебельные направляющие: 2 пары 500 мм. И одна пара на 300 мм.
  3. Доска 25х100, брусок 25х25, фанера толщиной 8 мм.
  4. Блок питания от компьютера.
  5. Arduino NANO
  6. Драйвера L298 4 шт.
  7. Строительные и мебельные уголки.
  8. Саморезы, винты, гайки и шпилька М10.
  9. Телефонные провода, провода из компьютера.
  10. Переменный резистор из автомобиля.
  11. Двигатель от автомобильного компрессора.
  12. Шаговый двигатель от сканера .
  13. Латунная цанга.

Недорогие ЧПУ станки>>>

]]>
Universal G-Code Sender программа для управления ЧПУ станком. http://portal-pk.ru/news/152-universal-g-code-sender-programma-dlya-upravleniya-chpu-stankom.html Константин Portal-PK 2018-04-20T12:23:51+03:00 Для управления ЧПУ станками используется G-Code.
G-Code - это язык программирования, используемый для отправки команд на станки с ЧПУ (числовое программное управление).

Universal G-Code Sender можно с качать отсюда.
Основным преимуществом является то, что Universal G-code Sender может работать на разных настольных платформах, таких как Windows, OS X, Linux и даже Raspberry Pi.
Для работы Universal G-code Sender необходимо устоновить Java:

  • Java 7 или выше — для Universal G-code Sender 1.0.8 и более ранних
  • Java 8 или выше - для Universal G-code Sender 1.0.9 и 2.0

Если у вас не установлена Java, качаем и устанавливаем ее отсюда.
Как установить Java 8 в Ubuntu читайте тут.
Очень частый вопрос который мен задают: «Нет файла ***.exe как запустить приложение?» В Windows есть и другие исполняемых файлы. Один из которых ***.bat.
Для запуска программы в Windows запускаем "start-windows.bat", в Linux запускаем "start.sh".

Для того чтобы подключить программу к станку нужно:

  • Выбрали порт - у меня COM4
  • Скорость - 115200
  • Нажали кнопку "Open"

Universal G-code Sender

Увидели надпись **** Connected to COM4 @ 115200 baud **** - у нас все работает. Обратите внимание, что в Arduino должна быть загружена прошивка GRBL. В противном случае ни чего не получаться.

Следующий распространенный вопрос: «У меня на английском. Где взять русскую версию?» В Universal G-code Sender встроенны несколько языковых пакетов в том числе и Русский. Заходим в настройки и переключаем на русский.

Universal G-code Sender встроенны несколько языковых пакетов в том числе и Русский

Universal G-Code Sender можно с качать отсюда
В закладке "Консоль" - в консоли пишем команду G1 X10 Y10 F300 - наши моторы крутятся.
В закладке "Упровления осями", можно управлять осями через кнопки.
Можно загрузить GCODE файл, для этого нажмите на кнопку "Обзор" - указываем GCODE файл.


Как я создавал Свой самодельный ЧПУ станок можете посмотреть тут:

1. Какподобрать шаговый двигатель для станкаЧПУ. ШД из принтера.

2. Платарасширения для Arduino UNO, CNC shield v3 и драйверовA4988

3. Настройкадрайвера A4988. Первый запуск шаговыхдвигателей

4. Самодельныйфрезерный ЧПУ станок из мебельныхнаправляющих. Механика

5. СамодельныйЧПУ CNC фрезерный станок. Часть 2. Электроника

6. Настройка прошивки Grbl ЧПУ станка. Калибровка ЧПУ

Купить Комплектующие для ЧПУ или готовый ЧПУ станок. можно недорого в Китае:


Во второй версии Universal G-code Sender ветка UGS Platform. Тут все немного по другому.

Во второй версии Universal G-code Sender ветка UGS Platform
Для запуска программы вам нужно зайти в папку bin. В Windows запускаем "ugsplatform.exe" и "ugsplatform64.exe" для 64-битной ОС, в Linux и MAC OS запускаем "ugsplatform".
Для работы данной версии требуется Java 8 или выше.
Интерфейс тут отличается. Для смены языка на русский преходим Tools→Options. В вкладе UGS, вбираем вкладку Sender Options. Тут уже меняем язык.

Для смены языка на русский преходим Tools→Options. В вкладе UGS, вбираем вкладку Sender Options


Вот так выглядит окно 3D-вида заготовки для фрезерования.

3D-вида заготовки для фрезерования
Со второй версией работать немного проще и функция больше. Поэтому я рекомендую начинать сразу с нее. Но что выберете вы это уже ваше решение.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Подсветка на Arduino и ws2812 - На новый год http://portal-pk.ru/news/151-podsvetka-na-arduino-i-ws2812-na---novyi-god.html Константин Portal-PK 2018-04-05T12:25:10+03:00 Перед новым годом делал подсветку на Arduino и адресных светодиодах ws2812. Если вы постоянно читаете новости в группе проекта и на сайте, то вы наверное в курсе про основные этапы сборки данной подсветки. Если нет, то я вам расскажу.
Первое что я сделал это. Для этого я воспользовался своим самодельным фрезерным станком с ЧПУ.

вырезал заготовки для корпуса под электронику

 самодельным фрезерным станком с ЧПУ

Ручка для потенциометра вырезанная на ЧПУ

Склеил корпус для электроники которая будет управлять подсветкой и выводить информацию о режимах и яркости свечения.

Склеил корпус для электроники

корпус для электроники


Для гирлянды я использовал следующую электронику:
1. Управляет всем -Arduino UNO
2. Тактовые кнопки переключают режимы.
3. Потенциометр регулирует яркость.
4. Светодиоды ws2812, но проще использовать светодиодную ленту ws2812. Но у меня ее не было под рукой.
5. Блок питания 5В 2А.
6. ЖК-дисплей 1602 16x2 с I2C модулем
7. Провода.

На все комплектующие которые я покупаю и мне они нравятся по соотношению цена и качество, я делаю закладки: Ардуино и все для проектов на Arduino, Комплектующие для ЧПУ и ЧПУ станки.
Подсветка выглядит вот так:

Подсветка выглядит вот так

Подсветка выглядит вот так
Получилось больше 30 режимов, регулирование яркости и вывод данной информации на дисплей. Достаточна приличная подсветка получилась.
Закрепил я ее под потолок, тем более у меня угол под потолком овальной формы. И свет очень красиво рассеивается по радиусу. На фото конечно не очень понятно и не передает всей красоты, тем более фотографировал днем.

свет очень красиво рассеивается по радиусу

Конечно из светодиодной ленты получилось бы намного ярче


Конечно из светодиодной ленты получилось бы намного ярче, равномернее и симпатичнее. Наследующий год так и сделаю. Так что не пропусти. Добавь сайт в закладки!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
NodeMcu Motor Shield. Описание и тестовый Скетч http://portal-pk.ru/news/150-nodemcu-motor-shield-opisanie-i-testovyi-sketch.html Константин Portal-PK 2018-04-03T09:07:25+03:00 Купил для NodeMcu Motor Shield. При покупке шилда будьте внимательны он совместим только с версией nodemcu amica. На картинке слева.

версией nodemcu amicaЕсли вы не знаете как прошить NodeMCU читайте: Чтотакое NodeMCU? Программируем в среде ArduinoIDE

Motor Shield Состоит из следующих элементов.

Motor Shield Состоит из следующих элементов

Колодка GPIO рассчитаны для подключения сервоприводов. Данную колодку я использовал в своем проекте на ESP8266: Манипуляторсвоими руками из фанеры

Данная колодка очень удобна и для подключении различной периферии .

Шилд еще оснащен драйвером L293DD. Благодаря чему к Motor Shield можно подключить 2 двигателя постоянного тока с напряжением до 36 В. Для работы драйвера необходимо подать питания на клеммы motor power. Первый двигатель подключается к колодке motor A, второй к motor B.

Распиновка и основные характеристики драйвера L293DD с лева на картинке.

 драйвера L293DD с лева на картинке

Справа L293D версия с 16 ногами у L293DD 20 ног. Прикладываю Даташит для данных драйверов L293DD.pdf.

Подключаем двигателя и питание к Motor Shield вот по такой схеме.

Подключаем двигателя и питание к Motor Shield вот по такой схеме


Может кому прегодиться файл Motor Shield для Fritzing ESP12E Motor Shield.fzpz

Для проверки работоспособности драйвера можно использовать вот этот скетч.

#define PIN_D1 5  // gpio5 = D1  PWM_A
#define PIN_D2 4  // gpio4 = D2  PWM_B
#define PIN_D3 0  // gpio0 = D3  DA (A- A+) подключается двигатель 
#define PIN_D4 2  // gpio2 = D4  DB (B- B+) подключается двигатель

void setup() 
   {
    pinMode(PIN_D1, OUTPUT); // инициализируем Pin как выход
    pinMode(PIN_D2, OUTPUT); // инициализируем Pin как выход
    pinMode(PIN_D3, OUTPUT); // инициализируем Pin как выход
    pinMode(PIN_D4, OUTPUT); // инициализируем Pin как выход
   }

void loop()
{
  digitalWrite(PIN_D1, HIGH);   // PWM_A HIGH
  digitalWrite(PIN_D3, HIGH);   // DA HIGH
  delay(2000);                  // wait 
  digitalWrite(PIN_D3, LOW);    // DA LOW
  delay(2000);                  // wait
  digitalWrite(PIN_D2, HIGH);   // PWM_B HIGH, изменяется направление вращения двигателя на контактах (B- B+)
  digitalWrite(PIN_D4, HIGH);   // DB HIGH
  delay(2000);                  // wait 
  digitalWrite(PIN_D4, LOW);    // DB LOW
  delay(2000);                  // wait 
  digitalWrite(PIN_D2, LOW);    // PWM_B LOW

 }

Данная программа будет поочередно вращать двигателями . Если у вас по каким то причинам двигателя не вращаются проверьте правильность подключения. Если все правильно то скорее всего у вас бракованный шилд . Это достаточно распространенная ситуация . Пишите продавцу и просите возврат деньги.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Классные самодельные настенные светодиодные часы на arduino http://portal-pk.ru/news/149-klassnye-samodelnye-nastennye-svetodiodnye-chasy-na.html Константин Portal-PK 2018-03-22T13:39:54+03:00 Как вы знаете это мои вторые часы на Arduino и светодиодах. Если вы не вкурсе, посмотрите мой первый проект часов можете тут: Arduinoчасы - Видео 4. Делаем корпус и собираемArduino часы

Первые часы на Ардуино я дела все руками и у меня было мало опыта в программировании микроконтроллеров. Хотя это было буквально год назад. Сейчас у меня есть самодельный ЧПУ станок с помощью которого я вырезал все заготовки корпуса для часов .

заготовки корпуса для часов

заготовки корпуса для часов

Светодиоды не стал использовать обычные. Из предыдущего проекта, я усвоил урок. Паять нужно очень много и отладка занимает очень много времени. Поэтому я взял адресные светодиоды WS2812. Для управления данными светодиодами достаточно спаять их последовательно и пропоят к одному пину Arduino.

Для настройки часов я установил 2 кнопки. С помощью которых можно менять цветовые режимы часов, за это отвечает правая кнопка. При нажатии левой кнопки можно настраивать:

  • одно нажатие - настройка часов;
  • второе нажатие - настройка минут;
  • третье нажатие — настройка яркости часов.

Если не выйти из режима настроеки, часы автоматически переходят в рабочий режим через 30 секунд.

Комплектующие для часов покупал тут:

  1. Arduino NANO
  2. Адресные светодиоды WS2812
  3. Модуль реального времени DS1307. В первой версии использовал модуль DS3231SN
  4. Кнопки

Также в часах есть замечательный режим. Когда время ровно 1,2,3 и т. д. По минутным светодиодам бежит светодиод . Данное действия очень хорошо видно и даже боковым зрением можно заметить что время ровно, а вот столько часов, нужно будет посмотреть на часы.


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

Пару фото часов на arduino и адресных светодиодах WS2812

фото часов на arduino и адресных светодиодах WS2812

фото часов на arduino

фото часов на arduino и адресных светодиодах

фото на адресных светодиодах WS2812

фото часов на arduino и светодиодах

Это не последняя версия часов. У меня есть еще с пяток идей. Жду комплектующие из Китая. Так что не пропусти. Добавь сайт в закладки!


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Очередной проект на Digispark и адресных светодиодах WS2812. Работа ЧПУ http://portal-pk.ru/news/148-ocherednoi-proekt-na-digispark-i-adresnyh-svetodiodah-ws2812.html Константин Portal-PK 2018-03-16T11:36:07+03:00 Небольшой проект на Digispark и адресных светодиодах WS2812, но при этом достаточно симпатичный.
Сегодня я расскажу как я собирал очередной светильник.
На своем самодельном фрезерном станке с ЧПУ я вырезал заготовки для светильника. В группе ВК я уже выкладывал фото заготовок, с вопросом, что я такое делаю. Ответы были но все неправильные.

заготовки для светильника

заготовки для светильника


Схема подключения Digispark и адресных светодиодов WS2812 аналогично предыдущему проекту: Меняем Arduino на Digispark в светильнике на ws2812. digispark проекты.

Схема подключения Digispark и адресных светодиодов WS2812
В итоге получается вот такой светильник.

Конечно фото и видео не передает всей красоты и яркости. Но тоже выглядит неплохо.

две версии светильников на Digispark и адресных светодиодах WS2812

светильник на Digispark и адресных светодиодах WS2812

на Digispark и адресных светодиодах WS2812

две версии светильников

две версии светильников на Digispark и адресных светодиодах WS2812

две версии светильников на Digispark

две версии светильников на Digispark и адресных светодиодах WS2812

светильникна Digispark
Как вы поняли сделал я две версии светильников на Digispark и адресных светодиодах WS2812. С восьмигранным основанием достаточно функциональный и красивый.
Но судить вам . Пишите в комментариях ваши мнения.

В планах сделать светильник с пультом ДУ и с Wi-fi управлением. Что получиться у меня смотрите на канале и читайте на сайте.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 5 - Управление Arduino с помощью пульта ДУ (IR). Библиотека IRremote http://portal-pk.ru/news/147-urok-4---upravlenie-arduino-s-pomoshchyu-pulta-du-ir.html Константин Portal-PK 2018-03-13T12:38:02+03:00

При создании проектов на Arduino. Часто возникает вопрос, с помощью чего управлять проектом. И желательно на расстоянии. Кнопки уже не модно.

Самый просто и доступный способ это управление с помощью пульта дистанционного управления и IR приемника . Реализовать можно различные проекты, например вытяжку с ик управлением.

Для урока я буду использовать вот такой набор и Arduino UNO.

 пульт с IR приемником

Купить пульт с IR приемником всего за 100 руб. можно тут.

Приемники могут быть распаянные как в моем случае.

IR приемником

IR приемником

И вот такого плана.

IR приемникомIR приемником

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

Подключаем IR к Arduino UNO вот по такой схеме

Подключаем к Arduino UNO вот по такой схеме. К другим Ардуинкам подключается аналогично.

Для работы нам понадобиться библиотека IRremote. Скачать ее можно тут.

С библиотекой устанавливается ряд примеров. Нам понадобиться IrrecvDemo.

IrrecvDemo

IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
}
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

После того как скетч загружен и IR приемник подключен можно проверить какой код соответствует той или иной кнопке пульта ДУ. Поднажимайте на кнопки и в мониторе последовательного порта (Ctrl+Shift+M) вы уведите следующее.

;FF18E7
FFFFFFFF
FFA857
FF02FD
FF18E7
FF38C7
FF4AB5
FF5AA5
FF10EF
FF5AA5
FFFFFFFF
FF10EF
FF5AA5

 в мониторе последовательного порта (Ctrl+Shift+M) вы уведите следующее

У вас возник наверное вопрос что за повторяющая команда FFFFFFFF. Это команда выводиться когда вы долго удерживаете кнопку на пульте и на Ардуино приходить одинаковая команда. В этом нет ни чего страшного, а иногда это даже полезно. На основе данной команды я сделал управление машинкой с помощью пульта ДУ. При этом машинка едет только тогда, когда нажата кнопка пульта. Отпускаем и машина перестает ехать и поворачивать.

Само простое, чем можно управлять это включение и выключения встроенного светодиода на плату Arduino при помощи пульта дистанционного управления и инфракрасного приемника.

Схема подключения как и в примере выше. Коды кнопок моего пульта:

//FF10EF   — стрелочка вправо
//FF5AA5   — стрелочка влево

У вашего пульта команды будут другие. Код получается вот такой.

//FF10EF   — стрелочка вправо
//FF5AA5   — стрелочка влево
#include "IRremote.h"
IRrecv irrecv(11); // указываем вывод, к которому подключен приемник
decode_results results;
void setup() {
  irrecv.enableIRIn(); // запускаем прием
}
void loop() {
  if ( irrecv.decode( &results )) { // если данные пришли
    switch ( results.value ) {
    case 0xFF10EF:
        digitalWrite( 13, HIGH );
        break;
    case 0xFF5AA5:
        digitalWrite( 13, LOW );
        break;
    }    
    irrecv.resume(); // принимаем следующую команду
  }
  delay(100);
}

Вот так можно легко научить вашу Arduinо понимать команды с пульта.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Основы программирования Digispark в среде Arduino IDE. Модели A и B http://portal-pk.ru/news/146-osnovy-programmirovaniya-digispark-v-srede-arduino-ide.html Константин Portal-PK 2018-03-05T11:15:36+03:00 Сделал я пару проектов на Digispark :
1. Как сделать самодельный пистолет из Digispark и сломанной игрушки
2. Меняем Arduino на Digispark в светильнике на ws2812. digispark проекты.

И меня засыпали вопросами: Чем отличается от Arduino? Как написать скетч в среде Arduino IDE для Digispark? И пр.

И я решил сделать небольшую заметки для вас и если я что то забуду, можно будет подсмотреть.
Обратите внимание Digispark есть 2 модели А и В. Но нет ни одной статьи чтобы было описаны модели А, а это В.
Но я опытным путем выявил что, это: модель Digispark А

модель Digispark А


Digispark модель В

Digispark модель В



Если я ошибаюсь обязательно напишите в комментарии.


Характеристики Digispark:

  • Поддержка Arduino IDE 1.0 и более поздних (OS X, Windows и Linux)
  • Питание от USB или внешнего источника - 5 В или 7-35 V (автоматический выбор)
  • Регулятор на 5В 500мА
  • Встроенный USB
  • 6 портов ввода / вывода (2 используются для USB, только если ваша программа активно общается по USB, в противном случае вы можете использовать все 6, даже если вы программируете с помощью USB)
  • 8KB флэш-памяти (около 6КБ с загрузчиком)
  • I²C и SPI интерфейс
  • PWM на 3 вывода (больше ШИМ выходов можно обеспечить программным способом)
  • сделан на базе ATtiny85-20SU микроконтроллера

Характеристики Digispark


Все выводы могут быть использованы в качестве цифровых входов/выходов:
Pin 0 → I2C SDA, PWM (LED on Model B)
Pin 1 → PWM (LED on Model A)
Pin 2 → I2C SCK, Analog
Pin 3 → Аналоговый вход (Занят контактом USB+, в случае использования USD)
Pin 4 → PWM (Занят контактом USB-, в случае использования USD)
Pin 5 → Аналоговый вход

В Digispark поддерживает всех функции, доступные в IDE, исключением является серийный монитор и запись загрузчика.

Но не смотря на все плюсы Digispark все же отличается от Arduino. Вот список некоторых различий, которые стоит учитывать при проектировании или устранении неполадок:
1. Digispark сделан базе Attiny85 у которго есть много отличий от ATmega328 Arduino, и некоторые библиотеки могут работать некорректно на нем.
2. У Digispark имеется только около 6 КБ флэш-памяти для хранения вашего кода.
3. Контакт 3 и контакт 4 (P3 и P4) используются для связи через USB и программирования. Поэтому использовать данные пины при программировании нельзя. Их можно пользовать, когда у вас отключен USB.
4. Контакт 3 (P3) к нему подключен нагрузочный резистор 1,5 кОм, который требуется, когда P3 и P4 используются для связи через USB. Вам возможно потребоваться учесть данный факт при работе с данным пином.
5. Digispark не имеет аппаратного последовательного порта или аппаратного последовательного интерфейса к USB-конвертеру.

Пример использования цифрового выхода.
Все контакты способны к цифровому выходу, хотя P5 составляет 3 В при HIGH вместо 5 В.
0 - P0, 1 - P1, 2 - P2 и т. д. - обозначение пинов в программе.

void setup() {
    //All pins are capable of Digital output, though P5 is 3 V at HIGH instead of 5 V
    pinMode(0, OUTPUT); //0 is P0, 1 is P1, 2 is P2, etc. - unlike the analog inputs, for digital outputs the pin number matches.
}
void loop() {
    digitalWrite(0,HIGH); //Turn the pin HIGH (5 V)
    delay(1000);
    digitalWrite(0,LOW); //Turn the pin LOW (GND)
    delay(1000);
}

Пример использования цифрового входа (чтение).
ПРИМЕЧАНИЕ. Внутренний нагрузочный резистор (включается при вызове digitalWrite (0) после установки вывода на вывод, где 0 - номер штыря) намного слабее (около 25 кОм) на ATtiny, чем на Arduino, поэтому бортовой светодиод может помешает. Если они вам нужен, вы можете использовать другой порт. Измените схему, чтобы не требовалось внутреннее подтягивание, или вырезать светодиодную дорожку. Для модели A это пин P1 для модели B, это ппин P0.

int sensorValue = 0;

void setup() {
    //All pins are capable of digital input.
    pinMode(0, INPUT); //0 is P0, 1 is P1, 2 is P2, etc. - unlike the analog inputs, for digital inputs the pin number matches.
}
void loop() {
    sensorValue = digitalRead(1); //Returns HIGH or LOW (true or false / 1 or 0).
}

Пример аналогового чтения
Буте внимательны при аналоговом чтении, номера пинов отличаются от нумерации на плате. Например: P2 - аналоговый вход 1. Остальные смотрите в коде ниже.

int sensorValue = 0;

void setup() {
    //You need not set pin mode for analogRead - though if you have set the pin to
    //output and later want to read from it then you need to set pinMode(0,INPUT);
    //where 0 is the physical pin number not the analog input number.
    //
    //See below for the proper pinMode statement to go with each analog read.
}
void loop() {
    // The analog pins are referenced by their analog port number, not their pin
    //number and are as follows:

    sensorValue = analogRead(1); //Read P2
    //To set to input: pinMode(2, INPUT);
    //THIS IS P2, P2 is analog input 1, so when you are using analog read, you refer to it as 1.

    //sensorValue = analogRead(2); //Read P4
    //To set to input: pinMode(4, INPUT);
    //THIS IS P4, P4 is analog input 2, so when you are using analog read, you refer to it as 2.

    //sensorValue = analogRead(3); //Read P3
    //To set to input: pinMode(3, INPUT);
    //THIS IS P3, P3 is analog input 3, so when you are using analog read, you refer to it as 3.

    //sensorValue = analogRead(0); //Read P5
    //To set to input: pinMode(5, INPUT);
    //THIS IS P5, P5 is analog input 0, so when you are using analog read, you refer to it as 0.
}

Аналоговый выход
Тут все проще 0 - P0, 1 - P1, 4 - P4 - в отличие от аналоговых входов, для аналоговых (PWM) выходов номер штыря соответствует номеру порта.

void setup() {
    //P0, P1, and P4 are capable of hardware PWM (analogWrite).
    pinMode(0, OUTPUT); //0 is P0, 1 is P1, 4 is P4 - unlike the analog inputs, 
                        //for analog (PWM) outputs the pin number matches the port number.
}
void loop() {
    analogWrite(0,255); //Turn the pin on full (100%)
    delay(1000);
    analogWrite(0,128); //Turn the pin on half (50%)
    delay(1000);
    analogWrite(0,0);   //Turn the pin off (0%)
    delay(1000);
}

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Меняем Arduino на Digispark в светильнике на ws2812. digispark проекты. http://portal-pk.ru/news/145-menyaem-arduino-na-digispark-v-svetilnike-na-ws2812.html Константин Portal-PK 2018-02-15T13:45:25+03:00 В интернете много проектов на Digispark, но светильника на адресных светодиодах с переключением режимов и регулированием яркости, на подобии моего светильника который я делал на Arduino, нет. Поэтому я решил переделать свой ночник на светодиодах ws2812 под управлением Arduino NANO.

Взял пример кода который устанавливаться с библиотекой Adafruit_NeoPixel проекта на Digispark .

#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN   2    // Digital IO pin connected to the button.  This will be
                          // driven with a pull-up resistor so the switch should
                          // pull the pin to ground momentarily.  On a high -> low
                          // transition the button press logic will execute.
#define PIXEL_PIN    6    // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 16
// Parameter 1 = number of pixels in strip,  neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_RGB     Pixels are wired for RGB bitstream
//   NEO_GRB     Pixels are wired for GRB bitstream, correct for neopixel stick
//   NEO_KHZ400  400 KHz bitstream (e.g. FLORA pixels)
//   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
bool oldState = HIGH;
int showType = 0;
void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}
void loop() {
  // Get current button state.
  bool newState = digitalRead(BUTTON_PIN);
  // Check if state changed from high to low (button press).
  if (newState == LOW && oldState == HIGH) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {
      showType++;
      if (showType > 9)
        showType=0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState;
}
void startShow(int i) {
  switch(i){
    case 0: colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
            break;
    case 1: colorWipe(strip.Color(255, 0, 0), 50);  // Red
            break;
    case 2: colorWipe(strip.Color(0, 255, 0), 50);  // Green
            break;
    case 3: colorWipe(strip.Color(0, 0, 255), 50);  // Blue
            break;
    case 4: theaterChase(strip.Color(127, 127, 127), 50); // White
            break;
    case 5: theaterChase(strip.Color(127,   0,   0), 50); // Red
            break;
    case 6: theaterChase(strip.Color(  0,   0, 127), 50); // Blue
            break;
    case 7: rainbow(20);
            break;
    case 8: rainbowCycle(20);
            break;
    case 9: theaterChaseRainbow(50);
            break;
  }
}
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}
void rainbow(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
      delay(wait);
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        }
        strip.show();
        delay(wait);
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off
        }
    }
  }
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}

Данный код хорошо работает на Arduino Но вот Digispark отказывается переключать режимы и происходит так называемое залипание. Но я не привык сдаваться и после не долгового анализа я понял в чем дела. Переписал код.

 // Код будет доступен когда к видео на канале будет больше 100 лайков. Это связанно с тем, что я потратил достаточно много времени на
// поиск проблемы и изменение кода.

Схема подключения светодиодов ws2812 к Digispark выгладит вот так.

Схема подключения светодиодов ws2812 к Digispark

К кнопкам подключил подтягивающие резисторы.

Фото моего светильника на Digispark и светодиодах ws2812 .

светильника на Digispark и светодиодах ws281

светильника на Digispark

Digispark и светодиодах ws2812

Есть идеи сделать Wi-fi светильник, но посмотрим как будет время и желание. Ваша активность на прямую влияет на мое желание. Не забывайте про это!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Манипулятор своими руками из фанеры http://portal-pk.ru/news/144-manipulyator-svoimi-rukami-iz-fanery.html Константин Portal-PK 2018-02-13T13:13:34+03:00 Как вы знаете сделал я самодельный ЧПУ фрезерный станок. Входе обучения работы на нем я делаю различные поделки и механизмы. Нашел в интернете исходные файлы (MeArmV03.svg) для манипулятора и решил вырезать его на ЧПУ станке.

 исходные файлы для манипулятора и решил вырезать его на ЧПУ станке

Я думал что с первого раза у меня ни чего не получиться. Так как это достаточно сложная работа для ЧПУ и очень много мелких деталей.

ЧПУ резал больше часа и вырезал все детали. Провел небольшую доработку с помощью надфиля. Собрал на винтики манипулятор. Кстати в интернете много инструкций, от текстовых до видео по сборке манипулятора.

И Вот что у меня получилось. Достаточно не плохо на мой взгляд.

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

монипулятор на NodeMCU

Код получился не очень красивый но для проверки достаточно.

// определение режима соединения и подключение библиотеки RemoteXY  
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h> 

#include <RemoteXY.h> 

// настройки соединения  
#define REMOTEXY_WIFI_SSID "portalpk" 
#define REMOTEXY_WIFI_PASSWORD "" 
#define REMOTEXY_SERVER_PORT 6377 


// конфигурация интерфейса   
#pragma pack(push, 1) 
uint8_t RemoteXY_CONF[] = 
  { 255,4,0,0,0,31,0,6,5,0,
  4,128,48,50,42,9,4,4,0,6,
  12,9,36,2,4,0,85,11,9,37,
  2,4,128,8,4,42,9,4 }; 
   
// структура определяет все переменные вашего интерфейса управления  
struct { 

    // input variable
  int8_t slider_1; // =0..100 положение слайдера 
  int8_t slider_2; // =0..100 положение слайдера 
  int8_t slider_3; // =0..100 положение слайдера 
  int8_t slider_4; // =0..100 положение слайдера 

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY; 
#pragma pack(pop) 


///////////////////////////////////////////// 
//           END RemoteXY include          // 
///////////////////////////////////////////// 
#include <Servo.h> 
#define PIN_SERVO1 D1
#define PIN_SERVO2 D2
#define PIN_SERVO3 D3
#define PIN_SERVO4 D4
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;



void setup()  
{ 
  RemoteXY_Init ();  
   
  // TODO you setup code  
  RemoteXY.slider_1 = 50;  
  RemoteXY.slider_2 = 50; 
  RemoteXY.slider_3 = 50; 
  RemoteXY.slider_4 = 50; 
  servo1.attach(PIN_SERVO1);
  servo2.attach(PIN_SERVO2);
  servo3.attach(PIN_SERVO3);
  servo4.attach(PIN_SERVO4);

   
} 

void loop()  
{  
  RemoteXY_Handler (); 
   
   
  // TODO you loop code 
  // используйте структуру RemoteXY для передачи данных 
  int ms = RemoteXY.slider_1*20+500;  
  servo1.writeMicroseconds(ms);  

    int ms2 = RemoteXY.slider_2*10+500;  
  servo2.writeMicroseconds(ms2);  

    int ms3 = RemoteXY.slider_3*10+500;  
  servo3.writeMicroseconds(ms3);  

    int ms4 = RemoteXY.slider_4*10+500;  
  servo4.writeMicroseconds(ms4);  

}

Вам скорее всего нужно будет изменить начальные угол для серо-приводов.

Тестирования самодельного манипулятора показал

NodeMCU

руки-манипулятора

Тестирования самодельного манипулятора показал , что все работает но скорее всего не достаточно питания от одного аккумулятора 18650. И происходить перезагрузка NodeMCU.


Запланировал доработку кода для руки-манипулятора и переделать источник питания. Но как скоро будет продолжение зависит от вас и от свободного времени.

]]>
Inkscape где скачать русскую версию. Настройка Inkscape http://portal-pk.ru/news/143-inkscape-gde-skachat-russkuyu-versiyu-nastroika-inkscape.html Константин Portal-PK 2018-02-08T18:21:04+03:00 Мне часто задают вопрос с помощью какой программы я создаю G-Code для своего самодельного ЧПУ станка. Поэтому я решил снять небольшой курс по созданию G-Code для ЧПУ станков. В данном курсе расскажу какими программами пользуюсь я и какие сервисы мне помогают в этом деле.

И начну я с программы Inkscape. Как не странно но найти официальный сайт данной программы найти в поисковике не получается. Поэтому я снял видео как скачать данную программу.

Я скачиваю данную программу с официального сайта: inkscape.org.

с официального сайта: inkscape.org.

В разделе Download.

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

В видео рассказываю подробно как настроить Inkscape для начала работы

В Inkscape есть вспомогательные линии как в Компас 3D. Данный инструмент помогает упростить работу при создании чертежей. Хотя данная программа не предназначена для черчения чертежей.

В следующем видео расскажу как нарисовать простые детали и сделать G-Code.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Как сделать самодельный пистолет из Digispark и сломанной игрушки http://portal-pk.ru/news/142-kak-sdelat-samodelnyi-pistolet-iz-digispark-i-slomochnoi.html Константин Portal-PK 2018-01-31T14:21:08+03:00 При большом изобилии пластиковых игрушек, современные дети не ценят их. В следствии чего игрушки очень быстро надоедают или их просто ломают. У моего ребенка есть с пяток пистолетов из которых он играет одним.
Взял я один из таких пистолетов и решил его переделать. Для переделки мне понадобились:


1. Digispark
2. Светодиоды
3. резисторы 220 Ом
4. бокс под батарейки
5. Выключатель
6. конечный выключатель от старого принтера можно использовать и такой
7. компьютерный спикер
8. батарейки
9. провода


В общим из старых вещей и недорогих комплектующих из Китая на сумму 120 руб. (это мои затраты ваши могут быть другими) получилась интерактивная игрушка.

Корпус пистолета пришлось доработать. Удалил все лишние перегородки и выпилил отверстие для выключателя. Выключатель нужен для выключения пистолета когда ребенок не будет играть. Это сэкономит заряд батареек. Можно конечно выпоят с Digispark светодиод питания и при бездействии переводит в режим ожидания. Но я пока не очень хорошо освоил данную отладочную плату.

Все собрал по схеме:

Схема подключения пистолета на DS



Скетч для пистолета на Digispark

int led_0 = 0; // пин подключения Led1
int led_1 = 1; // пин подключения Led2
int led_2 = 2; // пин подключения Led3
const int buttonPin = 3;      // номер входа, подключенный к кнопке
int soundPin = 4; // объявляем переменную с номером пина спикера 
// переменные 
int flag = 0; // флаг Led
boolean open = true; // флаг, включения
int interval[6]={50, 120, 90, 240, 150, 50};    // интервал включения/выключения LED
void setup()  { 
  //выводs на выход
  pinMode(led_0, OUTPUT);
  pinMode(led_1, OUTPUT);
  pinMode(led_2, OUTPUT);
    // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPin, INPUT_PULLUP); 
  pinMode(soundPin, OUTPUT); //объявляем пин как выход.  
} 
void loop()  { 
 boolean current = digitalRead (buttonPin); // считываем данные с кнопки
 if(current)
 {
   for (int x=0; x<6; x++) { // цикл 6 проходов
    if(flag > 3)
      flag = 0;
    if (open) // если true
        digitalWrite(flag, HIGH); 
    else // иначе
      digitalWrite(flag, LOW); 
    delay(interval[x]); // Ждем 
     if (x == 5) // если последний проход по циклу
        flag++; // передаем слово (меняем текущий пин) 
    open = !open; //меняем false на true и наоборот;
   if(open)
    tone(soundPin, 500); // включаем звук частотой 500 Гц 
    else
    tone(soundPin, 100); // включаем звук частотой 100 Гц  
   }  
 }
 else
 noTone(soundPin); // выключаем звук                    
}

Ребенок радостно играл примерно дней 5, не выпуская пистолет из рук. И тут он решил взять его в детский садик. И всего один день в садике превратил его вот в это:

И тут он решил взять его в детский садик. И всего один день в садике превратил его вот в это

Что в садике с ним сделали? Как там играют?


Что в садике с ним сделали? Как там играют? Вроде бы в садике игрушки тоже пластиковые и при этом целые.
По просьбе ребенка пистолет я восстановил. И он продолжает радовать ребенка.


Минутка программирования в Arduino IDE

А вы используете конструкцию:

if (условие 1)
{
  // выполнять действие A
}
else if (условие 2)
{
  // выполнять действие B
}
else
{
  // выполнять действие  C
}

Минутка программирования в Arduino IDE

Пишите ваши примеры.
Мой ответ будет в следующей статье.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный станок с ЧПУ цена. Калькуляция стоимости фрезерного станка http://portal-pk.ru/news/141-samodelnyi-stanok-s-chpu-cena-kalkulyaciya-stoimosti.html Константин Portal-PK 2018-01-23T13:06:29+03:00 Если вы не увлекаетесь изготовлением изделий из дерева, пластика и пр. Но вас наверняка не раз посещают мысль. А какая цена фрезерного ЧПУ станка ? И дешевле сделать самодельный станок с ЧПУ или купить?

Я собрал самодельный фрезерный станок с ЧПУ. Вот все этапы сборки и настройки:

1. Какподобрать шаговый двигатель для станкаЧПУ. ШД из принтера.

2. Платарасширения для Arduino UNO, CNC shield v3 и драйверовA4988

3. Настройкадрайвера A4988. Первый запуск шаговыхдвигателей

4. Самодельныйфрезерный ЧПУ станок из мебельныхнаправляющих. Механика

5. СамодельныйЧПУ CNC фрезерный станок. Часть 2. Электроника

6. Настройка прошивки Grbl ЧПУ станка. Калибровка ЧПУ

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

На сайте есть раздел, где я делаю закладки на материалы которые я покупал для ЧПУ.

Цена ЧПУ станка получилась следующая:

Цена ЧПУ станка

Комплектующие для ЧПУ покупал тут:

Средства потраченные на изготовления станка с учетом остатков получатся 6174 руб. Относительно небольшие деньги с учетом полученного результата.

Но я не посчитал стоимость шпинделя. В качестве шпинделя я использую гравер. Также я прикупил Бок питания на 7 А. Так как блок питания от компьютера не очень удобный и я решил его заменить на более компактный.

На дополнительные материалы я потратил:

дополнительные материалы

Расходные материалы для ЧПУ станка лучше не учитывать в общую стоимость станка. Но я решил посчитать сколько всего потратил средств до полного запуска станка и небольшую модернизацию.

В итоге я потратил около 9 тыс руб.

Расходные материалы для ЧПУ станка лучше не учитывать

Вы скажете, что за данную сумму можно купить в Китае станок. И не нужно заморачиваться по разработке и сборке!

Во-первых станок прейдет вам в разобранном виде и собирать его все равно нужно.

Во-вторых рабочая область такого станка будет максимуму 200 на 300 мм.

В-третьих в эту стоимость не входят расходные материалы, которые вам нужно будет докупать.

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

Это мое мнение. Возможно у вас другое мнение и опыт поэтому жду ваши комментарии.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Что такое NodeMCU? Программируем в среде Arduino IDE http://portal-pk.ru/news/140-chto-takoe-nodemcu-programmiruem-v-srede-arduino-ide.html Константин Portal-PK 2018-01-19T19:36:45+03:00

NodeMCU это отладочная плат на базе микроконтроллера ESP8266. Основная особенность данных микроконтроллеров наличие Wi-fi на борту. Вы сможете управлять своим проектом через Wi-fi соединения, это упрощает создания радио управляемых моделей. Разработку систем умного дома и пр.

NodeMCU имеет 11 пинов ввода-выводов

Как показано на картинке выше NodeMCU имеет 11 пинов ввода-выводов.

Урок 1. Веб-сервер ESP32 (ESP8266) в среде Arduino IDE

Доп. Назначение пинов:

  • D1–D10 — выходы с ШИМ (PWM)
  • A0 — аналоговый вход с АЦП
  • D9, D10 — UART
  • D1, D2 — I²C/TWI
  • D5–D8 — SPI

Это не очень много по сравнению с той же Arduino NANO у которой 22.

Запитать NodeMCU можно :

  • 5-18 вольт через вывод Vin (согласно параметрам стабилизатора AMS1117-3.3)
  • 5 вольт через вывод VUSB или USB-гнездо
  • 3.3 вольта непосредственно через выводы 3V

Однако мой опыт показывает что при подключении по Vin больше 9 В . Стабилизатор начинает очень сильно греться и через некоторое время начинаются сбои в работе Wi-fi.

На плате установлен ESP-12E, параметры взяты из даташита на ESP-12E:

  • протокол Wi-Fi 802.11 b/n/g
  • частота 2.4 - 2.5 GHz (2400-2483.5 MHz)
  • режим Wi-Fi: точка доступа, клиент
  • защита Wi-Fi: WPA, WPA2
  • шифрование Wi-Fi: WEP, TKIP, AES
  • сетевые протоколы: IPv4, TCP, UDP, HTTP, FTP
  • 80 MHz 32-bit процессор
  • 11 доступных портов ввода/вывода UART, HSPI, I2C, I2S, GPIO, PWM
  • рабочее напряжение 3.0 ... 3.6 вольт
  • максимальная нагрузка на вывод не более 12 mA
  • максимальное потребление модуля 200 mA, среднее 80 mA (подробнее в 11 таблице даташита ESP-12E)
  • рабочая температура -40 ... 125 С

Еще одна особенность данной отладочной платы в том что ее можно программировать в среде Arduino IDE. Для данной платы написано много библиотек и есть много примеров на просторах интернета.

Для того чтобы начать программировать NodeMCU в среде Arduino IDE нужно подготовить срезу разработки.

В пункте меню Фаил → Настройки

программировать NodeMCU в среде Arduino IDE

В поле Дополнительные ссылки для Менеджера плат пишем такую ссылку:

<code>http://arduino.esp8266.com/stable/package_esp8266com_index.json

Жмем ОК и переходим в окно менеджера плат:

 менеджер плат Arduino IDE

В самом низу будет нужный нам пакет « esp8266 by ESP8266 Community». Выбираем его и жмем кнопку «Установка».

«esp8266 by ESP8266 Community

Спустя некоторое время пакет скопирует необходимые файлы и в Arduino IDE.

пакет скопирует необходимые файлы и в Arduino IDE

После чего можно будет выбрать нужную нам плату.

Arduino IDE NodeMCU

После чего выбираем порт. В Ubuntu это выгладит так.

После чего выбираем порт. В Ubuntu это выгладит так.

В Windows это com-порт.

Все Сейчас можно загрузить первый скетч. Для примера возьмем ESP8266 Blink из примеров которые устанавливаются при установки платы ESP8266.

<code>/*
 ESP8266 Blink by Simon Peter
 Blink the blue LED on the ESP-01 module
 This example code is in the public domain
 
 The blue LED on the ESP-01 module is connected to GPIO1 
 (which is also the TXD pin; so we cannot use Serial.print() at the same time)
 
 Note that this sketch uses LED_BUILTIN to find the pin with the internal LED
*/

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
                                    // but actually the LED is on; this is because 
                                    // it is active low on the ESP-01)
  delay(1000);                      // Wait for a second
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(2000);                      // Wait for two seconds (to demonstrate the active low LED)
}

После загрузки вы увидите мигание синего светодиода на плате NodeMCU

После загрузки вы увидите мигание синего светодиода на плате NodeMCU. Мы научились прошивать данную отладочную плату. Сейчас можно создавать различные проекты на ESP8266.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Модернизация самодельного станка с ЧПУ: выравниваю столешницу и пр. http://portal-pk.ru/news/139-modernizaciya-samodelnogo-stanka-s-chpu-vyravnivayu.html Константин Portal-PK 2018-01-16T12:16:06+03:00 Любая самоделка имеет ряд недочетов и изъянов. Не исключение и мой самодельный фрезерный станок с ЧПУ .

Как я собирал ЧПУ можно посмотреть тут:

1. Какподобрать шаговый двигатель для станкаЧПУ. ШД из принтера.

2. Платарасширения для Arduino UNO, CNC shield v3 и драйверовA4988

3. Настройкадрайвера A4988. Первый запуск шаговыхдвигателей

4. Самодельныйфрезерный ЧПУ станок из мебельныхнаправляющих. Механика

5. СамодельныйЧПУ CNC фрезерный станок. Часть 2. Электроника

6. Настройка прошивки Grbl ЧПУ станка. Калибровка ЧПУ

Модернизацию своего самодельного ЧПУ станка я начал с поднятии столешницы и выравнивании поверхности. Вы скажете: «А зачем понимать столешницу? Чем больше высота тем лучше.» Я также думал пока не поработал на станке с ЧПУ . И потом понял что это дополнительные перемещения и люфты. Поэтому я поднял столешницу станка на 50 мм. Сейчас рабочая высота 70 мм. Немного, но это оптимальная высота для фрезерного станка с ЧПУ данного размера.

А если ваш ЧПУ станок получается большой и тяжелый для его модернизации пригодиться Электрическая таль (Тельфер). В интернет магазине Инженерный Арсенал в наличии электрические мини тали грузоподъемностью от 125 кг до 1,2 т. 220 В..

Выравнивал столешницу в 2 этапа. Так как фрезеровал фрезой всего 3 мм. Одну половину фрезеровал около 2 часов и вторую также. Поэтому чтобы не шокировать соседей и станок не насиловать разбил на 2 этапа.

ыравнивал столешницу в 2 этапа. Так как фрезеровал фрезой всего 3 мм

Выравнивание прошло успешно. Но вот соседям шум не очень понравился. Нет они не жаловались! Просто я выключил станок и было слышно что за передачу они смотрят по телевизору. И тут я понял что нужно уменьшать шум.

роклеил мягким линолеумово все близ лежащие поверхности у гравера

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

Шуметь стало немного тише и при этом звук стал менее звонкий. Буду дальше смотреть за реакцией соседей. Надеются, что сейчас не буду им мешать!

Следующее что я сделал, это установил импульсный блок питания о котором рассказываю тут: Дешевыйблок питания на 12 В для ЧПУ из Китая.Делаем корпус

установил импульсный блок питания

Перед заменой блока питания замерил рабочий ток, но он оказался очень маленький. Я думаю что это у меня проблемы с мультиметром. Поставил импульсный блок питания на ЧПУ станок и сделал пробное фрезерования. Вырезал заготовки для спинера.

Вырезал заготовки для спинера

Как видно в видео присадки напряжения не было и при этом элементы блока питания не нагрелись. Поэтому я думаю что смена блока питания прошла успешно. Но буду тестировать и проверять.

Это не все что я хотел изменить в своем самодельном станке с ЧПУ. Буду еще переделывать и исправлять недочеты. Поэтому читайте на сайте Портал-ПК или смотрите на канале на ютюб.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!


]]>
Умный ночник на Arduino и адресных светодиодах WS2811 http://portal-pk.ru/news/138-umnyi-nochnik-na-arduino-i-adresnyh-svetodiodah-ws2811.html Константин Portal-PK 2018-01-15T07:47:12+03:00 В интернете большое количество проектов на Arduino с использованием адресных светодиодов и лент WS2812. Я тоже решил сделать пару проектов на данных замечательных светодиодах WS2811.

При создании проекта были использованный следующие материалы:

1. Адресные светодиоды

2. Arduino Nano

3. Тактовые кнопки

Сделал я вот такой ночник с двумя режимами и регулированием яркости.

Сделал я вот такой ночник на Arduino и ленте  WS2812

Первый режим плавно изменяет цвет светодиодов со сдвигом на один. Второй режим светит обычным белым цветом.

Регулирование яркости изменяет яркость на 20%.

Программа сделана практически на стандартных примерах которые устанавливаются с библиотекой FastLED.

Установить библиотеку FastLED можно из менеджера библиотек.

Установить библиотеку FastLED

Или скачать архив отсюда и установить библиотеку FastLED

Скетч небольшой и прокомментирован.

#include <FastLED.h>

#define LED_PIN     6
byte button_rejim = 2;  // кнопка режим
byte button_yarkast = 3;  // кнопка яркасть
int rejim = 0;       // текущий режим
int yarkast = 100;       // текущая яркасть 
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки

boolean lastButten2 = LOW;     // предыдущее состояние кнопки 2
boolean currentButten2 = LOW;  // текущее состояние кнопки 2

// Information about the LED strip itself
#define NUM_LEDS    15
#define CHIPSET     WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

// How many seconds to show each temperature before switching
#define DISPLAYTIME 20
// How many seconds to show black between switches
#define BLACKTIME   3

void setup() {
  pinMode(button_rejim, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_yarkast, INPUT_PULLUP); // настроить пин кнопки
  //delay( 3000 );
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalSMD5050 );
  
}

boolean debvance (boolean last) //убираем дребизг 1
{
  boolean current = digitalRead (button_yarkast); // считываем данные с кнопки
  if (last != current) // Если текущее состояни еотличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (button_yarkast); // Присваеваем текущее состояние кнопки
    return current; 
  }
}

boolean debvance2 (boolean last) //убираем дребизг 2
{
  boolean current = digitalRead (button_rejim); // считываем данные с кнопки
  if (last != current) // Если текущее состояни еотличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (button_rejim); // Присваеваем текущее состояние кнопки
    return current; 
  }
}

void loop(){
  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW 
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    yarkast  = yarkast+50; // увеличиваем яркость 
  }
 lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки
  if (yarkast > 250)
    yarkast = 0;

  currentButten2 = debvance2 (lastButten2); // Передаем функции дребезга значение по умолчанию LOW 
  if (lastButten2 == LOW && currentButten2 == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    rejim  = !rejim; // изменяем режим
  }
 lastButten2 =  currentButten2;  // Переприсваеваем прошлое состояние кнопки   

if (rejim)
{
  FastLED.setBrightness( yarkast );
  static uint8_t starthue = 0;
  fill_rainbow( leds, NUM_LEDS, ++starthue, 40);

}
else
{

  static uint8_t hue;
     for(int i = 0; i < NUM_LEDS; i++) {   
      leds[i] = CHSV(0,0,yarkast); 
     }
} 
   FastLED.show();
   FastLED.delay(10);
}

Я думаю вопросов не должно быть. Но если что то не работает пишите будем разбираться.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
ESP8266 ESP-01 светодиодная матрица. Выводим текст через web-интерфейс http://portal-pk.ru/news/137-esp8266-esp-01-delaem-svetodiodnuyu-matricu-vyvodim-tekst.html Константин Portal-PK 2018-01-10T09:51:30+03:00 Нашел пример светодиодной матрицы. Управление которой происходит через web-интерфейс. Достаточно интересная тема. Поэтому решил сделать заметку чтобы не потерять.

Сам не проверял. Да и пока нет возможности проверить. Но мне пригодятся некоторые библиотеки из данного проекта. Ссылка на проект вот тут: ESP8266 ESP-01 - NeoPixel NeoMatrix - Text Scroller.

Необходимые библиотеки можно скачать тут:

Скетч ESP8266 ESP-01 - NeoPixel NeoMatrix - Text Scroller

// Include NeoPixel Specific Libraries
#include <Adafruit_GFX.h>
#include <Adafruit_NeoPixel.h>
#include <Adafruit_NeoMatrix.h>
// Include ESP Specific Libraries
#include <ESP8266httpUpdate.h>
#include "espneotext.h"
// Define ESP-01 PIN
#define PIN 2
// MATRIX DECLARATION:
// Parameter 1 = width of EACH NEOPIXEL MATRIX (not total display)
// Parameter 2 = height of each matrix
  // 8x8 (8, 8)
// Parameter 3 = pin number (most are valid)
  // PIN 2
// Parameter 4 = matrix layout flags, add together as needed
// Parameter 5 = pixel type flags, add together as needed:
  // NEO_GRB     Pixels are wired for GRB bitstream (v2 pixels)
  // NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip)
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, 8, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800
);
// Define Your WiFi Connection Information
const char* WiFi_SSID = "<SSID-HERE>";
const char* WiFi_PASS = "<PASSWORD-HERE>";
// Set Defaults
String dispText;
String dispColor;
int disp = 0;
int pixelsInText;
int x = matrix.width();
const uint16_t colors[] = {
  matrix.Color(255, 0, 0),
  matrix.Color(0, 255, 0),
  matrix.Color(0, 0, 255)
};
// Create an instance of the server and specify the port to listen on as an argument.
WiFiServer server(80);
void setup(){
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(40);
  matrix.setTextColor(matrix.Color(80,255,0));
  //matrix.setTextColor(colors[0]);
  //Serial.begin(115200); // DEBUG
  delay(10);
  // Connect to WiFi network
  //Serial.println(); // DEBUG
  //Serial.print("Connecting to "); // DEBUG
  //Serial.println(WiFi_SSID); // DEBUG
  WiFi.begin(WiFi_SSID,WiFi_PASS);
  while(WiFi.status() != WL_CONNECTED){
    delay(1000);
    //Serial.print("."); // DEBUG
  }
  //Serial.println(""); // DEBUG
  //Serial.println("WiFi Connected"); // DEBUG
  // Start the server
  server.begin();
  //Serial.println("Server Started"); // DEBUG
  // Print the IP address
  //Serial.println(WiFi.localIP()); // DEBUG
}
void loop(){
  // Check if a client has connected
  WiFiClient client = server.available();
  // Wait until the client sends some data
  if(!client){ return; }
    //Serial.println("Client Connected"); // DEBUG
  // Color Options
  // http://www.javascripter.net/faq/hextorgb.htm
  // Process the Request/GET - Strips out everything in order.
  String command0 = client.readStringUntil('?');
    //Serial.print("Command0: "); // DEBUG
    //Serial.println(command0); // DEBUG
  String allParams = client.readStringUntil(' ');
    //Serial.print("Query Parameter: "); // DEBUG
    //Serial.println(allParams); // DEBUG
  if(allParams.indexOf("line=") >= 0){
    disp = 1; // true
    dispText = allParams.substring(allParams.indexOf("=")+1,allParams.indexOf("&rgb="));
    dispText.replace("+"," ");
    dispText.replace("%20"," ");
    dispText.replace("%21","!");
    dispText.replace("%27","'");
    pixelsInText = (dispText.length() * 7)+8;
      //Serial.print("Scroll Text: ");       // DEBUG
      //Serial.println(dispText);            // DEBUG
    // Set user prefered color
    dispColor = allParams.substring(allParams.indexOf("&rgb=")+5,allParams.length());
      //Serial.print("Scroll Text Color: "); // DEBUG
      //Serial.println(dispColor);           // DEBUG
    // Lame check for any other parameters. Need a better way to do this!
    if(dispColor.indexOf("&") == -1){
      int r = dispColor.substring(0,dispColor.indexOf(",")).toInt();
        //Serial.println(r_val); // DEBUG
      int g = dispColor.substring(int(dispColor.indexOf(","))+1,(dispColor.lastIndexOf(","))).toInt();
        //Serial.println(g_val); // DEBUG
      int b = dispColor.substring(int(dispColor.lastIndexOf(","))+1).toInt();
        //Serial.println(b_val); // DEBUG
      matrix.setTextColor(matrix.Color(r,g,b));
    }
    if(disp){
      while(x + 17 > (matrix.width() - pixelsInText)){
        matrix.fillScreen(0);
        matrix.setCursor(--x, 0);
        matrix.print(dispText);
        matrix.show();
        delay(100);
      }
      x = matrix.width();
    }
    // Display form page again so it's not blank! ------------------
    // Prepare the response
    String resp = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
    resp += displayPage;
    // Send the response to the client
    while(resp.length()>2000){
      String dummy = resp.substring(0,2000);
      client.print(dummy);
      resp.replace(dummy," ");
    }
    client.flush();
    client.print(resp);
    delay(10);
    // The client will actually be disconnected, when the function returns and 'client' object is destroyed!
    //Serial.println("Client Disconnected!"); // DEBUG
  }else{
    // Display requested form page -----------------------------------
    // Prepare the response
    String resp = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
    resp += displayPage;
    // Send the response to the client
    while(resp.length()>2000){
      String dummy = resp.substring(0,2000);
      client.print(dummy);
      resp.replace(dummy," ");
    }
    client.flush();
    client.print(resp);
    delay(10);
    // The client will actually be disconnected, when the function returns and 'client' object is destroyed!
    //Serial.println("Client Disconnected!"); // DEBUG
  }
}

Настройка подключения к сети Wi-fi

// Define Your WiFi Connection Information
const char* WiFi_SSID = "<SSID-HERE>";
const char* WiFi_PASS = "<PASSWORD-HERE>";

Пин подключения светодиодов

// Define ESP-01 PIN
#define PIN 2

Настройка светодиодной матрица

// MATRIX DECLARATION:
// Parameter 1 = width of EACH NEOPIXEL MATRIX (not total display)
// Parameter 2 = height of each matrix
  // 8x8 (8, 8)
// Parameter 3 = pin number (most are valid)
  // PIN 2
// Parameter 4 = matrix layout flags, add together as needed
// Parameter 5 = pixel type flags, add together as needed:
  // NEO_GRB     Pixels are wired for GRB bitstream (v2 pixels)
  // NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip)
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, 8, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800
);

Подключаем веб интерфейс приложения который находиться в файле #include "espneotext.h"

#ifndef header_h
#define header_h
String displayPage =
"<!DOCTYPE HTML>\r\n"
"<html lang=\"en\">\r\n"
"<head>\r\n"
"  <meta charset=\"utf-8\">\r\n"
"  <meta name='viewport' content='width=device-width'>\r\n"
"  <title>Send Text to ESP-01 / NeoMatrix / v2</title>\r\n"
"  <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet' integrity='sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7' crossorigin='anonymous'>\r\n"
"  <link rel=\"stylesheet\" href=\"https://raw.githubusercontent.com/bgrins/spectrum/master/spectrum.css\">\r\n"
"  <style>#sentMsgs{display:inline-block;margin:0 15px 20px;padding:10px 20px;min-height:60px;background-color:#777;color:lime;border:1px solid gray;clear:both;}.adjust-text{margin:20px 0 0;padding:0 20px;}.clearfix{clear:both;}</style>\r\n"
"</head>\r\n\r\n"
"<body style='background:#EFEFEF;'>\r\n"
"\r\n"
"   <form>\r\n"
"     <div class='col-md-4'>\r\n"
"       <h3>Enter Text to Send on the NeoPixel Matrix: <input type=\"text\" id=\"color-picker\"></h3>\r\n"
"       <div class='input-group'>\r\n"
"         <input type='text' name='line' id='line' class='form-control' maxlength='60'>\r\n"
"         <div class='input-group-btn'>\r\n"
"           <button class='btn btn-default' id='send-text'>Send Text</button>\r\n"
"         </div>\r\n"
"       </div>\r\n"
"     </div>\r\n"
"   </form><br>\r\n\r\n"
"   <div class='col-md-4 adjust-text clearfix'><h4>Messages Sent</h4></div>\r\n"
"   <div id='sentMsgs' class='col-md-4' contentEditable='true'></div>\r\n"
"\r\n"
" <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js\"></script>\r\n"
" <script src=\"https://raw.githubusercontent.com/bgrins/spectrum/master/spectrum.js\"></script>\r\n"
" <script>\r\n"
"   // This will build up a queue and send or just timeout if the messages are too many or the message is too long\r\n"
"   function sendMsg(){\r\n"
"     var line = $('#line');\r\n"
"     var color = '';\r\n"
"     var colorPicker = $('#color-picker');\r\n"
"     var msg = line.val().replace(';','');\r\n"
"     if(colorPicker.val() == ''){ color = '&rgb=80,255,0'; }\r\n"
"     else{ color = '&'+colorPicker.val().replace('(','=').replace(/\\)| /g,''); }\r\n"
"\r\n"
"     var url2Send = '/?line='+msg+color;\r\n"
"     line.val('');\r\n"
"     if(typeof msg !== 'undefined' && msg.trim() !== ''){\r\n"
"       $.ajax({ url: url2Send }).done(function(){ $('#sentMsgs').prepend('Message Sent: '+msg+'<br>\\n\'); console.log('Message Sent: '+msg+' ['+color+']'); });\r\n"
"     }\r\n"
"   }\r\n"
"   $(document).keypress(function(e){ if(e.which === 13){ sendMsg(); e.preventDefault(); } });\r\n"
"   $('#send-text').click(function(e){ sendMsg(); e.preventDefault(); });\r\n"
"   $('#color-picker').spectrum({preferredFormat:'rgb',clickoutFiresChange:true,color:'#50FF00'});\r\n"
" </script>\r\n"
"\r\n"
"</body>\r\n"
"</html>\r\n";
#endif

Если вы все правильно сделали у вас должно получиться вот такой интерфейс

ESP8266 ESP-01 - NeoPixel NeoMatrix

Можно изменить цвет текста

NeoPixel NeoMatrix - Text Scroller

Если у вас выводит на экран только текст проверти, что у вас есть подключения к интернету так как стили https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/cs... https://raw.githubusercontent.com/bgrins/spectrum/... и скрипты https://ajax.googleapis.com/ajax/libs/jquery/2.2.2... https://raw.githubusercontent.com/bgrins/spectrum/... грузятся из интернета. Или скачайте их и загрузите в микроконтроллер. Конечно я не могу гарантировать что для них хватит места в ESP-01.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Digispark подключаем светодиоды ws2812. Программируем в Arduino IDE http://portal-pk.ru/news/136-digispark--na-attiny85-podklyuchaem-adresnye-svetodiody-ws2812.html Константин Portal-PK 2018-01-10T08:20:22+03:00 Купил Digispark на ATtiny85. Установил поддержку платы в Arduino IDE. Так как по умолчанию Digispark не поддерживает. Подключил к компьютеру и залил пробный скетч. Все работает. С установочным пакетом установилось много примеров в том числе и работа с адресными светодиодами.

Подключил светодиоды ws2812 по схеме:

Digispark на ATtiny85 подключаем адресные светодиоды ws2812

Проверил из всех примеров у меня заработок всего один.

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
#include <Adafruit_NeoPixel.h>
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN            0
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      1
// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800);
int delayval = 500; // delay for half a second
void setup() {
  pixels.begin(); // This initializes the NeoPixel library.
}
void loop() {
  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
  for(int i=0;i<NUMPIXELS;i++){
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(delayval); // Delay for a period of time (in milliseconds).
  }
}

Библиотеку NeoPixel устанавливать не нужно. Она устанавливается с примерами для Digispark.

Поискал в интернете и нашел неплохой пример мигания светодиодами как на дискотеке

#include <Adafruit_NeoPixel.h>
// set to pin connected to data input of WS8212 (NeoPixel) strip
#define PIN         0
// any pin with analog input (used to initialize random number generator)
#define RNDPIN      2
// number of LEDs (NeoPixels) in your strip
// (please note that you need 3 bytes of RAM available for each pixel)
#define NUMPIXELS   60
// max LED brightness (1 to 255) – start with low values!
// (please note that high brightness requires a LOT of power)
#define BRIGHTNESS  50
// increase to get narrow spots, decrease to get wider spots
#define FOCUS       65
// decrease to speed up, increase to slow down (it's not a delay actually)
#define DELAY       5000
// set to 1 to display FPS rate
#define DEBUG       0
// if true, wrap color wave over the edge (used for circular stripes)
#define WRAP        1
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// we have 3 color spots (reg, green, blue) oscillating along the strip with different speeds
float spdr, spdg, spdb;
float offset;
#if DEBUG
// track fps rate
long nextms = 0;
int pfps = 0, fps = 0;
#endif
// the real exponent function is too slow, so I created an approximation (only for x < 0)
float myexp(float x) {
  return (1.0/(1.0-(0.634-1.344*x)*x));
}
void setup() {
  // initialize pseudo-random number generator with some random value
  randomSeed(analogRead(RNDPIN));
  // assign random speed to each spot
  spdr = 1.0 + random(200) / 100.0;
  spdg = 1.0 + random(200) / 100.0;
  spdb = 1.0 + random(200) / 100.0;
  // set random offset so spots start in random locations
  offset = random(10000) / 100.0;
  // initialize LED strip
  strip.begin();
  strip.show();
}
void loop() {
  // use real time to recalculate position of each color spot
  long ms = millis();
  // scale time to float value
  float m = offset + (float)ms/DELAY;
  // add some non-linearity
  m = m - 42.5*cos(m/552.0) - 6.5*cos(m/142.0);
  // recalculate position of each spot (measured on a scale of 0 to 1)
  float posr = 0.15 + 0.55*sin(m*spdr);
  float posg = 0.5 + 0.65*sin(m*spdg);
  float posb = 0.85 + 0.75*sin(m*spdb);
  // now iterate over each pixel and calculate it's color
  for (int i=0; i<NUMPIXELS; i++) {
    // pixel position on a scale from 0.0 to 1.0
    float ppos = (float)i / NUMPIXELS;
    // distance from this pixel to the center of each color spot
    float dr = ppos-posr;
    float dg = ppos-posg;
    float db = ppos-posb;
#if WRAP
    dr = dr - floor(dr + 0.5);
    dg = dg - floor(dg + 0.5);
    db = db - floor(db + 0.5);
#endif
    // set each color component from 0 to max BRIGHTNESS, according to Gaussian distribution
    strip.setPixelColor(i,
      constrain(BRIGHTNESS*myexp(-FOCUS*dr*dr),0,BRIGHTNESS),
      constrain(BRIGHTNESS*myexp(-FOCUS*dg*dg),0,BRIGHTNESS),
      constrain(BRIGHTNESS*myexp(-FOCUS*db*db),0,BRIGHTNESS)
      );
  }
#if DEBUG
  // keep track of FPS rate
  fps++;
  if (ms>nextms) {
    // 1 second passed – reset counter
    nextms = ms + 1000;
    pfps = fps;
    fps = 0;
  }
  // show FPS rate by setting one pixel to white
  strip.setPixelColor(pfps,BRIGHTNESS,BRIGHTNESS,BRIGHTNESS);
#endif
  // send data to LED strip
  strip.show();
}

Также есть неплохой пример с использованием другой библиотеки light_ws2812. Скачиваем библиотеку отсюда.

// Dependency:
//   light_ws2812
//   https://github.com/cpldcpu/light_ws2812
// ---
// if you have USB 3.0 ports, you might need a USB 2.0 hub to program this.
// use the cRGB struct hsv method
#define USE_HSV
#include <WS2812.h>
#define NUM_LEDS 25
#define outputPin 0
#define UPDATES_PER_SECOND 20
WS2812 LED(NUM_LEDS); 
cRGB my_crgb;
int h = 0;   //stores 0 to 614
int x = 2;
byte steps = 1; //number of hues we skip in a 360 range per update
byte sat = 255;
byte val = 220;
void setup() {
  // Power up safety delay
  delay(1000);
  LED.setOutput(outputPin);
}
void loop() {
  int inner_h = h;
  for( int i = 0; i < NUM_LEDS; i++ ) {
    if (i%2) {
      inner_h += (i/2)*x;
    }
    if(inner_h >= 360)
    {
        inner_h %= 360;
    }
    my_crgb.SetHSV(inner_h, sat, val);
    LED.set_crgb_at(i, my_crgb);
  }
  h += steps;
  if(h >= 360)
  {
     h %= 360;
  }
  LED.sync();
  delay(1000 / UPDATES_PER_SECOND);
}

Для работы данного примера требуется намного меньше места на Digispark. Поэтому можно дописать функции.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 2. Нажатие кнопки без ложных срабатываний. Устраняем дребезг кнопки http://portal-pk.ru/news/135-urok-2-nazhatie-knopki-bez-lozhnyh-srabatyvanii.html Константин Portal-PK 2018-01-05T14:54:48+03:00 В предыдущем уроке: Урок1 - Подключение кнопки и светодиода к плате Arduino, я рассказал как подключить кнопку к Arduino . При нажатии на тактовую кнопку светодиод загорается. Если отпускаем он гаснет. Такое исполнение очень редко используется в проектах на Arduino.

Самое распространенное это смена состояния при нажатии на кнопку.

Вроде бы что тут сложного! Определил, что кнопка нажата и сменил состояния. Например включил светодиод. Но не так все проста при нажатии кнопки происходит так называемы дребезг. Состояние несколько раз меняет с высокого на низкое пока не примет устойчивое.

дребезг кнопки

Как видно на картинке. Дребезг есть не только при нажатие на кнопку но и когда мы ее отпускаем.

Как же бороться с дребезгом кнопки?

Существует несколько вариантов:

1. Аппаратное. Поставит дополнительные компоненты в электрическую схему. Самый простой, поставить конденсатор, который будет сглаживать импульсы. Но конденсатор не всегда справляется со своей задачей и поэтому используют более сложные схемы подключения.

2. Программный. Дребезг длиться не очень долго. И если сделать задержку между считыванием значения с кнопки, можно полностью устранить ложные срабатывание. Но тут есть тоже сложность и варианты решения.

Можно использовать библиотеку Bounce или написать свою небольшую функцию.

Написать функцию, на мой взгляд, понятнее и я сам использую данный вариант. Если будет предложения или просьбы по объяснению использования библиотеки, напишу дополнительный урок. Так что пишите в комментарии или в группу в ВК.

Для урока нам понадобиться:

Подключение не чем не отличается от предыдущего урока Урок1 - Подключение кнопки и светодиода к плате Arduino.

Подключение кнопки к Arduino. Дребезг

Электрическая принципиальная схема.

Электрическая принципиальная схема. Дребезг кнопки

Функция boolean debvance достаточно простая. Получаем прошлое состояние кнопки.

if (last != current) // Если текущее состояние отличается от предыдущего

Ждем 5 миллисекунд. И

current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки

И возвращаем значение current.

Вот и вся функция.

boolean debvance (boolean last) //убираем дребизг
{
  boolean current = digitalRead (buttonPin); // считываем данные с кнопки
  if (last != current) // Если текущее состояние отличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
    return current; 
  }
}
  

Осталось в скетче прописать небольшие изменения.

Всего одна строчка для работы с функцией

currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW

Также нужно проверить

if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет

После условия нужно обязательно сделать переприсваивание

lastButten =  currentButten;  // Переприсваиваем прошлое состояние кнопки

Остальной код пишется под ваши задачи. В данном случае включаем светодиод.

const int buttonPin = 2;      // номер входа, подключенный к кнопке
const int ledPin =  3;        // номер выхода светодиода

/* переменные */
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
boolean ledOn = false;        // текущее состояние свтодиода

void setup() // Функция setup()

{
  // инициализируем пин, подключенный к светодиоду, как выход
  pinMode(ledPin, OUTPUT);     
  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPin, INPUT);   

}

boolean debvance (boolean last) //убираем дребизг
{
  boolean current = digitalRead (buttonPin); // считываем данные с кнопки
  if (last != current) // Если текущее состояние отличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
    return current; 
  }
}
  
void loop() // Функция loop

{
  
  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW 
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    ledOn = !ledOn; // инвертируем значение 
  }
  
  lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки
  digitalWrite(ledPin, ledOn);   // Включаем или выключаем светодиот (смотря что пришло после инверсии) 
  delay (2);   // Ждем 2 милисек.
}

Не очень много кода и не надо дополнительных элементов при сборке схемы.

В моих проектах на Ардуино вы можете найти использование данного кода.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Дешевый блок питания на 12 В для ЧПУ из Китая. Делаем корпус http://portal-pk.ru/news/134-deshevyi-blok-pitaniya-na-12-v-dlya-chpu-iz-kitaya-delaem.html Константин Portal-PK 2017-12-27T07:53:32+03:00 Собрал я самодельный ЧПУ фрезерный станок на Arduino. В качестве блока питания использовал блок питания от компьютера. Временно хорошее решение но достаточно не удобно при постоянном использовании. Во-первых блок питания больших размеров. Во-вторых у блока питания очень большая связка проводов. Конечно их можно выпоят или обрезать. А если понадобиться дополнительный выход, опять припаивать. Я решил, что это не вариант и купил в Китае импульсный источник питания 12 В 7А. Но данный источник питания идет без корпуса, но очень дешевый, всего 300 руб. (На момент покупки мной)

Но у меня есть самодельный фрезерный ЧПУ станок. Разве я не смогу сделать корпус для блока питания.

Сделал чертеж и раскрой заготовок для корпуса блока питания .

чертеж и раскрой заготовок для корпуса блока питания для ЧПУ станка

Вот что у меня получилось.

Блок питания еще не проверял на нагрузку. В ближайшее время буду ставить на станок и тестировать. Также нашел еще одни небольшой плюс данного блока питания. У него нет куллеров и он не шумит. Понятно, что при работе шпинделя фрезерного ЧПУ станка это не заметно. Но пока настраиваешь станок для работы, это будет заметно.

Не забывайте подписываться на мой новый канал Самоделкин на Portal-PK.ru. Все поделки сделанные на ЧПУ станке буду выкладывать там.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Урок 4 - Подключаем потенциометр к Arduino. Пишем код в Ardiono IDE http://portal-pk.ru/news/133-podklyuchaem-potenciometr-k-arduino-pishem-kod-v-ardiono-ide.html Константин Portal-PK 2017-12-20T19:10:12+03:00

Подключить потенциометр не составит труда. Тем более в интернете очень много примеров. Написать подходящий код для проекта это уже сложнее.

Выводим значения с потенциометра в Serial port.

const int analogInPin = A0;  // потенциометр
int sensorValue = 0;        // считанное значение
void setup() {
  Serial.begin(9600); 
}
void loop() {
  sensorValue = analogRead(analogInPin);            
  Serial.print("sensor = " );                       
  Serial.println(sensorValue);      
  delay(50);                     
}

Мы получим значения от 0 до 1024. Это потому что у ардуино 10 bit АЦП. Данный вывод можно сгладить

#define analogInPin A0           // потенциометр
const byte averageFactor = 5;   // коэффициент сглаживания показаний (0 = не сглаживать)
                                // чем выше, тем больше "инерционность"
int sensorValue = 0;            // считанное значение
void setup() 
{
  Serial.begin(9600); 
}
void loop() 
{
  int newSensorValue = analogRead(analogInPin);
  if (averageFactor > 0)        // усреднение показаний для устранения "скачков"
  {      
    sensorValue = (sensorValue * (averageFactor - 1) + newSensorValue) / averageFactor;  
    // <новое среднее> = (<старое среднее>*4 + <текущее значение>) / 5 
  } else {
    sensorValue=newSensorValue; // не делаем усреднений, что прочитали то и считаем выводом
  }
  Serial.print("sensor = " );
  Serial.println(sensorValue);
  delay(50);                     
}

Чем больше коэффициент сглаживания тем меньше верхний придел. Это видно по формуле. При коэффициенте = 2 максимальное значение будет 1022 при 5 максимум на выходе будет 1019.

sensor = 982
sensor = 990
sensor = 996
sensor = 1001
sensor = 1005
sensor = 1008
sensor = 1011
sensor = 1013
sensor = 1015
sensor = 1016
sensor = 1017
sensor = 1018
sensor = 1019
sensor = 1019
sensor = 1019

Это нужно учитывать при разработке программы. Можете конечно и не использовать сглаживание. Это ваш выбор.

Выводы Arduino 8bit. Как же нам быть? С потенциометра получаем от 0 до 1024 а на вывод можем подать от 0 до 255. Для решение данной задачи нам поможет функция map(value, fromLow, fromHigh, toLow, toHigh)

#define analogInPin A0           // потенциометр
const byte averageFactor = 5;   // коэффициент сглаживания показаний (0 = не сглаживать)
                                // чем выше, тем больше "инерционность"
int sensorValue = 0;            // считанное значение
void setup() 
{
  Serial.begin(9600); 
}
void loop() 
{
  int newSensorValue = analogRead(analogInPin);
  if (averageFactor > 0)        // усреднение показаний для устранения "скачков"
  {      
    sensorValue = (sensorValue * (averageFactor - 1) + newSensorValue) / averageFactor;  
    // <новое среднее> = (<старое среднее>*4 + <текущее значение>) / 5 
  } else {
    sensorValue=newSensorValue; // не делаем усреднений, что прочитали то и считаем выводом
  }
  int  val = map(sensorValue, 0, 1023, 0, 255);
  Serial.print("sensor = " );
  Serial.println(val);
  delay(50);                     
}

С помощью функции map() можно вывести инвертированные значения

 int  val = map(sensorValue, 0, 1023, 255, 0);

Если у вас есть предложения по реализации подключения потенциометра к Arduino или у вас возник вопрос. Пишите в коментарии.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Настройка прошивки Grbl ЧПУ станка. Калибровка ЧПУ http://portal-pk.ru/news/132-nastroika-proshivki-grbl-chpu-stanka-kalibrovka-chpu.html Константин Portal-PK 2017-12-04T09:12:15+03:00 Собрать ЧПУ станок на Arduino + CNC shield v 3 и сделать первый пробный запуск это пол дела. Нужно еще правильно настроить прошивку Grbl 0.9j . Скачать полную прошивку можете тут grbl.zip. На официальном сайтеGrbl 0.9j доступна только в .hex формате. Что не очень удобно. Но можно скачать код для Arduino IDE версии Grbl v1.1. Данная версия не сильно отличается от Grbl 0.9j .

Grbl 0.9j

Для тех кто только планирует сделать самодельный фрезерный станок с ЧПУ рекомендую почитать вот эти статьи:

1. Какподобрать шаговый двигатель для станкаЧПУ. ШД из принтера.

2. Платарасширения для Arduino UNO, CNC shield v3 и драйверовA4988

3. Настройкадрайвера A4988. Первый запуск шаговыхдвигателей

4. Самодельныйфрезерный ЧПУ станок из мебельныхнаправляющих. Механика

5. СамодельныйЧПУ CNC фрезерный станок. Часть 2. Электроника


Для управления ЧПУ станком я использую программу UniversalG-Code Sender.

Программа для упровления ЧПУ Universal G-Code Sender

Данная программа работает на всех распространенных операционных системах. Еще одни плюс для меня, это то что Universal G-Code Sender отлично работает как с лазерным гравировальным станком с ЧПУ так и с фрезерным ЧПУ станком.

Передначалом настройки нужно почитать инструкцию. Но все инструкции по Grbl на английском языке. Я сделал перевод. Немного корявый но понять можно. Скачиваем инструкцию по Grbl 0.9j тут: GRBL0.9j.doc

Процесс настройки описывать не буду. Весь процесс рассказываю достаточно подробно в видео

После настройки станка нужно провести калибровку. Вы скажите: «Мы все рассчитали и погрешностей не должно быть». Но ни тут то было. Погрешность может быть из за ряда причин. Поэтому необходимо произвести калибровку фрезерного ЧПУ станка.

 калибровка фрезерного ЧПУ станка

Калибровка достаточно простая. Рисуем прямоугольники 100 на 100 мм. И производим расчеты.

Как рассчитать рассказываю в видео.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный светодиодный меч. Многоуровневое фрезерование http://portal-pk.ru/news/131-samodelnyi-svetodiodnyi-mech-mnogourovnevoe.html Константин Portal-PK 2017-11-20T13:33:26+03:00 Возможности ЧПУ станка очень большие. И ими нужно правильно пользоваться. Например можно сделать многоуровневое фрезерование и гравирование. Можно не только вырезать по контуру но и полностью отфрезеровать отверстия или многоуровневые отверстия.

Для освоение многоуровневого фрезерования я сделал в программе Inkscape заготовку меча.

многоуровневого фрезерования я сделал в программе Inkscape заготовку меча

Спомощью плагина G-code в той же программе Inkscape сгенерировал код для станка Mech-1_0005.ngc.

Профрезеровал заготовку. Но так как у меня не очень большой опыт в работе с G-code у меня получилась 3 неточности:

1. ЧПУ фрезер фрезеровал сперва контур, а потом начел фрезеровать все остальное. Поэтому размеры пазов под провода получились уже чем были запланированы.

2. Забыл нарисовать одно отверстие или случайно удалил. Кстати на картинке выше его так же нет.

3. Неправильно расположил заготовку и ручка у меча немного не влезла и получилась обрубленная. Но это не страшно. Так как я ее подровнял и все получилась как будто так и запланировано.

Меч собрал и покрасил . Вот что у меня получилось.

Это неплохой результат учитывав что это мое первое многоуровневое фрезерования.

Для освоения работы ЧПУ я вырезал и собрал вот такой манипулятор.

Для освоения работы ЧПУ я вырезал и собрал вот такой манипулятор

Как я его вырезал и из чего он состоит читайте в следующих статьях на сайте Portal-PK.ru.

Не забывайте подписываться на мой новый канал Самоделкин на Portal-PK.ru. Все поделки сделанные на ЧПУ станке с декабря 2017 года буду выкладывать там.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Декоративная тарелка под фрукты из фанеры http://portal-pk.ru/news/130-dekorativnaya-tarelka-pod-frukty-iz-fanery.html Константин Portal-PK 2017-11-14T11:51:23+03:00 После сборки ЧПУ фрезерного станка, его нужно проверить. Самая первая работа моего самодельного станка вот такая тарелка под хлеб или фрукты . Но под фрукты должна быть поглубже. На канале мне написал, что это конфетница. Да можно и как конфетницу использовать.

Данное изделие изготовлено из МДФ.

тарелка под хлеб или фрукты

В видео говорю термоплита, в заголовке фанера. Это все по тому что я не специалист по материалам. А данную тарелку лучше делать из фанеры минимум 6 мм .

Как обещал выкладываю эскиз тарелки под фрукты из фанеры .

эскиз тарелки под фрукты из фанеры

И G-coge тарелки под фрукты из фанеры Pod-frukti400_0001.ngc. Компенсации инструмента нет. Так как можно фрезеровать любым инструментом. Просто лучи будут шире или уже. Конечно фрезой 6 мм. фрезеровать не стоит так как лучи будут очень тонкие.

Не забывайте подписываться на мой новый канал Самоделкин на Portal-PK.ru. Все поделки сделанные на ЧПУ станке с декабря 2017 года буду выкладывать там.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Мигающий киндер сюрприза. Самоделки из Kinder Surprise http://portal-pk.ru/news/129-migayushchii-kinder-syurpriza-samodelki-iz-kinder surprise.html Константин Portal-PK 2017-11-13T11:26:06+03:00 Мигающий киндер сюрприз очень популярный у детей. Вы спросите почему я так решил? Дети сказали! После того как я сделал данную игрушку для своего ребенка, меня постоянно дети просят сделать им такой же мигающий Kinder Surprise. Если честно мн уже надоело их делать =)

Конструкция достаточно простая состоит из 2 светодиодов пружинки 2 кусочков медного провода и батарейки

Конструкция достаточно простая состоит из 2 светодиодов пружинки 2 кусочков медного провода и батарейки. Все это припаиваем к небольшому кусочку макетной платы и приклеиваем на горячий клей на дно капсулы от Kinder Surprise . Мигающая игрушка из киндер сюрприза готова.

В видео более подробно показываю процесс изготовления и демонстрирую работу мигающего киндер сюрприза.

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

Вы наверное заметили что главная картинка поста и видео оформлены не в стиль канала и сайта. Дело в том что по просьбе подписчиков канала Arduino Portal-PK. Отделяю самоделки и переделки где не используются микроконтроллеры и сейчас они будут публиковаться вот на этом канале Самоделкин на Portal-PK.ru, а на канале Arduino Portal-PK будут только проекты на микроконтроллерах и про электронику.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Сравнение программ LaserGRBL и Inkscape g-code http://portal-pk.ru/news/128-sravnenie-programm-lasergrbl-i-inkscape-g-code.html Константин Portal-PK 2017-10-27T12:52:47+03:00 Как вам наверное известно собрал я из всякого хлама ЧПУ лазерный гравировальный станок . Самодельныйлазерный гравировальный станок с ЧПУ.

Станок работает неплохо. Мне нравиться. На днях решил сделать эксперимент и определить как можно быстро сделать гравировку и при этом затратить как можно меньше времени. Для этого я нарисовал в программе Inkscape шахматную доску . Вот так выглядит программка Inkscape. Скачать Inkscape можно тут.

 программка Inkscape

А так выглядит шахматная доска сделанная в программе Inkscape .

шахматная доска сделанная в программе Inkscape

С помощью плагина JTP Laser Tool сделал g-code.

Скачать g-code шамотной доски. Doska_0001.nc

Сделал гравировку с помощью программы universal g-code sender

Сделал гравировку с помощью программы universal g-code sender

Вот что у меня получилось:

Гравируем шахматную доску на лазерном ЧПУ

Для сравнения решил сделать гравировку из растровой графики с помощью программы LaserGRBL. Скачать LaserGRBL можно тут.

 LaserGRBL

Данная программа делает G-code из картинки и гравирует.

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

гравировку из растровой графики с помощью программы LaserGRBL

А гравировать как кортику достаточно долго.

Сделал вывод. Гравировать лучше из векторной графики и генерировать код с подошью Inkscape + g-code .

Программу LaserGRBL можно использовать только при гравировке картинок и фото , что достаточно удобно делать с поморью данной программы.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Как сделать самодельный фонарик-брелок из киндер сюрприза http://portal-pk.ru/news/127-kak-sdelat-samodelnyi-fonarik-brelok-iz-kinder.html Константин Portal-PK 2017-10-25T07:43:14+03:00 Я уже сделал: Блокпитания 5v от сети 220 для arduino, Самодельныйночник из киндер сюрприза Продолжаю делать поделки из киндер сюрпризов.

Сегодня я раcскажу как я сделал фонарик-брелок из киндер сюрприза . Для данной поделки нам понадобиться небольшое количество запчастей.

1. Корпус можно сделать из киндер сюрприза или другого пластикового корпуса.

2. Светодиод белого цвета.

3. Тактовая кнопка , я выпаял ее из видео магнитофона.

4. Держатель для батарейки , выпаял я его из старой нерабочей материнской платы.

5. Провода.

6. Цепочка или шнурок .

7. Клей, можно и не использовать.

8 Средства для паяния (паяльник, припой, канифоль).

фонарик-брелок из киндер сюрприза

Как все собрать можно посмотреть в видео. Там я рассказываю подробно о сборке фонарик-брелок из киндер сюрприза.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный ЧПУ CNC фрезерный станок. Часть 2. Электроника http://portal-pk.ru/news/126-samodelnyi-chpu-cnc-frezernyi-stanok-chast-2.html Константин Portal-PK 2017-10-23T09:26:36+03:00

Продолжаю собирать самодельный фрезерный ЧПУ станок на Adruin o. В данной статья расскажу как я устанавливал электронику, прокладывал и фиксировал провода. Но обо всем по порядку. Если вы не видели как я собираю механическую часть CNC станка . Советую прочитать тут и посмотреть видео .

Пока я делал Фрезерный станок мой Лазерный гравировальный станок с ЧПУ выгравировал шахматную доску. Полный обзор данной работы уже скоро на сайте.

Гравировка шахмотной доски на Лазерном ЧПУ станке

Начал я с изготовления корпуса для электроники. Сделал я его из корпуса от CD-rom. Подогнул с одной стороны корпус и изогнул крышку, та чтобы одна сторона закрывалась плотно. Так как у меня нет больших тисков загнул не очень ровно. И стык получился с небольшим зазором. Но это не страшно.

 из корпуса от CD-rom

Для прокладки проводки закрепил кабель канал 10х20 мм. Та как большую часть проводки запланировал проложить снаружи ЧПУ станка.

закрепил кабель канал 10х20 мм

Блок питания будет компьютерный . Есть у меня идея избавиться от него и сделать менее оборотный блок питания. Но пока не все комплектующие пришли из Китая.

Блок питания будет компьютерный

Дальше я установил конечные выключатели на ось X, Y по 2 шт . На ось Z один, устанавливать второй пока не вижу смысла. Но возможно поставлю и его.

конечные выключатели на ось X, Y по 2 шт.

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

Все провода укладываю в кабельный канал. Провода которые недалеко от кабельного канала закрепляю на пластиковые скобки

Делаю держатель для проводов от гравера и от двигателя и конечного выключателя с оси Z. Необходимо их закрепить так, чтобы они не мешались и не пересекались друг с другом. Это уменьшит помехи и ложные срабатывание конечного выключателя.

Делаю держатель для проводов от гравера и от двигателя и конечного выключателя с оси Z

держатель для проводов от гравера и от двигателя и конечного выключателя с оси Z

Все провода в коробке под электронику. Получилось их достаточно приливное количество. Установил Arduino и CNC shield v3 с драйверами A4988. Подключал шаговые двигателя и сделал пробный запуск. Двигателя работаю!

Arduino и CNC shield v3 с драйверами A4988

Для подключения конечных выключателей припаиваю самодельные коннекторы и конденсатор на каждый конечный выключатель . Также на каждый провод от конечного выключателя одеваю по ферромагнитному кольцу.

конечных выключателей припаиваю самодельные коннекторы и конденсатор на каждый конечный выключатель

На крышку корпуса устанавливаю 4 тактовые кнопки и собираю панель управления ЧПУ.

крышку корпуса устанавливаю 4 тактовые кнопки

Проверка работоспособности показывает что все работает отлично.

В следующем видео сделаем настройку фрезерного станка ЧПУ и проведем калибровку . Не пропусти!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный ночник из киндер сюрприза http://portal-pk.ru/news/125-samodelnyi-nochnik-iz-kinder-syurpriza.html Константин Portal-PK 2017-10-11T12:20:36+03:00 На просторах интернета достаточно большое количества поделок из киндер сюрприза. У меня тоже появились идеи, что можно сделать из данного корпуса. Начел я с самого простого, ночник из киндер сюрприза.

Для изготовления данного ночника нам понадобиться:

1. корпус сделаем из киндер сюрприза.

2. USB провод, подойдет от мышки клавиатуры, зарядки и пр.

3. 3 светодиода, я использовал белый. Хотя можно использовать любого цвета на ваше усмотрение.

4. 3 резистора на 220 Ом.

5. Макетная плата для пайки.

Материалы необходимы для создания светильнока из киндер сбрприза

Если у вас нет каких то элементов их можно купить в любом магазине радиоэлектроники или купить в Китае. В Китае будет дешевле но придется ждать.

Ночник из киндер сюрприза

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

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Радиоуправление на Arduino + NRF24L01 + гироскоп GY-521 MPU-6050 http://portal-pk.ru/news/124-radioupravlenie-na-arduino-+-nrf24l01-+-giroskop-gy-521-mpu-6050.html Константин Portal-PK 2017-10-02T07:38:27+03:00 Собрал я машинку: СобираемArduino машинку на Motor Shield L293D и ИКпульте

Управлять пультом дистанционного управления не очень удобно. Вторую машинку я собрал на Wi-fi: СамодельнаяWifi машинка на NodeMCU. Машина делает дрифт

Данная машинка получилась более быстрая и удобная в управлении. Но все равно чего-то не хватает: гибкости настройки программы, чувствительности джойстика и пр.

Поэтому я решил сделать машинку на радио управлении.

Что мне понадобится.

Пульт:

1.Arduino Nano

2. Джойстик модуль KY-023

3 Гироскоп GY-521

4. Радио модуль NRF24L01 2.4 ГГц

5.Контроллер заряда 18650

6. MT3608 DC-DC Step Up

7. Кнопки для проектов на arduino

Машинка:

1. Arduino UNO

2.Радиомодуль NRF24L01 2.4 ГГц

3. Два мотор редуктора и два колеса

4. Драйвер двигателя L298N

5. Источник питания. Я использовал power bank

6. Провода для подключения можно взять от мышки, USB- зарядки и пр. что у вас не работает и лежит без дела.

Схема подключения пульта управления на Arduino + NRF24L01 + гироскоп GY-521 MPU-6050 выглядит вот так.

Схема подключения пульта управления на Arduino + NRF24L01 + гироскоп GY-521

Скетч в среде программирования Arduino IDE выглядит вот так.

#include <SPI.h>          
#include <nRF24L01.h>
#include <RF24.h>

const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9, 10);


byte button_jostik = 8;  // кнопка джостика
byte button_1 = 2;  // кнопка
byte button_2 = 3;  // кнопка 
byte button_3 = 4;  // кнопка 
byte button_4 = 4;  // кнопка 
byte button_5 = 5;  // кнопка 
byte button_6 = 7;  // кнопка 

byte transmit_data[9]; // массив, хранящий передаваемые данные
byte latest_data[9]; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных

// Гироскоп ///
#include <Wire.h>
#include "Kalman.h"

Kalman kalmanX;
Kalman kalmanY;

uint8_t IMUAddress = 0x68;

/* IMU Data */
int16_t accX;
int16_t accY;
int16_t accZ;
int16_t tempRaw;
int16_t gyroX;
int16_t gyroY;
int16_t gyroZ;

double accXangle; // Angle calculate using the accelerometer
double accYangle;
double temp;
double gyroXangle = 180; // Angle calculate using the gyro
double gyroYangle = 180;
double compAngleX = 180; // Calculate the angle using a Kalman filter
double compAngleY = 180;
double kalAngleX; // Calculate the angle using a Kalman filter
double kalAngleY;

uint32_t timer;

/* переменные */
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
int status = 0;       // текущий статус

void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК

  pinMode(button_jostik, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_1, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_2, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_3, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_4, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_5, INPUT_PULLUP); // настроить пин кнопки
  pinMode(button_6, INPUT_PULLUP); // настроить пин кнопки
  
  radio.begin();
    delay(50);
    radio.setChannel(9);
    radio.setPayloadSize(8);
    radio.setRetries(1,1);
    radio.setDataRate(RF24_250KBPS);
    radio.setPALevel(RF24_PA_HIGH);
    radio.openWritingPipe(pipe);

  /// Гтроскоп 

    Wire.begin();
  i2cWrite(0x6B,0x00); // Disable sleep mode
  if(i2cRead(0x75,1)[0] != 0x68) { // Read "WHO_AM_I" register
    Serial.print(F("MPU-6050 with address 0x"));
    Serial.print(IMUAddress,HEX);
    Serial.println(F(" is not connected"));
    while(1);
  }    
  kalmanX.setAngle(180); // Set starting angle
  kalmanY.setAngle(180);
  timer = micros();
  
}

void loop() {

  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW 
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    status = !status; // инвертируем Статус 
  }
  lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки


  if (status == true)
  {
    transmit_data[1] = map(analogRead(A0), 0, 1023, 0, 255); // получить значение
    // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
    transmit_data[2] = map(analogRead(A1), 0, 1023, 0, 255);
    }
  else
  {
    /* Update all the values */
    uint8_t* data = i2cRead(0x3B,14);
    accX = ((data[0] << 8) | data[1]);
    accY = ((data[2] << 8) | data[3]);
    accZ = ((data[4] << 8) | data[5]);
    tempRaw = ((data[6] << 8) | data[7]);
    gyroX = ((data[8] << 8) | data[9]);
    gyroY = ((data[10] << 8) | data[11]);
    gyroZ = ((data[12] << 8) | data[13]);
  
    /* Calculate the angls based on the different sensors and algorithm */
    accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
    accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG;  
  
    double gyroXrate = (double)gyroX/131.0;
    double gyroYrate = -((double)gyroY/131.0);
    gyroXangle += gyroXrate*((double)(micros()-timer)/1000000); // Calculate gyro angle without any filter
    gyroYangle += gyroYrate*((double)(micros()-timer)/1000000);
    //gyroXangle += kalmanX.getRate()*((double)(micros()-timer)/1000000); // Calculate gyro angle using the unbiased rate
    //gyroYangle += kalmanY.getRate()*((double)(micros()-timer)/1000000);
  
    compAngleX = (0.93*(compAngleX+(gyroXrate*(double)(micros()-timer)/1000000)))+(0.07*accXangle); // Calculate the angle using a Complimentary filter
    compAngleY = (0.93*(compAngleY+(gyroYrate*(double)(micros()-timer)/1000000)))+(0.07*accYangle);
  
    kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter
    kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000);
    timer = micros();
  
    temp = ((double)tempRaw + 12412.0) / 340.0;
    
    Serial.print(kalAngleX);Serial.print("\t");
    Serial.print(kalAngleY);Serial.print("\t");
  
    //Serial.print(temp);Serial.print("\t");
  
    Serial.print("\n");
     int y = compAngleY;
     if (y>250) y=250;
     if (y< 110) y= 110;
     
     int x = compAngleX;
     if (x>250) x=250;
     if (x< 110) x= 110;

    transmit_data[1] = map(x, 110, 250, 0, 255); // получить значение
    // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
    transmit_data[2] = map(y, 110, 250, 0, 255);
  
  }
  
  transmit_data[0] = !digitalRead(button_jostik); // инвертированный (!) сигнал с кнопки

  transmit_data[3] = !digitalRead(button_1); // инвертированный (!) сигнал с кнопки
   transmit_data[4] = !digitalRead(button_2); // инвертированный (!) сигнал с кнопк
   transmit_data[5] = !digitalRead(button_3); // инвертированный (!) сигнал с кнопки
   transmit_data[6] = !digitalRead(button_4); // инвертированный (!) сигнал с кнопки
   transmit_data[7] = !digitalRead(button_5); // инвертированный (!) сигнал с кнопки
   transmit_data[8] = !digitalRead(button_6); // инвертированный (!) сигнал с кнопки
            
  for (int i = 0; i < 9; i++) { // в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
      flag = 1; // поднять флаг отправки по радио
      latest_data[i] = transmit_data[i]; // запомнить последнее изменение
    }
  }

  //if (flag == 1) { 
  //  radio.powerUp(); // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
 //   flag = 0; //опустить флаг
  //  radio.powerDown(); // выключить передатчик
  // }

}

boolean debvance (boolean last) //убираем дребизг
{
  boolean current = digitalRead (button_jostik); // считываем данные с кнопки
  if (last != current) // Если текущее состояни еотличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (button_jostik); // Присваеваем текущее состояние кнопки
    return current; 
  }
}

void i2cWrite(uint8_t registerAddress, uint8_t data){
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.write(data);
  Wire.endTransmission(); // Send stop
}

uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) {
  uint8_t data[nbytes];
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.endTransmission(false); // Don't release the bus
  Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading
  for(uint8_t i = 0; i < nbytes; i++)
    data[i] = Wire.read();
  return data;
}

Схема подключения Ардуино машинки на на радио управлении NRF24L01 выглядит вот таким образом.

Схема подключения Ардуино машинки на на радио управлении NRF24L01

Скетч среде программирования Arduino IDE для радио Arduino машинки.

#include <SPI.h>        
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
const uint64_t pipe = 0xF0F1F2F3F4LL; 
RF24 radio(9, 10); 
byte msg[9];
unsigned long time;
int data; 
int pos;
int fspeed;           // forward speed 
int bspeed;           // backward speed
const int in1 = 2;    // direction pin 1
const int in2 = 4;    // direction pin 2
const int in3 = 7;    // PWM pin to change speed
const int in4 = 8;    // direction pin 2
const int ena = 5;    // PWM pin to change speed
const int enb = 6;    // PWM pin to change speed
/* определяем два массива с перечислением пинов для каждого мотора */
unsigned char RightMotor[3] =   {in1, in2, ena};
unsigned char LeftMotor[3] =   {in3, in4, enb};
/*
   управление скоростью мотора
   motor - ссылка на массив пинов
   v - скорость мотора, может принимать значения от -100 до 100
*/
void Wheel (unsigned char * motor, int v)
{
  if (v>100) v=100;
  if (v<-100) v=-100;
  if (v>0) {
    digitalWrite(motor[0], HIGH);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], v*2.55);
  }
  else if (v<0) {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], HIGH);
    analogWrite(motor[2], (-v)*2.55);
  }
  else {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], 0);
  }
}
void setup(){
  pinMode(in1, OUTPUT);      // connection to L298n
  pinMode(in2, OUTPUT);      // connection to L298n
  pinMode(in3, OUTPUT);      // connection to L298n
  pinMode(in4, OUTPUT);      // connection to L298n
  pinMode(ena, OUTPUT);      // connection to L298n;
  pinMode(enb, OUTPUT);      // connection to L298n;
  Serial.begin(9600);
 delay(50);
 radio.begin();
 radio.setChannel(9); 
 radio.setPayloadSize(8);
 radio.setDataRate(RF24_250KBPS);  
 radio.setPALevel(RF24_PA_HIGH); 
 radio.openReadingPipe(1,pipe); 
 radio.startListening(); 
}
void loop() {   
 if (radio.available()){ 
  time = millis();
radio.read(&msg, sizeof(msg));} 
if (millis() - time > 1000){
msg[0]=0;
msg[1]=0;}
int x= map(msg[2], 0, 255, -100, 100);
int y= map(msg[1], 0, 255, -100, 100);
 /* управляем правым мотором */
  Wheel (RightMotor, y - x);
  /* управляем левым мотором */
  Wheel (LeftMotor, y + x); 
Serial.println(msg[1]);
Serial.println(msg[2]);
}

У Вас наверное возник вопрос, а для чего 6 тактовых кнопок на пульте управлении. Данными кнопками я планирую управлять ковшом который установлю на данную Ардуино машинку . Также есть возможность поставить еще один джойстик. Я его поставлю когда буду собирать уже в нормальный корпус. Также установлю модуль NRF24L01 с внешней антенной . За всеми переделка следите на сайте Portal-PK.ru и на YouTube канале.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!


]]>
Самодельный фрезерный ЧПУ станок из мебельных направляющих. Механика http://portal-pk.ru/news/123-samodelnyi-frezernyi-chpu-stanok-iz-mebelnyh.html Константин Portal-PK 2017-09-19T09:05:16+03:00 Как вы уже знаете последнее время я собираю ЧПУ станки . Первый станок я собрал из всяких ненужных вещей и обошелся он мне всего 3000 руб. Лазерный гравировальный станок с ЧПУ я собрал вторым. Сейчас я приступил к сборке боле мене качественного фрезерного станка с ЧПУ. В данной статье пойдет речь как и из чего я его собирал.

Для сборки станка я купил фанеру толщиной 16 мм. И начел ее раскраивать на детали похожие, как я делал для лазерного станка, только пришлось учесть пару моментов. Это то что ведущие валы всего 600 мм. И станок должен получиться так чтобы валы не были маленькими. Чуть больше ни чего страшного. Самое проблематичное было рассчитать размеры заготовок для оси Y так как это общий каркас станка и от него зависит не только ось Y но и ось X.

ось Y но и ось X CNC

В качестве направляющих выбрал мебельные направляющие длиной 600 мм. Установил на основания ЧПУ станка .

мебельные направляющие на ЧПУ станке

На направляющие установил лист фанеры . А поверх установил мебельного ламината. У вас наверное возник вопрос для чего мебельный ламинат. А дело в том, что в мебельном ламинате я планирую сделать фиксаторы для материала. И также при фрезеровании фреза будит портить основание стола. А тут поменял лист мебельного ламината и работаешь дальше.

На направляющие установил лист фанеры

Ответную часть для ведущего вала сделал следующим образом. Отфрезеровал отверстия для латунной гайки и стянул винтами М3 заготовки из фанеры. Вот такой бутерброд получился.

Ответную часть для ведущего вала

Установил мебельные направляющие на ось X примерно по тому же принципу что и на ось Y.

Установил мебельные направляющие на ось X

Чтобы закрепить горизонтальные направляющие пришлось сверху станка и в заранее подготовленный выступ установить два куска фанеры. А после закрепить мебельные направляющие. Ответную часть сделал аналогично оси Y.

 сверху станка и в заранее подготовленный выступ установить два куска фанеры

Ответную часть сделал аналогично оси Y

Для того чтобы сделать ось Z установил на ось X небольшой кусок мебельного ламината. Перпендикулярно закрепил заготовки из фанеры для крепления мебельных направляющих.

ось Z установил на ось X небольшой кусок мебельного ламината

На данной оси решил использовать всего 1 пару мебельных направляющих. Так как тут я их закрепил перпендикулярно оси X и плюс кусок фанеры установил достаточно плотно между направляющими. Поэтому хождений практически нет. Если возникнут проблемы с данной конструкцией ни когда не поздно ее переделать.

ось Z

Все шаговые двигателя установил на самодельные крепления сделанные из корпуса видео магнитофона.

Сделал из фанеры крепления для гравера . В итоге у меня получилось вот такой самодельный фрезерный станок с ЧПУ.

В следующем видео буду устанавливать электронику на самодельный фрезерный ЧПУ станок. Не пропустите!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Подключение концевых выключателей (концевики) на ЧПУ станок http://portal-pk.ru/news/122-podklyuchenie-koncevyh-vyklyuchatelei-konceviki-na--chpu.html Константин Portal-PK 2017-09-14T12:18:27+03:00 Уже прошло больше месяца как я собрал самодельный лазерный гравировальный станок с ЧПУ . И уже сделал небольшую модернизацию: Самодельный лазерный гравировальный станок с ЧПУ. Модернизация

Станок работает неплохо. Вот пример гравирования фото 110 на 120 мм.

Пример гравирования лазерного станка с ЧПУ

Чтобы было комфортно работать на станке. Решил установить конечные выключатели. Отдали мне 2 конечника, не очень хорошего качества но для лазерного гравера достаточно.

После первой установки у меня начались ложные срабатывания для их устроения сделал следующее:

1. Проложил провод от конечников так, что бы он не пересекались с проводами 220 в и не проходили рядом с блоком питания.

2. Припаял на разъемы подключения конечников конденсаторы.

3. Сделал пару витков каждый пары провод вокруг ферромагнитного сердечника.

Подключение кончивиков к ЧПУ

После данный действий ложных срабатываний настало.

Попробовал настроить режим ДОМ. Но у меня постоянно выходит ошибка. Не знаю в чем проблема, буду разбираться

Попробовал настроить режим ДОМ. Но у меня постоянно выходит ошибка.

Еще одна проблема с которой я столкнулся, это нагрев шаговых двигателей при долгой работе. Для устранения нагрева ШД, приклеил радиаторы от компьютера на ось Y и от старого телевизора на ось X. Клеил не на обычный скотч на на термоскотч, который хорошо проводит тепло.

термо скотч

Двигателя перестали нагреваться, даже после 6 часов работы температура двигателей 30-40 градусов. Что меня сильно порадовало.

Радиаторы на шаговом двигателе для охлоджения

Радиатор на ШД

Смотрите видео, там рассказываю более подробно о гравировке картинки на ЧПУ станке и пр.

Начал сборку ЧПУ фрезерного станка скоро выложу видео. Не пропустите!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный спиннер из ненужных вещей http://portal-pk.ru/news/121-samodelnyi-spinner-iz-nenuzhnyh-veshchei.html Константин Portal-PK 2017-09-13T11:04:34+03:00 Делать спиннер я даже не планировал. Все получилось совершенно спонтанно. Разбирали мы с сыном видео магнитофон. Ребенку интересно из чего состоят электронные вещи. В магнитофоне много механических частей, которые перемешаются, переключаются, поднимаются и пр. Когда мы дошли до головки видеомагнитофона, там обнаружили 2 подшипника на оси. Ко мне прешла мысль сделать спиннер. Ребенок поддержал идею.

На изготовление спиннера у меня ушло около 30-40 мин. Качества конечно не очень хорошее, но поиграть пойдет. Тем более спиннер получился уникальный и сделанный из ненужного барахла.

Как я делал самодельный спиннер из ненужных вещей смотрите в видео.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельная Wifi машинка на NodeMCU. Машина делает дрифт http://portal-pk.ru/news/120-samodelnaya-wifi-mashinka-na-nodemcu-mashina-delaet-drift.html Константин Portal-PK 2017-09-12T11:33:39+03:00 В данной статье я расскажу вам про модификацию самодельной Wi-Fi машинки на NodeMCU. Как я сделал из нерабочей машинки на радио управлении, Wi fi машинку. Читайте и смотрите вот тут: Своимируками беспроводная Wifi машинка на NodeMCU и RemoteXY.

Как рассказываю в предыдущей статье, электроника машинки была подключена по вот такой схеме.

Схема подключения самодельной Wi-Fi машинки

И потаилась от 4 батареек формата АА. Так как постоянно покупать батарейки надоело, я решил переделать питание от аккумулятора 18650 . А так как у меня аккумуляторы из старой батареи ноутбука , они плохо держат заряд. По этой причине я решил сделать питание от двух аккумуляторов. Но как показала практика, данные аккумуляторы оказались еще хуже чем я думал. Даже 2 не держат нагрузку и Wi-Fi постоянно отваливался. Как я разбирал батарею от ноутбука смотрите тут. Позднее я разобрал второй батарею от ноутбука. Аккумуляторы были розового цвета. И держат они нагрузку неплохо. Даже один аккумулятор 18650 справлялся с нагрузкой без проблем.


Собрал я машинку на NodeMCU без изменения управляющей программы и был удивлен машинка постоянно дрифтовала, ее разворачивала постоянно. Для дрифта это отлично, но нормально поездить можно только на улице по асфальту. Поэтому я решил переделать управление рулем и управляющую программу.

Модификация самодельной Wi-Fi машинки на NodeMCU. Схема подключения

На схеме выше приведен принцип подключения аккумулятора через повышающий DC-DC преобразователя и контролера заряда. Благодаря данной схеме подключения можно заряжать аккумулятор не вынимая его из машинки, что достаточно удобно и практично.

Также по схеме видно что остался один двигатель и появился сервопривод. Сейчас управление поворотами происходит благодаря сервоприводу.

Скетч для NodeMCU в среде программирования Arduino IDE для приложения RemoteXY выглядит вот так:

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////
// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>
#include <RemoteXY.h>
// настройки соединения 
#define REMOTEXY_WIFI_SSID "PortalPk"
#define REMOTEXY_WIFI_PASSWORD ""
#define REMOTEXY_SERVER_PORT 6377
// конфигурация интерфейса  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,3,0,0,0,25,0,6,5,2,
  5,8,43,13,39,39,10,52,43,43,
  2,3,131,13,12,14,37,10,18,45,
  17,4 };
// структура определяет все переменные вашего интерфейса управления 
struct {
    // input variable
  int8_t joystick_1_x; // =-100..100 координата x положения джойстика 
  int8_t joystick_1_y; // =-100..100 координата y положения джойстика 
  uint8_t select_1; // =0 если переключатель в положении A, =1 если в положении B, =2 если в положении C, ... 
    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////
/* определяем пины управления правым мотором */
#define MOTOR_RIGHT_UP D1
#define MOTOR_RIGHT_DN D2
/* определяем пины управления левым мотором 
#define MOTOR_LEFT_UP D3
#define MOTOR_LEFT_DN D4*/
#include <Servo.h>  
#define PIN_SERVO D4
Servo servo; 
//светодиоды
#define PIN_LED_STOP D0
#define PIN_LED_5 D5
#define PIN_LED_6 D6
#define PIN_LED_7 D7
#define PIN_LED_8 D8
// переменные 
boolean status = true; // флаг, что активна левая
boolean open = true; // флаг, включения
int interval[6]={50, 120, 90, 240, 150, 50};    // интервал включения/выключения LED
long prestro1Millis = 0;        // до мигания ( в целом переменная времени)
int x=0;
void setup() 
{
  RemoteXY_Init (); 
    pinMode (PIN_LED_STOP, OUTPUT);
    pinMode (PIN_LED_5, OUTPUT);
    pinMode (PIN_LED_6, OUTPUT);
    pinMode (PIN_LED_7, OUTPUT);
    pinMode (PIN_LED_8, OUTPUT);
   servo.attach(PIN_SERVO);
}
void loop() 
{ 
  RemoteXY_Handler ();
 //  Положение селектора 0 и 2   ///   
  if (RemoteXY.select_1 == 2)
      {
          Migalka ();// Мигалка 
      } 
   if (RemoteXY.select_1 == 1)
      {
          digitalWrite(PIN_LED_STOP, HIGH); //
          digitalWrite(PIN_LED_5, HIGH); // 
          digitalWrite(PIN_LED_6, HIGH); // 
      }   
   if (RemoteXY.select_1 == 0)
      {
          digitalWrite(PIN_LED_STOP, LOW); //
          digitalWrite(PIN_LED_5, LOW); // 
          digitalWrite(PIN_LED_6, LOW); // 
          digitalWrite(PIN_LED_7,  LOW); // 
          digitalWrite(PIN_LED_8, LOW); // 
      } 
 //END Положение селектора 0 и 2 ////
 /* управляем мотором */  
 int y = RemoteXY.joystick_1_y;
   if (y>100) y=100;
  if (y<-100) y=-100;
  if (y>20) {
    analogWrite(MOTOR_RIGHT_UP, y*10.23);
    digitalWrite(MOTOR_RIGHT_DN, LOW);   
  }
  else if (y<-20) {
    digitalWrite(MOTOR_RIGHT_UP, LOW);
    analogWrite(MOTOR_RIGHT_DN, (-y)*10.23);
  }
  else {
    digitalWrite(MOTOR_RIGHT_UP, LOW);
    digitalWrite(MOTOR_RIGHT_DN, LOW);
  }
  int x = RemoteXY.joystick_1_x;
  if (x>100) x=100;
  if (x<-100) x=-100;
  if (x>10) {
    servo.writeMicroseconds(x*2.5+1600);  
  }
  else if (x<-10) {
    servo.writeMicroseconds(x*2.5+1600); 
  }
  else {
    servo.writeMicroseconds(1600); 
  }
}
void Migalka () // Мигалка 
{
 unsigned long curstro1Millis = millis();  // устанавливаем время в сейчас
  if ((curstro1Millis - prestro1Millis) > interval[x]) // проверяем интервал
    {
      if (open) // если true
        digitalWrite(status ? PIN_LED_7 : PIN_LED_8, HIGH); //
      else // иначе
       digitalWrite(status ? PIN_LED_7 : PIN_LED_8, LOW); // 
       x++;
      if (x == 6) // если последний проход по циклу
      {
        status = !status; // передаем слово (меняем текущий пин) меняем false на true и наоборот;
        x=0;
      }
      open = !open; //меняем false на true и наоборот 
    prestro1Millis = curstro1Millis;
  }
}

Повторить данную машинку может каждый желающий. Вам не нужно писать код или писать приложения для Android. Достаточно загрузить прошивку в NodeMCU. И на свое устройства установить приложение RemoteXY. Подключиться к Wi-fi сети с имением PortalPK. И ваше устройство станет пультом для машинки.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Мини-дрель своими руками. Версия 2 http://portal-pk.ru/news/119-mini-drel-svoimi-rukami-versiya-2.html Константин Portal-PK 2017-09-11T12:23:45+03:00 У меня в очередной раз сломался гравер. Для его замены сделана мини дрель. Как его делал я рассказываю в статье: Самодельная мини дрель гравер. После того как я сделал мини дрель-гравер. Мне написали немало комментариев, о том что я сделал не правильно и что можно использовать для более качественного изготовления данного инструмента.

В связи с тем что у меня скопились материалы которые можно использовать для изготовления боле качественной мини-дрели. Я принял решения сделать мини дрель версии 2.

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

Самодельная мини-дрель

Также прикупил новую цангу и набор фрез. В видео можете посмотреть как я гравирую фрезами с подошью новой мини дрели-гравера. Прошу сильно не критиковать не не специалист по гравированию!

Конечно можно купит готовую мини дрель и не мучатся. Как поступить решать вам.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный лазерный гравировальный станок с ЧПУ. Модернизация http://portal-pk.ru/news/118-samodelnyi-lazernyi-gravirovalnyi-stanok-s-chpu.html Константин Portal-PK 2017-08-08T09:05:35+03:00 Подключил электроники на свой гравировальный станок . Сделал пару пробных работ и понял что нужно произвести доработки. С небольшими недочетами можно работать но вот с дребезгом по оси X, нужно что то срочно делать.

Для устроения данной проблемы я выполнил ряд изменений в конструкции ЧПУ станка.

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

первых заменил ведущий вал на более прямой и более жесткий

Крепления для лазерного модуля сделал из железа загнутого под 90 градусов.

Крепления для лазерного модуля сделал из железа загнутого под 90 градусов

Кроме этого переделал ответную часть для ведущего винта. Зажал гайку между двух фанерок 10мм. Сделал две такие заготовки. Закрепил их на расстоянии в 20-30 мм друг от друга. Это уменьшило хождение вала.

Кроме этого переделал ответную часть для ведущего винта

Переделал панель управления гравировальным лазерным станком . Добавил кнопку Отмена и установил выключатель для лазера. Выключатель нужен для удобства роботы. Лазер мигает при перезагрузку контролера и не отключается при нажатии кнопки пауза.

панель управления гравировальным лазерным станком


Тестовое гравирование показало что линии по оси X стали прямыми.

Сейчас планирую установить на станок конечные включатели.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Программа Arduino IDE бесплатно для Windows, Mac OS, linux. Прошиваем Arduino http://portal-pk.ru/news/117-programma-arduino-ide-besplatno-dlya-windows-mac-os-linux-proshivaem.html Константин Portal-PK 2017-08-02T11:36:46+03:00 В связи с постоянными вопросами по софту для Arduino и ЧПУ . Решил снять несколько видео роликов посвященных данной теме.

Скачать Arduino IDE можно на официальном сайте совершенно бесплатная для различных операционных систем: Windows, Mac OS, linux.

Скачать Arduino IDE можно на официальном сайте

Arduino IDE можно пользоваться без установки на компьютер с Windows необходимо скачать архив в формате .zip.

Если у вас китайская версия Arduino и операционная система Windows вам необходимо поставить дополнительный драйвер ch340 driver, в противном случаи ваша Arduino не определиться компьютером.

Arduino и операционная система Windows вам необходимо поставить дополнительный драйвер ch340 driver

Скачать драйвер CH340G

Установка драйвера

  1. Скачайте драйвер по ссылкам выше.
  2. Распакуйте архив
  3. Запустите исполнительный файл CH341SER.EXE
  4. В открывшемся окне нажмите кнопку Install
  5. На этом установка завершена

В других операционных системах такой проблемы нет. Можно подключать и перепрошивать.

Иногда в Linux необходимо дать право для пользование портом.

Посмотрим к какому порту подключена Arduino.

dmesg

Видим похожую строку.

cdc_acm 3-2:1.0: ttyACM0: USB ACM device

Это значит что Arduino находится ttyACM0, делаем порт доступным всем пользователям.

$ sudo usermod -a -G dialout <username>
$ sudo chmod a+rw /dev/ttyACM0

Все, теперь заходим в Arduino IDE, переходим Инструменты/Порт видим нашу подключенную Arduino.

Arduino IDE


Как загрузить свой первый код в Arduino рассказываю в видео.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Установка электроники на лазерный гравировальный станок с ЧПУ http://portal-pk.ru/news/116-ustanovka-elektroniki-na-lazernyi-gravirovalnyi.html Константин Portal-PK 2017-07-27T08:09:21+03:00 Механическая часть лазерного гравировального станка с ЧПУ готова. Сейчас необходимо установить электронику. В качестве управляющей электроники буду использовать Arduino UNO + CNC shield v3. Почему мой выбор пал на данные комплектующие рассказываю в статье Преимущества и недостатки L298, почему я перехожу на СNC shield + A4988 . Описание платы расширения CNC shield v3 можете посмотреть тут. Как настроить драйвера читайте в статье Настройка драйвера A4988. Первый запуск шаговых двигателей .

Ардуинку с шилдом установил внутри корпуса станка. Блок питания снаружи. После чего проложил провода от двигателей и закрепил информационный провод для Arduino UNO.

Ардуинку с шилдом установил внутри корпуса станка.

В корпусе сделал отверстия и закрепил кнопки стоп, пауза и пуск.

В корпусе сделал отверстия и закрепил кнопки стоп, пауза и пуск.

Провода для кнопок проложил по внутренней стенке корпуса станка ЧПУ.

Провода для кнопок проложил по внутренней стенке корпуса станка ЧПУ.

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

Провода идущие к лазерному модулю поднял и сделал механизм

Конечные выключатели не установил. Устанавливать буду в следующем видео.

Эта первая гравировка станка.

первая гравировка станка

Как вам?

Также произвел некоторые доработки станка. Более подробнее смотрите в видео.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный лазерный гравер с ЧПУ. Делаем ось X http://portal-pk.ru/news/115-samodelnyi-lazernyi-graver-s-chpu-delaem-os-x.html Константин Portal-PK 2017-07-17T08:02:42+03:00 Продолжаю собирать лазерный гравер с ЧПУ. В предыдущей статья я рассказал как собрал ось Y. В данной статья расскажу как на основание сделанной в предыдущей статья сделать ось Y CNC станка.

Из того же мебельного ламината, что и в при изготовлении основания станка ЧПУ, делаю заготовки для оси X. Врезаю подшипники и матирую ведущий вал. По аналогии делаю ответную часть для перемещения каретки станка. Направляющие все также использую мебельные. Закрепил небольшой прямоугольник из термоплиты на направляющие и к ответной части ведущего вала. Ось X готова.

Установил лазерный модуль. Запустил тестовое гравирования и выявил кучу недостатков:

1. Вал при монтаже погнул. При вращения вала каретка колеблется и гравирование по оси X происходит неровное.

2. Подшипники нудно было устанавливать с снаружи, а не внутри. Если сильно затянуть фиксирующие гайки вал выгибает.

3. Вал М8 очень хлипкий.

В Следующем видео буду устранять недочеты и монтировать электронику. Не пропустите!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Самодельный ЧПУ станок. Делаем ось Y ЧПУ лазерного станка http://portal-pk.ru/news/114-samodelnyi-chpu-stanok-delaem-os-y-chpu-lazernogo.html Константин Portal-PK 2017-07-11T11:54:32+03:00 Переделку станка ЧПУ начал с изготовление оси Y. Изначально ось Y не хотел переделывать, а взять основание от старого станка. В связи с тем что, рабочее поле старого основание было око 400 мм. Решил его увеличить до 600 мм.

Основание станка ЧПУ сделал из мебельного ламината, который остался у меня от старого шкафа. Направляющи взял мебельные дленной 600 мм . Для того чтобы увеличить рабочий ход направляющих пришлось убрать ограничитель для средней части направляющей.

Передачу сделал винтовую из шпильки М10. Для того чтобы стол перемешался с наименьшим люфтом, ответную часть для ходового вала сделал из двух гаек зажатым между 3 фанерками. Что у меня получилось смотрите в видео.

Двигатель взял EM-181. Данный шаговый двигатель с легкостью перемещает стол с заготовкой. Данный факт меня очень порадовал.

Двигатель я подключил к CNC shield v3. Обзор шилда мо жете посмотреть в предыдущей статье: Плата расширения для Arduino UNO, CNC shield v3 и драйверовA4988

Также рекомендую посмотреть Настройка драйвера A4988. Первый запуск шаговых двигателей

В следующей статье расскажу как собирал ось X самодельного ЧПУ станка. Не пропустите!


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!


]]>
Настройка драйвера A4988. Первый запуск шаговых двигателей http://portal-pk.ru/news/113-nastroika-draivera-a4988-pervyi-zapusk-shagovyh.html Константин Portal-PK 2017-06-29T12:41:51+03:00 Продолжаю сборку станка ЧПУ. Шаговые двигателя я уже подобрал. Для проверки электроники, собрал тестовое подключение на столе.

Более подробное описание драйверов A4988 читайте на моем втором сайте ЧПУ технологии (CNC-tex.ru).

Сперва я подключил к CNC shield v3 шаговые двигателя:

  1. 17HS4401 - ток 1,7A
  2. EM-181 - ток 1,2A
  3. EM-142- значение максимального тока не нашел.

Двигателя выбраны сейчас нам нужно настроить рабочий ток драйверов A4988 для каждого шагового двигателя. Это можно сделать двумя способами:

1. Подключить двигатель в полношаговом режиме и замерить ток на одной обмотки. Он должен быть 70% от номинального тока двигателя. Т.е. для 17HS4401 1,7*0,7= 1,19 А

2. Рассчитать значение Vref — напряжение на переменном резисторе расположенном на драйвере А4988.


A4988 изменяется от номинала токочувствительных резисторов

Формула Vref для A4988 изменяется от номинала токочувствительных резисторов. Это два черных прямоугольника на плате драйвера. Обычно подписаны R050 или R100.

Vref = Imax * 8 * (RS)

Imax — ток двигателя;

RS — сопротивление резистора. В моем случае RS = 0,100.
Для 17HS4401 Vref = 1,7 * 8 * 0,100 = 1,36 В.

В связи с тем что рабочий ток двигателя равен 70% от тока удержания. Полученное значение нам нужно умножить на 0,7. В противном случае двигателя в режиме удержания будут сильно греться.

Для 17HS4401 Vref ист. = 1,36*0,7 = 0,952 В.

Аналогично рассчитываю значения для EM-181

Vref = 1,2 * 8 * 0,100 = 0,96 В

Vrefист. = 0,96*0,7 = 0 ,672 В.

Так как я не смог найти datasheets для ЕМ-142. Для расчетов предложил, что ток на обмотку данного двигателя составляет 0,6 А. Если двигатель будит издавать гул сильнее обычного значит ток превышает максимальное значение. Его нужно понижать. Так как я взял ток обмотки. При расчете Vref ист. Не нужно умножать на 0,7, как я говорил выше ток одной обмотки составляет 70% от номинального. Расчет будет вот таким:

Vrefист. = 0,6 * 8 * 0,100 = 0,48 В.

По моим ощущениям я угадал с током двигателя ЕМ-142. Останется рассчитать сколько шагов он делает для совершения одного оборота. Об этом расскажу в следующей статье.

В видео подключил кнопки «Пауза», «Продолжить», «Аварийная остановка» . Подключил на пины шпинделя светодиод. И протестировал работу. Так же установил один конечный выключатель. Все работает. Если у вас возникли вопросу что куда подключается к CNC shield v3, читайте статью: Плата расширения для Arduino UNO, CNC shield v3 и драйверов A4988

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Плата расширения для Arduino UNO, CNC shield v3 и драйверов A4988 http://portal-pk.ru/news/112-plata-rasshireniya-dlya-arduino-uno--cnc-shield-v3-i-draiverov-a4988.html Константин Portal-PK 2017-06-22T11:35:02+03:00 Не смотря на то, что в интернете много информации по CNC shield v3 и драйвера A4988 для ЧПУ станка. Я решил собрать все необходимо по данным железкам.

Обновленную статью про CNC shield v3 читайте на моем втором сайте ЧПУ технологии (CNC-tex.ru).

CNC shield v3 и драйвера A4988 можно использовать для создания CNC машины (ЧПУ станки) :

  • фрезерный станок ;
  • 3D-принтер;
  • лазерный гравер .

Что же из себя представляет CNC shield v3:

CNC shield v3

1 – Кнопка сброса.
2 – Колодки контактов для подключения внешних драйверов двигателей.
3 – Ось A может дублировать одну из осей X, Y, Z с помощью дополнительного двигателя и драйвера или работать автономно (например ось A может быть использована для двигателя экструдера, в случае 3D-принтера). Эти колодки контактов служат для настройки оси A. Для дублирования осей нужно установить джамперы на эти колодки следующим образом:

колодки контактов служат для настройки оси A

колодки контактов служат для настройки оси A

колодки контактов служат для настройки оси A

колодки контактов служат для настройки оси A

Для автономной работы оси A. Колодка D12 замыкается для возможности управления шагом, колодка D13 замыкается для возможности управления направлением вращения. Направление вращение двигателя меняется путем смены контактов двигателя или изменение маски в прошивки.
4 – Разъем питания. На плату необходимо подавать питание 12 – 36 В.
5 – Возле каждого слота для подключения драйвера двигателей имеется колодка управления микрошагом двигателя. В зависимости от выставленных перемычек вы можете добиться вплоть до 1/32 шага на драйверах DRV8825 и 1/16 шага на драйверах A4988 . Установки джамперов для управления шагом или микрошагом для драйвера A4988 показаны в таблице.

MS1

MS2

MS3

Разрешение микрошага

Низкий

Низкий

Низкий

Полный шаг

Высокий

Низкий

Низкий

1/2 шага

Низкий

Высокий

Низкий

1/4 шага

Высокий

Высокий

Низкий

1/8 шага

Высокий

Высокий

Высокий

1/16 шага



6 – Колодки для подключения биполярного шагового двигателя (на 4 провода).

Как подобрать шаговый двигатель и как подключить шаговик с выводами больше 4 расазываю вот в предыдущей статье: Как подобрать шаговый двигатель для станка ЧПУ. ШД из принтера
7 – Колодка контактов для интерфейсов UART и I2C:

  • Контакты UART: RX, TX, 5V, 3V3;
  • Контакты I2C: SCL, SDA, GND, RST.

8 – Колодка контактов для подключения 3 концевиков.
9 – Колодка для подключения контактов:

  • Включения шпинделя (SpnEn);
  • Направления шпинделя (SpnDir);
  • Включения подачи охлаждения (CoolEn);

10 – Колодка для подключения контактов:

Внимание!!! С прошивки GBRL 9.0i были поменяны местами Z-Max (D12) и Spn_EN (D11).

С прошивки GBRL 9.0i были поменяны местами Z-Max (D12) и Spn_EN (D11)

Сейчас шпиндель подключается к D11, который является ШИМ портом. Для управлять оборотами шпинделя через ШИМ.

Теперь, если вы желаете подключить концевик Z_Max, то его необходимо подключить в Spn_EN, а включение шпинделя необходимо подключать в Z+.


Характеристики драйвера A4988:

Характеристики драйвера A4988

  • напряжения питания: от 8 до 35 В;
  • возможность установки шага: от 1 до 1/16 от максимального шага;
  • напряжение логики: 3-5.5 В;
  • защита от перегрева;
  • максимальный ток на фазу: 1 А без радиатора, 2 А с радиатором;
  • расстояние между рядами ножек: 12 мм;
  • размер платы: 20 х 15 мм;
  • габариты драйвера: 20 х 15 х 10 мм;
  • габариты радиатора: 9 х 5 х 9 мм;
  • вес с радиатором: 3 г;
  • вес без радиатора: 2 г.


Краткое описание драйвера A4988

Плата создана на базе микросхемы A4988 компании Allegro - драйвера биполярного шагового двигателя. Особенностями A4988 являются регулируемый ток, защита от перегрузки и перегрева, драйвер также имеет пять вариантов микрошага (вплоть до 1/16-шага). Он работает от напряжения 8 - 35 В и может обеспечить ток до 1 А на фазу без радиатора и дополнительного охлаждения (дополнительное охлаждение необходимо при подаче тока в 2 A на каждую обмотку).

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


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Как подобрать шаговый двигатель для станка ЧПУ. ШД из принтера. http://portal-pk.ru/news/111-kak-podobrat--shagovyi-dvigatel-dlya-stanka-chpu-shd-iz.html Константин Portal-PK 2017-06-15T09:35:56+03:00 Любая разработка начинается с выбора компонентов. При разработке ЧПУ станка очень важно правильно подобрать шаговые двигателя . Если у вас есть деньги на покупку новых двигателей, в таком случае нужно определить рабочее напряжения и мощность двигателя. Я купил себе для второго ЧПУ станка шаговые двигателя вот такие: Nema17 1.7 А.

Если у вас нет достаточно денег или вы просто пробуете свои силы в данной сфере. То вы скорее всего будите использовать двигателя из принтеров . Это самый недорогой вариант. Но тут Вы столкнетесь с рядом проблем. У двигателя может быть 4, 5, 6, 8 — проводов для подключения. Как их подключить к драйверам L298n и СNC shield.

Давайте разберемся по порядку. Какие шаговые двигателя бывают. Если вы видите четное количество выводов это биполярный шаговый двигатель . Расположение обмотки для данного двигателя вот такое.

биполярный шаговый двигатель

Если у двигателя 5 выводов, это униполярный шаговый двигатель . Вот так выгладит его схема.

униполярный шаговый двигатель


Наши драйвера рассчитаны на двигателя с 4 выводами . Как быть? Как их подключить?

Биполярные ШД с 6-ю выводами подключаются к драйверу двумя способами:

биполярный шаговый двигатель с 6 выводами подключение по 4

В данном случае ШД имеет момент в 1.4 раза больше. Момент более стабилен на низких частотах.

При таком типе подключения нужно уменьшить ток, подаваемый на обмотки двигателя в √2 раз. Например, если номинальный рабочий ток двигателя составляет 2 А, то при последовательном включении обмоток требуемый ток - 1.4 А, то есть в 1.4 раза меньше.

Это можно легко понять из следующих рассуждений.

Номинальный рабочий ток, указанный в каталоге, рассчитан на сопротивление одной обмотки (R - именно оно приведено в каталоге). При последовательном включении обмоток сопротивление объединенной обмотки возрастает в два раза (2R).

Потребляемая мощность ШД — I*2 * R

При последовательном включении обмоток потребляемая мощность становится Iпосл.*2 * 2 * R

Потребляемая мощность не зависит от типа подключения, поэтому I*2 * R = Iпосл.*2 * 2* R, откуда

Iпосл.= I/ √2, т.е.

Iпосл.= 0.707 *I.

Так как крутящий момент двигателя прямо пропорционален величине магнитного поля, создаваемого обмотками статора, то он возрастает с увеличением числа витков обмотки и убывает с уменьшением ток, пропускаемого через обмотки. Но так как ток уменьшился в √2 раз, а число витков обмотки увеличилось в 2 раза, то крутящий момент возрастет в √2 раз.

Tпосл. = 1.4 * T.

Биполярный двигатель шаговый 6 проводов подключение


Во втором случае момент более стабилен на высоких частотах. Параметры ШД при таком подключении соответствуют заявленным в datasheet, (момент, ток), момент более стабилен на высоких частотах .

Униполярный шаговый двигатель можно переделать.

Переделываем униполярный шаговый двигатель в биполярный

Для этого нужно разобрать шаговый двигатель и перерезать провод соединяющий центр обмоток. И при подключении общий провод подключать ни куда не нужно.

 разобрать шаговый двигатель и перерезать провод соединяющий центр обмоток

В итоге у нас получается биполярный двигатель с 4 выводами.

Шаговые двигателя с 8-ю выводами можно подключить тремя способами.

8 проводной шаговый двигатель способы подключения

Подключение А - шаговик работает с характеристиками, заявленными в описании (момент, ток), момент более стабилен на высоких частотах.

Подключение B – момент ↑1.4 раза, момент более стабилен на низких частотах (относительно А).

Подключение C – момент ↑1.96 раза, момент более стабилен на высоких частотах (относительно А).

Вот мы и решили проблему подключения шаговых двигателей. Но не все двигателя у нас заработают. Нужно еще определить рабочее напряжение двигателей. Самый правильный способ это найти datasheet. Так все параметры есть. Но не ко все двигателя из принтера можно найти datasheet. В таких случаях я пользуюсь вот такой таблицой.

Сопротивление обмотки, Ом

Рабочее напряжение, В

5-15

5

30-60

12

60-120

24

Не знаю на сколько данная таблица верная но у меня все сходиться и работает как надо.

Двигателя я выбираю чтобы рабочее напряжение было меньше или равно напряжению источника питания. Для двигателей рассчитанных на меньшее напряжения необходимо настроить ток ниже.

Настраивать СNC shield будем в следующей статье. Не пропустите!

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Преимущества и недостатки L298, почему я перехожу на СNC shield + A4988 http://portal-pk.ru/news/110-preimushchestva-i-nedostatki-draiverov-l298-i-pochemu-ya.html Константин Portal-PK 2017-06-09T08:06:57+03:00 Продолжаю тему самодельный ЧПУ станок из принтеров за 3000 руб. И сегодня расскажу почему я решил перейти с драйверов L298 на драйвера A4988 .

Дело в том что для драйверов L298 нет стабильных библиотек для работы с G-Code. А прошивка + программа работающая с изображениями не очень стабильна и не подходит для фрезерования точных деталей. Поэтому появилась необходимость перейти на G-Code . Для драйверов L298 нашел библиотеку uCNC controller. Перемещение по осям работает. Но данная библиотека не очень хорошо развита, есть глюки и не все функции работают.

После попытки научить станок понимать G-Code. Понял что проще поменять электронику. Тем более СNC shield v3 + A4988 стоят всего 300 руб. Эта стоимость приемлема и общая стоимость ЧПУ станка не превысит 3000 руб .

Почему же я изначально выбрал драйвера L298. Данный драйвер подключаться к одному двигателю, соответственно можно использовать двигателя с различным рабочим напряжением. Этот фактор актуален если вы собираете самодельный станок из принтеров. Потому что даже в одном принтере двигателя рассчитаны на разное напряжение.

На этом преимущества драйверов L298n заканчиваются.

У вас наверное возник вопрос. Если рабочее напряжения двигателей разное как в током случае использовать СNC shield v3 с драйверами A4988? У СNC shield один клеммник для подключения 12- 36 вольт. Дело в том что драйвера для для СNC shield имеют подстроечны резистор которым можно настроить рабочий ток. Выбираем двигателя у которых рабочее напряжения близкое по значению. Но не превышает напряжения которое вы подадите на СNC shield.

Более подробнее по подбору шагового двигателя расскажу в следующей статье.

Еще одно преимущество СNC shield v3 в том что на нем уже есть вывода для подключения конечных выключателей, кнопки аварийного подключения, кнопки старт и пауза. И прочие возможности которые нельзя реализовать используя драйвера L298n.

Описание всех возможностей СNC shield v3 сделаю в отдельной статье.


Спасибо за внимание!

]]>
Самодельная мини дрель гравер http://portal-pk.ru/news/109-samodelnaya-mini-drel-graver.html Константин Portal-PK 2017-06-02T09:09:49+03:00 Когда делаешь самоделки из подручных средств часто приходиться шлифовать, отрезать, вырезать, гравировать, сверлить, полировать и пр. Для выполнения данной работы я использовал электрический гравер. Но при переделки галогенового прожектора в светодиодный прожектор, мой гравер сломался . Отнес я его в ремонт, мне сказали что ремонтировать будут не меньше двух недель.

Решил сделать замену граверу из того что было под рукой. Двигатель взял от автомобильного компрессора. Корпус сделал из куска пластика. Установил переключатель и разъем для подключения источника питания. После того как я выложил видео про то как я сделал самодельный гравер на канале Arduino Portal-PK мне уже пишут подсказки из чего лучше нужно было сделать корпус. Но я сделал из того что было под рукой, тем более это у меня временная замена.

Получилось не очень красиво но достаточно функционально и удобно.

Процесс сборки самодельной мини дрели гравер смотрите в видео ролике:

Как я переделывал Галогеновый прожектор в светодиодный читайте тут или смотрите на канале Arduino Portal-PK.


Спасибо! До встречи в следующем проекте!

]]>
Arduino часы - Видео 4. Делаем корпус и собираем Arduino часы http://portal-pk.ru/news/108-arduino-chasy---video-4-delaem-korpus-i-sobiraem-arduino-chasy.html Константин Portal-PK 2017-05-26T09:32:41+03:00 Где-то месяца 2 назад начал собирать часы на Arduino . В планах часы должны были выводить время на семисегментный индикатор , дублировать время отображая с помощью 28 светодиодов . Также планировал сделать умную систему регулирования яркости светодиодов и семи сегментного индикатора . В качестве светочувствительного датчика планировал использовать фото резистор. Часы по задумке должны были выводить температуру и влажность на семи сегментный индикатор . Настройка времени производиться с помощью пульта дистанционного управления.

Все что запланировал, я сделал кроме регулирования яркости светодиодов и семи сегментного индикатора. Также сделал вывод дня и месяца при нажатии на кнопку пульта ДУ.

Предыдущие этапы сборки программирования Arduino часов:

1. Светодиодные часы на Arduino Паяем 74HC595N для управления LED

2. Подключаем к Arduino семисегментный индикатор TM1637, датчик DHT11

3. Подключаем к Arduino DS3231 модуль и ИК приемник

Процесс изготовления корпуса и установка электроники в корпус смотрит в видео.

После сборки проверил ток. При максимальной яркости светодиодов рабочий ток 250-280 мА . При уменьшении яркости светодиодов до комфортного состояния, и глаза не режет и видно отлично как ночью так и днем. В данном режиме работы ток понизился до 70-80 мА .

Исходя из этих показании я принял решения сделать питание от сети 220 В. Для этого я использовал зарядное устройство от телефона.

Скетч Выкладывать к данному видео не буду, так как его не сложно собрать из предыдущих видео. Если у вас возникли трудности вы можете написать в группе В контакте или на Фейсбуке.


Спасибо! И до встречи в следующем проекте.

]]>
Переделка галогенового прожектора в LED прожектор http://portal-pk.ru/news/107-peredelka-galogenovogo-prozhektora-v-led-prozhektor.html Константин Portal-PK 2017-05-24T07:57:42+03:00 Попросил меня брат переделать его галогеновый прожектор . Так как 300-500 Вт., это очень большое потребления и греется очень сильно. А так как прожектор используется на стройке, это еще и не безопасно.

Купил я в Китае плату для светодиодного прожектора на 30 Вт . Покупал за 150 руб вот тут: http://ali.pub/1hg4au. Распаковку посылки можно посмотреть на моем канале: Arduino Portal-PK.

Купил винтики с гайками на 3 мм и термопасту. Остальное компоненты использовал из того что у меня лежит без дела:

1. Алюминиевый радиатор от компьютера

2. Консервные банки

Возможно вам будет полезна информация по кодированию от алкоголя

Сборка довольно простая. Зачистил от краски поверхность где радиатор соприкоснуться с корпусам. Нанес термопасту. Установил радиатор, него установил плату светодиодного прожектора. Просверлим в корпусе отверстия 3 мм. И с помощью винтов закрепил LED плату. Из консервных банок вырезал пластинки и установил как отражатели. Зачислит заднюю стеку корпуса от краски для максимального отвода тепла, и сделал отверстия на против радиатора.

Переделка галогенового прожектора в LED светодиодный прожектор обошлась мен в 250 рублей.

Более подробно о переделке продектора можете посмотреть в видео.

Смотре другие мои проекты на канале Arduino Portal-PK.

]]>
detachInterrupt() http://portal-pk.ru/news/106-detachinterrupt.html Константин Portal-PK 2017-05-16T11:43:49+03:00 Описание

Запрещает заданное прерывание.

Синтаксис

detachInterrupt(interrupt)
detachInterrupt(pin)     //только для Arduino Due 

Параметры

  • interrupt: номер прерывания, которое необходимо запретить (подробнее см. attachInterrupt()).
  • pin: номер вывода, соответствующее прерывание которого необходимо запретить (только для Arduino Due)
]]>
attachInterrupt() http://portal-pk.ru/news/105-attachinterrupt.html Константин Portal-PK 2017-05-16T11:40:41+03:00 Описание

Задает функцию, которую необходимо вызвать при возникновении внешнего прерывания. Заменяет предыдущую функцию, если таковая была ранее ассоциирована с прерыванием. В большинстве плат Ардуино существует два внешних прерывания: номер 0 (цифровой вывод 2) и 1 (цифровой вывод 3). Номера выводов для внешних прерываний, доступные в тех или иных платах Ардуино, приведены в таблице ниже:

Плата int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1 7
Due (см. ниже)

Плата Arduino Due предоставляет больше возможностей по работе с прерываниями, поскольку позволяют ассоциировать функцию-обработчик прерывания с любым из доступных выводов. При этом в функции attachInterrupt() можно непосредственно указывать номер вывода.

Синтаксис

attachInterrupt(interrupt, function, mode)
attachInterrupt(pin, function, mode)     // только для Arduino Due

Параметры

interrupt: номер прерывания (int)
pin: номер вывода (только для Arduino Due)
function: функция, которую необходимо вызвать при возникновении прерывания; эта функция должна быть без параметров и не возвращать никаких значений. Такую функцию иногда называют обработчиком прерывания.
mode:

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

  • LOW - прерывание будет срабатывать всякий раз, когда на выводе присутствует низкий уровень сигнала
  • CHANGE - прерывание будет срабатывать всякий раз, когда меняется состояние вывода
  • RISING - прерывание сработает, когда состояние вывода изменится с низкого уровня на высокий
  • FALLING - прерывание сработает, когда состояние вывода изменится с высокого уровня на низкий.

В Arduino Due доступно еще одно значение:

  • HIGH - прерывание будет срабатывать всякий раз, когда на выводе присутствует высокий уровень сигнала (только для Arduino Due).

Возвращаемые значения

нет

Примечание

Внутри функции-обработчика прерывания функция delay() не будет работать; значения, возвращаемые функцией millis(), не будут увеличиваться. Также будут потеряны данные, полученные по последовательному интерфейсу во время выполнения обработчика прерывания. Любые переменные, которые изменяются внутри функции обработчика должны быть объявлены как volatile.

Использование прерываний

Прерывания могут использоваться для того, чтобы заставить микроконтроллер выполнять определенные участки программы автоматически и позволяют решить проблемы с синхронизацией. Типичными задачами, требующими использования прерываний, являются считывание сигнала энкодера (датчика вращения) либо мониторинг воздействий пользователя.

В программе, от которой требуется постоянно обрабатывать сигнал от датчика вращения (не пропуская при этом ни единого импульса), очень сложно реализовать еще какую-либо функциональность помимо опроса. Это объясняется тем, что для своевременной обработки поступающих импульсов, программа должна постоянно опрашивать выводы, к которым подключен энкодер. При работе с другими типами датчиков часто требуется подобный динамический интерфейс: например, при опросе звукового датчика с целью различить щелчок, или при работе с инфракрасным щелевым датчиком (фото-прерывателем) для распознавания момента броска монеты. Во всех этих примерах использование прерываний позволит разгрузить микроконтроллер для выполнения другой работы, при этом не теряя контроль над поступающими сигналами.

Пример

int pin = 13;
volatile int state = LOW;
void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}
void loop()
{
  digitalWrite(pin, state);
}
void blink()
{
  state = !state;
}
]]>
random() http://portal-pk.ru/news/104-random.html Константин Portal-PK 2017-05-16T09:52:53+03:00 Описание

Функция random() генерирует псевдо-случайные числа.

Синтаксис

random(max)
random(min, max)

Параметры

min - нижняя граница случайной величины, включительно (необязательный параметр).

max - верхняя граница случайной величины, не включительно.

Возвращаемые значения

случайное число в диапазоне от min до max-1 (long)

Примечание

Если при циклическом использовании функции random() важно получать последовательность различных случайных чисел, то для инициализации генератора случайных чисел используйте функцию randomSeed() с параметром, представляющим собой в определенной степени случайную величину. Таким параметром может быть, например, величина напряжения, считанная функцией analogRead() с не подсоединенного вывода.

Изредка требуется и обратное - использовать точно повторяющиеся последовательности псевдо-случайных чисел. Для этого перед началом генерирования последовательности случайных чисел необходимо вызвать функцию randomSeed() с параметром, представляющим собой фиксированное число.

Пример

long randNumber;
 
void setup(){
  Serial.begin(9600);
 
  // если аналоговый вход 0 ни к чему не подсоединен, то произвольный аналоговый
  // шум на нем обеспечит разные исходные числа, передаваемые функции randomSeed()
  // при каждом запуске программы. Впоследствии это позволит функции random 
  // генерировать разные значения.
  randomSeed(analogRead(0));
}
 
void loop() {
  // выводим случайное число в диапазоне от 0 до 299
  randNumber = random(300);
  Serial.println(randNumber);  
 
  // выводим случайное число в диапазоне от 10 до 19
  randNumber = random(10, 20);
  Serial.println(randNumber);
 
  delay(50);
}
]]>
randomSeed(seed) http://portal-pk.ru/news/103-randomseedseed.html Константин Portal-PK 2017-05-16T09:51:00+03:00 Описание

Функция randomSeed() инициализирует генератор псевдо-случайных чисел, запуская его с произвольной точки последовательности случайных чисел. Несмотря на то, что эта последовательность состоит из очень большого количества случайных чисел, она всегда одна и та же.

Если при циклическом использовании функции random() важно получать последовательность различных случайных чисел, то для инициализации генератора случайных чисел используйте функцию randomSeed() с параметром, представляющим собой в определенной степени случайную величину. Таким параметром может быть, например, величина напряжения, считанная функцией analogRead() с неподсоединенного вывода.

Изредка требуется и обратное - использовать точно повторяющиеся последовательности псевдо-случайных чисел. Для этого перед началом генерирования последовательности случайных чисел необходимо вызвать функцию randomSeed() с параметром, представляющим собой фиксированное число.

Параметры

long, int - число для генерирования начального значения.

Возвращаемые значения

нет

Пример

long randNumber;
 
void setup(){
  Serial.begin(9600);
  randomSeed(analogRead(0));
}
 
void loop(){
  randNumber = random(300);
  Serial.println(randNumber);
 
  delay(50);
}
]]>
tan(rad) http://portal-pk.ru/news/102-tanrad.html Константин Portal-PK 2017-05-16T09:13:32+03:00 Описание

Вычисляет тангенс угла (в радианах). Результат лежит в пределах от минус бесконечности до бесконечности.

Параметры

rad: угол в радианах (float)

Возвращаемые значения

тангенс угла (double)

]]>
cos(rad) http://portal-pk.ru/news/101-cosrad.html Константин Portal-PK 2017-05-16T09:12:44+03:00 Описание

Вычисляет косинус угла (в радианах). Результат лежит в пределах от -1 до 1.

Параметры

rad: угол в радианах (float)

Возвращаемые значения

косинус угла ("double")

]]>
sin(rad) http://portal-pk.ru/news/100-sinrad.html Константин Portal-PK 2017-05-16T09:11:51+03:00 Описание

Вычисляет синус угла (в радианах). Результат лежит в пределах от -1 до 1.

Параметры

rad: угол в радианах (float)

Возвращаемые значения

синус угла (double)

]]>
sq(x) http://portal-pk.ru/news/99-sqx.html Константин Portal-PK 2017-05-16T09:09:32+03:00 Описание

Вычисляет квадрат числа: число, умноженное само на себя.

Параметры

x: число, любой тип данных

Возвращаемые значения

квадрат числа

]]>
sqrt(x) http://portal-pk.ru/news/98-sqrtx.html Константин Portal-PK 2017-05-16T09:08:29+03:00 Описание

Вычисляет квадратный корень числа.

Параметры

x: число, любой тип данных

Возвращаемые значения

double, квадратный корень числа.

]]>
pow(base, exponent) http://portal-pk.ru/news/97-powbase-exponent.html Константин Portal-PK 2017-05-16T09:07:20+03:00 Описание

Вычисляет значение числа, возведенного в степень. Функция pow() может использоваться для возведения числа в дробную степень, что может быть полезно для экспоненциального представления чисел или кривых.

Параметры

base: число (float)

exponent: показатель степени, в которую необходимо возвести число (float)

Возвращаемые значения

Результат возведения в степень (double)

Пример

См. функцию fscale в библиотеке.

]]>
map(value, fromLow, fromHigh, toLow, toHigh) http://portal-pk.ru/news/96-mapvalue-fromlow-fromhigh-tolow-tohigh.html Константин Portal-PK 2017-05-16T09:05:29+03:00 Описание

Преобразовывает значение переменной из одного диапазона в другой. Т.е. значение переменной value, равное fromLow, будет преобразовано в число toLow, а значение fromHigh - в toHigh. Все промежуточные значения value масштабируются относительного нового диапазона [toLow; toHigh].

Функция не ограничивает значение переменной заданными пределами, поскольку ее значения вне указанного диапазона иногда несут полезную информацию. Для ограничения диапазона необходимо использовать функцию constrain() либо до, либо после функции map().

Обратите внимание, что нижние пределы указываемых диапазонов (fromLow, toLow) численно могут быть больше верхних пределов (fromHigh, toHigh). В этом случае функция map() может использоваться для создания обратного диапазона чисел, например:

y = map(x, 1, 50, 50, 1);

Функция может обрабатывать отрицательные числа, поэтому этот пример

y = map(x, 1, 50, 50, -100);

также работает корректно.

Функция map() использует целочисленные вычисления, поэтому не возвращает дробных значений, как это иногда ожидается. При этом дробная часть числа просто отбрасывается, без округления или вычисления средних значений.

Параметры

value: переменная, значение которой необходимо преобразовать

fromLow: нижний предел текущего диапазона переменной value

fromHigh: верхний предел текущего диапазона переменной value

toLow: нижний предел нового диапазона переменной value

toHigh: верхний предел нового диапазона переменной value

Возвращаемые значения

Преобразованное значение.

Пример

/* Преобразование аналогового значения в 8-битное число (от 0 до 255) */
void setup() {}
 
void loop()
{
  int val = analogRead(0);
  val = map(val, 0, 1023, 0, 255);
  analogWrite(9, val);
}

Дополнение

Для интересующихся математикой приводим исходный код функции:

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
]]>
функция dtostrf () http://portal-pk.ru/news/95-funkciya--dtostrf-.html Константин Portal-PK 2017-05-16T08:58:24+03:00 Функция dtostrf (), преобразует данные с плавающей точкой в массив символов, поэтому они могут быть легко напечатаны.

Формат функции следующий

dtostrf(floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);

где:

floatvar - преобразуемая переменная типа float;

StringLengthIncDecimalPoint - длина получаемого символьного значения;

numVarsAfterDecimal - количество символов после запятой;

charbuf - символьный массив для сохранения результата преобразования

Следующий пример программы поможет понять что к чему

static float f_val = 123.6794;
static char outstr[15];

void setup() {
  dtostrf(f_val,7, 3, outstr);

  Serial.begin(9600);
  Serial.println(outstr);
}

void loop(){
}

В результате работы скетча получим

123.679

Имеем 7 символов вдлину, с тремя цифрами после запятой.

При этом, если бы входное значение было например 1.6794, что бы мы получили? Длина строчки символов осталась бы равной 7-ми, с тремя цифрами после запятой, и это значит что функция вставит 2 пробела сначала строки.

1.679

Теперь попробуйте сами.

]]>
Arduino часы. Подключаем к Arduino DS3231 модуль и ИК приемник http://portal-pk.ru/news/94-arduino-chasy-podklyuchaem-k-arduino-ds3231-modul-i-ik-priemnik.html Константин Portal-PK 2017-05-11T08:35:23+03:00 Продолжаем собирать Arduino часы . И в данной статье мы подключим к Arduino DS3231 модуль реального времени , ИК приемник и выведи полученную информацию на семи сегментный индикатор TM1637 .

Посмотрите предыдущие части сборки LED часов на Arduino :

1. Светодиодные часы на Arduino Паяем 74HC595N для управления LED

2. Arduino часы. Подключаем к Arduino семисегментный индикатор TM1637, датчик DHT11

Подключим DS3231 модуль , ИК приемник и семи сегментный индикатор к Arduino вот по такой схеме.

Подключим DS3231 модуль , ИК приемник и семи сегментный индикатор к Arduino вот по такой схеме.

При подключении будьте внимательны при подключении ИК приемника . Возможно, что ваш приемник подключаться к другом ножкам. Поищите в интернете где у вашего приемника VCC, GND, DATA. Я спалил один ИК приемник, подключил его не к тем пинам.

Принципиальная схема подключения к Arduino DS3231 модуль реального времени , ИК приемник и семи сегментного индикатора TM1637 .

Принципиальная схема подключения к Arduino DS3231 модуль реального времени, ИК приемник и семи сегментного индикатора TM1637.


При написании кода часть функций взял из интернета без изменений.

///// часы ..
byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}
void setDateDs3231(byte second,        // 0-59
   byte minute,        // 0-59
   byte hour,          // 1-23
   byte dayOfWeek,     // 1-7
   byte dayOfMonth,    // 1-28/29/30/31
   byte month,         // 1-12
   byte year)          // 0-99
{
   Wire.beginTransmission(DS3231_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));    
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}
void getDateDs3231(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}
void blink() {
  flag = !flag;
  tm1637.point(flag); 
}

Добавлял переменные.

int interval[5]={10000, 3000, 3000, 5000, 5000};    // интервал 
int status = 0;
long prestro1Millis = 0;        // до

Функция Status() отвечает за время отображения информации на семи сегментный индикаторе. В видео рассказываю немного подробнее о данной функции. Но в принципе она достаточно простая.

void Status() {
  unsigned long curstro1Millis = millis();  // устанавливаем время в сейчас
    if ((curstro1Millis - prestro1Millis) > interval[status]) // проверяем интервал
      {
         status++;
        if (status >= 3) // если последний проход по циклу
        {
          status=0;
        }
      prestro1Millis = curstro1Millis;
    }
}

Данную функция нужно вызвать в loop(). В противном случае она работать не будет.

void loop(){
   Status();
}

Получаем информацию с модуля реального времени DS3231. Приводим в вид для вывода на семи сегментный индикатор.

// читаем время из модуля
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; 
  getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 
    // забиваем массив значениями для отпарвки на экран
    int  ch1 = hour / 10;
    int  ch2 = hour % 10;
    int  m1 = minute / 10;
    int  m2 = minute % 10;
    int  d1 = dayOfMonth / 10;
    int  d2 = dayOfMonth % 10;
    int  me1 = month / 10;
    int  me2 = month % 10;

В данной конструкции switch ( status ) выводим на семи сегментный индикатор TM1637 информации в соответствии с полученным статусом из функции Status().

switch ( status ) {
    case 0:
        {
          tm1637.display(0,ch1);
          tm1637.display(1,ch2); 
          tm1637.display(2,m1); 
          tm1637.display(3,m2);
          attachInterrupt(0, blink, CHANGE);
        }
     break;
     case 1:
        {
          tm1637.point(false); 
          tm1637.display(0,0x7f); 
          tm1637.display(1,0x7f); 
          tm1637.display(2,0x7f);
          tm1637.display(3,15);  // put a C at the end
        }
     break;
     case 2:
        {
          tm1637.point(false);
          tm1637.display(0,0x7f); 
          tm1637.display(1,0x7f); 
          tm1637.display(2,0x7f);
          tm1637.display(3,12);  // put a C at the end
        }
     break;
     case 3:
        {
          tm1637.point(false); 
          tm1637.display(0,d1);
          tm1637.display(1,d2); 
          tm1637.display(2,0x7f); 
          tm1637.display(3,13); 
        }
     break;
     case 4:
        {
          tm1637.point(false); 
          tm1637.display(0,23);
          tm1637.display(1,0x7f); 
          tm1637.display(2,me1); 
          tm1637.display(3,me2); 
        }
     break;
   }

Температура и влажность не выводиться так как в данной части мы не подключаем датчик температуры и влажности DHT11 . Как подключить датчик температуры рассказывал в предыдущей статье: « Arduino часы. Подключаем к Arduino семисегментный индикатор TM1637, датчик DHT11».


Настройка времени с помощью пульта.

if ( irrecv.decode( &results )) { // если данные пришли
    switch ( results.value ) {
    case 0x61D6D02F:
        {
          status = 0;
          hour++;                               // пребавляем единицу к часам
          if (hour > 23) hour = 0;              // если вылезли за границы присваеваем 0
         setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // пишим в модуль
        }
        break;
     case 0x61D6A857:
        {
          status = 0;
          hour--;                               // пребавляем единицу к часам
          setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // пишим в модуль
        }
        break;
     case 0x61D618E7:
        {
          status = 0;
          second = 0;
          minute--;
          setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
        }
        break;
    case 0x61D630CF:
        {
          status = 0;
          second = 0;
          minute++;
          if (minute > 59) minute = 0;
          setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
        }
        break;
    case 0x61D650AF:
        {
          status = 3;
        }
        break;
     case 0x61D628D7:
        {
          status = 4;
        }
        break;
    }   
   // Serial.println( results.value, HEX ); // печатаем данные 
    irrecv.resume(); // принимаем следующую команду
  }

В данной конструкция switch ( results.value ) . Обрабатывает команды полученные с пульта ДУ . У вас данные команду будут другие.

Для получения команд с пульта ДУ в Serial порте разкомментируйте строки.

// Serial.begin(9600); // Выставляем скорость COM порта
// Serial.println( results.value, HEX ); // печатаем данные

Скетч в среде Arduino IDE, управления часами получится вот таим:

#include <Wire.h>
#include "TM1637.h"  
#include "IRremote.h"
IRrecv irrecv(11); // Указываем пин, к которому подключен приемник
decode_results results;
    // 7сигментный индикатор
#define CLK 6         
#define DIO 7 
#define brightness 2  // яркость, от 0 до 7
int interval[5]={10000, 3000, 3000, 5000, 5000};    // интервал 
int status = 0;
long prestro1Millis = 0;        // до 
TM1637 tm1637(CLK,DIO);  
#define DS3231_I2C_ADDRESS 0x68
volatile boolean flag;
///// часы ..
byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}
void setDateDs3231(byte second,        // 0-59
   byte minute,        // 0-59
   byte hour,          // 1-23
   byte dayOfWeek,     // 1-7
   byte dayOfMonth,    // 1-28/29/30/31
   byte month,         // 1-12
   byte year)          // 0-99
{
   Wire.beginTransmission(DS3231_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));    
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}
void getDateDs3231(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}
void blink() {
  flag = !flag;
  tm1637.point(flag); 
}
void Status() {
  unsigned long curstro1Millis = millis();  // устанавливаем время в сейчас
    if ((curstro1Millis - prestro1Millis) > interval[status]) // проверяем интервал
      {
         status++;
        if (status >= 3) // если последний проход по циклу
        {
          status=0;
        }
      prestro1Millis = curstro1Millis;
    }
}
void setup() {
 // Serial.begin(9600); // Выставляем скорость COM порта
  irrecv.enableIRIn(); // Запускаем прием
  Wire.begin();
  pinMode(13, OUTPUT);
  tm1637.init();
  tm1637.set(brightness);  
}
void loop(){
    // читаем время из модуля
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; 
  getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 
    // забиваем массив значениями для отпарвки на экран
   Status();
    int  ch1 = hour / 10;
    int  ch2 = hour % 10;
    int  m1 = minute / 10;
    int  m2 = minute % 10;
    int  d1 = dayOfMonth / 10;
    int  d2 = dayOfMonth % 10;
    int  me1 = month / 10;
    int  me2 = month % 10; 
   switch ( status ) {
    case 0:
        {
          tm1637.display(0,ch1);
          tm1637.display(1,ch2); 
          tm1637.display(2,m1); 
          tm1637.display(3,m2);
          attachInterrupt(0, blink, CHANGE);
        }
     break;
     case 1:
        {
          tm1637.point(false); 
          tm1637.display(0,0x7f); 
          tm1637.display(1,0x7f); 
          tm1637.display(2,0x7f);
          tm1637.display(3,15);  // put a C at the end
        }
     break;
     case 2:
        {
          tm1637.point(false);
          tm1637.display(0,0x7f); 
          tm1637.display(1,0x7f); 
          tm1637.display(2,0x7f);
          tm1637.display(3,12);  // put a C at the end
        }
     break;
     case 3:
        {
          tm1637.point(false); 
          tm1637.display(0,d1);
          tm1637.display(1,d2); 
          tm1637.display(2,0x7f); 
          tm1637.display(3,13); 
        }
     break;
     case 4:
        {
          tm1637.point(false); 
          tm1637.display(0,23);
          tm1637.display(1,0x7f); 
          tm1637.display(2,me1); 
          tm1637.display(3,me2); 
        }
     break;
   }
   if ( irrecv.decode( &results )) { // если данные пришли
    switch ( results.value ) {
    case 0x61D6D02F:
        {
          status = 0;
          hour++;                               // пребавляем единицу к часам
          if (hour > 23) hour = 0;              // если вылезли за границы присваеваем 0
          setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // пишим в модуль
        }
        break;
     case 0x61D6A857:
        {
          status = 0;
          hour--;                               // пребавляем единицу к часам
          setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // пишим в модуль
        }
        break;
     case 0x61D618E7:
        {
          status = 0;
          second = 0;
          minute--;
          setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
        }
        break;
    case 0x61D630CF:
        {
          status = 0;
          second = 0;
          minute++;
          if (minute > 59) minute = 0;
          setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
        }
        break;
    case 0x61D650AF:
        {
          status = 3;
        }
        break;
     case 0x61D628D7:
        {
          status = 4;
        }
        break;
    }   
   // Serial.println( results.value, HEX ); // печатаем данные 
    irrecv.resume(); // принимаем следующую команду
  }
}
]]>
Собираем Arduino машинку на Motor Shield L293D и ИК пульте http://portal-pk.ru/news/93-sobiraem-arduino-mashinku-na-motor-shield-l293d-i-ik-pulte.html Константин Portal-PK 2017-04-28T12:52:35+03:00 Пол года назад коме пришла идея изучать программирование микроконтроллеров. Почитал в интернете и понял, что самая простая среда разработки Arduino IDE. Посмотрел кто и что делает и решил сделать свою машинку на пульте управления. Почему именно на ИК пульте управления? Просто по всем отзывам и разработкам это самая простая и дешевая машинка.

При выборе комплектующих выбор пал на Arduino UNO и Motor Shield L293D.

Почему именно Motor Shield ? Это связанно с тем что я к тому моменту паять пробовал в жизни 2 раза. И решил что использование шилд паять не нужно будет.

Что мне понадобилось:

1. Arduino UNO 190 руб.

2. Motor Shield L293D 100 руб.

3. Два мотор редуктора и два колеса. 240 руб.

4.IR приемник + пульт ДУ 50 руб.

5. Источник питания. Я покупал power bank за 300 руб. или тут

Можно купить бокс под батарейки 50 руб.

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

7. ПВХ панель. Обрезок картонки, фанерки и пр.

8. мебельное колесико в магазине стоит около 50 руб.

9. винтики болтик можно купить руб за 40 в строительном магазине.

И того машинку на Motor Shield L293D и ИК пульте можно собрать за 670 руб.


Когда пришли все комплектующие я понял, что паять все таки нужно будет. И на первом этапе мне показалось что Motor Shield не предназначен для сборки машинок на ИК пульте управления.

Прочитал я статьи про Motor Shield и понял, что стандартную библиотеку использовать в данном случае не получиться. Разобрав электрическую схему я понял как можно подключить I R приемник и двигателя. Написал небольшой скетч. Сделал основу из панели ПВХ. Процесс сборки смотрите в видео. Я повторил первую версию машинки в точности как была сделана.


После пары переделок скетча, машинка поехала. Большой минус был в том, что пока не нажмешь кнопку стоп машинка продолжает движения. Это доставляло массу неудобств особенно, когда машинка заезжала под диван или кровать. Сигнал от пульта не попадал на IR приемник и машинку приходилось вручную доставать.

Автосервисв Курске, ремонт автомобилей делают быстро и качественно.

В новый год у меня сломался power bank. Я заказал запчасти чтобы его отремонтировать. Dc-Dc преобразователь и плата контроля заряда шли больше 2 месяцев. И поэтому машинка у меня стояла, пылилась.

После того как я восстановил Power bank и переписал код, исправив недостаток предыдущей версии. Машинка стала ездить и поворачивать пока нажата кнопка на пульте. Пульт можно отвернуть в противоположную сторону, при этом машинка продолжает движение.

После того как отпускаем кнопку машинка останавливается. Стало намного удобнее.


По просьбе подписчиков выкладываю скетч. Снять отдельно видео пока не получается. Если возникнут вопросы пишите в группу в контакте: Arduino Portal-PK.

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

#include <Shift595.h> // https://sites.google.com/site/shift595arduino/downloads

Укажите ваши коты с пульта ДУ

#define POWER_KEY 0x61D66897 // коды пульта ДУ
#define KEY1 0x61D6D02F  // вперед 
#define KEY2 0x61D6A857 // назад
#define KEY3 0x61D618E7  // влево
#define KEY4 0x61D630CF  // вправо

Подключения IR приемника производиться к пинам серво привода 1 или 2

#define SER1 10
#define SER2 9

IRrecv irrecv(SER1);

Полный код Arduino машинки на Motor Shield L293D и ИК пульте

#include <Shift595.h> // https://sites.google.com/site/shift595arduino/downloads
#include <IRremote.h> 
#define POWER_KEY 0x61D66897 // коды пульта ДУ
#define KEY1 0x61D6D02F  // вперед 
#define KEY2 0x61D6A857 // назад
#define KEY3 0x61D618E7  // влево
#define KEY4 0x61D630CF  // вправо
#define M1A 2 
#define M1B 3 
#define M2A 1
#define M2B 4
#define M4A 0
#define M4B 6
#define M3A 5
#define M3B 7
#define PWM_M1 11
#define PWM_M2 3
#define PWM_M3 6
#define PWM_M4 5
#define SER1 10
#define SER2 9
#define PWRON 7
IRrecv irrecv(SER1);
Shift595 Shifter(8, 12, 4, 1);
decode_results results;
 /* определяем два массива с перечислением пинов для каждого мотора */
unsigned char RightMotor[3] =  {M3A, M3B, PWM_M3};
unsigned char LeftMotor[3] = {M4A, M4B, PWM_M4}; 
long prestro1Millis = 0;        // до мигания ( в целом переменная времени)
int key;
int v= 10;
void setup()
{ 
  irrecv.enableIRIn();
  pinMode(PWRON, OUTPUT); 
  digitalWrite(PWRON, LOW); // включение 74HC595
  pinMode(PWM_M1, OUTPUT); // включение L293D
  pinMode(PWM_M2, OUTPUT); 
  pinMode(PWM_M3, OUTPUT); 
  pinMode(PWM_M4, OUTPUT); 
  digitalWrite(PWM_M1, HIGH);
  digitalWrite(PWM_M2, HIGH);
  digitalWrite(PWM_M3, HIGH);
  digitalWrite(PWM_M4, HIGH);
}
void loop(){
  unsigned long curstro1Millis = millis();  // устанавливаем время в сейчас
  if ((curstro1Millis - prestro1Millis) > 200) // проверяем интервал
  {
  if (irrecv.decode(&results)) {
        if (results.value == KEY1)
          key = 1;
         else if (results.value == KEY2)
          key = 2;
         else if (results.value == KEY3)
          key = 3;
           else if (results.value == KEY4)
          key = 4;
           else if (results.value == POWER_KEY)
           {
            key = 0;
            v= 10;
           }
          if (results.value == 0xFFFFFFFF)
          {
            key = key;
            v= v+10;
          }
        irrecv.resume();// Receive the next value
    }
    else
    {
      key = 0;
      v= 10;
     }
    prestro1Millis = curstro1Millis;
    } 
      if (key == 1){ 
        Motor (RightMotor, v);
        Motor (LeftMotor, v);
     }
     else if (key == 2){
        Motor (RightMotor, -v);
        Motor (LeftMotor, -v);     
     }
     else if (key == 3){
        Motor (RightMotor, -v);
        Motor (LeftMotor, v);
     }
     else if (key == 4){
        Motor (RightMotor, v);
        Motor (LeftMotor, -v);  
     } 
     else if (key == 0) {       
        Motor (RightMotor,0);
        Motor (LeftMotor,0);  
     }
}
   void Motor(unsigned char * motor, int v) {
    if (v>100) v=100;
    if (v<-100) v=-100;
    if (v>0) {
      Shifter.setRegisterPin(motor[0], LOW);
      Shifter.setRegisterPin(motor[1], HIGH);
      digitalWrite(motor[2], v*2.55);
      Serial.println(motor[0]);
    }
    else if (v<0) {
      Shifter.setRegisterPin(motor[0], HIGH);
      Shifter.setRegisterPin(motor[1], LOW);
      digitalWrite(motor[2], (-v)*2.55);
    }
    else {
      Shifter.setRegisterPin(motor[0], LOW);
      Shifter.setRegisterPin(motor[1], LOW);
      digitalWrite(motor[2], 0);
    } 
}
]]>
constrain(x, a, b) - ​Ограничивает значение переменной заданными пределами. http://portal-pk.ru/news/92-constrainx-a-b---​ogranichivaet-znachenie-peremennoi.html Константин Portal-PK 2017-04-24T14:11:10+03:00 Описание

Ограничивает значение переменной заданными пределами.

Параметры

x: переменная, значение которой необходимо ограничить, любой тип данных

a: нижний предел, любой тип данных

b: верхний предел, любой тип данных

Возвращаемые значения

x: если x лежит в пределах между a и b.

a: если x меньше a.

b: если x больше b.

Пример

sensVal = constrain(sensVal, 10, 150);
// числовые показания датчика ограничены диапазоном от 10 до 150
]]>
abs(x) Вычисляет абсолютную величину (модуль) числа. http://portal-pk.ru/news/91-absx--vychislyaet-absolyutnuyu-velichinu-modul-chisla.html Константин Portal-PK 2017-04-24T14:09:04+03:00 Описание

Вычисляет абсолютную величину (модуль) числа.

Параметры

x: число

Возвращаемые значения

x: если x больше или равен 0.

-x: если x меньше 0.

Предупреждение

Реализация функции abs() запрещает указывать другие функции в качестве параметров в скобках - это приведет к некорректным результатам:

abs(a++);       // избегайте этого - функция выдаст некорректный результат
 
a++;
abs(a);        // вместо этого осуществляйте математические вычисления за пределами функции
]]>
max(x, y) - Arduino IDE http://portal-pk.ru/news/90-maxx-y---arduino-ide.html Константин Portal-PK 2017-04-24T14:07:04+03:00 Вычисляет максимальное значение из двух чисел.

Параметры

x: первое число, любой тип данных

y: второе число, любой тип данных

Возвращаемые значения

Большее из двух указанных чисел.

Пример

sensVal = max(senVal, 20); // присваивает sensVal большее из двух чисел sensVal и 20
                           // позволяя убедиться, что значение sensVal будет не меньше 20

Примечание

Вопреки возможному интуитивному желанию, функция max() часто используется для создания нижнего предела диапазона значений переменной, а функция min() - наоборот, для создания верхнего предела.

Предупреждение

Реализация функции max() запрещает указывать другие функции в качестве параметров в скобках - это приведет к некорректным результатам:

max(a--, 0);   // избегайте этого - функция выдаст некорректный результат
 
a--;
max(a, 0);    // вместо этого - осуществляйте математические вычисления за пределами функции
]]>
min(x, y) - Arduino IDE http://portal-pk.ru/news/89-minx-y---arduino-ide.html Константин Portal-PK 2017-04-24T14:04:31+03:00 Описание

Вычисляет минимальное значение из двух чисел.

Параметры

x: первое число, любой тип данных

y: второе число, любой тип данных

Возвращаемые значения

Меньшее из двух чисел.

Пример

sensVal = min(sensVal, 100); // присваивает sensVal меньшее из чисел sensVal и 100
                             // позволяя убедиться, что значение sensVal никогда не превысит 100

Примечание

Вопреки возможному интуитивному желанию, функция max() часто используется для создания нижнего предела диапазона значений переменной, а функция min() - наоборот, для создания верхнего предела.

Предупреждение

Реализация функции min() запрещает указывать другие функции в качестве параметров в скобках - это приведет к некорректным результатам:

min(a++, 100);   // избегайте этого - функция выдаст некорректный результат
a++;
min(a, 100);    // вместо этого - осуществляйте математические вычисления за пределами функции
]]>
Урок 8 — Светофор на Arduino для машин и пешеходов http://portal-pk.ru/news/88-urok-8-—-svetofor-na-arduino--dlya-mashin-i-peshehodov.html Константин Portal-PK 2017-04-21T12:18:38+03:00 Это второй урок посещенный светофору. В уроке 7 «Светофор на Arduino своими руками. Пишем скетч используя функции» . Мы подключали 3 светодиода делали работу одной стороны светофора. В данном уроке мы сделаем работу светофора для машин и для пешеходов. Правда это еще не полноценный светофор, но на основе данного урока его можно сделать без проблем.

Для сокращения объема кода напишем 2 функции в среде разработки Arduino IDE . Одну для управления светофором для машин, а вторую для управления светофором для пешеходов.

Для урока нам понадобится:

Подключим светодиоды к плате ArduinoUNO . У нас получиться вот такая схема.

одключим светодиоды к плате Arduino UNO . У нас получиться вот такая схема.

Принципиальная схема светофора на Arduino для машин и пешеходов.

Принципиальная схема светофора на Arduino для машин и пешеходов.

Скетч в среде разработки Arduino IDE будит выглядит так.

int car_red = 2; // пин подключения 2
int car_yellow = 3; // пин подключения 3
int car_green = 4; // пин подключения 4
int people_red = 5; // пин подключения 5
int people_green = 6; // пин подключения 6
void setup() {
    pinMode(car_red, OUTPUT);
    pinMode(car_yellow, OUTPUT);
    pinMode(car_green, OUTPUT);
    pinMode(people_red, OUTPUT);
    pinMode(people_green, OUTPUT);
}
void loop() {
      digitalWrite(car_red, LOW); 
      digitalWrite(car_yellow, HIGH); 
      digitalWrite(car_green, LOW);       
              delay(2000); 
       digitalWrite(car_red, HIGH); 
       digitalWrite(car_yellow, LOW); 
       digitalWrite(car_green, LOW);
              delay(1000); 
        digitalWrite(people_red, LOW); 
        digitalWrite(people_green, HIGH);
            delay(5000); 
    for (int x=0; x<10; x++) 
    {
          digitalWrite(people_red, LOW); 
          digitalWrite(people_green, HIGH);
            delay(250);
          digitalWrite(people_red, LOW); 
          digitalWrite(people_green, LOW);
          delay(250);
      }
      digitalWrite(people_red, HIGH); 
      digitalWrite(people_green, LOW);
            delay(500);
       digitalWrite(car_red, LOW); 
       digitalWrite(car_yellow, HIGH); 
       digitalWrite(car_green, LOW);
            delay(1000);
       digitalWrite(car_red, LOW); 
       digitalWrite(car_yellow, LOW); 
       digitalWrite(car_green, HIGH);
            delay(5000);
}

Напишем функции для управления светофорами в среде разработки Arduino IDE.

Первая управляет светофором для машин.

void Car (byte red, byte yellow, byte green) {
      digitalWrite(car_red, red); 
      digitalWrite(car_yellow, yellow); 
      digitalWrite(car_green, green);
}

Вторая

управлять светофором для пешеходов.

void People (byte red, byte green) {
      digitalWrite(people_red, red); 
      digitalWrite(people_green, green);
}

В итоге у нас получиться вот такой код. Как видно код стал намного короче и читабельнее.

int car_red = 2; // пин подключения 2
int car_yellow = 3; // пин подключения 3
int car_green = 4; // пин подключения 4
int people_red = 5; // пин подключения 5
int people_green = 6; // пин подключения 6
void setup() {
    pinMode(car_red, OUTPUT);
    pinMode(car_yellow, OUTPUT);
    pinMode(car_green, OUTPUT);
    pinMode(people_red, OUTPUT);
    pinMode(people_green, OUTPUT);
}
void loop() {
        Car (LOW, HIGH, LOW);          
              delay(2000); 
        Car (HIGH, LOW, LOW);
              delay(1000); 
        People (LOW, HIGH);
            delay(5000); 
        for (int x=0; x<10; x++) {
          People (LOW, HIGH);
              delay(250);
          People (LOW, LOW);
              delay(250);
        }
         People (HIGH, LOW);
            delay(500);
        Car (LOW, HIGH, LOW);
            delay(1000);
        Car (LOW, LOW, HIGH);
            delay(5000);
}
void Car (byte red, byte yellow, byte green) {
      digitalWrite(car_red, red); 
      digitalWrite(car_yellow, yellow); 
      digitalWrite(car_green, green);
}
void People (byte red, byte green) {
      digitalWrite(people_red, red); 
      digitalWrite(people_green, green);
}

Следующий урок:

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

]]>
delayMicroseconds() - Arduino http://portal-pk.ru/news/87-delaymicroseconds---arduino.html Константин Portal-PK 2017-04-20T13:51:08+03:00 Описание

Приостанавливает выполнение программы на указанный промежуток времени (в микросекундах). В одной миллисекунде 1000 миллисекунд, и 1 000 000 микросекунд.

На данный момент наибольшее число, позволяющее сформировать точную задержку, - 16383. В будущих версиях Ардиуно этот показатель может быть изменен. Для создания задержек длительностью больше, чем несколько тысяч микросекунд, используйте функцию delay().

Синтаксис

delayMicroseconds(us)

Параметры

us: количество микросекунд, на которые необходимо приостановить программу (unsigned int)

Возвращаемые значения

нет

Пример

int outPin = 8;                 // цифровой вывод 8
 
void setup()
{
  pinMode(outPin, OUTPUT);      // конфигурируем цифровой вывод как выход
}
 
void loop()
{
  digitalWrite(outPin, HIGH);   // включаем вывод
  delayMicroseconds(50);        // задержка в 50 микросекунд 
  digitalWrite(outPin, LOW);    // выключаем вывод
  delayMicroseconds(50);        // задержка в 50 микросекунд
}

Вывод номер 8, сконфигурированный как выход, формирует последовательность импульсов с периодом 100 микросекунд

Предупреждения и известные проблемы

Данная функция работает с высокой точностью в диапазоне от 3 микросекунд и выше. При более коротких задержках точная работа delayMicroseconds() не гарантируется.

Начиная с версии Arduino 0018, функция delayMicroseconds() больше не отключает прерывания.

]]>
micros() -Ardiono IDE http://portal-pk.ru/news/86-micros--ardiono-ide.html Константин Portal-PK 2017-04-20T13:48:37+03:00 Описание

Возвращает количество микросекунд, прошедших с момента начала выполнения программы Arduino. Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 70 минут. На платах Arduino с тактовой частотой 16 МГц (Duemilanove и Nano) разрешение этой функции составляет четыре микросекунды (т.е. возвращаемое значение будет всегда кратно четырем). На платах Ардуино с тактовой частотой 8 МГц (LilyPad), разрешение функции составляет восемь микросекунд.

Примечание: в одной миллисекунде 1000 микросекунд, а в одной секунде - 1 000 000 микросекунд.

Параметры

Нет

Возвращаемые значения

Количество микросекунд, прошедших с момента старта программы (unsigned long)

Пример

unsigned long time;
 
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = micros();
  //выводим время с момента старта программы
  Serial.println(time);
  // ждем 1 секунду, чтобы не отправлять большой массив данных
  delay(1000);
}
]]>
millis() - Arduino IDE http://portal-pk.ru/news/85-millis---arduino-ide.html Константин Portal-PK 2017-04-20T13:47:15+03:00 Описание

Возвращает количество миллисекунд, прошедших с момента старта программы Ардуино. Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 50 дней.

Параметры

Нет

Возвращаемые значения

Количество миллисекунд, прошедших с момента старта программы (unsigned long)

Пример

unsigned long time;
 
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = millis();
  //выводим время с момента старта программы
  Serial.println(time);
  // ждем 1 секунду, чтобы не отправлять большой массив данных
  delay(1000);
}

Совет:

Помните, что значение, возвращаемое функцией millis(), имеет тип unsigned long. При попытке выполнения математических операций между этим значением и значениями другого типа (например, int) будет сгенерирована ошибка.

]]>
pulseIn() - Arduino http://portal-pk.ru/news/84-pulsein---arduino.html Константин Portal-PK 2017-04-20T13:45:35+03:00 Считывает длительность импульса (любого - HIGH или LOW) на выводе. Например, если заданное значение (value) - HIGH, то функцияPulseIn() ожидает появления на выводе сигнала HIGH, затем засекает время и ожидает переключения вывода в состояние LOW, после чего останавливает отсчет времени. Функция возвращает длительность импульса в микросекундах, либо 0 в случае отсутствия импульса в течение определенного таймаута.

Эмпирическим путем установлено, что при использовании функции для измерения широких импульсов возможно возникновение ошибок. Функция работает с импульсами длительностью от 10 микросекунд до 3 минут.

Синтаксис

pulseIn(pin, value)
pulseIn(pin, value, timeout)

Параметры

pin: номер вывода, с которого необходимо считыть импульс (int)

value: тип считываемого импульса: HIGH или LOW (int)

timeout (опционально): время ожидания импульса в микросекундах; значение по умолчанию - одна секунда (unsigned long)

Возвращаемые значения

длительность импульса (в микросекундах) либо 0 в случае отсутствия импульса в течение таймаута (unsigned long)

Пример

int pin = 7;
unsigned long duration;
 
void setup()
{
  pinMode(pin, INPUT);
}
 
void loop()
{
  duration = pulseIn(pin, HIGH);
}
]]>
shiftIn() - Arduino http://portal-pk.ru/news/83-shiftin---arduino.html Константин Portal-PK 2017-04-20T13:43:06+03:00 Осуществляет побитовый сдвиг и считывание байта данных, начиная с самого старшего (левого) или младшего (правого) значащего бита. Процесс считывания каждого бита заключается в следующем: тактовый вывод переводится в высокий уровень, считывается очередной бит из линии данных, после чего тактовый вывод сбрасывается в низкий уровень.

Примечание: функция является программной реализацией SPI; для программирования Ардуино также существует библиотека SPI, представляющую собой аппаратную реализацию, которая является быстрее, но при этом работает только со специальными выводами.

Синтаксис

byte incoming = shiftIn(dataPin, clockPin, bitOrder)

Параметры

dataPin: вывод, с которого будет считываться каждый бит (int)

clockPin: тактовый вывод, который будет переключаться при считывании с dataPin

bitOrder: порядок, в котором будут сдвигаться и считываться биты; может принимать значения MSBFIRST или LSBFIRST. (Most Significant Bit First - старший значащий бит первым, или Least Significant Bit - младший значащий бит первым)

Возвращаемые значения

считанное значение (byte)

]]>
shiftOut() - Arduino IDE http://portal-pk.ru/news/82-shiftout---arduino-ide.html Константин Portal-PK 2017-04-20T13:40:35+03:00 Осуществляет побитовый сдвиг и вывод байта данных, начиная с самого старшего (левого) или младшего (правого) значащего бита. Функция поочередно отправляет каждый бит на указанный вывод данных, после чего формирует импульс (высокий уровень, затем низкий) на тактовом выводе, сообщая внешнему устройству о поступлении нового бита.

Примечание: Для взаимодействия с устройствами, тактируемыми по фронту импульсов, перед вызовом shiftOut() необходимо убедиться, что тактовый вывод переключен в низкий уровень, например с помощью функции digitalWrite(clockPin, LOW).

Функция является программной реализацией SPI; аппаратная версия реализована в библиотеке SPI, поэтому она является быстрее, но работает только со специальными выводами.

Синтаксис

shiftOut(dataPin, bitOrder, value)

Параметры

dataPin: вывод, которому будет отправляться каждый бит из сдвигаемого байта данных (int)

clockPin: тактовый вывод, который будет переключаться каждый раз, когда на выводе dataPin устанавливается корректное значение (int)

bitOrder: характеризует порядок, в котором будут сдвигаться и выводиться биты; может принимать значения MSBFIRST или LSBFIRST. (Most Significant Bit First - старший значащий бит первым, или Least Significant Bit - младший значащий бит первым)

value: сдвигаемый байт данных (byte)

Возвращаемые значения

нет

Примечание

Выводы dataPin и clockPin должны быть уже сконфигурированы как выходы с помощью функции pinMode().

На данный момент функция shiftOut позволяет выводить только 1 байт (8 бит), поэтому для вывода значений, больших 255, требуется два этапа:

// Последовательная передача в режиме MSBFIRST
int data = 500;
// сдвигаем и выводим старший байт
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));  
// сдвигаем и выводим младший байт
shiftOut(dataPin, clock, MSBFIRST, data);
 
// Последовательная передача в режиме LSBFIRST
data = 500;
// сдвигаем и выводим младший байт
shiftOut(dataPin, clock, LSBFIRST, data);  
// сдвигаем и выводим старший байт
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

Пример

Схема, соответствующая примеру, описана в инструкции по работе со сдвиговым регистром 74HC595.

//**************************************************************  //
//  Название : shiftOutCode, Hello World                           //
//  Автор    : Carlyn Maw,Tom Igoe                                 //
//  Дата     : 25 октября 2006                                     //
//  Версия   : 1.0                                                 //
//  Заметки  : Программа использования сдвигового регистра 74HC595 //
//           : для счета от 0 to 255                               //
//****************************************************************
 
//Вывод соединен с выводом ST_CP микросхемы 74HC595
int latchPin = 8;
//Вывод соединен с выводом SH_CP микросхемы 74HC595
int clockPin = 12;
////Вывод соединен с DS микросхемы 74HC595
int dataPin = 11;
 
void setup() {
  //переключение выводов в режим работы "вывод", т.к. к ним идет обращение в главном цикле
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
 
void loop() {
  //процедура последовательного счета
  for (int j = 0; j < 256; j++) {
    //формируем ноль на latchPin и удерживаем его до конца передачи
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
    //возвращаем высокий уровень на latchin, тем самым сообщая микросхеме о том, что
    //больше не требуется воспринимать информацию
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
}
]]>
noTone() - Arduino IDE http://portal-pk.ru/news/81-notone---arduino-ide.html Константин Portal-PK 2017-04-20T13:36:11+03:00 Прекращает генерирование прямоугольного сигнала после использования функции tone(). Если сигнал не генерируется, функция ни к чему не приводит.

ПРИМЕЧАНИЕ: для воспроизведение разных звуков на нескольких выводах, необходимо сперва вызывать noTone() на одном выводе и только после этого использовать функцию tone() на следующем.

Синтаксис

noTone(pin)

Параметры

pin: вывод, на котором следует прекратить генерирование сигнала

Возвращаемые значения

нет

]]>
tone() - Arduino IDE http://portal-pk.ru/news/80-tone---arduino-ide.html Константин Portal-PK 2017-04-20T13:34:20+03:00 Описание

Генерирует на выводе прямоугольный сигнал заданной частоты (с коэффициентом заполнения 50%). Функция также позволяет задавать длительность сигнала. Однако, если длительность сигнала не указана, он будет генерироваться до тех пор, пока не будет вызвана функция noTone(). Для воспроизведения звука вывод можно подключить к зуммеру или динамику.

В каждый момент времени может генерироваться только один сигнал заданной частоты. Если сигнал уже генерируется на каком-либо выводе, то использование функции tone() для этого вывода просто приведет к изменению частоты этого сигнала. В то же время вызов функции tone() для другого вывода не будет иметь никакого эффекта.

Использование функции tone() может влиять на ШИМ-сигнал на выводах 3 и 11 (на всех платах, кроме Mega).

ПРИМЕЧАНИЕ: для воспроизведение разных звуков на нескольких выводах, необходимо сперва вызывать noTone() на одном выводе и только после этого использовать функцию tone() на следующем.

Синтаксис

tone(pin, frequency)
tone(pin, frequency, duration)

Параметры

pin: вывод, на котором будет генерироваться сигнал

frequency: частота сигнала в Герцах - unsigned int

duration: длительность сигнала в миллисекундах (опционально) - unsigned long

Возвращаемые значения

нет

]]>
sizeof - Arduino IDE http://portal-pk.ru/news/79-sizeof---arduino-ide.html Константин Portal-PK 2017-04-20T13:26:57+03:00 Описание

Оператор sizeof возвращает количество байт, занимаемых типом переменной, либо количество байт, занимаемых массивом.

Синтаксис

sizeof(variable)

Параметры

variable: переменная любого типа или массив (например, int, float, byte)

Пример кода

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

Следующая программа посимвольно выводит строку. Если изменить исходную фразу - программа останется работоспособной, независимо от длины текста.

char myStr[] = "this is a test";
int i;
 
void setup(){
  Serial.begin(9600);
}
 
void loop() { 
  for (i = 0; i < sizeof(myStr) - 1; i++){
    Serial.print(i, DEC);
    Serial.print(" = ");
    Serial.write(myStr[i]);
    Serial.println();
  }
  delay(5000); // задержка программы
}

Обратите внимание, что sizeof возвращает общее количество байтов. Поэтому, при работе с массивами более объемных типов данных (такими, как int), цикл будет выглядеть примерно так. Кроме того, не забывайте, что правильно объявленная строка заканчивается нулевым символом с ASCII-кодом 0.

for (i = 0; i < (sizeof(myInts)/sizeof(int)) - 1; i++) {
  // какие-либо операции с myInts[i]
}
]]>
Ключевое слово const http://portal-pk.ru/news/78-klyuchevoe-slovo-const.html Константин Portal-PK 2017-04-20T13:24:04+03:00 Ключевое слово const обозначает константу. Это спецификатор, который изменяет поведение переменной и делает ее доступной только для чтения. Другими словами, эта переменная может использоваться так же, как и любая другая переменная этого же типа, однако ее значение изменить нельзя. Если вы попытаетесь переприсвоить значение константе, компилятор выдаст ошибку.

На константы, обозначенные ключевым словом const, распространяются те же правила области видимости, как и для обычных переменных. Именно поэтому использование ключевого слова keyword при объявлении констант более предпочтительно, чем использование директивы #define.

Пример

const float pi = 3.14;
float x;
// ....
x = pi * 2;    // удобно использовать константы при математических вычислениях
pi = 7;        // ошибка - нельзя записывать значения (изменять) константы

#define или const

Для создания числовых или строковых констант можно использовать как const, так и #define. Для массивов необходимо использоватьconst. В общем случае при объявлении констант предпочтительнее использовать const вместо #define.

]]>
Ключевое слово volatile http://portal-pk.ru/news/77-klyuchevoe-slovo-volatile.html Константин Portal-PK 2017-04-20T13:22:16+03:00 volatile - это ключевое слово, известное как спецификатор переменной. Как правило, употребляется перед указанием типа переменной, чтобы изменить порядок ее обработки компилятором и последующей программой.

Объявление переменной как volatile - это директива компилятору. Компилятор - программа, которая переводит программный код C/C++ в машинный код, представляющий собой набор команд для микроконтроллера ATmega в Ардуино.

По сути, эта директива заставляет компилятор размещать переменную в ОЗУ, а не во внутренних регистрах, использующихся для временного хранения и обработки различных переменных. При определенных условиях, значение переменной, хранимой в регистрах, может быть неточным.

Переменную необходимо объявлять как volatile в тех случаях, когда ее значение может быть изменено чем-либо, не зависящем от того участка кода, в котором она фигурирует (например, параллельно выполняющимся потоком). Применительно к Ардуино, единственное место, где подобное может случиться - это участки кода, связанные с прерываниями (также называемые процедурами обработки прерываний).

Пример:

// переключение светодиода при изменении состояния вывода
 
int pin = 13;
volatile int state = LOW;
 
void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}
 
void loop()
{
  digitalWrite(pin, state);
}
 
void blink()
{
  state = !state;
}
]]>
Static - Arduino IDE http://portal-pk.ru/news/76-static----arduino-ide.html Константин Portal-PK 2017-04-20T13:20:43+03:00 Ключевое слово static используется для создания переменных, которые будут видны только одной функции. Однако, в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, переменные static сохраняют свое значение между вызовами.

Переменные, объявленные как static, создаются и инициализируются только при первом вызове функции.

Пример:

/* RandomWalk
* Paul Badger 2007
* RandomWalk в случайном порядке перемещается вверх или вниз между двумя
* точками. Длина максимального перемещения за один цикл задается 
* параметром "stepsize".
* Статическая переменная увеличивается или уменьшается на случайную величину.
* Эта техника также известна как "розовый шум" или "пьяная походка".
*/
 
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
 
int thisTime;
int total;
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{        //  функция randomWalk 
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
   delay(10);
}
 
int randomWalk(int moveSize){
  static int  place;     // переменная для хранения величины случайного перемещения - объявлена как static, поэтому 
                         // сохраняет свое значение между вызовами функции. При этом другие функции не могут ее изменить
 
  place = place + (random(-moveSize, moveSize + 1));
 
  if (place < randomWalkLowRange){                    // проверка нижнего и верхнего пределов
    place = place + (randomWalkLowRange - place);     // восстановление числа в положительном направлении
  }
  else if(place > randomWalkHighRange){
    place = place - (place - randomWalkHighRange);     // восстановление числа в отрицательном направлении
  }
 
  return place;
}
]]>
Область видимости переменной http://portal-pk.ru/news/75-oblast-vidimosti-peremennoi.html Константин Portal-PK 2017-04-20T13:18:53+03:00 В языке программирования C, использующемся при программировании Ардуино, переменные имеют свойство, называемое область видимости, чего нельзя сказать про первые языки программирования (подобные BASIC), в которых все переменные являютсяглобальными.

Глобальная переменная - эта та переменная, которая может быть доступна ("видна") из любой функции программы. Локальные переменные доступны только внутри тех функций, в которых они объявлены. При программировании Ардуино, любая переменная, объявленная за пределами функции (таких как, setup(), loop(), и т.д.), является глобальной переменной.

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

Также иногда удобно объявить и инициализировать переменную внутри цикла for. В этом случае переменная будет доступна только в пределах скобок цикла for.

Пример:

int gPWMval;  // эта переменная будет доступна из любой функции
 
void setup()
{
  // ...
}
 
void loop()
{
  int i;    // переменная "i" "видна" только внутри "loop"
  float f;  // переменная "f" "видна" только внутри "loop"
  // ...
 
  for (int j = 0; j <100; j++){
  // переменная j доступна только внутри скобок цикла for
  }
 
}
]]>
Arduino часы. Видео 2. Подключаем к Arduino TM1637 и датчик DHT11 http://portal-pk.ru/news/74-arduino-chasy-video-2---podklyuchaem-k-arduino-semisegmentnyi.html Константин Portal-PK 2017-04-17T12:28:18+03:00 В Виде «Светодиодные часы на Arduino. Паяем 74HC595N для управления LED», я начел собирать светодиодные часы на Arduino . Спаял систему управления светодиодами которые показывают время с помощью 28 светодиодов с точностью до минуты.

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

Схема подключения к Arduino семисегментный индикатор TM1637 и датчик DHT11 выглядит вот так.

Схема подключения к Arduino семисегментный индикатор TM1637 и датчик DHT11

Скетч для данной схемы

#include "dht.h"
#include "TM1637.h"
//{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//0~9,A,b,C,d,E,F 
#define dht_pin 2 // Pin sensor 
#define CLK 3//Pins for TM1637       
#define DIO 4
TM1637 tm1637(CLK,DIO);
dht DHT;
void setup(){
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL); 
  //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7   0-7; 
  delay(1500);//Delay 
}
void loop(){
  DHT.read11(dht_pin);
 int temp = DHT.temperature;
 int humidity = DHT.humidity;
 int digitoneT = temp / 10;
 int digittwoT = temp % 10;
 int digitoneH = humidity / 10;
 int digittwoH = humidity % 10;
    tm1637.display(1,digitoneT); 
    tm1637.display(2,digittwoT);
    tm1637.display(3,12);  //  C 
    delay (5000);
    tm1637.display(1,digitoneH); 
    tm1637.display(2,digittwoH); 
    tm1637.display(3,15); //  F
    delay(5000);
}

Библиотека TM1637.h позволяет нам вывести символы «0~9,A,b,C,d,E,F».

Цифры от 0 до 9 выводят на экран соответственную цифру, а цифры от 10 до 15 выводят буквы A,b,C,d,E,F.

Для обозначения температуры выведу символ C равный 12, а для обозначения влажности выведу на семи сегментный индикатор TM1637 символ F равный 15.

#include "TM1637.h"
//{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//0~9,A,b,C,d,E,F

Считываем показание с дачка DHT11. В переменную temp сохраняем значение температуры в значение humidity влажности.

DHT.read11(dht_pin);
 int temp = DHT.temperature;
 int humidity = DHT.humidity;

Так как на семи сегментный индикатор мы можем выводить информацию посимвольно. Разделим значение температуры на десятки и единицы для этого значение температуры разделим на 10. Для того чтобы получить единицы температура возьмем остаток от деления на 10.

int digitoneT = temp / 10;
int digittwoT = temp % 10;

Аналогично разделим значение влажности на десятки и единицы.

int digitoneH = humidity / 10;
int digittwoH = humidity % 10;

Выведем значение на семи сегментный индикатор. Начнем формировать со второго символов. Последним значением выведем символ С, для температура и F для влажности.

    tm1637.display(1,digitoneT); 
    tm1637.display(2,digittwoT);
    tm1637.display(3,12);  //  C 
    delay (5000);
    tm1637.display(1,digitoneH); 
    tm1637.display(2,digittwoH); 
    tm1637.display(3,15); //  F
    delay(5000);


В следующем видео по сборке LED часов на Arduino подключу к микроконтроллеру Arduino модуль реального времени DS3231. Выведу время на семи сегментный индикатор TM1637. Подключу инфракрасный приемник и напишу программу которая позволит настраивать время с помощью пульта дистанционного управления.


]]>
Урок 3 - Подключаем 2 сдвиговых регистра к Arduino. Пишем скетч «Бегущие огни» http://portal-pk.ru/news/73-video-urok-3----podklyuchaem-2-sdvigovyh-registra-k-arduino.html Константин Portal-PK 2017-04-17T09:32:29+03:00 В предыдущем уроке: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни . Мы научились подключать сдвиговый регистр к плате Arduino . Написали небольшой скетч для управления подключенными светодиодами.

После этого урока мне стали задавать вопросы как можно подключить 2 и больше сдвиговых регистра 74HC595 к Arduino UNO. Не смотря на то что я уже рассказывал в видео Часы на Arduino. Паяем 74HC595N для управления LED. Часть 1 как подключить и уровнять сдвиговыми регистрами, у многих возникает сложность в данной теме.

Я решил снять данный урок. И написает небольшой скетч для управления встречными бегущими огнями.

Для Видео урока нам понадобится:

-Arduino UNO или Arduino Nano

- 2 Сдвиговых регистра 74HC595

- Плата макетная беспаечная

- Резисторы 220 ОМ

-Соединительные провода папа-папа

-Светодиоды 3 или 5 мм.


Подключил светодиоды к Arduino вот по такой схеме.

подключения двух сдвиговых регистров к Arduino

Подключение практически такое же как и подключений одного сдвигового регистра. Только при подключении с первого сдвигового регистра ко второму. Нужно с 9 ножки 74НС595 подключить к 14 ножки сдвигового регистра.

Принципиальная схема подключения двух сдвиговых регистров к Arduino.


При написании скетча трудностей у вас возникнуть не должно. Так как Программа будет с небольшим изменением.


int dataPin = 2; //Пин подключен к DS входу 74HC595 
int latchPin = 3; //Пин подключен к ST_CP входу 74HC595
int clockPin = 4; //Пин подключен к SH_CP входу 74HC595
void setup() { //устанавливаем режим OUTPUT 
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); } 
void loop() { 
  byte byteToSend = 0; //Создаем пустой байт B00000000 
             for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
              byteToSend = 0; // Обнуляем байт при каждом проходе  
               bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
               digitalWrite(latchPin, LOW); // Открыли регистр
               shiftOut(dataPin, clockPin, MSBFIRST, byteToSend);   // передаем последовательно на dataPin - в первом регистре значение B01001100
               shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
               digitalWrite(latchPin, HIGH); /// Закрываем регистр тем самым передаем значение на выводы 
               delay(150);
             }
             byteToSend = 0; // Обнуляем байт при каждом проходе
             digitalWrite(latchPin, LOW); 
             shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
             shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
             digitalWrite(latchPin, HIGH); 
             delay(150);
             for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
               byteToSend = 0; // Обнуляем байт при каждом проходе  
               bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
               digitalWrite(latchPin, LOW); // Открыли регистр
               shiftOut(dataPin, clockPin, LSBFIRST, byteToSend);   // передаем последовательно на dataPin - в первом регистре значение B01001100
               shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
               digitalWrite(latchPin, HIGH); /// Закрываем регистр тем самым передаем значение на выводы 
               delay(150);
             }
            byteToSend = 0; // Обнуляем байт при каждом проходе
            digitalWrite(latchPin, LOW); 
            shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
            shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
            digitalWrite(latchPin, HIGH); 
            delay(150);
     }

Следующий урок:



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

]]>
Источник питания для Arduino машинки из нерабочего power bank http://portal-pk.ru/news/72-istochnik-pitaniya-dlya-arduino-mashinki-iz-nerabochego-power-bank.html Константин Portal-PK 2017-04-07T11:33:00+03:00 В качестве источника питания для машинки на Arduino и Motor Shield L293D использовал power bank . В новогодние каникулы сделал гирлянду и подключил ее к power bank . Но что то произошло. Или кот решил поиграть или ребенок, но повер банк вышел из строя.

Я не стал расстраиваться и заказал в Китае контроля заряда на контроллере TP4056 и DC-DC повышающий преобразователь. Просто данный комплект стоит дешевле чем аналог схемы управления зарядом у power bank . Ждал долго. Около 2,5 месяцев.

Процесс сборки и все тонкости с которыми я столкнулся рассказываю в видео.

В итоге power bank работает отлично. Машинка стала ездить быстрее чем раньше.

Как я собирал машинку на Arduino и Motor Shield L293D . Скоро на канале Arduino Portal-PK.

]]>
Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни http://portal-pk.ru/news/71-urok-2-—-podklyuchaem-sdvigovyi-registr-74ns595-k-arduino-.html Константин Portal-PK 2017-04-05T09:24:25+03:00 В данном уроке мы с вами подключим сдвиговый регистр 74HC595 к Arduino. Но все по порядку. Сперва рассмотрим что такое сдвиговый регистр и как он устроен.

74HC595 — восьмиразрядный (это означает, что он имеет 8 управляемых выходов) с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой.

сдвигового регистра 74HC595

Vcc

Питание

Q0...Q7

Параллельные выходы

DS или SER

(Data Serial) Вход для последовательных данных

OE

Вход для переключения состояния выходов из высоко много в рабочее(активация при получении LOW)

ST_CP или RCK

(STorage register Clock input, storage — хранилище) Синронизация(«защелкивание») выходов

SH_Cp или SCK

(SHift register Clock input, shift — сдвиг) Вход для тактовых импульсов

MR

Сброс значений регистра (активация при получении LOW)

Q7S

Выход для последовательного соединения регистров

GND

Земля

При использовании 3 пинов Arduino можно получить 8 выходов к которым мы можем подключить не только светодиоды, но и например драйвер двигателя и пр.

Для примера работы сдвигового регистра 74HC595 подключим светодиоды.

Для Видео урока нам понадобится:

- Arduino UNO или Arduino Nano

- Сдвигового регистра 74HC595

- Плата макетная беспаечная

- Резисторы 220 ОМ

-Соединительные провода папа-папа

-Светодиоды 3 или 5 мм.

Схема подключения сдвигового регистра к плате Arduino UNO.

Схема подключения сдвигового регистра к плате Arduino UNO

Принципиальная схема подключения сдвигового регистра к плате Arduino UNO.

Принципиальная схема подключения сдвигового регистра к плате Arduino UNO.

В видео уроке показан пример работы сдвигового регистра. Скетч управления бегущими огнями в среде Arduino IDE будит вот таким:

int dataPin = 10; //Пин подключен к DS входу 74HC595 
int latchPin = 11; //Пин подключен к ST_CP входу 74HC595 
int clockPin = 12; //Пин подключен к SH_CP входу 74HC595 
void setup() { //устанавливаем режим OUTPUT 
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
} 
void loop() { 
  byte byteToSend = 0; //Создаем пустой байт B00000000 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
    byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
    byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
}

Скетч из видео урока вот такой:

int dataPin = 10; //Пин подключен к DS входу 74HC595 
int latchPin = 11; //Пин подключен к ST_CP входу 74HC595 
int clockPin = 12; //Пин подключен к SH_CP входу 74HC595 
void setup() { //устанавливаем режим OUTPUT 
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
} 
void loop() { 
  byte byteToSend = 0; //Создаем пустой байт B00000000 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
    byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
   byteToSend = 0; // Обнуляем байт при каждом проходе 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
   // byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
}

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

Придумать можно много интересных вариантов применения сдвигового регистра 74HC595 в проектах на Arduino.

Следующий урок: Два сдвиговых регистра 74HC595. Бегущие огни.

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

]]>
Часы на Arduino. Паяем 74HC595N для управления LED. Часть 1 http://portal-pk.ru/news/70-svetodiodnye-chasy-na-arduino-payaem-74hc595n-dlya-upravleniya-led.html Константин Portal-PK 2017-03-30T09:12:38+03:00 В данной статье рассмотрю первый этап сборки LED часов на Arduino. Весь процесс сборки разделю на 4 этапа:

1. Паяем схему управления 26 светодиодами. Подключение к Ардуино и тестирование.

2. Подключаем к Arduino семи сегментный индикатор, датчик температуры и влажности.

3. Подключаем к Arduino модуль реального времени, семи сегментный индикатор и Ir приемник. Настраиваем время с помощью пульта ду.

4. Сборка часов в корпус. Доработка программы.

Сейчас расскажу по порядку про сборку схемы управления 26 светодиодами который будут выводить время с точностью до 1 минуты.

подключение к Arduino UNO 5 сдвиговых регистров 74HC595N и 26 светодиодов


Вот так выгладит подключение к Arduino UNO 5 сдвиговых регистров 74HC595N и 26 светодиодов. Также подключил фото резистор для управления яркостью свечения светодиодов. А в дальнейшем и управление яркостью семисегментного индикатора.

Принципиальная схем подключения к Arduino UNO 5 сдвиговых регистров 74HC595N и 26 светодиодов.

Принципиальная схем подключения к Arduino UNO 5 сдвиговых регистров 74HC595N и 26 светодиодов.

Чтобы проверить работоспособность схемы написал тестовый скетч в среде Arduino IDE

int dataPin = 2; //Пин подключен к DS входу 74HC595 
int latchPin = 3; //Пин подключен к ST_CP входу 74HC595
int clockPin = 4; //Пин подключен к SH_CP входу 74HC595
int pwmPin   = 5;   //Пин подключен к OE входу 74HC595 для управления ШИМ
int fr = 0; //и фоторезистора

byte path[9]= {
  B00000000,
  B00000001,
  B00000010,
  B00000100,
  B00001000,
  B00010000,
  B00100000,
  B01000000,
  B10000000 
  };

void setup() { 
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
  pinMode(pwmPin, OUTPUT);
  
} 
void loop() { 
   
 for (int chas = 1; chas < 12; chas++) { // В переменной хранится позиция изменяемого бита   
  for (int min = 0; min < 60; min++) { // В переменной хранится позиция изменяемого бита 

        int photocell = analogRead(fr); // получаем данные фото резистора
          int LED = map(photocell, 6, 680, 200, 10); /// приводим к нужному диапазону значений 
          analogWrite(pwmPin,LED); // Назначаем выходу ШИМ разные значения

      int val = map(min, 0, 59, 0, 12); // приводим к 12 так как у нас не 60 а 12 
      digitalWrite(latchPin, LOW); // Открыли регистр

      int x = min % 5;   // x остаток от деления на 5
      shiftOut(dataPin, clockPin, MSBFIRST, path[x]);   // передаем последовательно на dataPin - в первом регистре значение B01001100
  
               if (val < 9)
               {                 
                     shiftOut(dataPin, clockPin, MSBFIRST, path[0]); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
                     shiftOut(dataPin, clockPin, MSBFIRST, path[val]);   // передаем последовательно на dataPin - в первом регистре значение B01001100                                              
              }
               else if (val >= 9) // если минут больше 8*5 выводи на второй микросхеме 
               {

                     int val1 = val-8; // 
                 
                     shiftOut(dataPin, clockPin, MSBFIRST, path[val1]); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
                     shiftOut(dataPin, clockPin, MSBFIRST, path[0]);   // передаем последовательно на dataPin - в первом регистре значение B01001100
               }               
               delay(200); // ждем       
               if (chas < 9)
               {
                     shiftOut(dataPin, clockPin, MSBFIRST, path[0]);   // передаем последовательно на dataPin - в первом регистре значение B01001100
                     shiftOut(dataPin, clockPin, MSBFIRST, path[chas]);  // передаем последовательно на dataPin - в первом регистре значение B01001100                                       
               }
               else if (chas >= 9) // если минут больше 8*5 выводи на второй микросхеме 
               {
                     int chas1 = chas-8; // 
                 
                     shiftOut(dataPin, clockPin, MSBFIRST, path[chas1]); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
                     shiftOut(dataPin, clockPin, MSBFIRST, path[0]);   // передаем последовательно на dataPin - в первом регистре значение B01001100
               }
                
              digitalWrite(latchPin, HIGH); /// Закрываем регистр тем самым передаем значение на выводы    
             }
     }
}

Программа не применима для работы часов. Но для проверки работоспособности подключения к Arduino UNO 5 сдвиговых регистров 74HC595N и 26 светодиодам подойдет отлично.

]]>
Своими руками беспроводная Wifi машинка на NodeMCU и RemoteXY http://portal-pk.ru/news/69-svoimi-rukami-besprovodnaya-wifi-mashinka-na-nodemcu-i-remotexy.html Константин Portal-PK 2017-03-29T08:35:07+03:00 В данном проекте я собираю беспроводную Wifi машинку используя самые простые и доступные средства. Установил NodeMCU на микроконтроллере ESP8266. Поставил драйвер L9110S. Сперва думал что драйвер будет греться. Но двигателя постоянного тока которые были в машине не очень мощные и драйвера L9110S достаточно для управления. Вы можете поставить на сваю WIFI машинку другой драйвер например L298N.

Схема подключения для L9110S и для L298N одинаковая. Программа также будет работать с обоими драйверами.

Схема подключения для L9110S или L298N

Схема подключения всех элементов Wi-fi машинки выглядит следующим образом

Схема подключения всех элементов Wi-fi машинки

На Сайте http://remotexy.com/ru/editor/ Сделал приложение RemoteXY.

Приложение RemoteXY NodeMCU для вайфай машинки


Код получился следующий

////////////////////////////////////////////// 
//        RemoteXY include library          // 
////////////////////////////////////////////// 
// определение режима соединения и подключение библиотеки RemoteXY  
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h> 
#include <RemoteXY.h> 
// настройки соединения  
#define REMOTEXY_WIFI_SSID "PortakPK" 
#define REMOTEXY_WIFI_PASSWORD "" 
#define REMOTEXY_SERVER_PORT 6377 
// конфигурация интерфейса   
#pragma pack(push, 1) 
uint8_t RemoteXY_CONF[] = 
  { 255,5,0,0,0,84,0,7,5,0,
  1,1,5,7,22,13,5,208,146,208,
  191,208,181,209,128,208,181,208,180,0,
  1,1,6,43,20,13,4,208,157,208,
  176,208,183,208,176,208,180,0,1,1,
  75,8,18,12,1,208,146,208,187,208,
  181,208,178,208,190,0,1,1,76,43,
  18,13,2,208,146,208,191,209,128,208,
  178,208,190,0,3,3,44,15,13,35,
  2 }; 
// структура определяет все переменные вашего интерфейса управления  
struct { 
    // input variable
  uint8_t button_1; // =1 если кнопка нажата, иначе =0 
  uint8_t button_2; // =1 если кнопка нажата, иначе =0 
  uint8_t button_3; // =1 если кнопка нажата, иначе =0 
  uint8_t button_4; // =1 если кнопка нажата, иначе =0 
  uint8_t select_1; // =0 если переключатель в положении A, =1 если в положении B, =2 если в положении C, ... 
    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 
} RemoteXY; 
#pragma pack(pop) 
///////////////////////////////////////////// 
//           END RemoteXY include          // 
///////////////////////////////////////////// 
#define PIN_BUTTON_1 D1
#define PIN_BUTTON_2 D2
#define PIN_BUTTON_3 D3
#define PIN_BUTTON_4 D4
void setup()  
{ 
  RemoteXY_Init ();  
  pinMode (PIN_BUTTON_1, OUTPUT);
  pinMode (PIN_BUTTON_2, OUTPUT);
  pinMode (PIN_BUTTON_3, OUTPUT);
  pinMode (PIN_BUTTON_4, OUTPUT);
  // TODO you setup code 
} 
void loop()  
{  
  RemoteXY_Handler (); 
  digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_2, (RemoteXY.button_2==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_3, (RemoteXY.button_3==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_4, (RemoteXY.button_4==0)?LOW:HIGH);
  // TODO you loop code 
  // используйте структуру RemoteXY для передачи данных 
}

Подправил код управления движениями и поворотами.

// Движения и повороты ///
  if (RemoteXY.button_1==1) // вперед
  {
     digitalWrite(PIN_BUTTON_1, HIGH);
     if (RemoteXY.select_1 == 1 || RemoteXY.select_1 == 2) //если силектор в положении 1 или 2 включаем переднии фары
      {
        digitalWrite(PIN_LED_5, HIGH);
        digitalWrite(PIN_LED_6, HIGH);
      }
    }
   if (RemoteXY.button_2==1) // назад
  {
      digitalWrite(PIN_BUTTON_2, HIGH);
      if (RemoteXY.select_1 == 1 || RemoteXY.select_1 == 2)//если силектор в положении 1 или 2 включаем стоп сигналы
      {
        digitalWrite(PIN_LED_STOP, HIGH);
      }
    }
  if (RemoteXY.button_3==1)  // влево
  {
     digitalWrite(PIN_BUTTON_3, HIGH);
    }
   if (RemoteXY.button_4==1)  // вправо
  {
      digitalWrite(PIN_BUTTON_4, HIGH);
    }
 //END Движения и повороты ///

Настроил работу селектора

//  Положение селектора 0 и 2   ///   
  if (RemoteXY.select_1 == 2)
      {
        Migalka ();// Мигалка 
      }   
  if (RemoteXY.select_1 == 0)
      {
          digitalWrite(PIN_LED_STOP, LOW); //
          digitalWrite(PIN_LED_5, LOW); // 
          digitalWrite(PIN_LED_6, LOW); // 
          digitalWrite(PIN_LED_7,  LOW); // 
          digitalWrite(PIN_LED_8, LOW); // 
      } 
 //END Положение селектора 0 и 2 ////

Добавил функцию управления полицейским стробоскопом. Данная функция написано на основании Урок 6 - Полицейский стробоскоп своими руками на Arduino.

void Migalka() // Мигалка 
{
 unsigned long curstro1Millis = millis();  // устанавливаем время в сейчас
  if ((curstro1Millis - prestro1Millis) > interval[x]) // проверяем интервал
    {
      if (open) // если true
        digitalWrite(status ? PIN_LED_7 : PIN_LED_8, HIGH); //
      else // иначе
       digitalWrite(status ? PIN_LED_7 : PIN_LED_8, LOW); // 
       x++;
      if (x == 6) // если последний проход по циклу
      {
        status = !status; // передаем слово (меняем текущий пин) меняем false на true и наоборот;
        x=0;
      }
      open = !open; //меняем false на true и наоборот 
    prestro1Millis = curstro1Millis;
  }
}

Чтобы машинке не продолжала движения когда кнопка отпущена написал вот такой код.

// Кнопка не нажата. снимам сигнал с пина //    
   if (RemoteXY.button_1==0)
   {
      digitalWrite(PIN_BUTTON_1, LOW);  
      digitalWrite(PIN_LED_5, LOW); // 
      digitalWrite(PIN_LED_6, LOW); // 
   }
   if (RemoteXY.button_2==0)
   {
      digitalWrite(PIN_LED_STOP, LOW); //
      digitalWrite(PIN_BUTTON_2, LOW); 
   }
   if (RemoteXY.button_3==0)
      digitalWrite(PIN_BUTTON_3, LOW); 
   if (RemoteXY.button_4==0)
      digitalWrite(PIN_BUTTON_4, LOW); 
 //END Кнопка не нажата. снимам сигнал с пина //

В итоге скетч для управления Wifi машинкой в среде Arduino IDE получился следующим.

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////
// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__ESP8266WIFIPOINT_LIB
#include <ESP8266WiFi.h>
#include <RemoteXY.h>
// настройки соединения 
#define REMOTEXY_WIFI_SSID "PortalPK"
#define REMOTEXY_WIFI_PASSWORD ""
#define REMOTEXY_SERVER_PORT 6377 
// конфигурация интерфейса  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 5,0,102,0,6,12,2,1,1,72
  ,10,21,13,49,63,12,12,2,208,155
  ,208,181,208,178,208,190,0,1,1,72
  ,37,21,13,48,82,12,12,1,208,159
  ,209,128,208,176,208,178,208,190,0,1
  ,1,5,10,21,12,5,83,12,12,5
  ,208,146,208,191,208,181,209,128,208,181
  ,208,180,0,1,1,5,37,21,12,5
  ,63,12,12,4,208,157,208,176,208,183
  ,208,176,208,180,0,3,3,44,12,14
  ,38,29,66,8,22,2 }; 
// структура определяет все переменные вашего интерфейса управления 
struct {
    // input variable
  uint8_t button_1; // =1 если кнопка нажата, иначе =0 
  uint8_t button_2; // =1 если кнопка нажата, иначе =0 
  uint8_t button_3; // =1 если кнопка нажата, иначе =0 
  uint8_t button_4; // =1 если кнопка нажата, иначе =0 
  uint8_t select_1; // =0 если переключатель в положении A, =1 если в положении B, =2 если в положении C, ...   
    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////
#define PIN_BUTTON_1 D1
#define PIN_BUTTON_2 D2
#define PIN_BUTTON_3 D3
#define PIN_BUTTON_4 D4
//светодиоды
#define PIN_LED_STOP D0
#define PIN_LED_5 D5
#define PIN_LED_6 D6
#define PIN_LED_7 D7
#define PIN_LED_8 D8
// переменные 
boolean status = true; // флаг, что активна левая
boolean open = true; // флаг, включения
int interval[6]={50, 120, 90, 240, 150, 50};    // интервал включения/выключения LED
long prestro1Millis = 0;        // до мигания ( в целом переменная времени)
int x=0;
void setup() 
{
  RemoteXY_Init (); 
  pinMode (PIN_BUTTON_1, OUTPUT);
  pinMode (PIN_BUTTON_2, OUTPUT);
  pinMode (PIN_BUTTON_3, OUTPUT);
  pinMode (PIN_BUTTON_4, OUTPUT);
    pinMode (PIN_LED_STOP, OUTPUT);
    pinMode (PIN_LED_5, OUTPUT);
    pinMode (PIN_LED_6, OUTPUT);
    pinMode (PIN_LED_7, OUTPUT);
    pinMode (PIN_LED_8, OUTPUT);
}
void loop() 
{ 
  RemoteXY_Handler ();
 // Движения и повороты ///
  if (RemoteXY.button_1==1) // вперед
  {
     digitalWrite(PIN_BUTTON_1, HIGH);
     if (RemoteXY.select_1 == 1 || RemoteXY.select_1 == 2) //если силектор в положении 1 или 2 включаем переднии фары
      {
        digitalWrite(PIN_LED_5, HIGH);
        digitalWrite(PIN_LED_6, HIGH);
      }
    }
   if (RemoteXY.button_2==1) // назад
  {
      digitalWrite(PIN_BUTTON_2, HIGH);
      if (RemoteXY.select_1 == 1 || RemoteXY.select_1 == 2)//если силектор в положении 1 или 2 включаем стоп сигналы
      {
        digitalWrite(PIN_LED_STOP, HIGH);
      }
    }
  if (RemoteXY.button_3==1)  // влево
  {
     digitalWrite(PIN_BUTTON_3, HIGH);
    }
   if (RemoteXY.button_4==1)  // вправо
  {
      digitalWrite(PIN_BUTTON_4, HIGH);
    }
 //END Движения и повороты ///   
 //  Положение селектора 0 и 2   ///   
  if (RemoteXY.select_1 == 2)
      {
        Migalka ();// Мигалка 
      }   
  if (RemoteXY.select_1 == 0)
      {
          digitalWrite(PIN_LED_STOP, LOW); //
          digitalWrite(PIN_LED_5, LOW); // 
          digitalWrite(PIN_LED_6, LOW); // 
          digitalWrite(PIN_LED_7,  LOW); // 
          digitalWrite(PIN_LED_8, LOW); // 
      } 
 //END Положение селектора 0 и 2 ////      
 // Кнопка не нажата. снимам сигнал с пина //    
   if (RemoteXY.button_1==0)
   {
      digitalWrite(PIN_BUTTON_1, LOW);  
      digitalWrite(PIN_LED_5, LOW); // 
      digitalWrite(PIN_LED_6, LOW); // 
   }
   if (RemoteXY.button_2==0)
   {
      digitalWrite(PIN_LED_STOP, LOW); //
      digitalWrite(PIN_BUTTON_2, LOW); 
   }
   if (RemoteXY.button_3==0)
      digitalWrite(PIN_BUTTON_3, LOW); 
   if (RemoteXY.button_4==0)
      digitalWrite(PIN_BUTTON_4, LOW); 
 //END Кнопка не нажата. снимам сигнал с пина // 
}
void Migalka () // Мигалка 
{
 unsigned long curstro1Millis = millis();  // устанавливаем время в сейчас
  if ((curstro1Millis - prestro1Millis) > interval[x]) // проверяем интервал
    {
      if (open) // если true
        digitalWrite(status ? PIN_LED_7 : PIN_LED_8, HIGH); //
      else // иначе
       digitalWrite(status ? PIN_LED_7 : PIN_LED_8, LOW); // 
       x++;
      if (x == 6) // если последний проход по циклу
      {
        status = !status; // передаем слово (меняем текущий пин) меняем false на true и наоборот;
        x=0;
      }
      open = !open; //меняем false на true и наоборот 
    prestro1Millis = curstro1Millis;
  }
}

Код долек от идеального.

При тестирование машинки выявлены следующие недостатки:

1. стандартных батареек не хватает для плавного запуска двигателя машинки. Машинка пищит и не едет.

2. При сильном ударе об стену батарейки отходят и микроконтроллер на время теряет питание в связи с чем происходит потеря сигнала Wifi .

3. Заряда батареек хватает всего на 1 неделю при использовании по 30-60 мин в день .


P.S.: Начал устранят минусы. Ждите продолжения.

]]>
Урок 7 - Светофор на Arduino своими руками. Пишем скетч используя функции http://portal-pk.ru/news/68-urok-7----svetofor-na-arduino--svoimi-rukami-pishem-sketch.html Константин Portal-PK 2017-03-28T12:08:49+03:00 В данном уроке сделаем самый простой светофор из трех светодиодов . Работать он должен вот по такой схеме.

Работа светофора

1. Светит только красный цвет нашего будущего светофора.

2. Не выключая красный сигнал светофора включаем желтый .

3. Выключаем красный и желтый включаем зеленый.

4. Выключаем зеленый сигнал светофора включаем желтый.

После чего цикл повторяем с красного сигнала светофора.

Для урока нам понадобится:

Подключим три LED к плате Arduino UNO . У нас получиться вот такая схема.

Светофор на ардуино своими руками

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

Принципиальная схема подключения светофора на Arduino

Скетч выглядит так

<code>int led_red = 2; // пин подключения 2
int led_yellow = 3; // пин подключения 3
int led_green = 4; // пин подключения 4
void setup() {
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
}
void loop() {
    digitalWrite(led_red, HIGH); 
          delay(10000); // Ждем
    digitalWrite(led_yellow, HIGH); 
          delay(2000);// Ждем
    digitalWrite(led_green, HIGH); 
    digitalWrite(led_red, LOW);
    digitalWrite(led_yellow, LOW);
          delay(10000);// Ждем
    digitalWrite(led_yellow, HIGH);
    digitalWrite(led_green, LOW);
        delay(2000);// Ждем
    digitalWrite(led_yellow, LOW);
}

Для управления светодиодами используем функции digitalWrite().

Давайте заменим стандартную функции digitalWrite() на свою функцию Led().

<code>void Led (uint8_t pin, byte status)
{
      digitalWrite(pin, status);
}

Функция принимает две переменные pin — пин светодиода и status — состояние светодиода HIGH или LOW.

В итоге получим вот такой скетч

<code>int led_red = 2; // пин подключения 2
int led_yellow = 3; // пин подключения 3
int led_green = 4; // пин подключения 4
void setup() {
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
}
void loop() {
    Led (led_red, HIGH); 
          delay(10000); // Ждем
    Led (led_yellow, HIGH); 
          delay(2000);// Ждем
    Led (led_green, HIGH); 
    Led (led_red, LOW);
    Led (led_yellow, LOW);
          delay(10000);// Ждем
    Led (led_yellow, HIGH);
    Led (led_green, LOW);
        delay(2000);// Ждем
    Led (led_yellow, LOW);
}
void Led (uint8_t pin, byte status)
{
      digitalWrite(pin, status);
}


Как видно по скетчу код стал больше, а функции используют для уменьшения объема кода и упрощения логики. Но мы на этом простом примере посмотрели что такое функция и как передавать переменные в функции в среде разработки arduino IDE.

Понятие что такое функции и как их объявлять пригодиться нам в следующем уроке.

Ест вопросы смотрите видео там подробно описываю программу светофора на Arduino.

Следующий урок: Светофор из 3 светодиодов для машин и 2 для пешеходов на Arduino



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

]]>
Урок 6 - Полицейский стробоскоп своими руками на Arduino http://portal-pk.ru/news/67-urok-6-----policeiskii-stroboskop-svoimi-rukami-na-arduino.html Константин Portal-PK 2017-03-28T07:42:08+03:00 В видео уроке : Урок 5 - Полицейская мигалка своими руками из светодиодов на Arduino . Мы подключили два светодиода и заставили их поочередно плавно включатся и выключаться. В данном уроке подключение аналогично предыдущему уроку. Измениться только программа управления.

Для урока нам понадобится:

Подключим два светодиода к плате Arduino UNO . У нас получиться вот такая схема.

полицейский стробоскоп на Arduino

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

Схема принципиальная полицейский стробоскоп на Arduino

Скетч для управления полицейским стробоскопом во такой. Менее 30 строчек кода.

int led_5 = 5; // пин подключения 5
int led_3 = 3; // пин подключения 3
// переменные 
boolean status = true; // флаг, что активна левая
boolean open = true; // флаг, включения
int interval[6]={50, 120, 90, 240, 150, 50};    // интервал включения/выключения LED
void setup()  { 
  // два вывода на выход
  pinMode(led_5, OUTPUT);
  pinMode(led_3, OUTPUT);
} 
void loop()  { 
   for (int x=0; x<6; x++) { // цикл 6 проходов
    if (open) // если true
        digitalWrite(status ? led_3 : led_5, HIGH); // если status == false то падаем на пин 3 иначе на пин 5
    else // иначе
      digitalWrite(status ? led_3 : led_5, LOW); // если status == false то падаем на пин 3 иначе на пин 5
    delay(interval[x]); // Ждем 
     if (x == 5) // если последний проход по циклу
        status = !status; // передаем слово (меняем текущий пин) меняем false на true и наоборот;
    open = !open; //меняем false на true и наоборот;
   }                      
}

Переменные:

// переменные 
boolean status = true; // флаг, что активна левая
boolean open = true; // флаг, включения
int interval[6]={50, 120, 90, 240, 150, 50};    // интервал включения/выключения LED

Переменная status — отвечает за работу левого и правого светодиода. Если статус true (истина). Программа управляет левым светодиодом. Иначе false (ложно) — программа управляет правым светодиодом.

Переменная open — аналогично переменой статус. Если true- светодиод светиться, иначе false — светодиод выключен.

Массив interval- содержит 6 значений. Нечетные значения это время свечения светодиода. Четные время сколько светодиод не светиться между интервалами свечения.

В основно цикле loop() у нас выполняется цикл for() 6 раз, равно столько сколько у нас элементов в массиве interval.

digitalWrite(status ? led_3 : led_5, HIGH); // если status == false то падаем на пин 3 иначе на пин 5

В данной строчке нас интересует вырождение в круглых скобках.

status ? led_3 : led_5

Данное вырождение сокращенная форма условия. По другому данную строку можно написать:

if (status == true) 
    led_3
else
    led_5
delay(interval[x]); // Ждем

Обычная функция delay(). Просто мы передаем в качестве аргумента элемент массива, где x - это номер прохода по циклу

for (int x=0; x<6; x++) { // цикл 6 проходов

Первый элемент interval[0], так как у нас цикл начинается с 0 и нумерация элементов массива начинается с 0. Второй элемент interval[1] и так далее до interval[5].

if (x == 5) // если последний проход по циклу 
   status = !status; // передаем слово (меняем текущий пин) меняем false на true и наоборот;

Если мы делаем проход по циклю меряем статус на противоположный тем самым передаем слова другому светодиоду.

open = !open; //меняем false на true и наоборот;

Переменную open меняем на противоположное значения при каждом выполнении цикла. Для смены свечения светодиода: вкл → выкл →вкл → выкл →вкл → выкл. Так как у нас 6 интервалов времени в массиве interval.

После того как цикл выполнился 6 раз. Передается слова другому светодиоду и все повторяется снова.

Следующий урок: Светофор на Arduino своими руками. Пишем скетч используя функции

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

]]>
Самодельный ЧПУ станок из принтеров своими руками — Часть 2 http://portal-pk.ru/news/66-samodelnyi-chpu-stanok-iz-printerov-svoimi-rukami-␔.html Константин Portal-PK 2017-03-14T09:18:37+03:00 В предыдущей статье: Как собрать ЧПУ станка на Arduino своими руками за 3000 руб - Часть 1 Были рассмотренный основные этапы сборки станка ЧПУ из принтеров на Arduino. В данном обзоре расскажу из каких деталей и комплектующих собирался данный принтер. Покажу как устроены основные узлы. А также сделаем пуск станка на Arduino. Включим шпиндель.

Схема подключения драйверов L298n к Arduino NANO

Схема подключения драйверов L298n к Arduino NANO

Схема подключения шагового двигателя к L298n

Схема подключения шагового двигателя к L298n

Схема подключения с двумя двигателями на оси X:

Схема подключения с двумя двигателями на оси X

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


Для сборки ЧПУ станка из деталей от принтера были использовано:

  1. 3 Матричных принтера формата А3.
  2. Мебельные направляющие: 2 пары 500 мм. И одна пара на 300 мм.
  3. Доска 25х100, брусок 25х25, фанера толщиной 8 мм.
  4. Блок питания от компьютера.
  5. Arduino NANO
  6. Драйвера L298 4 шт.
  7. Строительные и мебельные уголки.
  8. Саморезы, винты, гайки и шпилька М10.
  9. Телефонные провода, провода из компьютера.
  10. Переменный резистор из автомобиля.
  11. Двигатель от автомобильного компрессора.
  12. Шаговый двигатель от сканера.
  13. Латунная цанга.

Кратко что для чего применялось в ЧПУ стнке:

Ось X ЧПУ станка сделана из двух оснований от матричных принтеров формата А3. С помощью брусков 25х25 сделана обвязка оснований принтеров и на данные бруски закреплены две мебельные направляющие длиной 500 мм. На мебельные направляющие сверху закреплен лист фанеры польщенной 8 мм.

Двигатель принтера станка ЧПУ

Ось X Станка ЧПУ из принтеров

Ось Y станка на Arduino расположена на портале,который сделан из трех досок 25х100 мм. Для перемещения используется двигатель от матричного принтера и ременная передача. Направляющие также мебельные длиной 500 мм.

Двигатель из принтера для станка ЧПУ

Ось Z ЧПУ закреплена на направляющие оси Y. Для перемещения был использован шаговый двигатель взятый из сканера. Передача винтовая сделанная из шпильки М10. Направляющи мебельные длиной 300 мм. Соединенные под углом 90 градусов для жесткости.

Шаговый двигатель из сканера для станка ЧПУ

Шпиндель из двигателя от автомобильного компрессора

Шпиндель станка ЧПУ сделан из двигателя взятого из нерабочего автомобильного компрессора. На вал двигателя закреплена цанга.

Управляет станком Arduino NANO. Драйвера L298. Для понижения напряжения с 12 вольт до 8, используются транзисторы.

Станок ЧПУ на Arduino

Драйвера L298 Для станка ЧПУ на Arduino

Смотрите также видео:

Фрезерование на самодельном фрезерном станке ЧПУ.

]]>
Бесплатный аккумулятор 18650 из батареи ноутбука http://portal-pk.ru/news/65-besplatnyi-akkumulyator-18650-iz-batarei-noutbuka.html Константин Portal-PK 2017-03-09T08:16:18+03:00 Отдали мне старую батарею от ноутбука. Как я уже знал в батареях от ноутбука находятся аккумуляторные батарейки 18650. Поэтому я решил разобрать батарею и снять видео как это сделать.

Разобрать батарею от ноутбука не составило труда. Батарейки я извлек. После проверки оказалось что рабочих всего 3 аккумулятора 18650 . Ну что стоило ожидать от такой старой батареи.

Так же решил сделать с помощью неодимовых магнитов подключения к батарейкам 18650. Для этого я вырезал из консервной банки два элемента в виде капелек. Припаял провода и в месте пайки установил термоупрочненную трубку.

Данного рода подключения для аккумуляторов 18650 эффективны. Но имеют ряд недостатков. Хорошо бы сделать бокс для аккумулятора. Но этим я займусь в следующий раз.


]]>
Как собрать ЧПУ станка на Arduino своими руками за 3000 руб - Часть 1 http://portal-pk.ru/news/64-kak-sobrat-chpu-stanka-na-arduino-svoimi-rukami-za-3000-rub--.html Константин Portal-PK 2017-03-09T07:45:21+03:00 В век информатизации и автоматизации. Станок с ЧПУ очень распространенный и им ни кого не удавишь. И многие самостоятельно собирают данные станки в домашних условиях. Не так давно мой старый знакомый предложил собрать станок. Он работает на фрезерном станке с ЧПУ. После небольшого размышления, мы приняли решения что будем собирать станок ЧПУ с минимальной затратой средств.

Схема подключения драйверов L298n к Arduino NANO

Схема подключения драйверов L298n к Arduino NANO

Схема подключения шагового двигателя к L298n

Схема подключения шагового двигателя к L298n

Схема подключения с двумя двигателями на оси X:

Схема подключения с двумя двигателями на оси X

Цель создания станка ЧПУ:

Во-первых, чтобы проверить свои силы и возможности.

Во-вторых, первый бил чаше всего бывает комом. Но не в нашем случае. Буквально за 2 выходных мы собрали станок который перемешался по 2 осям.

После чего мы провели небольшие доработки. Вот что у нас получилось:

Для управления выбрали Arduino NANO. Дешевый и надежный вариант, так как для ардуины большой выбор прошивок и программ для управления станком. Блок питания взяли от компьютера. Мотор для шпинделя взят от сломленного автомобильного компрессора. Полный обзор схемы и программы будет в следующем видео.

Для сборки были использованы материалы который у нас лежали без дела. Купили только мебельные направляющие. И один матричный принтер. В итоге наш расход привесил чуть больше 2000 руб. Написал в заголовке станок ЧПУ за 3000 руб. потому что если все покупать то в данную сумму можно уложиться.

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


]]>
Выводы, сконфигурированные как INPUT_PULLUP http://portal-pk.ru/news/63-vyvody-skonfigurirovannye-kak-input_pullup.html Константин Portal-PK 2017-03-02T08:26:09+03:00 Микроконтроллер ATmega в Ардуино имеет внутренние подтягивающие резисторы (резисторы, подключенные к питанию внутри микросхемы), которыми можно управлять. Если вы предпочитаете использовать их вместо внешних резисторов, подключенных к земле, - используйте параметр INPUT_PULLUP в функции pinMode(). Это позволит инвертировать поведение подключенного к выводу внешнего датчика: HIGH будет означать его отключение, а LOW - включение. См. пример использования INPUT_PULLUP при последовательной связи.

]]>
Самодельные соединительные провода для breadboard и Arduino http://portal-pk.ru/news/62-samodelnye-soedinitelnye-provoda-dlya-breadboard.html Константин Portal-PK 2017-03-02T08:01:42+03:00 При изучении электроники и микроконтроллеров не обойтись без breadboard — макетная плата, плата для макетирования (прототипирования).

Но бредборда недостаточно. Нужны соединительные провода, которые можно купить в Китае за 2-3 рубля за штуку. Или сделать самому из подручных средств.

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

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

Отличные перемычки для бредборда получаются из проводов взятых из витой пары и телефонных проводов. О чем я рассказываю в видео ролике.

Кроме подключения бредборада к Arduino или другим микроконтроллерам. Нужно подключать другие элементы схемы: двигателя, большие резисторы, катушки, источники питания, платы и пр. Не всегда удобно к ним припаивать провода для одного подключения. Для решения данной задачи подойдут проводов с крокодилами, которые также продаются в Китае. Пара таких проводов стоят от 30 до 100 руб. В магазине крокодилы стоят 5-10 руб шт. В целях экономии средств и времени можно сделать данные провода самостоятельно.

Плюсы самодельных проводов для breadboard:

  1. Можно сделать провод любой длины
  2. Одножильные провода занимают меньше места при монтаже и не мешаются.
  3. Не нужно ждать пока они прейдут из Китая
  4. При потребности можно сделать еще
  5. Дешевле

Минусы самодельных проводов для breadboard:

  1. Качество не всегда получаться как у фабричных
  2. Затраты время на изготовления


Как видно плюсов больше, но решать вам делать или нет самодельные провода для бредборда.

]]>
float() http://portal-pk.ru/news/61-float.html Константин Portal-PK 2017-03-01T12:38:40+03:00 Описание

Приводит значение к типу float.

Синтаксис

float(x)

Параметры

x: значение любого типа

Возвращаемые значения

float

]]>
long() http://portal-pk.ru/news/60-long.html Константин Portal-PK 2017-03-01T12:36:38+03:00 Описание

Приводит значение к типу long.

Синтаксис

long(x)

Параметры

x: значение любого типа

Возвращаемые значения

long

]]>
word() http://portal-pk.ru/news/59-word.html Константин Portal-PK 2017-03-01T12:34:34+03:00 Описание

Приводит значение к типу word или создает значение типа word из двух байт.

Синтаксис

word(x)
word(h, l)

Параметры

x: значение любого типа

h: старший байт (левая часть) значения word

l: младший байт (правая часть) значения word

Возвращаемые значения

word


]]>
int() http://portal-pk.ru/news/58-int.html Константин Portal-PK 2017-03-01T12:32:44+03:00 Описание

Приводит значение к типу int.

Синтаксис

int(x)

Параметры

x: значение любого типа

Возвращаемые значения

int


]]>
byte() http://portal-pk.ru/news/57-byte.html Константин Portal-PK 2017-03-01T12:30:30+03:00 Описание

Приводит значение к типу byte.

Синтаксис

byte(x)

Параметры

x: значение любого типа

Возвращаемые значения

byte


]]>
char() Преобразование типов данных http://portal-pk.ru/news/56-char-preobrazovanie-tipov-dannyh.html Константин Portal-PK 2017-03-01T12:27:37+03:00 Описание

Приводит значение к типу char.

Синтаксис

char(x)

Параметры

x: значение любого типа

Возвращаемые значения

char


]]>
Урок 5 - Полицейская мигалка своими руками из светодиодов на Arduino http://portal-pk.ru/news/55-urok-5---policeiskaya-migalka-svoimi-rukami-iz-.html Константин Portal-PK 2017-02-27T08:16:36+03:00 Каждый мальчишка мечтает о полицейской машинке с мигалкой . Сейчас в продаже очень большой выбор полицейских, пожарных машин и другой спец техники. Можно найти с мигалкой и сиреной. Но можно ли самому собрать мигалку и на сколько это сложно?

В данном уроке мы сделаем самый простой пример мигалки на двух светодиодах.

Для урока нам понадобиться:

Подключим два светодиода к плате Arduino UNO. У нас получиться вот такая схема.

Полицейская мигалка на Arduino

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

Полицейская мигалка на Arduino схема подключения


Скетч аналогичен уроку : Урок 3 — плавное включение светодиода на Arduino с помощью ШИМ (PWM) . В данном уроке нам нужно подключать светодиоды к пинам у которых есть ШИМ. Поэтому подключим к 3 и 5 цифровому выводу/выводу Arduino.

<code>int led_5 = 5; // пин подключения 5
int led_3 = 3; // пин подключения 3
int brightness = 0;    // яркость светодиода 
int fadeAmount = 5;   // шаг изменения яркости
void setup()  { 
  // два вывода на выход
  pinMode(led_5, OUTPUT);
  pinMode(led_3, OUTPUT);
} 
void loop()  { 
  // у первого вывода минимальное значение,  у второго - максимальное
  analogWrite(led_5, brightness); 
  analogWrite(led_3, 255 - brightness);  
  brightness = brightness + fadeAmount; // прибавляем шаг изменения яркости
  // Проверяем границы 
  if (brightness == 0 || brightness == 255) {// Условие
    fadeAmount = -fadeAmount ; // Меняем знак
    delay(200); // Ждем 
  }     
  delay(10); // Ждем                           
}

В код добавим инверсию для одного светодиода для этого добавим следующую строчку:

<code>analogWrite(led_3, 255 - brightness);

Данная строчке свечение светодиода противоположно строчке:

<code>analogWrite(led_5, brightness);

Если brightness = 255, светодиод подключенный к третьему пину не светиться, а к пятому, напротив светит на полную мощность.

Когда brightness = 0 светодиод подключенный к третьему пину светится на полную мощность, а к пятому не светиться.

Оба светодиода светят одинаково в половину мощности.

Трудностей возникнуть не должно если вы смотрели предыдущие уроки.

Следующий урок: Полицейский стробоскоп своими руками на Arduino


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

]]>
Урок 4 - Сигнал SOS с помощью светодиода и Arduino http://portal-pk.ru/news/54-urok-4---signal-sos-s-pomoshchyu-svetodioda-i-arduino.html Константин Portal-PK 2017-02-21T08:27:53+03:00 SOS — радиосигнал о помощи, терпящих бедствие на море. Состоит из сочетания трех точек, трёх тире и ещё трех точек азбуки Морзе. Мнение, будто SOS — аббревиатура английского словосочетания «Save Our Souls» («Спасите наши души») или «Save Our Ship» («Спасите наш корабль») — красивая легенда. На самом деле расшифровки нет, просто соединение точек, тире, точек — наиболее простая и отчетливая комбинация.

Подать сигнал SOS можно с помощью Дыма, огня, отражения. В данном уроке мы научимся подавать сигнал бедствия с помощью светодиода и Arduino.

Для урока нам понадобиться:

Схема подключения такая же как и в уроке: Мигаем светодиодом на Arduino.


Сигнал SOS на Arduino

В скетче будут использоваться 3 цикла for в среде разработке Arduino IDE. (В Видео ролике немного наврал, циклы for мы еще не рассматривали.)

<code>int led_pin=3;          // пин подключения
void setup() {
pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
}
void  loop()  { 
   for (int x=0; x<3; x++) {
    digitalWrite(led_pin, HIGH);// зажигаем светодиод
    delay(250);         // ждем 350 милисекунд
    digitalWrite(led_pin, LOW); // выключаем светодиод
    delay(100);         // ждем 300 милисекунд
   }
   delay(300);
   for (int x=0; x<3; x++) {
    digitalWrite(led_pin, HIGH);// зажигаем светодиод
    delay(500);         // ждем 700 милисекунд
    digitalWrite(led_pin, LOW); // выключаем светодиод
    delay(100);         // ждем 300 милисекунд
   }
   delay(300);
   for (int x=0; x<3; x++) {
    digitalWrite(led_pin, HIGH);// зажигаем светодиод
    delay(250);         // ждем 350 милисекунд
    digitalWrite(led_pin, LOW); // выключаем светодиод
    delay(100);         // ждем 300 милисекунд
   }
  delay(5000); // ждем 5 секунд
}

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

Заголовок цикла for состоит из трех частей:

for (initialization; condition; increment) {операторы выполняющиеся в цикле}

Инициализация (Initialization) выполняется самой первой и один раз. Каждый раз в цикле проверяется условие (condition), если оно верно, выполняется блок операторов и приращение (increment), затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается.

<code>for (int x=0; x<3; x++)

int x=0 — Присвоим переменной x значение равное 0.

x<3; - Если x Меньше чем 3 выполняем цикл.

x++ - При каждом выполнении цикла прибавляем к x единицу. По другому данную строку можно записать x=x+1.

Изначально Икс ( x) равен 0. Сравниваем 0<3, прибавляем к x единицу и выполняем действия в {}. После выполнения действия в скобках. Выполняем проверку x у нас сейчас равен 1. 1<3, прибавляем к x единицу и выполняем действия в {}. Аналогично пройдет третий проход по циклу. А при попытке выполнить цикл четвертый раз у нас получиться что 3=3. Условия цикла не выполняется. Выполнение цикла прекращаться.

Остальные циклы в скетче выполняются аналогично.

Следующий урок: Мигалка из 2 светодиодов на Arduino

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


]]>
Урок 1 -Подключает servo-привод к arduino. Сервопривод + кнопка http://portal-pk.ru/news/53-urok-1--podklyuchaet-servo-privod-k-arduino-servoprivod-+.html Константин Portal-PK 2017-02-17T14:02:06+03:00 Сервопривод – это привод, вал которого может встать в заданное положение или поддерживать заданную скорость вращения. Другими словами, валом сервопривода можно управлять, например, задавая ему положение в градусах или определенную частоту вращения.

Сервоприводы используются в самых разных областях, например, в робототехнике они помогают моделировать различные движения роботов. Сервоприводы – эффективное решение для перемещения механизмов в пространстве.

В этом уроке мы научимся управлять сервоприводом.

Для урока нам понадобиться:

Подключение сервопривода к Arduino.

Для достижения самых разных целей робототехники к программируемому контроллеру Arduino может быть подключен сервопривод. Подключение осуществляется через кабели, которые выходят из сервопривода. Обычно это три кабеля: красный; коричневый или черный; желтый, оранжевый или белый.

Подключение сервопривода к плате Arduino производится через ШИМ-выводы. Что Такое PWM (ШИМ) мы уже рассматривали в уроке: Плавное включение светодиода на Arduino с помощью ШИМ (PWM)

За основу возьмем урок Подключение кнопки и светодиода плате Arduino к схеме добавим сервопривод и вот что у нас должно получиться.

Servo Arduino

Принципиальная схема подключения сервопривода к плате ардуино

Изменим код:

#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo; // объявляем переменную servo типа "servo"
int led_pin=3;          // пин подключения
int button_pin = 4;     // пин кнопки
// переменные
int buttonState = 0;          // переменная для хранения состояния кнопки
void setup() { 
    pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
    servo.attach(5); // привязываем сервопривод к аналоговому выходу 10
}
void loop() {
  buttonState = digitalRead(button_pin);// считываем значения с входа кнопки
   if (buttonState == HIGH) { 
    digitalWrite(led_pin, HIGH);// зажигаем светодиод
    servo.write(0); //ставим вал на 180
    delay (1000); // задержка в 1 секунду
  }
  else {
    digitalWrite(led_pin, LOW);// выключаем светодиод
    servo.write(180); //ставим вал на 0
    delay (1000); // задержка в 1 секунду
  }
}


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

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

Ка вы поняли строка выше подключает нашу библиотеку Servo.h, после чего мы можем использовать все функции данной библиотеки.

Servo servo; // объявляем переменную servo типа "servo"

Объявлением переменную, она нам понадобиться для работы с библиотекой.

servo.attach(5); // привязываем сервопривод к аналоговому выходу 5

Функция библиотеки Servo.

servo.write(180); //ставим вал на 180

С помощью данной функции мы можем повернуть сервопривод на заданный угол.

Управление сервоприводом с помощью потенциометра.

#include <Servo.h>

Servo myservo;  

int potpin = 0;  
int val;   

void setup() {
  myservo.attach(9); 
}

void loop() {
  val = analogRead(potpin);            
  val = map(val, 0, 1023, 0, 180);     
  myservo.write(val);                  
  delay(15);                           
}

Схема подключения сервопривода и потенциометра к Arduino.

Схема подключения сервопривода и потенциометра к Arduino.

Следующий урок: IR Пульт. Включение выключение светодиода.


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

]]>
Блок питания 5v от сети 220 для arduino http://portal-pk.ru/news/52-blok-pitaniya-5v-ot-seti-220-dlya-arduino.html Константин Portal-PK 2017-02-17T07:57:44+03:00 При работе с проектами на Arduino, USB провод не всегда под рукой. А платы Arduino Mini Pro не имеют usb-интерфейса. Как подать питание на наши проекты? Не ужели постоянно пользоваться батарейками или покупать дорогие блоки питания?

Для себя я нашел недорогое решение: модуль преобразующий 220v AC в 5v DC.

Модуль питания 5 Вольт

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

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

Блок питания 5 вольт из яйца из под киндерсюрприза

Купить модуль преобразований 220v AC в 5v DC у проверенного продавца можно тут.

Да встречи в следующем проекте!

]]>
Библиотека Servo http://portal-pk.ru/news/51-biblioteka-servo.html Константин Portal-PK 2017-02-13T12:06:07+03:00 Эта библиотека функций для Arduino контроллера предоставляет набор функций для управления сервоприводами. Стандартные сервоприводы позволяют поворачивать привод на опредленный угол от 0 до 180 градусов обычно. Некоторые сервоприводы позволяют совершать полные обороты на заданной скорости.

Библиотека Servo позволяет одновременно управлять 12-ю сервоприводами на большинстве плат Arduino и 48-ю на Arduino Mega. На контроллерах отличных от Mega использование библиотеки отключает возможность использовать выходы 9 и 10 врежиме ШИМ даже если привод не подключен к этим выводам. На плате Mega могут быть использованы до 12 сервоприводов без потери функционала ШИМ. При использовании Mega для управления от 12 до 23 сервоприводов нельзя будет использовать выходы 11 и 12 для ШИМ.

Подключение

В общем случае сервопривод подключается 3-мя проводами : питание, земля и сигнальный. Обычно питание - красный провод и может быть подключен к выводу +5V на плате Arduino. Черный провод земля подключается к GND выводу Arduino, сигнальный, обычно желты, провод подключается к цифровому выводу котроллера Arduino. Следует отметить, что мощные сервоприводы могут создавать большую нагрузку, в этом случает он должен быть запитан отдельно (не через выход +5V Arduino). Тоже самое верно для случая подключения сразу нескольких сервоприводов. Убедитесь, что привод и контроллер подключены к общей земле.

Функции:


Servo.attach()

Подключает Servo к указанному выходу, с которого осуществляется управление приводом. На ранних версиях Arduino - 0016 и более ранних, библиотека Servo поддерживала управления только через порты 9 и 10.

Синтаксис

servo.attach(pin)
servo.attach(pin, min, max)

Параметры

  • servo: переменная типа Servo
  • pin: номер выхода, к которому подключаем servo и с которого осуществляется управление приводом
  • min (опциональный): ширина импульса в микросекундах, соответствующий минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544)
  • max (optional): ширина импульса в микросекундах, соответствующий максимальному (угол 180 градусов) положению сервопривода.

Пример

#include <Servo.h> 
Servo myservo;
    void setup() 
{ 
  myservo.attach(9);
} 
    void loop() {}


Servo.write()

Передает значения для управления приводом. Для стандартного сервопривода это угол поворота. Для привод постоянного вращения, функция задает скорость вращения (0 - для максимальной скорости вращения в одну сторону, 180 - для максимальной скорости в другую сторону и около 90 для неподвижного состояния).

Синтаксис

servo.write(angle)

Параметры

  • servo: переменная типа Servo
  • angle: значение записываемое в servo, от 0 до 180

Пример

#include <Servo.h> 
Servo myservo;
 void setup() 
{ 
  myservo.attach(9);
  myservo.write(90);  // устанавливает сервопривод в среднее положение
} 
  void loop() {}


Servo.writeMicroseconds()

Передает значение для управления сревоприводом в микросекундах (uS), устанавливая угол поворота на это значение. Для стандартного привода значение 1000 максимальный поворот против часовой стрелки, 2000 максимальный поворот по часовой стрелке, 1500 посередине.

Замечание: некоторые производители не придерживаются стандартных значение и такие приводы могут управляться значениями от 700 до 2300. Поэкспериментируйте со значениями, до момента пока привод не повернется и остановится в крайнем положение. Тем не менее следует избегать постоянного использования привода на значениях больше допустимых.

Приводы постоянного вращения реагируют на данную комманду подобно реакции на функцию write().

Синтаксис

servo.writeMicroseconds(uS)

Параметры

  • servo: переменная типа Servo
  • uS: значение в микросекундах (int)

Пример

#include <Servo.h> 

Servo myservo;

void setup() 
{ 
  myservo.attach(9);
  myservo.writeMicroseconds(1500);  // устанавливает привод в среднее положение
} 

void loop() {}


Servo.read()

Считывает значение текущего положения сервопривода (значение записанное последним вызовом функции write()).

Синтаксис

servo.read()

Параметры

  • servo: a variable of type Servo

Возвращаемое значение

Положение (угол) сервопривода от 0 до 180.


Servo.attached()

Проверяет если переменная Servo подключена к выходу.

Синтаксис

servo.attached()

Параметры

  • servo: переменная типа Servo

Возвращаемое значение

  • true если подключена; false в противном случае.

Servo.detach()

Отсоединяет переменную Servo от указанного выхода. Если все Servo переменные отсоединены, то выходы 9 и 10 могут быть использованы в режиме ШИМ с помощью analogWrite().

Синтаксис

servo.detach()

Параметры

  • servo: переменная типа Servo
]]>
Константы с плавающей запятой (floating point constants) http://portal-pk.ru/news/50-konstanty-s-plavayushchei-zapyatoi-floating-point-constants.html Константин Portal-PK 2017-02-13T12:01:15+03:00 Очень похожи на целочисленные константы. Используются в коде программы для более удобного понимания и чтения кода. Значения записываются по зарубежному стандарту только через точку.

Пример

n = .005;

Также принимаются значения, записанные с экспонентой вида «Е» и «е».

Формат записи константы с плавающей запятой Значение константы: либо:
10.0 10
2.34Е5 2.34 * 10^5 234000
67е-12 67.0 * 10^-12 .000000000067
]]>
Целочисленные константы http://portal-pk.ru/news/49-celochislennye-konstanty.html Константин Portal-PK 2017-02-13T11:59:07+03:00 Целочисленные константы — это числа используемые напрямую в коде скетча, без определения переменной для их хранения. По умолчанию такие константы трактуются как тип int, но это может быть изменено директивами U и L (см. ниже)

Обычно такие константы считаются десятичными целыми числами, но специальные директивы позволяют задать отличный базис.

Базис Пример Директива Комментарий
10 (decimal- десятеричный 123 нет
2 ( binary - двоичный) B1110111 первая B только для 8-бит значений (0-255), разрешенные знаки 0 и 1
8 (octal) 073 первая "0" разрешенные знаки 0-7
16(hexadecimal) 0x7B первые "0x" разрешенные знаки 0-9, A-F, a-f

Decimal (десятичные) базис 10. Наиболее распространен. Константы без префиксов (директив) по умолчанию считаются десятичными

Пример:

101     // 101 десятичные   ((1 * 10^2) + (0 * 10^1) + 1)

Binary (двоичный или бинарный) базис 2. Только 0 и 1 разрешены для записи.

Пример:

B101    // тоже что 5 десятичных   ((1 * 2^2) + (0 * 2^1) + 1)

Использование двоичного формата допускается только с 8-битными числами, принимающими значение от 0 (B0) до 255(B11111111). Если необходимо задать значение 16-битного целого )int бинарными константами, то это может быть сделано в два шага:

myInt = (B11001100 * 256) + B10101010;

Octal — базис 8. Допустимы 0-7. Форматирующий префикс "0".

Пример:

0101    // то же, что десятичное 65   ((1 * 8^2) + (0 * 8^1) + 1)

Внимание! Включение "0" перед константой по ошибке может привести к очень сложно-диагностируемой ошибке, из-за того, что компилятор будет считать константу в восьмеричной системе.

Hexadecimal (or hex) базис 16. Допустимы знаки 0-9, A-F и a-f. A — это десятеричное 10, B — 11, и т.д до F — 15. Предваряющий "0x" используется как форматирующая директива.

Пример:

0x101   // same as 257 decimal   ((1 * 16^2) + (0 * 16^1) + 1)

U и L директивы.

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

  • 'u' или 'U' для беззнакового целочисленного числа. Пример: 33u
  • 'l' или 'L' для long типа данных. Пример: 100000L
  • 'ul' или 'UL' для беззнакового числа long типа данных. Пример: 32767ul
]]>
Урок 1 - Подключение кнопки и светодиода к плате Arduino http://portal-pk.ru/news/48-urok-1---podklyuchenie-knopki-i-svetodioda-k-plate-arduino.html Константин Portal-PK 2017-02-10T11:34:05+03:00 В блоке уроков Светодиоды, Резисторы, Arduino . Мы научились управлять светодиодом с помощью платы Arduino. Но как сделать включение светодиода при нажатии кнопки?

В данном уроке мы рассмотрим самый простой способ управления светодиодом.

Для урока нам понадобиться:

В уроке Мигаем светодиодом на Arduino мы уже рассмотрели программу и схему подключения светодиода. Добавим к ней кнопку и у нас получиться:

Урок 1 - Подключение кнопки и светодиода к плате Arduino

Принципиальная схема подключения кнопки к arduino

Скетч получится довольно простой.

int led_pin=3;          // пин подключения
int button_pin = 4;     // пин кнопки
void setup() { 
    pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
}
void loop() {
   if (digitalRead(button_pin) == HIGH) { // Если кнопка нажата 
      digitalWrite(led_pin, HIGH);// зажигаем светодиод
 }
  else { //Иначе
      digitalWrite(led_pin, LOW);// выключаем светодиод
  }
}

Данный код практически не применим в практике, но нам для примера будет достаточно.

pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.

В данной строчке пин button сконфигурирован как вход, для дальнейшего приема на него сигнала.

if (digitalRead(button_pin) == HIGH) { // Если кнопка нажата

Считываем цифровое значение с pin button. Если получаем 5В, это значит HIGH и 0В LOW.

Конструкция if..else предоставляет больший контроль над процессом выполнения кода, чем базовый оператор if, позволяя осуществлять несколько проверок, объединенных вместе.

if (digitalRead(button_pin) == HIGH) //Если на пин button приходит сигнал HIGH то выполняем действие А
 { 
    // действие A
 }
else  //Иначе. В нашем случае если на пин button приходит LOW, выполняем действие В
 { 
    // действие B
 }

Если вам что то не понятно посмотрите уроки в блоке: Светодиоды, Резисторы, Arduino

Следующий урок: Arduino управляем двумя светодиодами с помощью кнопки

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


]]>
Функция analogWrite() http://portal-pk.ru/news/47-funkciya-analogwrite.html Константин Portal-PK 2017-02-08T13:53:34+03:00 Описание

Выдает аналоговую величину (ШИМ волну) на порт вход/выхода. Функция может быть полезна для управления яркостью подключенного светодиода или скоростью электродвигателя. После вызова analogWrite() на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова analogWrite (или вызова digitalWriteили digitalRead на том же порту вход/выхода). Частота ШИМ сигнала приблизительно 490 Hz.

На большинстве плат Arduino (на базе микроконтроллера ATmega168 или ATmega328) ШИМ поддерживают порты 3, 5, 6, 9, 10 и 11, на плате Arduino Mega порты с 2 по 13. На более ранних версиях плат Arduino analogWrite() работал только на портах 9, 10 и 11.

Для вызова analogWrite() нет необходимости устанавливать тип вход/выхода функцией pinMode().

Функция analogWrite никак не связана с аналоговыми входами и с функцией analogRead.

Синтаксис

analogWrite(pin, value)

Параметры
  • pin: порт вход/выхода на который подаем ШИМ сигнал.
  • value: период рабочего цикла значение между 0 (полностью выключено) and 255 (сигнал подан постоянно).
Возвращаемое значение

нет

Замечание

Период ШИМ сигнала на портах вход/выхода 5 и 6 будет несколько длиннее. Это связано с тем, что таймер для данных выходов также задействован функциями millis() и delay(). Данный эффект более заметен при установке коротких периодов ШИМ сигнала (0-10).

Пример

Задание яркости светодиода пропорционально значению, снимаемому с потенциометра

int ledPin = 9;    // Светодиод подключен к выходы 9
int analogPin = 3; // потенциометр подключен к выходу 3
int val = 0;       // переменная для хранения значения

void setup()
{
    pinMode(ledPin, OUTPUT);      // установка порта на выход
}

void loop()
{
    val = analogRead(analogPin);  // считываем значение с порта, подключенному к потенциометру
    analogWrite(ledPin, val / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
}
]]>
Функция analogReference() http://portal-pk.ru/news/46-funkciya-analogreference.html Константин Portal-PK 2017-02-08T13:51:48+03:00 Описание

Функция определяет опорное напряжение относительно которого происходят аналоговые измерения. Функция analogRead() возвращает значение с разрешением 10 бит пропорционально входному напряжению на аналоговом входе, и в зависимости от опорного напряжения.

Возможные настройки:

  • DEFAULT: стандартное опорное напряжение 5 В (на платформах с напряжением питания 5 В) или 3.3 В (на платформах с напряжением питания 3.3 В)
  • INTERNAL: встроенное опорное напряжение 1.1 В на микроконтроллерах ATmega168 и ATmega328, и 2.56 В на ATmega8.
  • INTERNAL1V1: встроенное опорное напряжение 1.1 В (Arduino Mega)
  • INTERNAL2V56: встроенное опорное напряжение 2.56 (Arduino Mega)
  • EXTERNAL: внешний источник опорного напряжения, подключенный к выводу AREF
Синтаксис
analogReference(type)
Параметры

type: определяет используемое опорное напряжение (DEFAULT, INTERNAL или EXTERNAL).

Возвращаемое значение

нет

Внимание

Внешнее напряжение рекомендуется подключать к выводу AREF через резистор 5 кОм.

Таким образом уменьшается риск повреждения микросхемы Atmega если настройки analogReference не совпадают с возможностями платформы. Однако при этом произойдет небольшая просадка напряжения, вследствие того, что имеется встроенный резистор 32 кОм, подключенный к выводу AREF. В этом случае оба резистора работают как делитель напряжения. Подсоединение внешнего резистора позволяет быстро переключаться на напряжение 3.3 В вывода AREF с напряжения 5 В DEFAULT без конфигурации аппаратной части и АЦП.

Использование вывода AREF

Напряжение, подключенное к выводу AREF, конвертируется АЦП и, затем, определяется значение напряжения, при котором АЦП выдает самое высокое цифровое значение, т.е 1023. Другие значения напряжения, поступающие в АЦП, конвертируются пропорционально. Таким образом, при настройке DEFAULT 5 В значение напряжения 2.5 В в АЦП будет конвертироваться в 512.

В стандартной конфигурации платформ Arduino вывод AREF (вывод 21 Atmega) не задействован. В этом случае при настройке DEFAULT к выводу подключается внутреннее напряжение AVCC. Соединение является низко-импедансным и любое напряжение подведенное к выводу в этот момент может повредить микросхему ATMEGA.

Настройкой INTERNAL к выводу AREF подключается внутреннее напряжение 1.1 В (или 2.56 микросхемы ATmega8). При этом напряжение соответствующее или превышающее 1.1 В будет конвертироваться АЦП в 1023. Другие значения напряжения конвертируются пропорционально.

Внутреннее подключение источника 1.1 В к выводу является высоко-импедансным, что означает, что для измерение напряжения на выводе может быть произведено только мультиметром с высоким сопротивлением. Ошибочное подключение напряжения к выводу AREF при этой настройке функции analogReference не повредит микросхему, но превысит значение 1.1 В. В этом случае АЦП будет конвертировать напряжение внешнего источника. Во избежание вышеописанных проблем настоятельно рекомендуется подключать внешнее напряжение через резистор 5 кОм.

Рекомендуемой настройкой для вывода AREF является EXTERNAL. При этом происходит отключение обоих внутренних источников, и внешнее напряжение будет являться опорным для АЦП.

]]>
Функция analogRead() http://portal-pk.ru/news/45-funkciya-analogread.html Константин Portal-PK 2017-02-08T13:49:11+03:00 Функция считывает значение с указанного аналогового входа. Большинство плат Arduino имеют 6 каналов (8 каналов у платы Mini и Nano, 16 у Mega) c 10-битным аналого-цифровым преобразователем (АЦП). Напряжение поданное на аналоговый вход, обычно от 0 до 5 вольт будет преобразовано в значение от 0 до 1023, это 1024 шага с разрешением 0.0049 Вольт. Разброс напряжение и шаг может быть изменен функцией analogReference().

Считывание значение с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), т.е. максимальная частота считывания приблизительно 10,000 раз в секунду.

Синтаксис

analogRead(pin)

Параметры

pin: номер порта аналогового входа с которого будет производиться считывание (0..5 для большинства плат, 0..7 для Mini и Nano и 0..15 для Mega)

Возвращаемое значение

int (0 to 1023)

Замечание

Если аналоговый вход не подключен, то значения возвращаемые функцией analogRead() могут принимать случайные значения.

Пример
int analogPin = 3;     // номер порта к которому подключен потенциометр
int val = 0;           // переменная для хранения считываемого значения

void setup()
{
  Serial.begin(9600);              //  установка связи по serial
}

void loop()
{
  val = analogRead(analogPin);     // считываем значение
  Serial.println(val);             // выводим полученное значение
}
]]>
Урок 3 — плавное включение светодиода на Arduino с помощью ШИМ (PWM) http://portal-pk.ru/news/44-urok-3-—-plavnoe-vklyuchenie-svetodioda-na-arduino-s-pomoshchyu.html Константин Portal-PK 2017-02-08T09:44:37+03:00 В первом уроке Мигаемвстроенным на плату Arduino светодиодом мы рассмотрели как можно мигать встроенным светодиодом. Но кроме мигания можно плавно включать и выключать светодиод с подошью ШИМ или в английском PWM (Pulse-Width Modulation) широтно-импульсная модуляция . Что такое ШИМ рассказывать не буду. В интернете очень много информации по данной теме.

Для урока нам понадобиться:

Подключение будет аналогично второму уроку: Мигаем светодиодом на Arduino. Только Переключим на пин на котором есть ШИМ. Их иногда обозначают волнистой чертой "~" или обводят кружочками или ещё как-то выделяют среди прочих. На Arduino Uno это "~".

Подключим к з пину, у нас получится следующая схема подключения.

PWM Arduino ШИМ

Так как ШИМ в Arduino 8 bit соответственно в программе мы можем использовать любое значение от 0 до 225.

Подправим код:

int led_pin=3;          // пин подключения
int brightness = 0;     // яркость светодиода
int fadeAmount = 3;     // шаг изменения яркости

void setup() { }

void loop()  { 
    analogWrite(led_pin, brightness);    // устанавливаем значение 
    brightness = brightness + fadeAmount;   // прибавляем шаг изменения яркости, которая установится в следующем цикле
    if (brightness == 0|| brightness == 255) { // Условие 
          fadeAmount = -fadeAmount ; // Меняем знак 
     //  delay(500);                  // ожидаем 1/2 секунды
    } 

   delay(50);                  // ожидаем 1/20 секунды        
}

int - означать что у нас переменные целочисленные от -32 768 до 32 767.

Переменная brightness нужна нам, чтобы задать первоначальное свечение светодиода и для увлечение в цикле.

Переменная fadeAmount устонавливает шага изменения яркости. Данная переменная должна быть кратная 255, для данной программы. Можно конечно проверить, чтобы при выполнении цикла наше значение не выходила за пределы 255. Но мы пока этого делать не умеем.

analogWrite(led_pin, brightness);

Для работы с ШИМ инициализируем выход как аналоговый analogWrite().

brightness = brightness + fadeAmount;

В данной строчке мы складываем две переменные. Так как все что находиться внутри функции loop() обрабатывается в непрерывном цикли. Благодаря этому сложение будет происходить при каждом проходе по циклу.

Для того чтобы переменная brightness не выходила за границы ШИМ (от 0 до 255 ) сделаем проверку:

if (brightness == 0 || brightness == 255)

Оператор If означает логическое ЕСЛИ. || логическое ИЛИ. == - это символ равенства двух значений. В нашем случае двух целочисленных значений.

Прочитаем строчку: ЕСЛИ переменная brightness равная 0 ИЛИ равны 255 то выполняем действия в {}.

В {} у нас вырождение fadeAmount = -fadeAmount ; Данное вырождение меняет знак на противоположный.


И так что же у нас происходит в цикле :

brightness увеличивается до тех пор пока не станет равным 255. После чего переменная fadeAmount меняет знак на минус а brightness начинает уменьшаться. После того как brightness становиться равным 0. fadeAmount снова меняет знак на положительный. И так все повторяется пока мы не отключим питание.


Следующий урок: Сигнал SOS с помощью Arduino и одного светодиода


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

]]>
+= , -= , *= , /= http://portal-pk.ru/news/43-+=---=--*=---=.html Константин Portal-PK 2017-02-07T11:56:44+03:00 Короткий способ записи арифметических действий над переменной и одним операндом.

Синтаксис
x += y;   // эквивалент записи x = x + y;
x -= y;   // эквивалент записи x = x - y; 
x *= y;   // эквивалент записи x = x * y; 
x /= y;   // эквивалент записи x = x / y;
Параметры
  • x: переменная любого типа
  • y: переменная любого типа или константа
Пример
x = 2;
x += 4;      // x равно 6
x -= 3;      // x равно 3
x *= 10;     // x равно 30
x /= 2;      // x равно 15
]]>
++ (увеличение значения) / -- (уменьшение значения) http://portal-pk.ru/news/42-++-uvelichenie-znacheniya------umenshenie-znacheniya.html Константин Portal-PK 2017-02-07T11:54:35+03:00 Унарные (имеющие один операнд) операторы ++, -- увеличивают, уменьшают значение переменной соответственно.

Синтаксис
x++;  // увеличивает значение x на единицу и возвращает старое значение x
++x;  // увеличивает значение x на единицу и возвращает новое значение x

x-- ;   // уменьшает значение x на единицу и возвращает старое значение x
--x ;   // уменьшает значение x на единицу и возвращает новое значение x
Параметры
  • x: переменная типа int или long (может быть беззнаковой)
Возвращаемое значение

Изначальное или новое, увеличенное или уменьшенное на единицу, значение переменной.

Пример
x = 2;
y = ++x;      // x теперь равно 3, y равно 3
y = x--;      // x равно 2, y равно 3
]]>
Логические операторы http://portal-pk.ru/news/41-logicheskie-operatory.html Константин Portal-PK 2017-02-07T11:51:39+03:00 Логические операторы чаще всего используются в проверке условия оператора if. Базовые сведения о логических операциях, смотрите в Википедии.

&& (логическое И)

Истина, если оба операнда истина (true).

if (digitalRead(2) == HIGH  && digitalRead(3) == HIGH) { // считывает состояние двух портов
  // ...
}

Истина если оба порта вход/выхода HIGH

|| (логическое ИЛИ)

Истина, если хотя бы один операнд истина, например:

if (x > 0 || y > 0) {
  // ...
}

будет верно (истина) если x или y больше 0.

! (логическое отрицание)

True, если операнд false, и наоборот, например:

if (!x) {
  // ...
}

условие верно, если x - false (x равно 0).

Важно различать логический оператор "И" - && и битовый оператор "И" - &. Тоже самое относится к логическому оператору "ИЛИ" - || и битовому оператору "ИЛИ" - |.

Пример
if (a >= 10 && a <= 20){}   // условие верно, если a больше 10, но меньше 20
]]>
Операторы сравнения http://portal-pk.ru/news/40-operatory-sravneniya.html Константин Portal-PK 2017-02-07T11:47:12+03:00 x == y (x равно y) x != y (x не равно y) x < y (x меньше чем y) x > y (x больше чем y) x <= y (x меньше чем или равно y) x >= y (x больше чем или равно y)

Внимание!

Следите, чтобы случайно не использовать знак простого равенства (например, if (x = 10)). Знак простого равенства – это оператор присваивания, и устанавливает значение х равное 10 (заносит значение 10 в переменную х). Вместо этого используйте знак двойного равенства (например, if (x == 10)), который является оператором сравнения и проверяет, х равен 10 или нет. Последнее из двух выражений будет истинно, только если х равен 10, но предыдущее выражение всегда верно.

Это связано с тем, что С вычисляет выражение if (x=10) следующим образом: значение 10 присваивается х (помним, что простой знак равенства – это оператор присваивания), таким образом, х теперь равен 10. Затем условный if вычисляет 10, которое уже равно ИСТИНА, так как любое число, неравное 0, равно ИСТИНА. Поэтому if (x=10) будет всегда иметь логическое значение ИСТИНА, которое не является желательным результатом, когда используется оператор if. Вдобавок, переменной х будет присвоено значение 10, что также не является желаемым действием.

]]>
% оператор http://portal-pk.ru/news/39-%-operator.html Константин Portal-PK 2017-02-07T11:44:28+03:00 Возвращает остаток от деления одного целого (int) операнда на другой.

Синтаксис
result = dividend % divisor
Параметры
  • dividend: делимое
  • divisor: делитель
Возвращаемое значение

Остаток от деления.

Пример
x = 7 % 5;   // x имеет значение 2
x = 9 % 5;   // x имеет значение 4
x = 5 % 5;   // x имеет значение 0
x = 4 % 5;   // x имеет значение 4
Советы по использованию %

Нельзя применить к типу float.

]]>
Арифметические операторы http://portal-pk.ru/news/38-arifmeticheskie-operatory.html Константин Portal-PK 2017-02-07T11:42:02+03:00 Сложение, вычитание, умножение и деление

Операторы +, -, * и / соответственно, возвращают результат выполнения арифметических действий над двумя операндами. Возвращаемый результат будет зависеть от типа данных операндов, например, 9 / 4 возвратит 2, т.к. операнды 9 и 4 имеют тип int. Также следует следить за тем, чтобы результат не вышел за диапазон допустимых значений для используемого типа данных. Так, например, сложение 1 с переменной типа int и значением 32 767 возвратит -32 768. Если операнды имеют разные типы, то тип с более "широким" диапазоном будет использован для вычислений.

Если один из операндов имеет тип float или double, то арифметика "с плавающей запятой" будет использована для вычислений.

Пример
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;

Синтаксис

result = value1 + value2;
result = value1 - value2;
result = value1 * value2;
result = value1 / value2;
Параметры
  • value1: любая переменная или константа
  • value2: любая переменная или константа
]]>
= оператор присваивания http://portal-pk.ru/news/37-=-operator-prisvaivaniya.html Константин Portal-PK 2017-02-07T11:39:49+03:00 Присваивает переменной слева от оператора значение переменной или выражения, находящееся справа.

Пример
int sensVal;                 // объявление переменной типа integer
senVal = analogRead(0);       // присваивание переменной sensVal, значения, считанное с аналогового входа 0
Важно

Переменная слева от оператора присваивания (=) должна быть способна сохранить присваиваемое значение. Если оно выходит за диапазон допустимых значений, то сохраненное значение будет не верно.

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

]]>
Комментарии http://portal-pk.ru/news/36-kommentarii.html Константин Portal-PK 2017-02-07T11:37:59+03:00 Комментарии – это строки в программе, которые используются для информирования вас самих или других о том, как работает программа. Они игнорируются компилятором и не экспортируются в процессор, таким образом, они не занимают место в памяти микроконтроллера Atmega.

Комментарии предназначены только для того, чтобы помочь вам понять (или вспомнить), как работает ваша программа или объяснить это другим. Есть два способа пометить строку как комментарий:

Пример
x = 5; // Это комментарий в одной строке. Все после двойного слэша – комментарий
      // до конца строки

/* это многострочный комментарий – используйте его для закоментирования целых кусков кода

if (gwb == 0){   // комментарий в строке допустим внутри многострочного комментария
                // но не другой многострочный комментарий
}

// не забывайте «закрывать» комментарии – они должны быть парными!
*/
Подсказка

Во время экспериментов с кодом, «закомментирование» частей программы – подходящий способ удаления строк, в которых могут быть ошибки. Так строки в коде остаются, но превращаются в комментарии, и компилятор просто игнорирует их. Это может быть особенно полезно при локализации проблемы, или когда не получается скомпилировать программу, а сообщение об ошибке при компиляции скрыто или бесполезно.

]]>
{} (фигурные скобки) http://portal-pk.ru/news/35-{}-figurnye-skobki.html Константин Portal-PK 2017-02-07T11:36:23+03:00 Фигурные скобки {} (также называются просто «скобки») – важный элемент языка программирования С. Они используются в нескольких различных конструкциях, приведенных ниже, и это может иногда сбивать с толку начинающих.

Открывающая скобка “{” должна всегда сопровождаться закрывающей скобкой “}”. Это условие, известное как парность (симметричность) фигурных скобок. Arduino IDE (интегрированная среда разработчика) включает подходящий инструмент для проверки парности скобок. Достаточно выделить скобку, или даже поставить курсор сразу же за скобкой, как будет подсвечена её логическая пара.

Сейчас эта возможность работает с ошибкой, так как IDE часто ищет (некорректно) скобку в тексте, который «закомментирован».

Начинающие программисты или программисты, перешедшие на Си с Бейсика, часто считают использование фигурных скобок сбивающим с толку или пугающим. В конце концов, одни и те же фигурные скобки заменяют оператор RETURN в подпрограммах (функциях), оператор ENDIF в условных циклах и оператор NEXT в циклах FOR.

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

Непарные скобки могут часто приводить к скрытым, непонятным ошибкам компиляции, которые сложно отследить в большой программе. Из-за их разного использования, скобки также невероятно важны в синтаксической правильности программы и перемещение скобки на одну или две строки часто приводят к значительному воздействию на логику программы.

Основные способы использования фигурных скобок

Функции

void НазваниеФункции(тип данных аргумента){
   оператор(ы)
}

Циклы

while (логическое выражение)
 {
     оператор(ы)
 }
//////////////////////////
do<p>{
   оператор(ы)</p><p>} while (логическое выражение);
///////////////////////
for (инициализация; условие окончания цикла; приращения цикла)</p><p>{</p><p>   оператор(ы)</p><p>}</p>

Условные операторы

if (логическое выражение)
{
   оператор(ы)
}
else if (логическое выражение)
{
   оператор(ы)
}
else
{
   оператор(ы)
}
]]>
; (точка с запятой) http://portal-pk.ru/news/34-;-tochka-s-zapyatoi.html Константин Portal-PK 2017-02-07T11:31:27+03:00 Синтаксис ; (точка с запятой) используется для обозначения конца оператора.

Пример

int a = 13;

Подсказка

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

]]>
Ключевое слово void http://portal-pk.ru/news/33-klyuchevoe-slovo-void.html Константин Portal-PK 2017-02-07T06:52:22+03:00 Ключевое слово void используется при объявлении функций, если функция не возвращает никакого значение при ее вызове (в некоторых языках программирования такие функции называют процедурами).

Пример
// в функциях "setup" и "loop" производятся некоторые действия,
// но ничего не возвращается во внешнюю программу

void setup()
{
  // ...
}

void loop()
{
  // ...
}
]]>
Массивы (arrays) http://portal-pk.ru/news/32-massivy-arrays.html Константин Portal-PK 2017-02-07T06:50:51+03:00 Массивы (arrays) — именованный набор однотипных переменных, с доступом к отдельным элементам по их индексу.

ОБЪЯВЛЕНИЕ МАССИВОВ

Ниже приведены несколько корректных вариантов объявления массивов:

int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";

Массив может быть объявлен без непосредственной инициализации элементов массива, как в случае массива myInts.

Массив myPins был объявлен без явного задания размера. Компилятор сам посчитает фактическое количество элементов и создаcт в памяти массив необходимого размера.

Размер может быть задан явно, одновременно с инициализацией элементов массива. Обратите внимания, что при создании массива типа char, необходим дополнительный элемент массива для нулевого символа. Подробнее см. строки.

Доступ к элементам массива

Индексация массива начинается с 0. Это значит, что для массива с 10-тью элементами, индекс 9 будет последним:

int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[0]    первый элемент, содержит 9
     // myArray[9]    последний элемент, содержит 11
     // myArray[10]   это неверно возможно возвращение произвольного значения из области памяти не относящийся к массиву

Присваиваем значение элементу массива

mySensVals[0] = 10;

Возвращаем значение элемента массива:

x = mySensVals[4];
Массивы и FOR циклы

Чаще всего для перебора элементов цикла используется цикл for, счетчик цикла используется как индекс для доступа к каждому элементу массива. Например, для вывода массива через Serial порт можно использовать следующий код:

int i;
for (i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}
]]>
String http://portal-pk.ru/news/31-string.html Константин Portal-PK 2017-02-07T06:45:35+03:00 String класс появился в версии Arduino 0019. Этот класс позволяет хранить и манипулировать текстовыми строками, по сравнению с string (массивом символов) класс String предоставляет удобные функции для работы со строками, такие как поиск вхождения в строку, объединение строк и др. Класс String занимает несколько больше места в памяти, чем массив символов string.

Обратите внимание при обращение к классу String — он пишется с заглавной S. Массив символов string — с прописной s. Строковые константы, записанные в "двойных кавычка" интерпретируются компилятором как массив символов, а не объект класса String.

]]>
string - текстовые строки http://portal-pk.ru/news/30-string---tekstovye-stroki.html Константин Portal-PK 2017-02-07T06:44:33+03:00 Описание

Текстовые строки в Ардуино объявляются как массив (array) типа char (символов - литер), оканчивающийся символом "конца строки".

Синтаксис

Ниже приведены варианты объявления и присвоения строк:

char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";

Возможны следующие варианты объявления текстовых строк:

  • Объявить массив символов без присваивания значений — Str1
  • Объявить массив символов и присвоить значения всем элементам, кроме последнего, компилятор Arduino автоматически добавит символ конца строки, как в Str2
  • Явно объявить завершающий символ, как в Str3
  • Инициализировать массив строковой константой в двойных кавычках. Компилятор автоматически задаст требуемый размер на массив, равный количеству символов плюс завершающий символ, как в варианте Str4
  • Инициализировать массив с явным заданием размера и присвоением строковой константы, строка Str5
  • Инициализировать массив с явным заданием дополнительного размера (с запасом), фактически превышающего размер строковой константы при начальном присвоение, как в варианте Str6
Символ окончания строки

Обычно строки оканчиваются нулевым символом (код 0 в ASCII). Это позволяет функциям (таким как Serial.print()) выявлять окончание строки. В противном случае могут считаться байты памяти, не принадлежащие переменной.

Массивы символов, выделяемый под строку, должен иметь один дополнительный элемент для символа конца строки. Именно поэтому Str2 и Str5 должны иметь 8 символом, хотя "arduino" 7 символов — последнему элементу автоматически присваивается символ окончания строки.

Технически возможно объявить строку без символа окончания строки, например, объявить длину массива равной 7 для Str2. Это приведет к некорректной работе функций, оперирующих строками.

Одинарные и двойные кавычки

Строки всегда объявляются внутри двойных кавычек ("Abc"). Символы — внутри одинарных ('A')

Инициализация длинных строк

Длинные строки могут быть объявлены так:

char myString[] = "This is the first line"
" this is the second line"
" etcetera";
Массивы строк

При работе с большими объемами текстовой информации, например в проектах с LCD дисплеем, бывает удобно использовать массивы строк. Так как строки сами по себе массивы, массивы строк будет двумерным массивом.

В примере ниже, символ звездочки после объявления типа "char*" указывает на то, что это массив указателей. Это необходимо для задания двумерного массива. В данном случае не требуется понимания всех тонкостей работы с указателями.

Пример
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};


void setup(){
Serial.begin(9600);
}


void loop(){
for (int i = 0; i < 6; i++){
   Serial.println(myStrings[i]);
   delay(500);
   }
}
]]>
double http://portal-pk.ru/news/29-double.html Константин Portal-PK 2017-02-07T06:38:59+03:00 Описание типа данных

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

Тип double поддерживается в Arduino для совместимости кода с другими платформами.

]]>
float http://portal-pk.ru/news/28-float.html Константин Portal-PK 2017-02-07T06:37:33+03:00 Описание типа

Тип данных float служит для хранения чисел с плавающей запятой. Этот тип часто используется для операций с данными, считываемыми с аналоговых входов. Диапазон значений — от -3.4028235E+38 до 3.4028235E+38. Переменная типа floatзанимает 32 бита (4 байта) в памяти.

Тип float имеет точность 6-7 знаков, имеются ввиду все знаки, а не только мантисса. Обычно для увеличения точности используют другой тип - double, но на платформе Arduino, double и float имеют одинаковую точность.

Хранение в памяти чисел с плавающей точкой в двоичной системе обуславливает потерю точности. Так, например, 6.0 / 3.0 не обязательно равен 2.0. Сравнивая два числа с плавающей точкой следует проверять не точное равенство, а разницу между этими числами, меньше ли она некого выбранной малого порога.

Следует также учитывать, что арифметические операции над числами с плавающей запятой выполняются существенно медленнее, чем над целыми.

Пример
float myfloat;
float sensorCalbrate = 1.117;

Синтаксис

float var = val;
  • var - имя переменной
  • val - присваиваемое значение
Пример использования в коде
int x;
int y;
float z;

x = 1;
y = x / 2;            // y теперь равен 0, тип int не может хранить дробные числа
z = (float)x / 2.0;   // z равна .5 (следует использовать 2.0, а не 2)
]]>
unsigned long http://portal-pk.ru/news/27-unsigned-long.html Константин Portal-PK 2017-02-07T06:33:06+03:00 Описание типа

Unsigned long используется для хранения положительных целых чисел в диапазоне от 0 до 4,294,967,295 (2^32 - 1) изанимает 32 бита (4 байта) в памяти.

Пример
unsigned long time;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.print("Time: ");
  time = millis();
  //выводит время прошедшее с момента начала выполнения программы
  Serial.println(time);
  // ожидаем (делаем пауза) 1 секунду
  delay(1000);
}

Синтаксис

unsigned long var = val;
  • var - имя переменной
  • val - присваиваемое значение
]]>
long http://portal-pk.ru/news/26-long.html Константин Portal-PK 2017-02-07T06:30:48+03:00 Описание типа

Тип данных long используется для хранения целых чисел в расширенном диапазоне от -2,147,483,648 до 2,147,483,647.long занимает 4 байта в памяти.

Пример
long speedOfLight = 186000L;  // См. значение постфикса 'L' в теме Целочислесленные константы

Синтаксис

long var = val;
  • var - имя переменной
  • val - присваиваемое значение
]]>
word http://portal-pk.ru/news/25-word.html Константин Portal-PK 2017-02-07T06:27:45+03:00 Описание типа

Тип данных word хранит 16-битное, не содержащее знака, число от 0 до 65535. Тоже самое, что unsigned int — (беззнаковое целое число).

Пример
word w = 10000;
]]>
unsigned int http://portal-pk.ru/news/24-unsigned-int.html Константин Portal-PK 2017-02-06T09:26:26+03:00 Описание типа

Тип данных unsigned int - беззнаковое целое число, также как и тип int (знаковое) занимает в памяти 2 байта. Но в отличие от int, тип unsigned int может хранить только положительные целые числа в диапазоне от 0 до 65535 (2^16)-1).

Отличие кроется в том как unsigned int использует старший бит, иногда называемый знаковый бит. Если старший бит равен 1, то для типа int компилятор Arduino считает, что это число отрицательное, а остальные 15 bit несут информацию о модуле целого числа в дополнительного кода представления числа, в то время как unsigned int использует все 16 бит для хранения модуля числа.

Пример
unsigned int ledPin = 13;

Синтаксис

unsigned int var = val;
  • var - имя переменной
  • val - присваиваемое значение
Замечание по использованию типа unsigned int

Когда переменная типа int в следствие арифметической операции достигает своего максимального значения, она "перескакивает" на самое минимальное значение и наоборот:

unsigned int x
   x = 0;
   x = x - 1;       // x теперь равна 65535 
   x = x + 1;       // x теперь 0
]]>
int http://portal-pk.ru/news/23-int.html Константин Portal-PK 2017-02-06T09:23:35+03:00 Описание типа данных

Тип данных int (от англ. integer - целое число) один их наиболее часто используемых типов данных для хранения чисел. int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767 (от -2^15 до 2^15-1)

Для размещения отрицательных значений int использует, так называемый, дополнительный код представления числа. Старший бит указывает на отрицательный знак числа, остальные биты инвертируются с добавлением 1.

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

Пример
int ledPin = 13;
Синтаксис

int var = val;

  • var - имя переменной;
  • val - значение присваиваемое переменной;
Замечание по использованию типа int

Когда переменная типа int в следствие арифметической операции достигает своего максимального значения, она "перескакивает" на самое минимальное значение и наоборот:

int x
x = -32,768;
x = x - 1;       // x теперь равно 32,767 - перескакивает на минимальное значение

x = 32,767;
x = x + 1;       // x теперь равно -32,768
]]>
byte http://portal-pk.ru/news/22-byte.html Константин Portal-PK 2017-02-06T09:20:00+03:00 Описание типа

Тип данных byte 8-ми битное беззнаковое целое число, в диапазоне 0..255.

byte c = B10010;  // "B" префикс двоичной системы счисления(B10010 = 18 в десятичной системе счисления)
]]>
char http://portal-pk.ru/news/21-char.html Константин Portal-PK 2017-02-06T09:18:54+03:00 Переменная типа char занимает 1 байт памяти и может хранить один алфавитно-цифровой символ (литеру). При объявление литеры используются одиночные кавычки: 'A' (двойные кавычки используется при объявлении строки символов - тип string: "ABC").

Символ хранится в памяти как число, соответствующее коду символа в таблице кодировки символов ASCII. Т.к. символ хранится как число в памяти над ним возможно производить арифметические действия (например, 'A' + 1 будет 66, т.к. ASCII код для 'A' - 65).

Тип char знаковый тип, т.е. число (код) хранящийся в памяти может принимать значения от -128 до 127. Если необходим беззнаковая однобайтовая переменная, используйте тип byte.

char myChar = 'A';
char myChar = 65;      //Варианты эквивалентны


]]>
boolean http://portal-pk.ru/news/20-boolean.html Константин Portal-PK 2017-02-06T09:17:19+03:00 Логический (булевый) тип данных — boolean. Может принимать одно из двух значений true или false. boolean занимает в памяти один байт.

int LEDpin = 5;       // Светодиод на входе 5
int switchPin = 13;   // выключатель на порту 13, замыкает на землю


boolean running = false;


void setup()
{
  pinMode(LEDpin, OUTPUT);
  pinMode(switchPin, INPUT);
  digitalWrite(switchPin, HIGH);      // включаем подтягивающий резистор
}


void loop()
{
  if (digitalRead(switchPin) == LOW)
  {  // выключатель нажат, т.к. подтягивающий резистор будет давайть HIGH на входе, если не замкнут напрямую на землю
    delay(100);                        // ждем 0.1сек
    running = !running;                // меняем значение булевой переменной
    digitalWrite(LEDpin, running)      // включаем или выключаем светодиод.
  }
}


]]>
Оператор goto http://portal-pk.ru/news/19-operator-goto.html Константин Portal-PK 2017-02-03T06:45:38+03:00 Условное «перемещение» выполнения программы к определенной метке-указателю в самой программе, при этом пропускается весь код до самой метки, а исполняется - после нее.

Синтаксис:
label: 
//
// какой-либо код
//
goto label; // переходим к метке label
Замечание по использованию

Использование goto не рекомендуется в С программировании, многие авторы книг не советуют его применять вообще, так как это не является необходимым(с их точки зрения). Причины их негодования заключаются в том, что программист при частом использовании в коде, команды goto - может запустить программу в бесконечный цикл, который потом трудно будет найти – отладка программы значительно усложниться. С другой стороны, если взгянуть на ассемблерный код, то там часто используется подобный переход по метке.

При разумном применении, команда может значительно упростить код программы и сохранить время программиста. Например, в случае необходимости выхода из глубоких циклов for, while, проверок if и прочих многократно вложенных контрукций.

Пример
for(byte r = 0; r < 255; r++){
    for(byte g = 255; g > -1; g--){
        for(byte b = 0; b < 255; b++){
            if (analogRead(0) > 250){ goto bailout;}
            // еще код
        }
    }
}
bailout:


]]>
return http://portal-pk.ru/news/18-return.html Константин Portal-PK 2017-02-03T06:43:36+03:00 Прекращает вычисления в функции и возвращает значение из прерванной функции в вызывающую, если это нужно.

Синтаксис

return;

return значение; // обе формы допустимы

Параметры

Значение: переменная или константа любого типа

Примеры:

Функция сравнивает значение на датчике входа с пороговым

int checkSensor(){      
    if (analogRead(0) > 400) {
        return 1;
    else{
        return 0;
    }
}

С помощью ключевого слова return удобно тестировать блоки кода без «закомментирования» больших кусков с возможным ошибочным кодом.

void loop(){

  // здесь блестящая идея тестирования кода

  return;

  // оставшаяся часть неправильно функционирующего варианта здесь
  // этот код никогда не будет выполняться

}
]]>
continue http://portal-pk.ru/news/17-continue.html Константин Portal-PK 2017-02-03T06:40:30+03:00 Оператор continue пропускает оставшиеся операторы в текущем шаге цикла. Вместо них выполняется проверка условного выражения цикла, которая происходит при каждой следующей итерации.

for (x = 0; x < 255; x ++)
{
    if (x > 40 && x < 120){      // если истина то прыгаем сразу на следующую итерацию цикла
        continue;
    }

    digitalWrite(PWMpin, x);
    delay(50);

}
]]>
break http://portal-pk.ru/news/16-break.html Константин Portal-PK 2017-02-03T06:38:49+03:00 Break используется для принудительного выхода из циклов do, for или while, не дожидаясь завершения цикла по условию. Он также используется для выхода из оператора switch

Пример
for (x = 0; x < 255; x ++)
{
    digitalWrite(PWMpin, x);
    sens = analogRead(sensorPin); 
    if (sens > threshold){      // выходим из цикла если есть сигнал с датчика
       x = 0;
       break;
    } 
    delay(50);
}
]]>
do ... while http://portal-pk.ru/news/15-do--while.html Константин Portal-PK 2017-02-03T06:37:25+03:00 Цикл do работает так же, как и цикл while, за исключением того, что условие проверяется в конце цикла, таким образом, цикл do будет всегда выполняться хотя бы раз.

do
{
    // последовательность операторов
} while (проверка условия);

Пример

do
{
  delay(50);          // подождать, пока датчики стабилизируются
  x = readSensors(); // проверить датчики 
} while (x < 100);
]]>
Циклы while http://portal-pk.ru/news/14-cikly-while.html Константин Portal-PK 2017-02-03T06:35:41+03:00 While будет вычислять в цикле непрерывно и бесконечно до тех пор, пока выражение в круглых скобках, () не станет равно логическому ЛОЖНО. Что-то должно изменять значение проверяемой переменной, иначе выход из цикла whileникогда не будет достигнут. Это изменение может происходить как в программном коде, например, при увеличении переменной, так и во внешних условиях, например, при тестировании датчика.

Синтаксис
while(выражение){
 // оператор(ы)
}
Параметры

выражение - (булевский) C-оператор, который возвращает значение истина или ложь

Пример
var = 0;

while(var < 200){
 // выполнить что-то, повторив 200 раз
 var++;
}
]]>
Функция delay() http://portal-pk.ru/news/13-funkciya-delay.html Константин Portal-PK 2017-02-01T09:11:42+03:00 Останавливает выполнение программы на заданное в параметре количество миллисекунд (1000 миллисекунд в 1 секунде).

Синтаксис
delay(ms)
Параметры

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

Возвращаемое значение

Нет

Пример
int ledPin = 13;                 // светодиод подключен на порт 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // устанавливается режим порта - выход
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // включаем светодиод
  delay(1000);                  // ожидаем секунду
  digitalWrite(ledPin, LOW);    // выключаем светодиод
  delay(1000);                  // ожидаем секунду
}
Замечания по использования функции

Не рекомендуется использовать эту функцию для событий длиннее 10 миллисекунд, т.к. во время останова, не могут быть произведены манипуляции с портам, не могут быть считаны сенсоры или произведены математические операции. В качестве альтернативного подхода возможно контролирование времени выполнения тех или иных функций с помощью millis().

Большинство активности платы останавливается функцией delay(). Тем не менее работа прерываний не останавливается, продолжается запись последовательно (serial) передаваемых данных на RX порту, ШИМ сигнал (analogWrite) продолжает генерироваться на портах.

]]>
Оператор Switch http://portal-pk.ru/news/12-operator-switch.html Константин Portal-PK 2017-02-01T09:00:59+03:00 Подобно конструкции if, switch...case управляет процессом выполнения программы, позволяя программисту задавать альтернативный код, который будет выполняться при разных условиях. В частности, оператор switch сравнивает значение переменной со значением, определенном в операторах case. Когда найден оператор case, значение которого равно значению переменной, выполняется программный код в этом операторе.

Ключевое слово break является командой выхода из оператора case и обычно используется в конце каждого case. Без оператора break оператор switchбудет продолжать вычислять следующие выражения, пока не достигнет break или конец оператора switch.

switch (var) {
    case 1:
      //выполняется, когда var равно 1
      break;
    case 2:
      //выполняется когда  var равно 2
      break;
    default: 
      // выполняется, если не выбрана ни одна альтернатива 
      // default необязателен 
  }

Синтаксис:

switch (var) {
 case label:
    // код для выполнения
    break;
 case label:
    // код для выполнения
    break;
 default:
    // код для выполнения
}

Параметры:

  • var: переменная, которая вычисляется для сравнения с вариантами в case
  • label: значение, с которым сравнивается значение переменно


]]>
Оператор For http://portal-pk.ru/news/11-operator-for.html Константин Portal-PK 2017-02-01T08:57:00+03:00 Конструкция for используется для повторения блока операторов, заключенных в фигурные скобки. Счетчик приращений обычно используется для приращения и завершения цикла. Оператор for подходит для любых повторяющихся действий и часто используется в сочетании с массивами коллекций данных/выводов.

Заголовок цикла for состоит из трех частей:

for (initialization; condition; increment) {операторы выполняющиеся в цикле}

Инициализация (Initialization) выполняется самой первой и один раз. Каждый раз в цикле проверяется условие (condition), если оно верно, выполняется блок операторов и приращение (increment), затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается.

Пример
// Затемнение светодиода с использованием ШИМ-вывода
int PWMpin = 10; // Светодиод последовательно с резистором 470 ом на 10 выводов
void setup()
{
 // настройка не нужна 
}
void loop()
{
   for (int i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   }
}
Советы по применению

Цикл for в Си гораздо более гибкий, чем циклы for в других языках программирования, например, в Бейсике. Любой из трех или все три элемента заголовка могут быть опущены, хотя точки с запятой обязательны. Также операторы для инициализации, условия и приращения цикла могут быть любым допустимым в Си операторами с независимыми переменными, и использовать любой тип данных Си, включая данные с плавающей точкой (floats). Эти необычные для цикла for типы операторов позволяют обеспечить программное решение некоторых нестандартных проблем.

Например, использование умножения в операторе счетчика цикла позволяет создавать логарифмическую прогрессию:

for(int x = 2; x < 100; x = x * 1.5){
    println(x);
}

Генерируется: 2,3,4,6,9,13,19,28,42,63,94

Другой пример, плавное уменьшение или увеличение уровня сигнала на светодиод с помощью одного цикла for:

void loop()
{
  int x = 1;
  for (int i = 0; i > -1; i = i + x){
      analogWrite(PWMpin, i);
      if (i == 255) x = -1;             // переключение управления на максимуме
      delay(10);
   }
}


]]>
Оператор If..else http://portal-pk.ru/news/10-operator-ifelse.html Константин Portal-PK 2017-02-01T08:53:29+03:00 Конструкция if..else предоставляет больший контроль над процессом выполнения кода, чем базовый оператор if, позволяя осуществлять несколько проверок, объединенных вместе. Например, аналоговый вход может быть проверен и выполнено одно действие, если на входе меньше 500, или другой действие, если на входе 500 или больше. Код при этом может выглядеть так:

if (pinFiveInput < 500)
{
  // действие A
}
else
{
  // действие B
}

Другой способ создания переходов со взаимоисключающими проверками использует оператор switch case.

Else позволяет делать отличную от указанной в if проверку, чтобы можно было осуществлять сразу несколько взаимоисключающих проверок. Каждая проверка позволяет переходить к следующему за ней оператору не раньше, чем получит логический результат ИСТИНА. Когда проверка с результатом ИСТИНА найдена, запускается вложенная в нее блок операторов, и затем программа игнорирует все следующие строки в конструкции if..else. Если ни одна из проверок не получила результат ИСТИНА, по умолчанию выполняется блок операторов в else, если последний присутствует, и устанавливается действие по умолчанию.

Отметим, что конструкция else if может быть использована с или без заключительного else и наоборот. Допускается неограниченное число таких переходов else if.

if (pinFiveInput < 500)
{
  // выполнять действие A
}
else if (pinFiveInput >= 1000)
{
  // выполнять действие B
}
else
{
  // выполнять действие  C
}

Другой способ создания переходов со взаимоисключающими проверками использует оператор switch case.

]]>
Оператор If http://portal-pk.ru/news/9-operator-if.html Константин Portal-PK 2017-02-01T08:50:58+03:00 if (условие) и ==, !=, <, > (операторы сравнения)

if, используется в сочетании с операторами сравнения, проверяет, достигнута ли истинность условия, например, превышает ли входное значение заданное число. Формат оператора if следующий:

if (someVariable > 50)
{
// выполнять действия
}

Программа проверяет, значение someVariable больше чем 50 или нет. Если да, то выполняются определенные действия. Говоря иначе, если выражение в круглых скобках истинно, выполняются операторы внутри фигурных скобок. Если нет, программа пропускает этот код.

Скобки после оператора if могут быть опущены. Если так сделано, только следующая строка (обозначенная точкой с запятой) становится оператором, выполняемым в операторе if.

if (x > 120) digitalWrite(LEDpin, HIGH);

if (x > 120)
digitalWrite(LEDpin, HIGH);

if (x > 120){ digitalWrite(LEDpin, HIGH); }

if (x > 120){
digitalWrite(LEDpin1, HIGH);
digitalWrite(LEDpin2, HIGH);
}                                 // все правильно

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

Операторы сравнения

x == y (x равно y)

x != y (x не равно y)

x < y (x меньше чем y)

x > y (x больше чем y)

x <= y (x меньше чем или равно y)

x >= y (x больше чем или равно y)

Внимание!

Следите, чтобы случайно не использовать знак простого равенства (например, if (x = 10)). Знак простого равенства – это оператор присваивания, и устанавливает значение х равное 10 (заносит значение 10 в переменную х). Вместо этого используйте знак двойного равенства (например, if (x == 10)), который является оператором сравнения и проверяет, х равен 10 или нет. Последнее из двух выражений будет истинно, только если х равен 10, но предыдущее выражение всегда верно.

Это связано с тем, что С вычисляет выражение if (x=10) следующим образом: значение 10 присваивается х (помним, что простой знак равенства – это оператор присваивания), таким образом, х теперь равен 10. Затем условный if вычисляет 10, которое уже равно ИСТИНА, так как любое число, неравное 0, равно ИСТИНА. Поэтому if (x=10) будет всегда иметь логическое значение ИСТИНА, которое не является желательным результатом, когда используется оператор if. Вдобавок, переменной х будет присвоено значение 10, что также не является желаемым действием.

If также может быть частью разветвленной управляющей конструкции с использованием if...else

]]>
Функция digitalRead() http://portal-pk.ru/news/8-funkciya-digitalread.html Константин Portal-PK 2017-01-31T14:01:52+03:00 digitalRead()
Описание

Функция считывает значение с заданного входа - HIGH или LOW.

Синтаксис

digitalRead(pin)

Параметры

pin: номер вход/выхода(pin) который Вы хотите считать

Возвращаемое значение

HIGH или LOW

Пример
int ledPin = 13;                 // Светодиод подключенный к вход/выходу 13
int inPin = 7;                   // кнопка на входе 7
int val = 0;                     // переменная для хранения значения

void setup()
{
  pinMode(ledPin, OUTPUT);       // устанавливает режим работы - выход для 13го вход/выхода (pin)
  pinMode(inPin, INPUT);         //  устанавливает режим работы - вход для 7го вход/выхода (pin)
}

void loop()
{
  val = digitalRead(inPin);      // считываем значение с входа
  digitalWrite(ledPin, val);     // устанавливаем значение на светодиоде равным значению входа кнопки
}
Примечание

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

Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).

]]>
Функция digitalWrite() http://portal-pk.ru/news/7-funkciya-digitalwrite.html Константин Portal-PK 2017-01-31T13:58:18+03:00 digitalWrite()

Описание

Подает HIGH или LOW значение на цифровой вход/выход (pin).

Если вход/выход (pin) был установлен в режим выход (OUTPUT) функцией pinMode(), то для значение HIGH напряжение на соответствующем вход/выходе (pin) будет 5В (3.3В для 3.3V плат), и 0В(земля) для LOW.

Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор. Нагрузочного резистра достаточно чтобы светодиод, подключенный к входу, светил тускло. Если вдруг светодиод работает, но очень тускло, возможно необходимо установить режим выход (OUTPUT) функцией pinMode().

Замечание. Вход/выход 13 сложнее использовать как цифровой вход, т.к. он имеет встроенный в плату резистор и светодиод. Если вы активируете еще внутренний нагрузочный резистор 20K, то напряжение на этом входе будет около 1.7В, вместо ожидаемых 5В, т.к. светодиод и добавочный резистор снижает напряжение, т.е. Вы всегда будете получать LOW. Если же Вам все же необходимо использовать 13ый вход/выход, то используйте внешний нагрузочный резистор.

Синтаксис

digitalWrite(pin, value)

Параметры
  • pin: номер вход/выхода(pin)
  • value: значение HIGH или LOW
Возвращаемое значение

нет

Пример
int ledPin = 13;                 // Светодиод подключенный к вход/выходу 13
void setup()
{
  pinMode(ledPin, OUTPUT);      // устанавливает режим работы - выход
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // включает светодиод
  delay(1000);                  // ждет секунду
  digitalWrite(ledPin, LOW);    // выключает светодиод
  delay(1000);                  // ждет секунду
}
Примечание

Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).

]]>
Функция pinMode http://portal-pk.ru/news/6-funkciya-pinmode.html Константин Portal-PK 2017-01-31T12:46:45+03:00 pinMode()
Описание

Устанавливает режим работы заданного вход/выхода(pin) как входа или как выхода. Подробнее про цифровые вход/выходы(pins).

Синтаксис

pinMode(pin, mode)

Параметры
  • pin: номер вход/выхода(pin), который Вы хотите установить
  • mode: режим одно из двух значение - INPUT или OUTPUT, устанавливает на вход или выход соответственно.
Возвращаемое значение

нет

Пример
int ledPin = 13;                 // Светодиод, подключенный к вход/выходу 13
void setup()
{
  pinMode(ledPin, OUTPUT);      // устанавливает режим работы - выход
}
void loop()
{
  digitalWrite(ledPin, HIGH);   // включает светодиод
  delay(1000);                  // ждет секунду
  digitalWrite(ledPin, LOW);    // выключает светодиод
  delay(1000);                  // ждет секунду
}
Примечание

Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).

]]>
Константы http://portal-pk.ru/news/5-konstanty.html Константин Portal-PK 2017-01-31T12:42:53+03:00 Константами в языке Ардуино называют некоторые предопределенные значения. Они позволяют сделать код программы более легким для восприятия. Константы разделяют на три группы:

Логические константы

В языке Ардуино есть две константы для представления логических значений истина и ложь: true и false.

false

false определяется как 0, в логическом выражении.

true

Обычно говорят, что true — это 1, это корректно, но также корректно то, что для integer любой значение отличное от 0 будет также true в логическом выражение. Т.е -1, -2 и -200 будет также true в логическом выражении.

Обратите внимание, что true и false пишутся строчными буквами, в отличие от HIGH, LOW, INPUT и OUTPUT.

Задание значение на входа/выходе, HIGH и LOW

Возможны только два значения для считывания или записи на цифровой порт вход/выхода: HIGH и LOW.

HIGH

HIGH может обозначать несколько разное в зависимость от уставки режима порта как INPUT или OUTPUT. Когда порт вход/выхода установлен в режим INPUT с помощью функции pinMode, и считывается функцией digitalRead, микроконтроллер отдаст значение HIGH при напряжение 3В или выше на указанном порту.

Также порт может быть установлен как INPUT функцией pinMode, и затем установлен в HIGH значение функцией digitalWrite. Это подключит к порту внутренний подтягивающий резистор 20K, что позволит получать постоянное значение HIGH при чтение этого порта, если только значение не будет приведено к LOW внешней цепью подключенной к этому порту.

Когда порт вход/выхода сконфигурирован как OUTPUT функцией pinMode, и установлено значение HIGH функцией digitalWrite, на порту будет постоянное напряжение 5В. От этого порта может быть запитан светодиод, подключенный через резистор на землю или к другому порту, сконфигурированному как OUTPUT и установленному в LOW.

LOW

Значение LOW также разное для режима INPUT и OUTPUT. Когда порт сконфигурирован как INPUT, и считывается функцие digitalRead, микроконтроллер вернет LOW если напряжение на данном порту меньше или равно 2В.

Если же порт установлен в OUTPUT и LOW, то напряжение на выходе порта будет 0 Вольт. К этому порту можно подключать нагрузку как к земле, как описано выше на примере светодиода.

Задание режима порта вход/выхода, INPUT и OUTPUT

Цифровые порты вход/выхода, могут быть установлены в режимы работы как вход или выход: INPUT или OUTPUT. Установка производится функцией pinMode().

INPUT

Порты Arduino установленные в режим INPUT находятся в высокоимпедансном состоянии. Это означает то, что порт ввода дает слишком малую нагрузки на схему, в которую он включен. Эквивалентом внутреннему сопротивлению будет резистор 100 МОм подключенный к выводу микросхемы. Таким образом, для перевода порта ввода из одного состояния в другое требуется маленькое значение тока. Это позволяет применять выводы микросхемы для подключения различных датчиков, но не питания.

OUTPUT

Порт установленный в режим выхода — OUTPUT, находится в низкоимпедансном состояние. Он может пропускать через себя довольно большой ток, до 40 mA, достаточный для запитывание внешней цепи, например, светодиода. В этом состоянии порт может быть поврежден как замыкании на землю так и на питание 5В. Тока с порта микроконтроллера не достаточно для питания моторов и сервоприводов напрямую.

]]>
Функция Loop http://portal-pk.ru/news/4-funkciya-loop.html Константин Portal-PK 2017-01-31T12:39:38+03:00 loop()

После вызова функции setup(), которая инициализирует и устанавливает первоначальные значения, функция loop() делает точь-в-точь то, что означает её название, и крутится в цикле, позволяя вашей программе совершать вычисления и реагировать на них. Используйте её для активного управления платой Arduino.

int buttonPin = 3;

// setup инициализирует последовательный порт и кнопку
void setup()
{
  beginSerial(9600);
  pinMode(buttonPin, INPUT);
}

// в цикле проверяется состояние кнопки,
// и на последовательный порт будет отправлено сообщение, если она нажата
void loop()
{
  if (digitalRead(buttonPin) == HIGH)
    serialWrite('H');
  else
    serialWrite('L');


  delay(1000);
}
]]>
Функция Setup http://portal-pk.ru/news/3-funkciya-setup.html Константин Portal-PK 2017-01-31T12:36:00+03:00 Функция setup() вызывается, когда стартует скетч. Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д. Функция setup запускает только один раз, после каждой подачи питания или сброса платы Arduino.

Пример

int buttonPin = 3;

void setup()
{
  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
}

void loop()
{
  // ...
}


]]>
Урок 2 – Мигаем светодиодом на Arduino http://portal-pk.ru/news/2-urok-2---migaem-svetodiodom--na-arduino.html Константин Portal-PK 2017-01-27T09:59:54+03:00 В предыдущем уроке Мигаем встроенным на плату Arduino светодиодом мы рассмотрели как можно мигать встроенным светодиодом. Но как подключить светодиод, который нравиться нам: зеленый или синий, 3 или 5 мм? К какому пину (pin) платы Arduino можно подключить светодиод?

Все эти вопросы рассмотрим в данном уроке: Мигаем светодиодом на Arduino .

Для урока нам понадобиться:

Сначала подключим светодиод к 13 пину. Для данного подключения программа будет точно такой же.

<code>/*
  Зажигаем светодиод на одну секунду, затем выключаем его на  
  одну  секунду в цикле.
 */
void setup() {               
  // Инициализируем цифровой вход/выход в режиме выхода.
  // Выход 13 на большинстве плат Arduino подключен к светодиоду на плате.
    pinMode(13, OUTPUT);   
}
void loop() {
  digitalWrite(13, HIGH);   // зажигаем светодиод
  delay(1000);              // ждем секунду
  digitalWrite(13, LOW);    // выключаем светодиод
  delay(1000);              // ждем секунду
}

Только мигать будут и встроенный светодиод и который мы подключим.

Ардуино и светодиод

Как же сделать чтобы мигал только наш светодиод? Для этого необходимо его подключить к другому цифровому пину (pin) платы Arduino. Цифровыми выводами на плате Arduino UNO и Arduino NANO являются выводы подписанные Digital (имеют нумерацию 0 до 13).

Подключим например к пину 2 платы Arduino.

Arduino LED

Наша программа примет вот такой вид.

<code>/*
  Зажигаем светодиод на одну секунду, затем выключаем его на  
  одну  секунду в цикле.
 */
void setup() {               
  // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(2, OUTPUT);   
}
void loop() {
  digitalWrite(2, HIGH);   // зажигаем светодиод
  delay(3000);              // ждем 3 секунды
  digitalWrite(2, LOW);    // выключаем светодиод
  delay(1000);              // ждем секунду
}

Немного изменим время свечения светодиода с 1 секунды до 3.

Следующий урок: Плавное включение светодиода на Arduino с помощью ШИМ (PWM)

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


]]>
Урок 1 - Мигаем встроенным на плату Arduino светодиодом http://portal-pk.ru/news/1-urok-1---miganie-vstroennym-na-platu-arduino-svetodiodom.html Константин Portal-PK 2017-01-27T08:46:58+03:00 На плату Arduino UNO (Nano, Mega, micro и пр.) установлен светодиод который соединен с 13 pin платы. На плате он обозначается буквой L.

Для того чтобы заставить мигать встроенный светодиод на плату Arduino. Достаточно загрузить не большую программу.

Для урока нам понадобиться:

<code>/*
  Зажигаем светодиод на одну секунду, затем выключаем его на  
  одну  секунду в цикле.
 */
void setup() {               
  // Инициализируем цифровой вход/выход в режиме выхода.
  // Выход 13 на большинстве плат Arduino подключен к светодиоду на плате.
    pinMode(13, OUTPUT);   
}
void loop() {
  digitalWrite(13, HIGH);   // зажигаем светодиод
  delay(1000);              // ждем секунду
  digitalWrite(13, LOW);    // выключаем светодиод
  delay(1000);              // ждем секунду
}

Функция setup() вызывается, когда стартует скетч. Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д. Функция setup запускает только один раз, после каждой подачи питания или сброса платы Arduino.

pinMode(13, OUTPUT); Инициализируем цифровой вход/выход в режиме выхода. Этого можно не делать так как цифровые выходы Ардуины по умолчанию настроенные на режим выход.

После вызова функции setup(), которая инициализирует и устанавливает первоначальные значения, функция loop() делает точь-в-точь то, что означает её название, и крутится в цикле, позволяя вашей программе совершать вычисления и реагировать на них. Использовать её нужно для активного управления платой Arduino.

DigitalWrite() - Так как у нас пин настроен как выход (pinMode(13, OUTPUT);), то для значение HIGH напряжение на соответствующем вход/выходе (pin) будет 5В (3.3В для 3.3V плат), и 0В(земля) для LOW.

Т.е. digitalWrite(13, HIGH); - На пин 13 подается 5 вольт.

digitalWrite(13, LOW); - На пин 13 подается 0В.

delay() - Останавливает выполнение программы на заданное в параметре количество миллисекунд (1000 миллисекунд в 1 секунде).

Следующий урок: Мигаем светодиодом подключенным к 2 pin Arduino



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

]]>