Показаны сообщения с ярлыком Tutorials. Показать все сообщения
Показаны сообщения с ярлыком Tutorials. Показать все сообщения

07.05.2013

Web-термометр

"Погодная станция своими руками" - вот как можно было бы назвать статью, но я решил пока просто рассказать о том, как соорудить web-термометр, подключить его к домашней LAN  и наблюдать показания через браузер ;)

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


12.11.2012

Апгрейдим Netduino

Перед тем, как пройти процедуру апгрейда прошивки в Netduino, несколько слов о структуре firmware, надо которым мы собираемся надругаться.

Оно состоит из двух фрагментов:
  1. TinyBooter - бутлоадер;
  2. TinyCLR - .NET Micro Framework runtime.
Бутлоадер запускается сразу после включения питания, грузит TinyCLR, который, в свою очередь - запускает ваше приложение из flash-памяти.

Итак, сначала надо найти интересующую прошивку, например в wiki. Важно скачать именно тот вариант, который относится к вашему типу платы (т.е. прошивки для Netduino и Netduino Plus отличаются).

Если требуется апдейтить только TinyCLR (еще это называют minor-апдейтом, то есть незначительными исправлениями), используют утилиту MFDeploy (ее можно найти через меню "Пуск": .Net Micro Framework SDK | Tools). После запуска установите в боке Device USB и Netduino_netduino и нажмите Ping:



Как видите, если устройство подключено, оно должно откликнуться и хоть что-то сообщить. Чтобы получить более подробную информацию о выбранном устройстве, используйте команду Device Capabilities (Ctrl+Shift+C), там можно разглядеть текущую прошитую версию TinyCLR:



Если Netduino все-таки не отзывается, нажмите расположенную на нем кнопку сброса, и, не отпуская, переподключите плату к шине (отключите, а потом снова воткните в USB - после 20 секунд плата войдет в специальный failsafe-режим), при этом на Ping она будет отвечать "TinyBoot".

Теперь в боксе Image File надо выбрать файлы для прошивания. Обычно их два - ER_CONFIG и ER_FLASH. Можете добавить сразу оба, после этого можно нажать Deploy.



Дождитесь завершения процесса и еще раз нажмите Ctrl+Shift+C -  информация с номерами прошивок должна измениться.

Для более значимых апгрейдов (например, с 4.1 до 4.2) требуется замена TinyBooter. В этом случае надо прибегнуть к фирменной атмеловской утилите "SAM-BA CDC" (можно скачать бесплатно с сайта ATMEL, правда придется заполнить несложную регистрационную форму), но для начала надо полностью похерить содержимое флеш-памяти:
Подключите Netduino к источнику питания, затем соедините Erase Pad (небольшая токопроводящая площадочка рядом с пином D0) с питанием +3.3В на более чем полсекунды. Готово! Если и было там какое-то firmware, то теперь оно стерто.

Переподключите плату - теперь вы увидите в списке устройств неизвестное устройство  c VID=03EB и PID=6124. Если указать мастеру установки поискать драйвера в папке инсталлированной атмеловской утилиты, должен установиться виртуальный последовательный порт (запомните его номер!):



Самое время запустить SAM-BA-CDC Tool, выбрать номер свежеустановленного последовательного порта, тип платы "at91sam7x512-ek" и нажать Connect:



Теперь последовательно проделаем следующие действия:
  1. Выберите в выпадающем списке Scripts "Boot from Flash (GPNVM2)", затем нажмите кнопку Execute;
  2. Выберите там же "Enable Flash Access", затем опять нажмите Execute;
  3. Выберите файл для зашивания (кнопка рядом с полем Send File Name), выберите файл TinyBooterDecompressor.bin;
  4. Нажмите Send File и подождите завершения (всего пара секунд);
  5. В окне с вопросом о залочивании областей (lock regions) откажитесь - ответьте No;
  6. По желанию, можно проверить записанный файл - поправьте размер файла в поле size (receivedfile) путем добавления 2-3 нулей в конце и нажмите "Compare sent file with memory". Должно появиться "match".
