Ардуино термометр
На основе работы Мирко Павлески я создал этот дизайн для 3D-печати.
Спецификация осталась прежней, я использовал Arduino Nano Every вместо Arduino Nano, а также исключил переключатель для изменения режимов отображения. Питание термометра осуществляется через кабель micro USB от Arduino.
спецификация
Ардуино Нано Каждый
Датчик температуры DS18B20
50 светодиодов WS2812B 144 светодиода/м
Резистор 4,7 кОм
Электропроводка
Схема подключения взята из оригинального поста. На самом деле светодиоды нужно сначала припаять к Arduino только с 3 контактами. Для датчика температуры резистор сопротивлением 4,7 кОм подключается параллельно линии передачи данных 5 В.
САПР
Сначала я измерил светодиодную ленту (WS218B 144 светодиодов/м), чтобы определить правильное расстояние между светодиодами. Затем я вставил цифры и отметки для шагов 0,5°C. Я сделал вырезы, чтобы распечатать их в нескольких цветах. Для этого я создал отдельные тела и объединил их в группу, чтобы их можно было снова импортировать как модель в слайсер.
Для Arduino я просто положил небольшую коробку сзади. Там можно красиво спрятать кабели, а также настроить их с помощью него. Arduino я закрепил в коробке с помощью горячего клея.
Печать
Напечатал это на своем Hevo с размером рабочего пространства 420x420x400 и прикрепленной Palette 2S Pro, цифры оранжевые, штрихи справа от цифр с шагом 1 ° C — золотые, а остальные штрихи — белые. У меня также есть текстурный ��ист PEI, который создает красивую поверхность, похожую на порошковую.
Светодиодные ленты легко вставляются снизу. В проводке я исключил кнопку, потому что мне нужен только режим, в котором вы можете видеть линии разных цветов (от синего до красного). Также я обнаружил ошибку в коде программы, при которой строковое отображение не обновлялось корректно. Я исправил это и исправил смещение, потому что отображаемая температура была немного неправильной.
Код
#include «Wire.h» // импортирует библиотеку проводов для обмена данными по I2C
#include
#include
#include
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
Датчики температуры Далласа (&oneWire);
плавающий Цельсий = 0;
int buttonPin = 2; // кнопка мгновенного действия на контакте 0
ИНТ OldButtonVal = 0;
#define NUM_PIXEL 50
#определить PIN 6
Полоса Adafruit_NeoPixel = Adafruit_NeoPixel(NUM_PIXEL, PIN, NEO_GRB + NEO_KHZ800);
интервал nPatterns = 3;
INT LightPattern = 2;
целое число = 0;
интервал т = 0;
недействительная настройка()
{
Серийный.начало(9600); //включаем последовательный монитор
полоса.начать();
ОчиститьСтрип();
полоса.шоу();
Strip.setBrightness(2);
pinMode (кнопкаPin, INPUT);
digitalWrite (кнопкаPin, ВЫСОКИЙ); // контакт кнопки ВЫСОКИЙ, поэтому при нажатии он падает до 0
датчики.begin();
}
недействительное тестирование(){
for(int L = 0; L<50; L++) {
ОчиститьСтрип();
Strip.setPixelColor(L,wheel(((205+(L*3)) & 255)));//Градиент от синего (холодного) к зеленому (ок) к красному (теплому), первое значение здесь 205 = начальный цвет, второе значение здесь 42 = конечный цвет
полоса.шоу();
задержка(100);
}
for(int L = 49; L>=0; L--) {
ОчиститьСтрип();
Strip.setPixelColor(L,wheel(((205+(L*3)) & 255)));//Градиент от синего (холодного) к зеленому (ок) к красному (теплому), первое значение здесь 205 = начальный цвет, второе значение здесь 42 = конечный цвет
полоса.шоу();
задержка(100);
}
задержка(1000);
}
недействительная точка () {
датчики.requestTemperatures();
Ceelcius=sensors.getTempCByIndex(0)*2-1,5;
int t = карта (Цельций, 20, 70, 0, NUM_PIXEL);
for(uint16_t L = 0; LОчиститьСтрип();
Strip.setPixelColor(L,wheel(((205+(L*3)) & 255))); //Градиент от синего (холодного) к зеленому (хорошо) и красному (теплому), первое значение здесь 205 = начальный цвет, второе значение здесь 42 = конечный цвет
}
полоса.шоу(); //Вывод на полосу
Serial.print(«Температура: „);
//Serial.print(Цельций);
Serial.print(sensors.getTempCByIndex(0));
задержка(1000);
}
пустая строка() {
датчики.requestTemperatures();
Celcius=sensors.getTempCByIndex(0)*2-1,75;
int t = карта (Цельций, 20, 70, 0, NUM_PIXEL);
for(uint16_t L = 0; L
Strip.setPixelColor(L,wheel(((205+(L*3)) & 255))); //





























