Оглавление:
- Шаг 1. Что такое ночное загрязнение и как его измерять
- Шаг 2: спецификация
- Шаг 3: Схема
- Шаг 4: Датчик HTU21D
- Шаг 5: TSL2591
- Шаг 6: Код
- Шаг 7: внутри
Видео: Портативная метеостанция для наблюдателей за ночным небом: 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Световое загрязнение - одна из многих проблем в мире. Чтобы решить эту проблему, нам нужно знать, насколько ночное небо загрязнено искусственным светом. Многие студенты с учителями в мире пытаются измерить световое загрязнение с помощью дорогих датчиков. Я решил заменить свой портативный люксметр (подробнее см. Предыдущий проект «Портативный люксметр») на метеостанцию с датчиком TSL2591. Этот датчик достаточно чувствителен для измерения ночного загрязнения. Также я добавляю HTU21D для измерения температуры и влажности.
Шаг 1. Что такое ночное загрязнение и как его измерять
Ночное загрязнение - это свет от ламп, автомобилей, домов, огромных ЖК-панелей в городе и всех источников света, созданных человеком. Этот свет называют искусственным. Для наблюдателей искусственное освещение - главная проблема, чтобы увидеть звезды из города, и они должны выходить за город. Для человека вредно высокое световое загрязнение. А также для деревьев, травы и животных.
Чтобы проверить световое загрязнение вашего дома, вы можете посмотреть здесь карту светового загрязнения.
Это всего лишь модель, и реальные значения могут отличаться. Вот почему я создал этот люксметр.
Для измерения светового загрязнения я измеряю только люкс и рассчитываю величину / арсек2.
Я могу рассчитать от люкс до кандел на квадратный метр:
1 кд / м2 = 1 люкс
Величина на квадратную угловую секунду (mag / arcsec2) описывает фон ночного неба (это называется поверхностной яркостью).
Подробнее о вики: Яркость поверхности
Для расчета кд / м2 в mag / arcsec2 используется формула:
[значение в mag / arcsec2] = Log10 ([значение в кд / м2] / 108000) / - 0,4
unihedron.com/projects/darksky/magconv.php
Шаг 2: спецификация
Для этого проекта вам понадобятся:
1. WEMOS D1 Mini или любой микроконтроллер
(Я использую wemos, потому что он самый маленький, с USB-портом вы можете попробовать Arduino Nano)
WEMOS D1 MINI (Yanwen Economic Air Mail)
WEMOS D1 MINI (Стандартная доставка AliExpress)
WEMOS D1 MINI 10 шт. (Заказная Авиапочта Китая - бесплатная доставка)
USB-кабель для программирования и загрузки кода в Wemos
2. Датчик TSL2591
TSL2591 (Yanwen Economic Air Mail)
TSL2591 (Заказная Авиапочта Китая)
TSL2591 (Заказная Авиапочта Китая)
3. Датчик температуры и влажности HTU21D
HTU21D (Cainiao Super Economy)
HTU21D (Yanwen Economic Air Mail - бесплатная доставка)
4. OLED-дисплей 0,96 (128 x 64)
OLED-дисплей
OLED-дисплей
OLED-дисплей
5. Аккумулятор 18650
Литий-ионный аккумулятор 18650
Литий-ионный аккумулятор 18650
аккумулятор 18650 держатель
6. Зарядный модуль TP4056.
tp4056
tp4056
7. кнопки переключателя или перемычка.
swtich красный дип
swtichers, много разных
8. макетные и dupont кабели.
небольшой макет
макетная плата
9. футляр, создаю из дерева + скотч
Красная лента
Принтер Prusa 3D, надеюсь сделаю корпус из пластика: D
Шаг 3: Схема
Схема довольно простая:
Подключите все модули i2c (TSL2591, OLED, HTU21D) к контактам SCL и SDA на wemos (SDA -> D2, SCL -> D1).
Подайте на них напряжение 3,3 В от Wemos.
Подключите плюсовую клемму аккумулятора к выводу 5 В на wemos, а вывод + аккумулятор на зарядном модуле TP4056 - к плюсовой клемме аккумулятора.
Соедините все заземления вместе.
Шаг 4: Датчик HTU21D
Я покупаю новый датчик температуры, который измеряет с точностью до 0,3 ° C!
Что вам следует знать об этом датчике (от sparkfun):
- Использует интерфейс I2C
- Типичная точность измерения влажности ± 2%
- Типичная точность измерения температуры ± 0,3 ° C
- Работает с влажностью от 0 до 100%, но этот датчик не рекомендуется использовать в суровых условиях, когда он может контактировать с водой (например, под дождем).
- Датчик 3,3 В - используйте встроенные преобразователи логического уровня или резисторы 10 кОм для ограничения сигналов 5 В
- Только один датчик HTU21D может находиться на шине I2C одновременно.
Резюмирую: это хороший датчик, потому что он измеряет с точностью до 0,3 ° C и одновременно - температуру и влажность. Плюсы - помехи I2C и минусы 3,3 В, но в моем случае это не имеет значения.
Шаг 5: TSL2591
Датчик хорош для измерения загрязнения ночного неба из-за своей чувствительности (до 188 мкл!).
1. это диоды с возможной ик и полной мерой. Я этим не пользуюсь.
2. регулятор напряжения от 5 В до 3,3 В
Характеристики чипа (от adafruit):
- Приблизительный отклик человеческого глаза
- Чрезвычайно широкий динамический диапазон от 1 до 600 000 000 отсчетов
- Диапазон люкс: чувствительность 188 люкс, входные измерения до 88 000 люкс.
- Диапазон температур: от -30 до 80 * C
- Диапазон напряжения: 3,3-5 В на бортовом регуляторе
- Интерфейс: I2C
- Эта плата / чип использует 7-битный адрес I2C 0x29 (фиксированный)
- Размеры: 19 мм x 16 мм x 1 мм / 0,75 дюйма x 0,63 дюйма x 0,04 дюйма Вес: 1,1 г
- 2 диода для измерения как ИК, так и полного спектра
Резюме:
188 uLux отлично, а также связь по I2C проста. Возможно, проблема может быть решена по адресу I2C (0x29). Также на борту неплохой регулятор и можно использовать датчик зимой (на морозе).
Шаг 6: Код
Вам понадобятся эти библиотеки (я добавляю их в один zip-файл):
- Adafruit-GFX-Библиотека-мастер
- adafruit_gfx_library_master
- Adafruit_HTU21DF_Library-master
- Adafruit_Sensor-master
- Adafruit_TSL2591_Bibrary-master
Код: вы можете использовать мой или создать свой. Не забудьте установить максимальное время интегрирования (600 мс) и максимальное усиление (GAIN_MAX) для измерения ночного неба.
Если вы попытаетесь использовать мой код, загрузите ino-файл. Когда я копирую свой код из инструктируемого, что-то не так с библиотеками
Я использую загружаемое изображение луны просто для удовольствия. Вы можете использовать любой, просто используйте эту страницу для получения массива:
javl.github.io/image2cpp/
//https://lastminuteengineers.com/oled-display-arduino-tutorial///https://javl.github.io/image2cpp/ // mcd к величине https://unihedron.com/projects/darksky/magconv.php… // HD44780 - это контроллер для символьных жидкокристаллических дисплеев (ЖКД). https://unihedron.com/projects/darksky/magconv.php… #include
#включают
#include #include #include "Adafruit_HTU21DF.h" #include "Adafruit_TSL2591.h" int counter; // OLED-дисплей TWI-адрес #define OLED_ADDR 0x3C Adafruit_SSD1306 display (-1); // - 1 для отображения перезапуска с кнопкой перезапуска на плате arduino Adafruit_HTU21DF htu = Adafruit_HTU21DF (); Adafruit_TSL2591 tsl = Adafruit_TSL2591 (2591); // передаем число для идентификатора датчика (для дальнейшего использования) uint32_t lum; uint16_t ir, full; int ulux; float lux; температура поплавка; float rel_hum; float mag_arcsec2; // визуальные метки / arcsecond² [значение в mag / arcsec2] = Log10 ([значение в кд / м2] / 108000) / - 0,4 // символы // градус для Цельсия const беззнаковый char градус PROGMEM = {0xe, 0x11, 0x11, 0x11, 0xe, 0x0, 0x0, 0x0}; // показатель степени 2 const беззнаковый символ экспоненты PROGMEM = {0xe, 0x1b, 0x3, 0x6, 0xc, 0x18, 0x1f, 0x0}; // 'moon_logo', 128x64px const unsigned char intro PROGMEM = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xc0, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfd, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xfc, 0x07, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xbe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xcc, 0xff, 0xff, 0x8fx, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, 0xc0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x ff, 0xff, 0xf0, 0x00, 0x3f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xe0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x60, 0xff, 0xff, 0xff, 0xff, 0xef, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xffc, 0xff, 0x00 0xff, 0xff, 0xff, 0xff, 0xe1, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0x38, 0x38 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x48, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x80, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xc0, 0xc4, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x60, 0x0f, 0x80, 0xff, 0xff, 0x80 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf0 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00e 0x43, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x4f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x5f, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0xff, 0x03, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x01, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x0f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x 00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0x00, 0x 0x7f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00ff, 0x03, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; void setup () {// htu21d htu.begin (); // tsl2591 sensor_t сенсор; tsl.getSensor (& сенсор); tsl.setGain (TSL2591_GAIN_MAX); // МАКС, ВЫСОКОЕ СРЕДНЕЕ, НИЗКОЕ, tsl.setTiming (TSL2591_INTEGRATIONTIME_600MS); // 100 мс, 200 мс, 300 мс, 400 мс, 500 мс, 600 мс // настройка для OLED-дисплея display.begin (SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay (); display.display (); display.drawBitmap (0, 0, вступление, 128, 64, БЕЛЫЙ); display.display (); задержка (1000); display.setTextSize (1); display.setTextColor (БЕЛЫЙ); display.setFont (& FreeSerif9pt7b); display.clearDisplay (); } void loop () {lux = 0; ulux = 0; mag_arcsec2 = 0; темп = 0; rel_hum = 0; задержка (100); lum = tsl.getFullLuminosity (); ir = lum >> 16; полный = lum & 0xFFFF; задержка (100); lux = tsl.calculateLux (full, ir); // интенсивность света в микролюксе ulux = lux * 1000000; если (ulux <0) {ulux = 0; } mag_arcsec2 = log10 (люкс / 108000) / - 0,4; // (log ((ulux / 108000)) /(-0.4) temp = htu.readTemperature (); rel_hum = htu.readHumidity (); display_values ();} void display_values () {//display.drawPixel(120, 50, БЕЛЫЙ); display.clearDisplay (); display.setCursor (1, 15); display.print (temp); display.drawBitmap (42, 2, deg, 8, 5, WHITE); display.setCursor (50, 15); display.print ("C"); display.setCursor (70, 15); display.print (rel_hum); display.setCursor (114, 15); display.print ("%"); display.drawLine (1, 20, 127, 20, БЕЛЫЙ); display.drawLine (67, 1, 67, 20, БЕЛЫЙ); display.setCursor (1, 35); display.print ("ulux ="); display.setCursor (50, 35); display.print (ulux); display.setCursor (1, 55); display.print ("mag / arsec"); display.drawBitmap (70, 45, exponent, 8, 8, WHITE); display. setCursor (83, 55); display.print (mag_arcsec2); display.display ();}
Шаг 7: внутри
Я создаю собственный корпус и использую макетную плату с кабелями dupont, как видите.
Я использую TP4056 для зарядки аккумулятора с помощью кабеля USB (нужна перемычка swtich dip).
Для включения / выключения я использую перемычку.
Для дневного света TSL2591 показывает 0, а mag / arcsec2 - нано.
Для ночного неба TSL2591 должен показывать от 0 до 1000000 микролюкс (люкс) и соответствующий mag / arcsec2.
(примерно от 14 до 22 маг / арсек2).
Для fullMoon я измерил 50 тыс. Люкс, что составляет 0,05 люкс.
Рекомендуемые:
Портативная метеостанция: 4 шага
Портативная метеостанция: в этом руководстве мы будем использовать Arduino, OLED-дисплей и комбинированный датчик окружающей среды SparkFun с датчиками CCS811 и BME280 на борту, чтобы создать портативное устройство, которое измеряет температуру, влажность, уровни TVOC, барометрическое давление
Метеостанция NaTaLia: метеостанция на солнечной энергии Arduino сделала правильный выбор: 8 шагов (с изображениями)
Метеостанция NaTaLia: метеостанция на солнечной энергии Arduino сделала правильный выбор: после 1 года успешной работы в 2 разных местах я делюсь своими планами по проекту метеостанции на солнечной энергии и объясняю, как она превратилась в систему, которая действительно может выжить в течение длительного времени. периоды от солнечной энергии. Если вы последуете
Ферма наблюдателей за сахарным тростником: 8 шагов
Ферма наблюдателей за сахарным тростником: Это полностью автоматизированная ферма по выращиванию сахарного тростника. Это очень эффективно
Недорогая и быстрая портативная подставка для iPhone / PMP: 3 шага (с изображениями)
Дешевый и быстрый портативный IPhone / подставка PMP: я довольно много путешествую и всегда искал подставки для любого PMP (персонального медиаплеера) / iPod / PSP / iPhone или любого другого устройства, которое я сейчас использую для просмотра фильмов во время полета. загвоздка в том, что стойки должны быть небольшими и удобными в установке
Простая, дешевая, портативная подставка / кулер для ноутбука: 9 шагов (с изображениями)
Простая, дешевая, портативная подставка / кулер для ноутбука: это супер-легкий и недорогой проект, который под силу каждому. Эта подставка / кулер для ноутбука может быть изготовлена для ноутбука любого размера или любой марки (я сделал свою для 13,3-дюймового MacBook)