После этого можно закрыть  SAM-BA-CDC Tool и переподключить Netduino к источнику питания - новый TinyBooter будет ожидать загрузки нового TinyCLR, как это делать - см. выше.

От себя добавлю - после обновления до .Net Micro Framework 4.2 все мои нарекания по работе с Visual Studio исчезли. Только не забудьте после апгрейда выбрать в свойствах проекта .Net целевую версию 4.2, иначе Deploy вашего приложения из студии будет завершаться неуспехом:



Ну и вот ради чего все это было проделано ;) Пошаговая отладка великолепно работает в виртуальной машине:




15.03.2012

ArduinoIDE в Ubuntu 11.10

К сожалению, дистрибутив ArduinoIDE для Linux не включает в себя сам компилятор gcc (или, если быть более точным, его порт для AVR, avr-gcc). С одной стороны - это хорошо, поскольку дистрибутив становится меньше. С другой стороны - плохо, потому что произвольные сочетания версий компонентов компилятора могут давать существенные "вывихи" и генерить  неверный код.

Например, после апдейта своей Ubuntu до 11.10, я обнаружил у себя такие версии:
  • binutils-avr: 2.20.1
  • gcc-avr: 4.5.3
  • avr-libc: 1.7.1
В то время как в комплекте с ArduinoIDE 1.0 для Windows, который и поныне можно скачать на сайте arduino.cc, версии выглядят более консервативно:
  • binutils-avr: 2.19
  • gcc-avr: 4.3.2
  • avr-libc: 1.6.4
Что с этим делать и как бороться?...

19.08.2010

Уроки Wiring (6)

Урок 6. Что за ШИМ?

(продолжение, начало см. Урок 5. Нажми на кнопку!)

Пожалуй, самая загадочная для новичка надпись на плате Arduino - PWM. На самом деле, это сокращение от Pulse Width Modulation, по-русски "Широтно Импульсная Модуляция" или ШИМ.

Что такое PWM?

На секунду вернемся к картинке из предыдущего урока:



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

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

Так выглядит график зависимости свечения от тока для самого ординарного светодиода:


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

Возьмем для примера  светодиод L, присутствующий на всех современных Arduino-совместимых платах:


Светодиод загорится только в том случае, когда к его выводам будет приложена достаточная разность потенциалов. В данном случае одна ножка подключена к земле, а к другой - через токоограничительный резистор 1 кОм - вывод digital13. Следовательно, светодиод будет загораться по команде digitalWrite(13, HIGH).

Резистор включен последовательно со светодиодом с единственной целью - ограничить ток, протекающий в цепи. Обычно его значение прикидывают следующим образом: берут напряжение во всей цепи (для Arduino это 5 Вольт) и вычитают из него рабочее падение напряжения на светодиоде (указано в технических характеристиках светодиода, в простейшем случае зависит от цвета - для красного около 2 Вольт), получая падение напряжение на резисторе (в данном случае 5-2=3В). И далее, по закону Ома: R = U/I, где вместо I подставляется ток в цепи - который мы и хотим ограничить, скажем 3 мА. Получаем R = 3В/0.003А = 1000 Ом. При таком раскладе светодиод будет светиться, хоть и немного тускло, но вполне приемлемо. Чтобы добиться максимума яркости, можно увеличить ток до 30 мА - изменив номинал резистора R2 на 100 Ом.

