Во многих случаях мини-компьютеры, такие как: Raspberry Pi, Orange Pi, Banana Pi и т.п., поставляется с небольшим вентилятором на 5 В, чтобы можно было охлаждать процессор (вернее — СнК/SoC) компьютера. Тем не менее, эти вентиляторы обычно довольно шумные, и многие подключают его к выводу на 3.3 В, чтобы уменьшить шум. Вентиляторы обычно рассчитаны на 200 мА, что довольно много для регулятора на 3.3 В на Raspberry Pi.
Этот проект научит вас, как регулировать скорость вращения вентилятора в зависимости от температуры процессора. В отличие от большинства руководств, охватывающих эту тему, мы не только включим или выключим вентилятор, но и будем контролировать его скорость с помощью ШИМ, как это делается на обычном ПК.
- 1 Что такое ШИМ?
- 2 Управление вентилятором с помощью биполярного NPN-транзистора
- 3 Управление вентилятором с помощью МОП транзистора
- 4 Как получить температуру процессора
- 5 Включение вентилятора при заданной температуре
- 6 ШИМ управление: Пример 1
- 7 ШИМ управление: Пример 2
- 8 Как поместить скрипт в автозагрузку
- 9 Как проверить?
- 10 Удаление скрипта из автозагрузки
- 11 Материалы
- 12 Похожие записи
Что такое ШИМ?
Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) — процесс управления мощности методом пульсирующёго включения и выключения прибора. Различают аналоговую ШИМ и цифровую ШИМ, двоичную (двухуровневую) ШИМ и троичную (трёхуровневую) ШИМ. Основной причиной применения ШИМ является стремление к повышению КПД при построении вторичных источников питания электронной аппаратуры и в других узлах, например, ШИМ используется для регулировки яркости подсветки LCD-мониторов и дисплеев в телефонах, КПК и т.п..
Управление вентилятором с помощью биполярного NPN-транзистора
Первое что приходит на ум — поставить биполярный NPN-транзистор. Вентилятору требуется 200мА, поэтому ищем транзистор с коллекторным током более 200мА, лучше раза в 2-3. В импортных даташитах этот параметр называется Ic, в наших Iк. Подойдут транзисторы: 2N5550, 2N5551, 2N2222A и т.д.. У транзистора, в первую очередь, надо определить назначение выводов. Где у него коллектор, где база, а где эмиттер. Сделать это лучше всего по даташиту или справочнику.
Схема подключения вентилятора
Берем транзистор и подключаем его по такой схеме:
Таким образом, при подаче «1» на вход нашей схемы ток от источника питания потечёт через резистор R1, базу и эмиттер на землю. При этом транзистор откроется и ток сможет идти через переход коллектор-эмиттер, а значит и через нагрузку (вентилятор).
Резистор R1 играет важную роль — он ограничивает ток через переход база-эмиттер. Если бы его не было, ток не был бы ничем ограничен и просто испортил бы управляющую микросхему (ведь именно она связывает линию питания с транзистором).
Кроме того, нужно помнить, что нагрузка индуктивная и нужен защитный диод D1. Дело в том, что энергия, запасённая магнитным полем, не даёт мгновенно уменьшить ток до нуля при отключении ключа. А значит, на контактах нагрузки возникнет напряжение обратной полярности, которое легко может нарушить работу контроллера или даже повредить его.
Управление вентилятором с помощью МОП транзистора
Вместо биполярного можно использовать полевой транзистор — MOSFET, то есть полевые транзисторы с изолированным затвором (они же МОП, они же МДП). Они удобны тем, что управляются исключительно напряжением: если напряжение на затворе больше порогового, то транзистор открывается. При этом управляющий ток через транзистор пока он открыт или закрыт не течёт. Это значительное преимущество перед биполярными транзисторами, у которых ток течёт всё время, пока открыт транзистор.
В дальнейшем мы будем использовать только n-канальные MOSFET. Это связано с тем, что n-канальные транзисторы дешевле, имеют лучшие характеристики и для управления N-канальным полевиком необходимо приложить положительное напряжение на затвор относительно истока.
Схема подключения вентилятора
Нагрузка подключена к стоку («сверху»). Если подключить её «снизу», то схема работать не будет. Дело в том, что транзистор открывается, если напряжение между затвором и истоком превышает пороговое. При подключении «снизу» нагрузка будет давать дополнительное падение напряжения, и транзистор может не открыться или открыться не полностью.
Резистор R1 на 100 Ом ограничивает ток заряда-разряда, а резистор R2 на 10 кОм — это стягивающий резистор, что в неопределенном состоянии «стягивает» потенциал к земле.
Кроме того, нужно помнить, что нагрузка индуктивная и нужен защитный диод D1.
N-канальные MOSFET с логическим уровнем управления
Один из минусов МОП транзисторов — это высокое пороговое напряжение затвора, больше 3.3 В. Тем не менее, существуют N-канальные транзисторы с логическим уровнем управления, например: IRL2505, FDN337N, ZVN4306A, 2N7000, PMV16XNR, NTZD3155C, IRLZ24NPBF, IRL520NPBF и т.п.
Как получить температуру процессора
Существует несколько способов получить текущую температуру процессора.
Если вы используйте Armbian, вы можете использовать команду:
armbianmonitor -m
эта команда будет давать вам время работы, частоту и текущую температуру процессора каждые 6 секунд.
Есть еще одна команда, которая просто возвращает температуру процессора:
cat /sys/devices/virtual/thermal/thermal_zone1/temp
или
cat /sys/devices/virtual/thermal/thermal_zone0/temp
или
cat /sys/class/thermal/thermal_zone0/temp
Внутри SoC Allwinner есть два датчика, вы можете взять оба значения, чтобы получить среднюю температуру. На Raspberry Pi температура измеряется в миллиградусах, для перевода в градусы Цельсия нужно разделить полученное число на 1000:
В Raspberry Pi можно узнать температуру процессора при помощи ввода консольной команды:
vcgencmd measure_temp
Включение вентилятора при заданной температуре
Ниже приведённые примеры используют WiringPi и, если библиотека у вас не установлена, установите её, инструкции тут: WiringPi, WiringOP или BPI-WiringPi.
Самый простой пример управления вентилятором — это его включение, при достижении критичной температуры, и выключение, если температура ниже. Если шум вентилятора не мешает, тогда можно использовать такой вариант.
#include <iostream> #include <fstream> #include <wiringPi.h> #include <unistd.h> #define PIN 7 #define TEMPERATURE_MIN 55 using namespace std; static int getTemperature() { static fstream myfile; int temperature = 0; myfile.open("/sys/devices/virtual/thermal/thermal_zone0/temp", ios_base::in); myfile >> temperature; myfile.close(); return temperature; } int main() { int temperature; int pinState = 0; try { if (wiringPiSetup() == 0) { pinMode(PIN, OUTPUT); while (1) { temperature = getTemperature(); if (temperature >= TEMPERATURE_MIN && pinState == 0) { digitalWrite(PIN, HIGH); pinState = 1; } else if (temperature < (TEMPERATURE_MIN - 10) && pinState == 1) { digitalWrite(PIN, LOW); pinState = 0; } usleep(1000 * 1000); } } } catch (exception& e) { cerr << e.what() << endl; } return 0; }
Программа работает следующим образом — при достижении заданной температуры (более 55°С) вентилятор включается, и отключается только когда температура снизится более чем на 10°С от максимального порога (менее 45°С).
Температуру получаем с помощью функции static int getTemperature()
. На Raspberry Pi температура измеряется в миллиградусах, для перевода в градусы Цельсия нужно разделить полученное число на 1000 и необходимо будет внести несколько изменений,
вместо:
static int getTemperature() { static fstream myfile; int temperature = 0; myfile.open("/sys/devices/virtual/thermal/thermal_zone0/temp", ios_base::in); myfile >> temperature; myfile.close(); return temperature; }
использовать:
static int getTemperature() { static fstream myfile; int temperature = 0; myfile.open("/sys/devices/virtual/thermal/thermal_zone0/temp", ios_base::in); myfile >> temperature; myfile.close(); return temperature / 1000; }
Компиляция, сборка и запуск программы
Сознаём файл FanPiOnOff.cpp
и вставляем вышеприведённый код:
nano FanPiOnOff.cpp
Компилируем и собираем программу:
g++ -Ofast -Wall FanPiOnOff.cpp -lwiringPi -lpthread -o FanPiOnOff
Запускаем:
./FanPiOnOff
если хотим запустить программу в фоновом режиме:
nohup ./FanPiOnOff &
ШИМ управление: Пример 1
Логика программы такова — при достижении заданных температур вентилятор включается с определённым коэффициентом заполнения, а отключается только тогда, когда температура ниже минимального порога:
- 45 °C -> 35 %
- 50 °C -> 50 %
- 60 °C -> 75 %
- 75 °C -> 100 %
#include <iostream> #include <fstream> #include <wiringPi.h> #include <softPwm.h> #include <unistd.h> #define PIN 7 #define RANGE 100 #define PWM_VALUE1 35 #define PWM_VALUE2 50 #define PWM_VALUE3 75 #define PWM_VALUE4 100 #define TEMPERATURE_1 45 #define TEMPERATURE_2 50 #define TEMPERATURE_3 60 #define TEMPERATURE_4 70 using namespace std; static int getTemperature() { static fstream myfile; int temperature = 0; myfile.open("/sys/devices/virtual/thermal/thermal_zone0/temp", ios_base::in); myfile >> temperature; myfile.close(); return temperature; } int main() { int temperature; bool pwmStopped = true; try { if (wiringPiSetup() == 0) { while (1) { temperature = getTemperature(); if (temperature > TEMPERATURE_4) { if (pwmStopped) { softPwmCreate(PIN, ((PWM_VALUE4 * RANGE) / 100), RANGE); pwmStopped = false; } else { softPwmWrite(PIN, ((PWM_VALUE4 * RANGE) / 100)); } } else if (temperature > TEMPERATURE_3) { if (pwmStopped) { softPwmCreate(PIN, ((PWM_VALUE3 * RANGE) / 100), RANGE); pwmStopped = false; } else { softPwmWrite(PIN, ((PWM_VALUE3 * RANGE) / 100)); } } else if (temperature > TEMPERATURE_2) { if (pwmStopped) { softPwmCreate(PIN, ((PWM_VALUE2 * RANGE) / 100), RANGE); pwmStopped = false; } else { softPwmWrite(PIN, ((PWM_VALUE2 * RANGE) / 100)); } } else if (temperature > TEMPERATURE_1) { if (pwmStopped) { softPwmCreate(PIN, ((PWM_VALUE1 * RANGE) / 100), RANGE); pwmStopped = false; } else { softPwmWrite(PIN, ((PWM_VALUE1 * RANGE) / 100)); } } else { softPwmStop(PIN); pwmStopped = true; } usleep(1000 * 1000); } } } catch (exception& e) { cerr << e.what() << endl; } return 0; }
Компиляция, сборка и запуск программы
Сознаём файл FanPiPWM.cpp
и вставляем вышеприведённый код:
nano FanPiPWM.cpp
Компилируем и собираем программу:
g++ -Ofast -Wall FanPiPWM.cpp -lwiringPi -lpthread -o FanPiPWM
Запускаем:
./FanPiPWM
если хотим запустить программу в фоновом режиме:
nohup ./FanPiPWM &
ШИМ управление: Пример 2
Также можно менять коэффициент заполнения линейно. В таком случае программе нужно задать минимальную температуру срабатывания и минимальный коэффициент заполнения, к примеру 45°C и 35% соответственно, а на максимальную температуру (к примеру 70°C) — коэффициент в 100%. Рассчитывается коэффициент заполнения с помощью функции static int map(int x, int inMin, int inMax, int outMin, int outMax);
.
#include <iostream> #include <fstream> #include <wiringPi.h> #include <softPwm.h> #include <unistd.h> #define PIN 7U #define RANGE_MAX 100 #define RANGE_MIN 35 #define TEMPERATURE_MAX 70 #define TEMPERATURE_MIN 45 using namespace std; static int getTemperature() { static fstream myfile; int temperature = 0; myfile.open("/sys/devices/virtual/thermal/thermal_zone0/temp", ios_base::in); myfile >> temperature; myfile.close(); return temperature; } static int map(int x, int inMin, int inMax, int outMin, int outMax) { if (x < inMin) { return outMin; } else if (x > inMax) { return outMax; } return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin; } int main() { int temperature; int pwmValue; bool pwmStopped = true; try { if (wiringPiSetup() == 0) { while (1) { temperature = getTemperature(); pwmValue = map(temperature, TEMPERATURE_MIN, TEMPERATURE_MAX, RANGE_MIN, RANGE_MAX); if (temperature >= TEMPERATURE_MIN && pwmStopped) { softPwmCreate(PIN, pwmValue, RANGE_MAX); pwmStopped = false; } else if (temperature >= (TEMPERATURE_MIN - 5) && !pwmStopped) { softPwmWrite(PIN, pwmValue); } else { if (!pwmStopped) { softPwmStop(PIN); } pwmStopped = true; } usleep(1000 * 1000); } } } catch (exception& e) { cerr << e.what() << endl; } return 0; }
Компиляция, сборка и запуск программы
Сознаём файл FanPiPwmLinear.cpp
и вставляем вышеприведённый код:
nano FanPiPwmLinear.cpp
Компилируем и собираем программу:
g++ -Ofast -Wall FanPiPwmLinear.cpp -lwiringPi -lpthread -o FanPiPwmLinear
Запускаем:
./FanPiPwmLinear
если хотим запустить программу в фоновом режиме:
nohup ./FanPiPwmLinear &
Как поместить скрипт в автозагрузку
Остается сделать так, чтобы скрипт, контролирующий работу вентилятора охлаждения, автоматически запускался каждый раз при загрузке системы.
Для этого, в конец файла /etc/rc.local
:
sudo nano /etc/rc.local
Нужно поместить команду запуска скрипта перед строкой exit 0
:
sudo ./home/pi/FanPiPwmLinear &
После перезагрузки скрипт будет автоматически запущен и вентилятор будет включаться при наступлении заданных условий.
Чтобы проверить факт запуска, после перезагрузки, нужно переключиться в терминал и проверить наличие процесса:
ps aux | grep -i FanPiPwmLinear
Как проверить?
Для проверки работоспособности скрипта нужно «разогреть» процессор до нужной температуры и посмотреть, как на это будет реагировать система охлаждения. «Нагревать» процессор можно с помощью утилит sysbench
или stress
. Вы можете установить эти утилиты с aptitude
:
sudo apt-get install sysbench
или
sudo apt-get install stress
Запуск утилиты с задействованием 4 ядер:
sysbench --num-threads=4 --test=cpu --cpu-max-prime=20000 --validate run
или
sudo stress --cpu 4 --timeout 30s
Температура процессора сразу начнет повышаться.
Принудительно завершить, как выполнение теста утилитой sysbench
, так и stress
можно сочетанием клавиш Ctrl+C
.
Удаление скрипта из автозагрузки
Для удаления скрипта из автозагрузки нужно просто удалить строку с запуском скрипта из файла /etc/rc.local
.
Материалы
Управление мощной нагрузкой постоянного тока. Часть 1
Управление мощной нагрузкой постоянного тока. Часть 3.
Raspberry Pi 3: GPIO (#3) — умное управление собственным активным охлаждением
Управление мощной нагрузкой
Широтно-импульсная модуляция
Есть ли возможность заменить транзистор и резисторы одним транзистором типа MOSFET K3919?
Здравствуйте! Спасибо за статью! Управление вентилятором работает (с помощью биполярного NPN-транзистора) но вот столкнулся я такими нюансами.
1) Если использовать простой пример управления, то при понижении температуры «TEMPERATURE_MIN» на 1 градус (а мож и меньше), то вентилятор сразу включается, т.е. получается что идёт включение / выключение чуть ли не каждую секунду. Я программист ещё тот, так знаю как «Hello World» вывести, попробовал исправить ситуацию через do … while..
int main() {
int temperature;
int pinState = 0;
try {
if (wiringPiSetup() == 0) {
pinMode(PIN, OUTPUT);
while (1) {
temperature = getTemperature();
if (temperature >= TEMPERATURE_MIN && pinState == 0) {
digitalWrite(PIN, HIGH);
do{
// digitalWrite(PIN, HIGH);
pinState = 1;
temperature = getTemperature();
usleep(1000 * 5000);
}
while (temperature > TEMPERATURE_END);
}
else if (temperature < TEMPERATURE_END && pinState == 1) {
digitalWrite(PIN, LOW);
pinState = 0;
}
usleep(1000 * 5000);
}
}
} catch (exception& e) {
cerr << e.what() << endl;
}
return 0;
}
2) С управлением ШИМ непонятности — при понижении коэффициента вентилятор начинает жутко звучать, ещё громче чем при полных оборотах. Это так и должно быть? Или какой-то спецвентилятор надо?
Можно ли как-то использовать аппаратный ШИМ? У чипа H3 он вроде бы есть.
Link vao fun88 cung cấp cho người dùng một trải nghiệm cá cược tuyệt vời với nhiều trò chơi hấp dẫn.
заработок на аккаунтах маркетплейс аккаунтов
магазин аккаунтов заработок на аккаунтах
маркетплейс аккаунтов https://kupit-akkaunt-top.ru
Account trading platform Secure Account Sales
Social media account marketplace Database of Accounts for Sale
Account Buying Service Buy accounts
Accounts marketplace Buy Account
Buy Pre-made Account Account Buying Service
Account marketplace buyaccounts001.com
Account Trading Platform https://socialmediaaccountsale.com/
ready-made accounts for sale verified accounts for sale
buy account account purchase
account trading platform buy pre-made account
account trading service verified accounts for sale
account selling platform secure account sales
website for buying accounts accounts-marketplace.org
profitable account sales account store
buy accounts account market
buy and sell accounts database of accounts for sale
account store profitable account sales
account trading platform account marketplace
guaranteed accounts guaranteed accounts
secure account sales account catalog
marketplace for ready-made accounts find accounts for sale
account exchange ready-made accounts for sale
website for selling accounts website for buying accounts
gaming account marketplace account buying service
account trading platform marketplace for ready-made accounts
account purchase account exchange service
account catalog https://accounts-offer.org
database of accounts for sale https://accounts-marketplace.xyz
database of accounts for sale https://buy-best-accounts.org
account trading https://social-accounts-marketplaces.live
account store https://accounts-marketplace.live/
buy and sell accounts buy accounts
website for selling accounts https://buy-accounts-shop.pro/
buy accounts https://buy-accounts.live
account store accounts marketplace
account trading platform https://accounts-marketplace-best.pro
маркетплейс аккаунтов магазины аккаунтов
биржа аккаунтов https://rynok-akkauntov.top/
купить аккаунт kupit-akkaunt.xyz
покупка аккаунтов https://akkaunt-magazin.online/
магазин аккаунтов akkaunty-market.live
покупка аккаунтов https://akkaunty-dlya-prodazhi.pro
buying fb accounts https://buy-adsaccounts.work
facebook ad account for sale buy facebook old accounts
buy facebook profiles https://buy-ads-account.work
buy facebook account https://ad-accounts-for-sale.work
google ads account seller https://buy-ads-account.top
buy google adwords account https://buy-ads-accounts.click
buy facebook ads manager buy facebook advertising
buy adwords account https://buy-ads-agency-account.top
google ads account seller https://sell-ads-account.click/
buy old google ads account buy google adwords account
buy facebook verified business account buy-verified-business-manager-account.org
verified facebook business manager for sale business-manager-for-sale.org
verified facebook business manager for sale verified-business-manager-for-sale.org
buy tiktok ads account https://buy-tiktok-ads-account.org
buy tiktok ads buy tiktok ads accounts
buy tiktok ads account https://buy-tiktok-ad-account.org
buy tiktok ad account https://buy-tiktok-business-account.org
buy tiktok business account https://buy-tiktok-ads.org
займ с 18 лет без отказа займ с 18 лет без отказа .
Календарь огородника https://inforigin.ru .
pokiesnet https://www.pokiesnet250.com .
врач психиатр цена врач психиатр цена .
электрокарнизы москва https://elektrokarniz-nedorogo77.ru .
iflow камеры http://www.citadel-trade.ru/ .
электрические карнизы для штор в москве elektrokarniz90.ru .
прогнозы на спорт бесплатно от профессионалов на сегодня prognoz-na-segodnya-na-sport.ru .
sportbets sportbets17.ru .
прогнозы на футбол от экспертов прогнозы на футбол от экспертов .
прогнозы на спорт с анализом прогнозы на спорт с анализом .
прогнозы на хоккей на сегодня бесплатно http://luchshie-prognozy-na-khokkej1.ru/ .
прогнозы на спорт точные http://www.luchshie-prognozy-na-khokkej2.ru/ .
прогноз на хоккей в прогнозе luchshie-prognozy-na-khokkej.ru .
servicios del cosmet?logo servicios del cosmet?logo .
купить айфон спб http://www.kupit-ajfon-cs1.ru .
купить iphone 11 недорого купить iphone 11 недорого .
mostbet poker otağı http://mostbet4053.ru/
Пробковый ламинат купить probkovoe-pokritie1.ru .
Паркетная доска купить в Москве цена https://parketnay-doska2.ru .
buy fb ad account account exchange service accounts marketplace
fb account for sale sell accounts account market
доставка воды на дачу цистерна цена http://www.dostavka-tehnicheskoi-vodi.ru/ .
прогнозы и ставки на спорт http://www.prognozy-na-sport-3.ru/ .
оценка наручных часов онлайн http://ocenka-chasov-onlajn8.ru/ .
мостбет https://www.mostbet4073.ru
1win armenia 1win armenia
техвода http://dostavka-tehnicheskoi-vodi.ru .
лестница под ключ цена с материалами lestnicy-na-metallokarkase-1.ru .
mental health support chat http://www.mental-health21.com/ .
сколько стоит винтовые сваи для фундамента цена ostankino-svai.ru .
Mental Health Mental Health .
1win am https://1win3075.ru/
ванна с гидромассажем купить http://www.hidromassazhnaya-vanna2.ru .
winline фрибет новым клиентам http://www.winlayne-fribet2.ru/ .
Кварцвиниловые полы https://napolnaya-probka1.ru .
1win https://www.1win3064.ru
внедрение ерп в организации https://www.1s-erp-vnedrenie.ru .
глубинное водопонижение глубинное водопонижение .
холодильные камеры промышленные https://xn—-7sbabtdykncetibz6f4f8b.xn--p1ai .
проект водопонижения vodoponizhenie-msk.ru .
1с онлайн цена http://www.kupit-1s21.ru .
купить 1с москва kupit-1s23.ru .
точный прогнозы на футбол http://www.kompyuternye-prognozy-na-futbol8.ru .
прогнозы на спорт на сегодня бесплатно https://prognoz-na-segodnya-na-sport9.ru .
аренда яхты на час https://yacht-rental-oae.com .
перевозка автомобилей автовозом по россии http://avtovoz-av8.ru .
melbet cricket app download melbet cricket app download
прогнощы stavki-na-sport-prognozy1.ru .
получить микрозаем получить микрозаем .
casinocandy http://candy-casino-7.com .
перевозка легковых автомобилей автовозом http://www.avtovoz-av8.ru/ .
изготовление деревянных лестниц в москве http://lestnicy-na-metallokarkase-1.ru/ .
casino giri? candy-casino-7.com .
акриловая ванна с гидромассажем https://www.hidromassazhnaya-vanna2.ru .
винлайн фрибеты 2025 winline-fribet-kazhdyj-den.ru .
купить игровой пк в москве kupit-igrovoj-kompyuter10.ru .
электрокарнизы для штор цена elektrokarnizy150.ru .
электрокарниз недорого https://elektrokarniz150.ru/ .
дизайнерские кашпо на стену http://www.dizaynerskie-kashpo-sochi.ru .
1win ставки casino http://www.1win40006.ru
электрокарнизы москва elektrokarniz150.ru .
Сайт о питании при беременности edamam.ru .
data-vyhoda.online http://www.data-vyhoda.online .
ekoclinic.ru ekoclinic.ru .
кашпо дизайн кашпо дизайн .
Сайт о новорожденных детях http://malishi.online/ .
FluidCare Pharmacy: furosemide 40mg — lasix generic
цветочные горшки дизайнерские купить цветочные горшки дизайнерские купить .
AsthmaFree Pharmacy: ventolin 4 mg tablets — AsthmaFree Pharmacy
https://fluidcarepharmacy.shop/# FluidCare Pharmacy
furosemide 100mg: lasix furosemide — FluidCare Pharmacy
ventolin over the counter uk: ventolin over the counter australia — AsthmaFree Pharmacy
1win login ci 1win login ci
1win indir android http://1win40005.ru
ролевые шторы https://www.rulonnye-shtory-s-elektroprivodom11.ru .
рулонные шторы с электроприводом купить рулонные шторы с электроприводом купить .
электрические рулонные шторы на окна elektricheskie-rulonnye-shtory90.ru .
автоматические рулонные шторы на створку https://rulonnye-elektroshtory.ru .
рулонная штора автоматическая http://www.elektricheskie-rulonnye-shtory.ru/ .
ventolin inhaler for sale: AsthmaFree Pharmacy — AsthmaFree Pharmacy
https://asthmafreepharmacy.shop/# ventolin hfa 90 mcg inhaler
Link alternatif Mandiribet: Slot jackpot terbesar Indonesia — Link alternatif Mandiribet
https://abutowin.icu/# Bandar togel resmi Indonesia
креативные кашпо креативные кашпо .
электро рулонные шторы https://rulonnye-shtory-s-elektroprivodom11.ru .
Online betting Philippines: Jollibet online sabong — Jollibet online sabong
рольшторы заказать http://avtomaticheskie-rulonnye-shtory50.ru/ .
Swerte99 casino walang deposit bonus para sa Pinoy: Swerte99 casino — Swerte99
Link alternatif Beta138: Situs judi resmi berlisensi — Link alternatif Beta138
Promo slot gacor hari ini: Link alternatif Beta138 — Situs judi resmi berlisensi
Login Beta138: Slot gacor Beta138 — Beta138
fabrica de mobila fabrica de mobila
1win скачать приложение на айфон 1win скачать приложение на айфон
https://1winphili.company/# jollibet app
maglaro ng Jiliko online sa Pilipinas: Jiliko login — jilwin
Situs judi resmi berlisensi: Beta138 — Situs judi resmi berlisensi
Jiliko app: Jiliko casino walang deposit bonus para sa Pinoy — Jiliko bonus
электрокарниз купить в москве http://www.elektrokarnizy33.ru .
электрические гардины https://www.elektrokarnizy-dlya-shtor150.ru .
Mandiribet: Slot gacor hari ini — Situs judi online terpercaya Indonesia
стоимость перепланировки квартиры http://proekt-pereplanirovki-kvartiry4.ru/ .
электрокарниз купить в москве электрокарниз купить в москве .
гардина с электроприводом http://elektrokarniz11.ru .
проект перепланировки квартиры цена московская область проект перепланировки квартиры цена московская область .
Online gambling platform Jollibet: jollibet app — Online betting Philippines
Mandiribet: Link alternatif Mandiribet — Mandiribet
Ca cu?c tr?c tuy?n GK88: Nha cai uy tin Vi?t Nam — Tro choi n? hu GK88
дизайнерские кашпо на стену дизайнерские кашпо на стену .
1win vk http://1win1161.ru
jocuri cazinouri gratis jocuri cazinouri gratis
Mandiribet login: Bonus new member 100% Mandiribet — Bonus new member 100% Mandiribet
карнизы с электроприводом http://elektrokarnizy-dlya-shtor150.ru .
Jiliko login: maglaro ng Jiliko online sa Pilipinas — Jiliko casino
карнизы с электроприводом карнизы с электроприводом .
Ca cu?c tr?c tuy?n GK88: Khuy?n mai GK88 — Khuy?n mai GK88
Mexican Pharmacy Hub: mexico drug stores pharmacies — Mexican Pharmacy Hub
safe place to buy semaglutide online mexico: online mexico pharmacy USA — best mexican pharmacy online
https://medidirectusa.com/# rxmedico online pharmacy
1win télécharger gratuitement https://www.1win40015.ru
бонусный счет ван вин бонусный счет ван вин
vardenafil: ciprofloxacin pharmacy — MediDirect USA
casa pariurilor app https://1win40014.ru
http://mexicanpharmacyhub.com/# mexican online pharmacies prescription drugs
best online pharmacy to buy viagra: MediDirect USA — mexican pharmacy viagra online
купить кашпо дизайнерские http://www.dizaynerskie-kashpo-nsk.ru .
автоматические жалюзи цена автоматические жалюзи цена .
гидроизоляция цена http://www.gidroizolyaciya-cena-1.ru .
приводы somfy http://www.avtomatika-somfy77.ru .
гидроизоляция цена https://www.gidroizolyaciya-cena-2.ru .
сколько стоит проект перепланировки http://www.proekt-pereplanirovki-kvartiry5.ru .
гидроизоляция цена https://www.gidroizolyaciya-cena-3.ru .
лаки джет игра отзывы http://1win1171.ru
MediDirect USA: buy viagra pharmacy malaysia — MediDirect USA
купить диплом в харькове купить диплом в харькове .
купить диплом о высшем образовании ссср купить диплом о высшем образовании ссср .
купить аттестат 11 класс в спб купить аттестат 11 класс в спб .
купить диплом с проводкой одной купить диплом с проводкой одной .
купить диплом о высшем образовании с занесением в реестр в красноярске купить диплом о высшем образовании с занесением в реестр в красноярске .
купить аттестат за 11 класс 2015 года купить аттестат за 11 класс 2015 года .
купить диплом о высшем образовании легально купить диплом о высшем образовании легально .
Приобрести диплом об образовании!
Мы предлагаем дипломы любой профессии по приятным тарифам— sociozavr.ru
купить диплом о высшем образовании реестр купить диплом о высшем образовании реестр .
скачать 1win скачать 1win
cheap cialis mexico: Mexican Pharmacy Hub — order kamagra from mexican pharmacy
MediDirect USA: MediDirect USA — MediDirect USA
https://medidirectusa.com/# MediDirect USA
Mexican Pharmacy Hub: mexico pharmacies prescription drugs — Mexican Pharmacy Hub
привод somfy привод somfy .
проект перепланировки квартиры москва проект перепланировки квартиры москва .
http://medidirectusa.com/# thrifty drug store
MediDirect USA: late night pharmacy artane — MediDirect USA
бонусный счет 1вин https://1win1175.ru/
мостбет ком вход mostbet11065.ru
купить диплом с занесением в реестр в украине https://arus-diplom32.ru .
Mexican Pharmacy Hub: semaglutide mexico price — Mexican Pharmacy Hub
как зайти на сайт mostbet https://mostbet11062.ru
prescription drug cost: MediDirect USA — MediDirect USA
купить учебный диплом в одессе купить учебный диплом в одессе .
купить диплом с занесением в реестр в спб купить диплом с занесением в реестр в спб .
купить диплом младшего специалиста купить диплом младшего специалиста .
скачать лайки джет на андроид 1win1172.ru
indian pharmacy paypal: Indian Meds One — Indian Meds One
MediDirect USA: MediDirect USA — priligy johor pharmacy
купить аттестат за 11 класс самара купить аттестат за 11 класс самара .
купить диплом о высшем образовании с реестром купить диплом о высшем образовании с реестром .
мостбет официальный сайт регистрация мостбет официальный сайт регистрация
бугуруслан купить аттестат 10 и 11 класс бугуруслан купить аттестат 10 и 11 класс .
Indian Meds One: Indian Meds One — Indian Meds One
аттестат о среднем образовании 9 классов купить аттестат о среднем образовании 9 классов купить .
где купить диплом где купить диплом .
https://medidirectusa.shop/# MediDirect USA
sports bet http://sportbets31.ru/ .
1вие 1вие
купить диплом с проводкой одной купить диплом с проводкой одной .
sportandbets http://sportbets30.ru/ .
купить диплом занесением реестр киев http://www.arus-diplom33.ru/ .
скачать мостбет на андроид бесплатно старая версия http://mostbet11064.ru/
новости спорта https://novosti-sporta-1.ru .
новости спорта футбол https://www.novosti-sporta-2.ru .
автоматика somfy http://avtomatika-somfy.ru .
цветочный горшок с автополивом купить цветочный горшок с автополивом купить .
Mexican Pharmacy Hub: online mexico pharmacy USA — buy meds from mexican pharmacy
Indian Meds One: indian pharmacies safe — reputable indian online pharmacy
спортивные новости https://novosti-sporta-2.ru .
мостбет оригинал скачать https://www.mostbet11063.ru