Arduino и ЧПУ на Portal-PK.ru http://portal-pk.ru/ Arduino проекты, уроки, а также самоделки и самодельные ЧПУ станки на Portal-PK.ru ru Урок 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.

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

 инструменты которые позволяют нарисовать круг, прямоугольник, эллипс, многоугольник и даже звезду
В 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 страница

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

Преступим к приложению на 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 .)

Подключаем библиотеки и необходимые переменные.

#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

Далее во вкладке HTTP_init Добавляем вот этот код.

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>"; 
}

Тут у нас получение данных с датчика и формирование 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. Так как скорость отклика и время загрузки страниц достаточно большое и в связи с чем возникают небольшие провисание.

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

гирлянда из 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; //текущее значениее времени

Затем создадим страницу управления Новогодней подсветкой. И Создадим все необходимые функции:

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 программа для управления ЧПУстанком.


Проект №3. самодельный CNC станок из мебельных направляющих на базе Arduino UNO

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

Заготовке вырезанные на данном ЧПУ станке можно посмотреть тут......

Готовые проекты сотрите тут...

Комплектующие ЧПУ :

Механика для ЧПУ недорого >>>

Расходные материалы для CNC >>>


Проект №2. Лазерный гравировальный станок с ЧПУ (шаговые двигателя от матричного принтера)

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

Для управления использовал электронику: Arduino UNO + CNCshield v3 + драйвера A4988

Недорогую электронику для ЧПУ можно купить в Китае >>>


Проект №1. Мой первый ЧПУ станок из матричных принтеров (Не удачная версия)

Для проверки своих сил собрал ЧПУ станок из того что было под рукой. Дополнительно затратил денег не больше 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 пинов ввода-выводов.

Доп. Назначение пинов:

  • 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

В поле Дополнительные ссылки для Менеджера плат пишем такую ссылку:

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.

/*
 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 мм. Немного, но это оптимальная высота для фрезерного станка с ЧПУ данного размера.

Выравнивал столешницу в 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 Продолжаю сборку станка ЧПУ. Шаговые двигателя я уже подобрал. Для проверки электроники, собрал тестовое подключение на столе.

Сперва я подключил к 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 и драйвера 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

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

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