Что же получается? Если мы хотим изменить яркость свечения светодиода, надо менять значение токоограничительного резистора. В принципе, нет ничего невозможного - существуют специальные резисторы с цифровым управлением, которые управляются через шину SPI или I2C, получают от микроконтроллера значение и меняют свое сопротивление в соответствии с ним. Но едва ли это оправдано с точки зрения стоимости и удобства (пойди еще найди и купи такой компонент, не пользующийся широким спросом). Другой вариант - это простейший ЦАП на основе R-2R цепочки, но он требует использования дополнительных выходов Arduino и тоже выглядит чересчур внушительным решением для такой простой задачи. Вот тут-то, как вы уже догадались, и приходит на помощь ШИМ.

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


Вот так выглядит скетч, который плавно гасит и зажигает светодиод L:

void setup() {
  pinMode(13, OUTPUT);
}

word cycle = 300;
byte stepdelay = 20;
byte zazor = 5;

void loop() {
  for (word intensity=zazor;intensity<(cycle-zazor);intensity++) {
    for (byte k=0;k<stepdelay;k++) {
      digitalWrite(13,HIGH);
      delayMicroseconds(intensity);
      digitalWrite(13,LOW);
      delayMicroseconds(cycle-intensity);
    }
  }
  for (word intensity=(cycle-zazor);intensity>zazor;intensity--) {
    for (word k=0;k<stepdelay;k++) {
      digitalWrite(13,HIGH);
      delayMicroseconds(intensity);
      digitalWrite(13,LOW);
      delayMicroseconds(cycle-intensity);
    }
  }
}

В этом скетче длительность импульса - чуть более 300 микросекунд. При этом в цикле мы постепенно уменьшаем и увеличиваем относительную ширину импульса, добиваясь эффекта циклического плавного изменения яркости. При этом надо избегать "крайних" значений ширины импульса около 0 и 300, иначе никакого эффекта плавного мерцания не будет (этим управляет константа "zazor").

Ура, мы изобрели диммер! (именно этот скетч я заливаю готовые платы перед отправкой, в качестве одного из элементов ОТК ;)

Торжество разума омрачает только одно - наш Ардуино оказался загруженным исключительно одной задачей. А если надо заставить скетч выполнять и другие операции? Как сделать генерацию PWM-сигнала фоновой и незаметной задачей?

Вот именно в этом случае нужно воспользоваться функцией аппаратного ШИМ в Arduino. Правда, работает она лишь на избранных пинах (они помечены звездочкой или надписью pwm), зато можно один раз выполнить analogWrite(pin, value), и спокойно заниматься другими делами. Вот так можно переписать скетч с использованием новой функции:

/*
 Fading
 
 This example shows how to fade an LED using the analogWrite() function.
 
 The circuit:
 * LED attached from digital pin 9 to ground.
 
 Created 1 Nov 2008
 By David A. Mellis
 Modified 17 June 2009
 By Tom Igoe
 
 http://arduino.cc/en/Tutorial/Fading
 
 */


int ledPin = 9;    // LED connected to digital pin 9

void setup()  { 
  // nothing happens in setup void loop()  { 
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  } 

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  } 
}

(на самом деле это скетч из примеров к ArduinoIDE - Analog|Fading).

Полюбоваться на его работу можно, если воткнуть светодиод длинной плюсовой ножкой в digital9, а короткой минусовой - в GND. Для счастливых владельцев Arduino Mega можно просто исправить значение константы ledPin в самом начале скетча с 9 на 13, поскольку в отличие от Duemilanova, Mega поддерживает аппаратный ШИМ на digital13.

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

01.11.2009

Сборка Arduino Severino

Для сборки Arduino Severino потребуются следующие детали:
  • Печатная плата - 1 шт.
  • Микроконтроллер ATmega8/168/328P - 1 шт.
  • Панелька SCS-28 - 1 шт.
  • Стабилизатор напряжения L7805CV - 1 шт.
  • Кварц 16 МГц - 1 шт.
  • Емкость керамическая 22пФ - 2 шт.
  • Емкость керамическая 100нФ - 4 шт.
  • Емкость электролитическая 100мкФ х 16В - 2 шт.
  • Емкость электролитическая неполярная 10мкФ х 16В - 1 шт.
  • Диод 1N4148 - 2 шт.
  • Диод 1N4007 - 1 шт.
  • Транзистор BC547C - 1 шт.
  • Транзистор BC557С - 1 шт.
  • Резистор 1 КОм - 5 шт.
  • Резистор 10 КОм - 5 шт.
  • Резистор 4,7 Ом - 1 шт.
  • Дроссель 100 мкГн - 1 шт.
  • Вилка PLD06 2x3 - 1 шт.
  • Светодиод - 4 шт.
  • Тактовая кнопка - 1 шт.
  • Разъем DRB-9FА угловой на плату - 1 шт.
  • Гнездо питания 2.1мм на плату - 1 шт.
  • Гнездо PBS-08 1x8 - 2 шт.
  • Гнездо PBS-06 1x6 - 2 шт.
Из инструментов потребуются:
  • паяльник
  • припой (подойдет стандартный ПОС-61)
  • флюс (самая обычная канифоль)
  • кусачки
  • пинцет
Сильно облегчает работу также держатель с лупой и крокодилами.

Печатная плата выполнена на основе технологии ЛУТ и может быть изготовлена самостоятельно. Обычно, она уже просверлена, залужена в сплаве Розе и покрыта специальным канифольным лаком, предотвращающим окисление и способствующим пайке (плавится при t=85C, при необходимости легко удаляется спиртом).

1. Устанавливаем пять резисторов - R1, R2, R3, R4 и R6 (не выбрасывайте ножки, они нам еще пригодятся! ;) Отличить их можно по порядку цветов - коричневый, черный, красный, золотистый.



2. Устанавливаем пять резисторов 10К - R5, R7, R8, R10, R11. Сочетание цветов - коричневый, черный, оранжевый, золотистый.



Золотистая полоска на краю обозначает точность, в данном случае 5%. Если не доверяете цветам, всегда можно измерить омметром (мультиметром в режиме изменения сопротивления), но учтите, что теоретические 10К могут "плавать" в диапазоне 9,5...10,5 КОм. Arduino этого вполне достаточно, а для схем, требующих бОльшую точность, есть и более точные резисторы. Но и стоят они, естественно, дороже.

3. Ставим последний резистор 4К7 - R9



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

4. Устанавливаем диоды D2, D3 - 1N4148. Они выполнены в стеклянном корпусе-капельке, по размеру еще меньшем, чем резистор. Устанавливать их надо так, чтобы совпала полоска не шелкографии и черненькая полоска на диоде (на фото полоска - справа):



5. Внизу слева монтируем защитный диод D1 - 1N4007 (допустима замена на 1N4004).
Не забываем про полоску (она снова справа):



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



Плата Arduino Severino - односторонняя (или ОПП, как говорят профи ;), в таких случаях разводка далеко не всегда получается без перемычек. Поверьте, три штуки - более чем гуманная плата за избавление от возни с изготовлением двухсторонней платы и переходными отверстиями.

7. Установим угловые джамперы JP0 и JP4:



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



8. Устанавливаем кварц Q1 - 16000 Гц



Если кварц будет в другом корпусе, например "высокий" HC-48U, его надо "положить" на плату - благо место имеется. В противном случае, он может помешать стыковке Arduino с  Shiel-платами, т.к. находится аккурат внутри зоны стыковки.

9. Ищем емкости C1 и C2 - 22 пФ, на них обычно написано 220:



И аккуратно паяем их рядом с кварцем:



10. Теперь надо найти дроссель L1 - 100 мкГн. Обычно, он выглядит как резистор:



Правильный порядок цветов: коричневый, черный, коричневый (далее идет полоса точности - золотистая или серебристая). Дроссель выполняет в цепи питания микроконтроллера помехоподавляющие функции, и включен он между питанием Vcc и питанием АЦП - AVcc. И без него будет работать, но с ним - надежнее ;)



11. Находим емкости 100 нФ (на них написано "104"):



... и устанавливаем все четыре штуки: С3, С4, С6, С7:



12. Теперь можно поставить панельку SCS-28:



13. Установим светодиоды - их в комплекте 4 штуки. Основное правило - длинной ножкой в плюс. Все светодиоды на этой плате сориентированы одинаково - плюс вверху:



(обычно на светодиодах делают "лыску", спрямляя часть окружности корпуса - это соответствует минусу).

Выбор цветов может быть произвольным. Я обычно выбираю светодиод L (LED13) поярче, потому что именно он более всего нагружен в информативном плане. Rx и Tx мигают в момент загрузки скетча из ArduinoIDE, а PWR индицирует подачу питания. Вариант:



14. Устанавливаем электролиты 100 мкФ С5 и C8, тоже длинной ножкой в плюс. Но смотреть она будет уже вниз:



15. А вот электролит 10 мкФ C9 - неполярный. И хотя у него тоже одна ножка длиннее, не верьте! ;)  На то он и неполярный: как хотите, так и устанавливайте.



16. Установим транзисторы: T1 - BC547, T2 - BC557.

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



Далее, можно установить, ориентируя корпус по шелкографии:



Только не перепутайте BC547 и BC557 - у них разная проводимость. А вот буква на конце значения не играет - BC557B будет работать так же хорошо, как и BC557C.

17. Устанавливаем тактовую кнопку сброса



(тактовая - это от английского tactile - осязаемая).

18. Рядом ставим гребенку ICSP 2x6 - PLD06:



Паять её надо осторожно: если перегреете ножки, они могут "поехать" в пластиковом корпусе и вместо аккуратной гребенки может получиться "ежик с иголками врастопырку" ;)

Гребенка ICSP ( in circuit serial programming ) потребуется для двух ситуаций: 1. Зашивание bootloader-а в "свежий" микроконтроллер 2) Работа через AVRStudio. Чтобы ее использовать, Вам потребуется программатор.

19. Теперь устанавливаем IC2 - стабилизатор напряжения +5В - L7805CV:



Если подогнуть ножки заранее, на плате будет выглядеть чуть более аккуратно (хотя, дело вкуса):



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

Если собираетесь питать Arduino от источника питания более +9В например, от +12В, стоит позаботиться о дополнительном радиаторе - для этого придется впаять стабилизатор вертикально и соединить его при помощи винта с этим самым радиатором. Иначе есть риск обжечься - на 12В греться он будет прилично.

20. Теперь надо запаять колодки выводов PBS - две по 8 выводов и две по 6. Удобно пользоваться для этого готовой shield-платой: она переворачивается ножками вверх, на них одеваются колодки PBS:



... а затем плата Arduino / Freeduino, на которую надо установить эти колодки:



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





21. Устанавливаем разъем COM-порта DRB-9:



22. Устанавливаем гнездо питания 2,1/5,5 мм:



Рекомендую перед установкой очистить контакты от окислов, например слегка пройтись по ним надфилем. При пайке лучше использовать жидкий флюс (например, тот же ЛТИ-120). Ну и олова придется капнуть чуть побольше, если надо закрыть трехмиллиметровые отверстия в плате.

23. При необходимости, аккуратно подогните ножки микроконтроллера ATmega:



... и установите его в панель SCS-28, совмещая ключ на корпусе, на панельке и шелкографии (в данном случае, он смотрит направо):



Готово! Тем, кто уже имел дело с Arduino, рекомендую изучить руководство по этой плате, там подробно объясняется смысл всех схемотехнических решений и джамперов (на английском).

Поскольку микроконтроллер из комплекта уже прошит, можно сразу и протестировать: для этого надо подключить источник питания и соединить COM-порт с компьютером.

Запустите ArduinoIDE, убедитесь, что она сконфигурирована для нужного типа платы "Tools | Board | ... " и для нужного COM-порта "Tools | Serial Port | ... ". Тип платы в случае с Severino зависит от микроконтроллера:

  • ATmega8-16PU = "Arduino NG o older w/ ATmega8";
  • ATmega168-20PU = "Arduino Diecimila, Duemilanove, or Nano w/ ATmega168";
  • ATmega328P-PU = "Arduino Duemilanove or Nano w/ ATmega328".
Загрузите исходник тестового sketch-а из комплекта: "File | Examples | Digital | Blink".

Откомпилируйте программу (Ctrl+R, круглая кнопка со стрелкой, "Sketch | Verify/Compile"), затем "залейте" sketch (Ctrl+U, квадратная кнопка со стрелкой вправо, "File | Upload to I/O board"). По окончании должно появиться сообщение об успешной загрузке в плату Arduino.

Светодиод L должен начать стабильно мигать (для Atmega8 подождите 10-15 секунд, так уж устроен его bootloader).

11.10.2009

Harness Kit для Arduino Mega

Что делать, если Вы собрали свою схему с классическим Arduino и хотите похвастаться перед поклонниками (полонницами)? Или хотите водрузить ее на движущегося робота? В голову сразу  приходит мысль о какой-то жесткой основе, на которой надо закрепить батарейку, Arduino и мини-макетку со схемой. Ведь одно неловкое движение, и провода вылезают из гнезд, а схема становится неработоспособной. Я уже не говорю о том, что рук не хватит держать все компоненты и при этом по-итальянски темпераментно жестикулировать, поясняя работу устройства ;)

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

Harness Kit поможет обойтись без эпоксидки:


Открытая упаковка выглядит приблизительно так:


На фото видна основа, бокс для "кроны" с батарейным разъемом, два переходника на цилиндрический разъем питания и мешочек с детальками. Основание выполнено из прозрачного пластика методом lasercut, просто закрыто бумагой.



Комплект крепежа в пакетике:
  • ножка-клипса - 4 шт.
  • винтик с гайкой и изолирующей шайбой - 3 шт.
  • крепление-клипса - 4 шт.
  • пластиковый винт с гайкой - 4 шт.

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



Большая часть свободно вставляется в дырку на основе:



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







Теперь надо закрепить батарейный отсек. Это делается тремя маленькими металлическими винтиками диаметром 1,8 мм и длиной 9 мм.



Винтик полностью утопает в углублении и не мешает ставить батарею. Логично, только зачем при этом изолирующая шайба? По идее, ей ничего изолировать не требуется. Итак, готово:



На фото аккумулятор. Кстати, сильно помогает экономить "кроны".

Далее, надо закрепить плату. Тут можно использовать подходящие по диаметру крепления-клипсы:



Принцип почти тот же, что и у ножек. Вставил-надавил-зафиксировал. Поскольку автор этого Kit-а - Альберт Миао, разъем на батарейном отсеке без лишних вопросов стыкуется с разъемом Seeeduino Mega:



Но предусмотрены и другие варианты. При помощи переходников можно подключить и классический Arduino, а также запитать Seeeduino от цилиндрического разъема питания:





Размер основания позволяет закрепить и Arduino Mega:



Если устанавливать Diecimila или Duemilanova, то останется свободное место, которым можно распорядиться с умом:



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





Дополнительный плюс таких пластиковых винтиков (диаметр 2,5 мм) - они являются также диэлектриками, в случае чего. А вот если подобрать миниатюрную макетку и маленький LCD, то можно и все четыре компонента разместить:



Краткий итог: в принципе, смотрится неплохо, вполне удобно и универсально. Я доволен тем, что соблюдается основное и самое главное правило "ленивого" макетирования - возможность одним движением быстро поставить или снять плату, подключить питание. Но, цена, конечно, могла бы быть и поменьше. Был бы под рукой лазерный резак ;) - можно было и самому сделать!