В данной статье пойдёт речь о том как сделать машинку на радиоуправлении своими руками на базе микроконтроллера ATtiny2313. Другими словами — изобретаем велосипед, ибо по интернетам есть тонны примеров на Arduino и без Arduino. Несмотря на это, я тоже решил внести свою лепту.
Я не очень люблю работать с Arduino, так как не чувствуется сама идея работы с микроконтроллерами, всё спрятано в библиотеках и, если что-то нужно, просто скачиваешь нужную либу, устанавливаешь её и используешь, а как и что там в большинстве случаев остаётся тайной.
- 1 Для изготовления машинки, нам понадобится
- 2 Почему микроконтроллер ATtiny2313
- 3 Принцип работы программы на МК ATtiny2313
- 4 Схема подключения компонентов
- 5 Программа для управления
- 6 Код программы для ATtiny2313
- 7 Исходники и Java приложение
- 8 Маленькое видео
- 9 Купить компоненты на AliExpress
- 10 Похожие записи
Для изготовления машинки, нам понадобится
- микроконтроллер ATtiny2313;
- готовое шасси вместе с двигателями (танк или двухколёсный кит);
- HC-11, HC-12, TB387 или любые доступные USART радио-модули — две штуки;
- L298 — модуль драйвера двигателей;
- Аккумуляторы 18650 Li-ion — две штуки;
- Коробка (бокс) под аккумуляторы 18650 (на 2 аккумулятора);
- Преобразователь USB-UART на базе CH340G или PL2303HX;
- USBasp v2.0 ISP программатор
Ссылки на Aliexpress на всё это добро вы найдёте в конце статьи.
Почему микроконтроллер ATtiny2313
Микроконтроллер ATTiny2313 улучшенный вариант старого микроконтроллера AT90S2313. Внутри у него 120 инструкций оптимизированных для программирования на языках высокого уровня, 32 регистра общего назначения, 2 килобайта флеш-памяти для программ, 128 байт EEPROM (энергонезависимая память) и 128 байт SRAM (оперативная память). Из периферии: один 8 битный таймер/счетчик, один 16 битный таймер/счетчик, четыре ШИМ канала, 2 из которых будут использованы для управления колёсами, аналоговый компаратор, Watchdog таймер, USI универсальный последовательный интерфейс и, самое главное для данного проекта, USART. Если фьюзы выставлены на работу от внешнего кварца, кварц должен быть установлен на частоту, не превышающей максимальную по даташиту, это 20МГц.
Все вышеперечисленные характеристики более чем достаточно для наших задач. К тому же ATTiny2313 не дорогой и доступный микроконтроллер, в отличии от Arduino.
Принцип работы программы на МК ATtiny2313
Сама программа состоит из 3-х классов (USART, Queue, CmdExecutor) и основного файла main.cpp, который содержит функцию main(). Класс USART отвечает за инициализацию протокола и получения данных, в нашем случае данные — это команды. После получения, команда добавляется, push(cmd), в очередь Queue. Класс Queue, он же очередь, имеет два метода push(cmd) и pop(cmd). С помощью первого метода, как мы уже сказали, добавляем команды в очередь, а вторым, соответственно берём первую команду из очереди. В функции main() и проверяется если в очереди есть команды. Если команда нашлась main() берёт её и передаёт классу CmdExecutor, он же исполнитель команд, выполняет её — execute(cmd).
Для чего нужна была очередь команд, нельзя было просто выполнять команды сразу после получения, а не тратить время и ресурсы не очень-то и мощного ATtiny2313? Да, можно было, можно было вообще сделать этот пример из двух функций: main() и ISR(USART_RX_vect), и гуляй Вася. Однако не так, во первых, если одна команда выполняется очень много времени, а другая уже на подходе, то как тут быть? Во вторых, если микроконтроллер помимо команд выполняет ещё и другую работу, тоже очень важную, а мы эту работу будем остановить очень часто, тогда может выйти так, что результат будет не тот, да и команды не правильно могут выполнятся, особенно тогда, когда и команда и работа используют те же ресурсы.
Схема подключения компонентов
P1 (COMPIM) — COM порт, на реальной машине его нужно заменить на USART радио модуля, к примеру: HC-11, HC-12, TB387 или на любого доступного.
U1 (ATTINY2313) — микроконтроллер
U2 (L298) — модуль драйвера двигателей
Программа для управления
Управлять «бэтмобиль» можно было и с помощью пульта. Однако написать программу на Джаве намного легче, чем взять паяльник в руки и пилить пульт, да и программу можно сделать с большим функционалом, что-то добавить, что-то отображать, другое сделать конфигурируемым и вообще — возможности почти безграничны.
В моём случае эта программа всего лишь отправляет команды по USART, т.е. делает необходимый минимум задач.
Как установить Rx Tx в Java смотрим здесь, а пример приложения здесь.
Список команд
private static final byte PWM1 = '1';
— 1-я скорость;private static final byte PWM2 = '2';
— 2-я скорость;private static final byte PWM3 = '3';
— 3-я скорость;private static final byte PWM4 = '4';
— 4-я скорость;private static final byte PWM5 = '5';
— максимальная скорость;private static final byte STOP = 'a';
— стоп машина;private static final byte START = 'b';
— старт машина, включаются периферия и ШИМ, команда выполняется при включении машины;private static final byte RIGHT_FORWARD = 'c';
— правая гусеница движется вперёд;private static final byte LEFT_FORWARD = 'd';
— левая гусеница движется вперёд;private static final byte RIGHT_BACK = 'e';
— правая гусеница движется назад;private static final byte LEFT_BACK = 'f';
— левая гусеница движется назад;private static final byte ALL_FORWARD = 'g';
— обе гусеницы движутся вперёд;private static final byte ALL_BACK = 'h';
— обе гусеницы движутся назад;private static final byte LEFT_STOP = 'i';
— левая гусеница остановлена;private static final byte RIGHT_STOP = 'j';
— правая гусеница остановлена;private static final byte STOP_ALL = 'k';
— обе гусеницы остановлены;
Управление
- 5 скоростных режимов (кнопки от 1 до 5);
- Движение вперёд — обе гусеницы движутся вперёд (↑↑), нажата стрелка вверх (↑);
- Движение назад — обе гусеницы движутся назад (↓↓), нажата стрелка вниз (↓);
- Движение вперёд и направо — правая гусеница остановлена, левая движется вперёд (↑■), нажаты стрелки вверх и направо(↑→);
- Движение вперёд и налево — левая гусеница остановлена, правая движется вперёд (■↑), нажаты стрелки вверх и налево (←↑);
- Движение назад и направо — правая гусеница остановлена, левая движется назад (↓■), нажаты стрелки вниз и направо (↓→);
- Движение назад и налево — левая гусеница остановлена, правая движется назад (■↓), нажаты стрелки вниз и налево (←↓);
- Движение по кругу по часовой — левая гусеница движется назад, правая движется вперёд (↓↑), нажата стрелка налево (←);
- Движение по кругу против часовой — правая гусеница движется назад, левая движется вперёд (↑↓), нажата стрелка направо (→);
Вывод на консоль
После нажатия стрелок в консоли появятся знаки, указывающие движение машины/танка:
↑↑
■■
↓↑
■■
↑↓
■■
↓↓
■■
↑↑
■↑
↑↑
↑■
↑↑
■■
↓↓
■↓
↓↓
↓■
↓↓
■■
Настройки программы
Выход из программы: USART->Exit или Alt-F4;
Подключение: USART->Connect или Ctrl+Alt-C и выбираем COM порт;
Настройка скорости: USART->Baud или Ctrl+Alt-B и выбираем скорость передачи данных, по умолчанию 9600, такаяже установлена и в прошивке. Настроить следует перед тем, как подключиться;Настроить можно число стоп битов и число битов данных, но в нашем случае их лучше оставить 1 и 8 соответственно.
Код программы для ATtiny2313
Программа для ATtiny2313 написана на C++, а проект сделал в Eclipse C++. Как настроить Eclipse C/C++ для программирования AVR микроконтроллеров смотрите здесь.
main.cpp
#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "USART.h" #include "CmdExecutor.h" #include "Queue.h" void pushData(uint8_t data) { cmdQueue.push(data); } int main() { usart.init(9600); usart.setOnReceiveFunction(pushData); sei(); cmdExecutor.cmdStart(); uint8_t cmd; while (1) { if (cmdQueue.pop(cmd)) { cmdExecutor.execute(cmd); } _delay_ms(1); } return 1; }
Queue.h
#ifndef QUEUE_H_ #define QUEUE_H_ #define QUEUE_SIZE 4 class Queue { private: uint8_t queueSize; uint8_t data[QUEUE_SIZE]; public: Queue(); void push(uint8_t); uint8_t pop(uint8_t&); }; extern Queue cmdQueue; #endif /* QUEUE_H_ */
Queue.cpp
#include <avr/io.h> #include <stdlib.h> #include "Queue.h" Queue cmdQueue; Queue::Queue() : queueSize(0) { } void Queue::push(uint8_t cmd) { if (this->queueSize < QUEUE_SIZE) { this->data[this->queueSize] = cmd; this->queueSize++; } } uint8_t Queue::pop(uint8_t&cmd) { if (this->queueSize > 0) { this->queueSize--; cmd = this->data[0]; for (uint8_t i = 0; i < this->queueSize; i++) { this->data[i] = this->data[i + 1]; } return 1; } return 0; }
CmdExecutor.h
#ifndef CMDEXECUTOR_H_ #define CMDEXECUTOR_H_ #define LEFT_PWM_DDR DDRB #define RIGTH_PWM_DDR DDRB #define LEFT_PWM_PIN PINB3 #define RIGTH_PWM_PIN PINB4 #define LEFT_DDR_FORWARD DDRD #define RIGTH_DDR_FORWARD DDRD #define LEFT_DDR_BACK DDRD #define RIGTH_DDR_BACK DDRD #define LEFT_PORT_FORWARD PORTD #define RIGTH_PORT_FORWARD PORTD #define LEFT_PORT_BACK PORTD #define RIGTH_PORT_BACK PORTD #define LEFT_PIN_FORWARD PIND2 #define RIGTH_PIN_FORWARD PIND3 #define LEFT_PIN_BACK PIND4 #define RIGTH_PIN_BACK PIND5 #define PWM1 '1' #define PWM2 '2' #define PWM3 '3' #define PWM4 '4' #define PWM5 '5' #define STOP 'a' #define START 'b' #define RIGHT_FORWARD 'c' #define LEFT_FORWARD 'd' #define RIGHT_BACK 'e' #define LEFT_BACK 'f' #define ALL_FORWARD 'g' #define ALL_BACK 'h' #define LEFT_STOP 'i' #define RIGHT_STOP 'j' #define STOP_ALL 'k' class CmdExecutor { public: CmdExecutor(); void execute(uint8_t); void cmdStart(); void cmdStop(); void cmdRightForward(); void cmdLeftForward(); void cmdRightBack(); void cmdLeftBack(); void cmdAllForward(); void cmdAllBack(); void cmdStopAll(); void cmdStopLeft(); void cmdStopRight(); void cmdPwm1(); void cmdPwm2(); void cmdPwm3(); void cmdPwm4(); void cmdPwm5(); }; extern CmdExecutor cmdExecutor; #endif /* CMDEXECUTOR_H_ */
CmdExecutor.cpp
#include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #include "USART.h" #include "CmdExecutor.h" CmdExecutor cmdExecutor; CmdExecutor::CmdExecutor() { } void CmdExecutor::execute(uint8_t cmd) { switch (cmd) { case STOP: cmdStop(); break; case START: cmdStart(); break; case RIGHT_FORWARD: cmdRightForward(); break; case LEFT_FORWARD: cmdLeftForward(); break; case RIGHT_BACK: cmdRightBack(); break; case LEFT_BACK: cmdLeftBack(); break; case ALL_FORWARD: cmdAllForward(); break; case ALL_BACK: cmdAllBack(); break; case LEFT_STOP: cmdStopLeft(); break; case RIGHT_STOP: cmdStopRight(); break; case PWM1: cmdPwm1(); break; case PWM2: cmdPwm2(); break; case PWM3: cmdPwm3(); break; case PWM4: cmdPwm4(); break; case PWM5: cmdPwm5(); break; case STOP_ALL: cmdStopAll(); break; default: break; } } void CmdExecutor::cmdStart() { LEFT_DDR_FORWARD |= 1 << LEFT_PIN_FORWARD; RIGTH_DDR_FORWARD |= 1 << RIGTH_PIN_FORWARD; LEFT_DDR_BACK |= 1 << LEFT_PIN_BACK; RIGTH_DDR_BACK |= 1 << RIGTH_PIN_BACK; LEFT_PWM_DDR |= 1 << LEFT_PWM_PIN; RIGTH_PWM_DDR |= 1 << RIGTH_PWM_PIN; cmdStopAll(); TCCR1A |= 1 << COM1A1 | 1 << COM1B1 | 1 << WGM11 | 1 << WGM10; TCCR1B |= 1 << WGM12 | 1 << CS11 | 1 << CS10; cmdPwm3(); cmdPwm3(); } void CmdExecutor::cmdStop() { cmdStopAll(); LEFT_PWM_DDR &= ~(1 << LEFT_PWM_PIN); RIGTH_PWM_DDR &= ~(1 << RIGTH_PWM_PIN); TCCR1A &= ~(1 << COM1A1 | 1 << COM1B1 | 1 << WGM11 | 1 << WGM10); TCCR1B &= ~(1 << WGM12 | 1 << CS11 | 1 << CS10); } void CmdExecutor::cmdRightForward() { cmdStopRight(); RIGTH_PORT_FORWARD |= (1 << RIGTH_PIN_FORWARD); } void CmdExecutor::cmdLeftForward() { cmdStopLeft(); LEFT_PORT_FORWARD |= (1 << LEFT_PIN_FORWARD); } void CmdExecutor::cmdRightBack() { cmdStopRight(); RIGTH_PORT_BACK |= (1 << RIGTH_PIN_BACK); } void CmdExecutor::cmdLeftBack() { cmdStopLeft(); LEFT_PORT_BACK |= (1 << LEFT_PIN_BACK); } void CmdExecutor::cmdAllForward() { cmdStopAll(); LEFT_PORT_FORWARD |= (1 << LEFT_PIN_FORWARD); RIGTH_PORT_FORWARD |= (1 << RIGTH_PIN_FORWARD); } void CmdExecutor::cmdAllBack() { cmdStopAll(); LEFT_PORT_BACK |= (1 << LEFT_PIN_BACK); RIGTH_PORT_BACK |= (1 << RIGTH_PIN_BACK); } void CmdExecutor::cmdStopAll() { LEFT_PORT_FORWARD &= ~(1 << LEFT_PIN_FORWARD); RIGTH_PORT_FORWARD &= ~(1 << RIGTH_PIN_FORWARD); LEFT_PORT_BACK &= ~(1 << LEFT_PIN_BACK); RIGTH_PORT_BACK &= ~(1 << RIGTH_PIN_BACK); } void CmdExecutor::cmdPwm1() { OCR1A = 204; OCR1B = 204; } void CmdExecutor::cmdPwm2() { OCR1A = 408; OCR1B = 408; } void CmdExecutor::cmdPwm3() { OCR1A = 612; OCR1B = 612; } void CmdExecutor::cmdPwm4() { OCR1A = 816; OCR1B = 816; } void CmdExecutor::cmdStopLeft() { LEFT_PORT_FORWARD &= ~(1 << LEFT_PIN_FORWARD); LEFT_PORT_BACK &= ~(1 << LEFT_PIN_BACK); } void CmdExecutor::cmdStopRight() { RIGTH_PORT_FORWARD &= ~(1 << RIGTH_PIN_FORWARD); RIGTH_PORT_BACK &= ~(1 << RIGTH_PIN_BACK); } void CmdExecutor::cmdPwm5() { OCR1A = 1023; OCR1B = 1023; }
USART.h
#ifndef USART_H_ #define USART_H_ class USART { private: typedef void (*OnReceiveFunction)(uint8_t); public: OnReceiveFunction onReceiveFunction; USART(); void init(uint16_t); void setOnReceiveFunction(OnReceiveFunction); // Отправка байта void transmitChar(char); // Отправка строки void transmitString(char*); // Отправка строки void transmitStringLn(char*); // Получение байта char receiveChar(); }; extern USART usart; #endif /* USART_H_ */
USART.cpp
#include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #include "USART.h" USART usart; ISR(USART_RX_vect) { if (usart.onReceiveFunction) { usart.onReceiveFunction(UDR); } } USART::USART() : onReceiveFunction(0) { } void USART::init(uint16_t baud) { uint16_t ubrr = F_CPU / 16 / baud - 1; UBRRH = (unsigned char) (ubrr >> 8); UBRRL = (unsigned char) (ubrr); // RXC - завершение приёма // |TXC - завершение передачи // ||UDRE - отсутствие данных для отправки // |||FE - ошибка кадра // ||||DOR - ошибка переполнение буфера // |||||PE - ошибка чётности // ||||||U2X - Двойная скорость // |||||||MPCM - Многопроцессорный режим // |||||||| // 76543210 UCSRA = 0; // RXCIE - прерывание при приёме данных // |TXCIE - прерывание при завершение передачи // ||UDRIE - прерывание отсутствие данных для отправки // |||RXEN - разрешение приёма // ||||TXEN - разрешение передачи // |||||UCSZ2 - UCSZ0:2 размер кадра данных // ||||||RXB8 - 9 бит принятых данных // |||||||TXB8 - 9 бит переданных данных // |||||||| // 76543210 // разрешен приём и передача данных, прерывание при приёме данных UCSRB = 1 << RXEN | 1 << TXEN | 1 << RXCIE; // URSEL - всегда 1 // |UMSEL - режим: 1-синхронный 0-асинхронный // ||UPM1 - UPM0: 1 чётность // |||UPM0 - UPM0: 1 чётность // ||||USBS - стоп биты: 0-1, 1-2 // |||||UCSZ1 - UCSZ0: 2 размер кадра данных // ||||||UCSZ0 - UCSZ0: 2 размер кадра данных // |||||||UCPOL - в синхронном режиме - тактирование // |||||||| // 76543210 // 8-битовая посылка, 2 стоп бита UCSRC = 1 << USBS | 1 << UCSZ0 | 1 << UCSZ1; } void USART::setOnReceiveFunction(OnReceiveFunction onReceiveFunction) { this->onReceiveFunction = onReceiveFunction; } // Отправка байта void USART::transmitChar(char c) { // Устанавливается, когда регистр свободен while (!( UCSRA & (1 << UDRE))) { } UDR = c; } // Отправка строки void USART::transmitString(char str[]) { while (*str) { transmitChar(*str++); } } // Отправка строки void USART::transmitStringLn(char str[]) { transmitString(str); transmitChar((char) 13); transmitChar((char) 10); } // Получение байта char USART::receiveChar(void) { // Устанавливается, когда регистр свободен while (!(UCSRA & (1 << RXC))) { } return UDR; }
Исходники и Java приложение
Проект на C++: ATtiny2313_Car — C++.zip
Проект на Java : ATtiny2313_Car — Java.zip
Java приложение: ATiny2313_Car-1.0.0.jar.zip
Маленькое видео
Можно поподробнее как компилировать что для чего ато ничего ни понимаю что в микрокантролер что куда напишите пожалуйста
1Win — онлайн-казино с широкой линейкой игровых автоматов, живыми дилерами и ставками на спорт. Платформа предлагает высокие коэффициенты, бонусы и акции для игроков. Простота регистрации, быстрая поддержка и удобный интерфейс делают игровой опыт комфортным. Однако важно помнить о рисках азартных игр и играть ответственно.
https://t.me/Mobile_1win/320
спасибо большое если возникнут вопросы напишу
подскажи пожалуйста а как в эклипс импортировать если можно по подробнее просто неочень разбираюсь
спасибо буду разбиратся
https://t.me/s/Portable_Jambo
здравствуй спасибо за помощь разобрался но возник вод такой вопрос как подключить в эту схему радио модуль nrf 24l01
Уважаемый автор у меня вопрос по вашему уникальному труду. У вас по данной схеме управление двумя приводами,а возможно ли сделать так чтобы было восемь приводов и каждый управлялся бы отдельной командой?Если да то как?
Здравствуйте немоглибы вы выложить схему управления которое подключается к компьютеру
играть в 1win
https://t.me/vavada_win_vavada/260
Подскажи модуль сс1101 получится использовать
подскажи как запустить програму управления в jar формати онаже скомпилированая 1 раз запустил сейчас немогу
извини запустил только он в конект невыходит
Программу запустил по модулювидно что что-то передаётся но команды не отображаются
И подскажи пожалуйста программу собрал а какой именно фаил писать в микроконтроллер
подкажи частоту которую надо у микроконтролера ставить
подскажи такое ощущение что с программой для микроконтролера чтото нето собираю компелирую ошибок нету зашиваю неработает беру собираю схему в протеуси записываю туда програмку на микроконтроллере мигают ena иenb ну и на com порте при нажатии на кнопки и всё больше ничего непроисходит мигают просто так с определенной частотой
Здравствуйте подскажите вы тему закрыли или как ато неодного ответа неполучил
выставил как ты написал тоже самое уже весь мозг сломал
iphone 13 max iphone photo
Find the Perfect Clock https://clocks-top.com for Any Space! Looking for high-quality clocks? At Top Clocks, we offer a wide selection, from alarm clocks to wall clocks, mantel clocks, and more. Whether you prefer modern, vintage, or smart clocks, we have the best options to enhance your home. Explore our collection and find the perfect timepiece today!
аренда машины в москве длительно прокат автомобилей в москве недорого
read comic sonic free comic reader PC
русские фильмы онлайн качество лучшие фильмы онлайн без смс
фильмы на телефон ужасы 2025 смотреть онлайн HD
перепродажа аккаунтов заработок на аккаунтах
перепродажа аккаунтов маркетплейс аккаунтов
магазин аккаунтов безопасная сделка аккаунтов
покупка аккаунтов заработок на аккаунтах
студия лазерной эпиляции процедура лазерной эпиляции
купить аккаунт с прокачкой маркетплейс аккаунтов
маркетплейс аккаунтов соцсетей продать аккаунт
печать плакатов и постеров печать больших плакатов
Marketplace for Ready-Made Accounts Database of Accounts for Sale
Accounts for Sale Online Account Store
Account marketplace Sell Account
Account Acquisition Account Trading
Gaming account marketplace Buy Account
Account Acquisition Account Store
Buy and Sell Accounts Account Buying Platform
social media account marketplace online account store
secure account sales gaming account marketplace
verified accounts for sale account selling service
ready-made accounts for sale social media account marketplace
account exchange account buying service
website for selling accounts secure account purchasing platform
открыть компанию в великобритании открыть компанию в англии
account marketplace account market
account sale accounts-buy.org
account selling service website for selling accounts
social media account marketplace accounts market
account purchase account store
find accounts for sale buy accounts
buy pre-made account secure account sales
ready-made accounts for sale ready-made accounts for sale
accounts market database of accounts for sale
курсовая дешево написать курсовую цена
account market account selling platform
social media account marketplace website for buying accounts
account market account buying platform
цена курсовая https://kursoviehelp.ru/
database of accounts for sale account acquisition
guaranteed accounts secure account purchasing platform
buy and sell accounts verified accounts for sale
buy pre-made account buy accounts
buy and sell accounts accounts market
ready-made accounts for sale https://accounts-marketplace.live/
account buying service https://social-accounts-marketplace.xyz/
buy pre-made account account marketplace
gaming account marketplace https://buy-accounts-shop.pro
account selling platform accounts market
account catalog buy accounts
ready-made accounts for sale https://buy-accounts.live
каталог смартфонов с ценами смартфон 256gb купить
account trading platform https://accounts-marketplace-best.pro
https://t.me/s/Wwwinwin1win
магазин аккаунтов https://akkaunt-magazin.online
ГГУ имени Ф.Скорины https://www.gsu.by/ крупный учебный и научно-исследовательский центр Республики Беларусь. Высшее образование в сфере гуманитарных и естественных наук на 12 факультетах по 35 специальностям первой ступени образования и 22 специальностям второй, 69 специализациям.
маркетплейс аккаунтов магазины аккаунтов
биржа аккаунтов https://kupit-akkaunt.online/
играть в казино онлайн
buy ad account facebook buy old facebook account for ads
buy facebook old accounts buy facebook accounts for ads
cheap facebook account https://buy-ad-account.top
buy facebook advertising accounts https://buy-ads-account.click
cheap facebook account https://ad-account-buy.top/
facebook ad account for sale https://buy-ads-account.work
buy facebook old accounts buy aged fb account
google ads agency account buy https://buy-ads-accounts.click
cheap facebook advertising account https://buy-accounts.click
buy adwords account https://ads-account-for-sale.top
buy google ads invoice account https://ads-account-buy.work
https://t.me/vavada_win_vavada/623
купить реферат цена сколько стоит реферат на заказ
buy aged google ads account https://buy-account-ads.work
buy google adwords accounts https://buy-ads-agency-account.top/
google ads reseller buy account google ads
verified business manager for sale https://buy-business-manager.org
buy google ad threshold account buy google adwords account
Твое. сео как продвинуть сайт самому – Да, – немного удивившись осведомленности прокуратора, продолжал Иешуа, – попросил меня высказать свой взгляд на государственную власть.
facebook bm for sale https://buy-verified-business-manager-account.org/
verified bm https://buy-verified-business-manager.org
buy facebook business managers business-manager-for-sale.org
buy business manager account buy-bm.org
verified business manager for sale unlimited bm facebook
verified bm https://buy-business-manager-accounts.org/
buy tiktok business account https://buy-tiktok-ads-account.org
tiktok agency account for sale https://tiktok-ads-account-for-sale.org
tiktok agency account for sale https://tiktok-agency-account-for-sale.org
buy tiktok ads https://buy-tiktok-ad-account.org
стоимость экскурсий в калининграде сколько стоят экскурсии в калининграде
tiktok ads agency account https://buy-tiktok-ads-accounts.org
buy tiktok business account https://buy-tiktok-ads.org
разработка сайта магазина разработка интернет магазина на laravel
бейджи под заказ изготовление металлических бейджев
https://t.me/s/Portable_Kingdom
https://t.me/s/Portable_BitRuby
продвижение сайта в поиске https://seoprocessoptimization.ru
металлические бейджи с гравировкой бейдж из латуни
https://t.me/sDragonMoney_Portable
изготовление металлических значков значки на заказ
https://t.me/s/DragonMoney_Portable
Восемь. Он застал Аркадия за письменным столом, с книгой в руках, в застегнутом доверху сюртуке. Он позвонил еще раз и еще раз и начал ворчать и тихонько ругаться.
дешевая типография печати типография спб
Хороши ваши стихи, скажите сами? — Чудовищны! — вдруг смело и откровенно произнес Иван. Граф, как в огромных тенетах, ходил в своих делах, стараясь не верить тому, что он запутался, и с каждым шагом все более и более запутываясь и чувствуя себя не в силах ни разорвать сети, опутавшие его, ни осторожно, терпеливо приняться распутывать их. Как жаль, что не исправить в нём ни единого слова, ни единого жеста.
Римский постарался изобразить на лице улыбку, от чего оно сделалось кислым и злым, и раскланялся с безмолвным магом, сидящим рядом с котом на диване. Ты же всё равно не веришь… На свежую обиду Тима наложились недоговорённости минувшего года: – Что ты мне, как придурку – говорил же, говорил же?! Я тебе кто? Друг или нет? – Чего завёлся-то? – А то! Говорил он! Только переспрашивал – ты мне веришь или нет? А сам лепил про волшебников, про чудеса! Срез времени, как же! Сейчас на Славку обижался не Тимур Ашкеров, просто себе одноклассник, а друг, который с прошлой осени ждал откровенности и не дождался. И если бы нестойкое трепетание небесного огня превратилось бы в постоянный свет, наблюдатель мог бы видеть, что лицо прокуратора с воспаленными последними бессонницами и вином глазами выражает нетерпение, что прокуратор не только глядит на две белые розы, утонувшие в красной луже, но постоянно поворачивает лицо к саду навстречу водяной пыли и песку, что он кого-то ждет, нетерпеливо ждет.
печать визиток быстро https://pechat-vizitok11.ru
Нужна https://pechat-nakleek1.ru? Закажите стикеры любых форм и размеров с доставкой. Яркие, прочные, влагостойкие наклейки на пленке и бумаге — для рекламы, декора, маркировки и упаковки.
Профессиональная адрес типографии. Изготовим любые печатные материалы — от визиток до каталогов. Качественно, быстро, с гарантией. Закажите онлайн или приезжайте в офис в СПб.
Изготовление и печать наклеек спб. Стикеры для бизнеса, сувениров, интерьера и упаковки. Печатаем тиражами от 1 штуки, любые материалы и формы. Качественно, недорого, с доставкой по СПб.
медицинский центр отзывы семейный медицинский центр
Избавьтесь от волос лазерная эпиляция волос навсегда — с помощью лазерной эпиляции. Эффективные процедуры на любом участке тела, минимальный дискомфорт, заметный результат уже после первого сеанса.
узи платно https://uzi-abakan11.ru
Славка испугался. Дешевый Нотариальный Перевод Документов – Я уверена, что мой муж будет согласен, – сказала графиня, – но ваш батюшка… – Мой отец, которому я сообщил свои планы, непременным условием согласия положил то, чтобы свадьба была не раньше года.
записаться к терапевту запись к терапевту абакан
Хромой тыкал дубинкой, не успевая поднять ту на уровень головы. Знакомства Для Секса Без Обязательств Бесплатно – Ненавистный город… – вдруг почему-то пробормотал прокуратор и передернул плечами, как будто озяб, а руки потер, как бы обмывая их, – если бы тебя зарезали перед твоим свиданием с Иудою из Кириафа, право, это было бы лучше.
Зрители за это время успели разойтись, остались Рема с Тимуром и Олен. Знакомства Для Секса Бесплатно В Ростове На Дону И еще как бывает! Рассуждение это ни в какой степени не удовлетворило председателя домоуправления.
Быстров-младший быстро оглянулся. Нотариальный Перевод Документов Чистые Пруды Национальность пришельца было бы трудно установить.
Read the latest sports news today: football, hockey, basketball, MMA, tennis and more. Insiders, forecasts, reports from the scene. Everything that is important for sports fans to know — in one place.
https://t.me/s/RatingCasinoRu
Подчертай своя стил с рокли, вдъхновени от световните модни столици
дамски рокли https://www.rokli-damski.com .
Бъди уверена и модерна с дамски комплект от нашата нова колекция
дамски сетове дамски сетове .
Тениски за дами, които обичат качеството, удобството и стила
дамски тениски големи размери teniski-damski.com .
Услуги клининга по подписке — чистота на регулярной основе
сайт клининга сайт клининга .
Магазин шин с акцентом на безопасность и качество
интернет магазин шин и дисков https://www.kupit-shiny0-spb.ru .
resume chemical engineer https://resumes-engineers.com
resume software engineer google https://resumes-engineers.com
Морская романтика и уединение: аренда яхты для пары
яхта аренда сочи https://arenda-yahty-sochi23.ru/ .
Jarvi корм с высоким содержанием белка и без ненужных добавок
корм jarvi состав https://www.ozon.ru/product/suhoy-korm-jarvi-polnoratsionnyy-dlya-vzroslyh-koshek-s-chuvstvitelnym-pishchevareniem-s-indeykoy-1-1173234324 .
Курорт Гагры — идеальное место для пляжного отдыха и восстановления
отдых в гаграх 2024 otdyh-gagry.ru .
En yeni full hd film içerikleriyle eğlencenin merkezine yolculuk
türkçe dublaj full hd film izle https://www.filmizlehd.co/ .
Кому доверить поверку — критерии выбора проверенной компании
Организация поверки средств измерений poverka-si-msk.ru .
how to ship a car vehicle shipping cost
Эффективное выведение из запоя с выездом нарколога на дом в любое время суток
заказать нарколога на дом http://www.clinic-narkolog24.ru/ .
Ваш любимый алкоголь теперь доступен с доставкой всего за несколько кликов
доставка алкоголя 24 часа москва заказать алкоголь с доставкой круглосуточно .
Профессиональное косметологическое оборудование аппараты для салонов красоты, клиник и частных мастеров. Аппараты для чистки, омоложения, лазерной эпиляции, лифтинга и ухода за кожей.
Заказать набор бокалов для вина с доставкой на дом
бокалы для вина https://bokaly-dlya-vina.neocities.org/ .
Оригинальный императорский фарфор из Санкт-Петербурга — проверенное качество
императорский фарфоровый завод каталог императорский фарфоровый завод каталог .
Экспресс-клининг квартир перед сдачей в аренду или продажей
клининговая служба kliningovaya-kompaniya10.ru .
кредит займ онлайн https://zajmy-onlajn.ru
Лизинг спецтехники и коммерческих автомобилей для строительных проектов
купить грузовик в лизинг https://lizing-auto-top1.ru/gruzovye-avtomobili/ .
Печать на футболках для спорта, отдыха, бизнеса и творчества
заказ футболки со своим принтом https://www.pechat-na-futbolkah777.ru/ .
Почему выгодно заказывать деревянные дома под ключ с полной внутренней отделкой
дом деревянный под ключ цена https://derevyannye-doma-pod-klyuch-msk0.ru .
заказ дипломной работы https://diplomsdayu.ru
кредитный микрозайм zajmy-onlajn.ru
Обработка подстолья антикоррозийными средствами — гарантия долговечности
купить подстолье https://www.podstolia-msk.ru/ .
Услуги клининга в Москве приобретают все большее значение. С учетом быстрой жизни в столице, многие москвичи стремятся облегчить свои бытовые обязанности.
Компаниям, занимающимся клинингом, доступны разнообразные виды услуг. Профессиональный клининг включает как стандартную уборку, так и глубокую очистку в зависимости от потребностей клиентов.
При выборе клининговой компании важно обратить внимание на опыт работы и отзывы клиентов. Клиенты должны понимать, что качественная уборка требует профессиональных навыков и соблюдения стандартов.
Таким образом, услуги клининга в Москве предоставляют возможность сэкономить время. Клиенты могут легко найти компанию, предоставляющую услуги клининга, для поддержания чистоты.
сервис уборки сервис уборки .
Поверка измерительного оборудования осуществляется с минимальным вмешательством в работу объекта. Обеспечиваем корректность и достоверность результата.
Поверка средств измерений — это важный процесс, который позволяет обеспечить точность измерений в различных областях. Данный процесс обеспечивает соответствие оборудования установленным нормам и стандартам качества.
Процедура поверки проходит через ряд этапов, включая проверку функционального состояния измерительных средств. На первом этапе выполняется визуальный осмотр инструментов и выявление возможных неисправностей. В случае несоответствий прибор нужно откалибровать или заменить на другой.
Регулярность поверки приборов критически важна для поддержания их точности и надежности. Также следует обращать внимание на сроки поверки, чтобы минимизировать риск получения некорректных данных.
Услуги клининга с прозрачными расценками и без скрытых платежей
клининг москва клининг москва .
Каркасный дом с террасой и мансардой: больше пространства за меньшие деньги
дома каркасные спб http://www.spb-karkasnye-doma-pod-kluch.ru/ .
Почему каркасный дом выгоден в строительстве и обслуживании
дома каркасные спб http://www.karkasnie-doma-pod-kluch06.ru .
Цветная печать на футболках: стойкие краски, точная передача деталей
заказать футболки с принтом https://www.pechat-na-futbolkah777.ru .
Посетите наш сайт и узнайте о клининг в санкт петербурге цены на услуги!
Клининговые услуги в Санкт-Петербурге востребованы как никогда. С каждым годом всё больше компаний предлагают широкий спектр услуг по уборке и обслуживанию помещений.
Пользователи услуг клининга отмечают высокое качество и удобство. Команды клининговых компаний зачастую предлагают персонализированный подход к каждому клиенту, учитывая его потребности.
Клининговые компании предлагают различные варианты услуг, от регулярной уборки до разовых). Некоторые клининговые фирмы предоставляют дополнительные услуги, например, уборку после ремонта или мероприятий.
Цена на клининговые услуги зависит от объема работы и используемых средств. Заказчики могут подобрать различные варианты услуг, чтобы найти оптимальное решение.
Реальные сроки строительства деревянного дома под ключ — от проекта до заселения
деревянные дома под ключ цены http://derevyannye-doma-pod-klyuch-msk0.ru/ .
Все услуги клининга в Москве цены указаны в открытом доступе на сайте. Мы не навязываем лишних услуг и соблюдаем договорённости.
В последние годы клининг в Москве становится все более востребованным. Все больше людей в Москве выбирают услуги профессионального клининга для уборки своих помещений.
Цены на клининг могут варьироваться в зависимости от специфики услуг. Например, стандартная уборка квартиры может стоить от 1500 до 5000 рублей.
Также можно заказать дополнительные услуги, включая мойку окон и химчистку ковров. Добавление таких услуг может существенно повысить итоговую цену клининга.
Перед выбором клининговой фирмы рекомендуется ознакомиться с различными предложениями на рынке. Важно учитывать мнения клиентов и репутацию компании.
Какой сегодня церковный праздник istoriamashin.ru .
новости дня http://pechory-online.ru/ .
Для ужина или встречи с друзьями — заказ суши сделает ваш вечер вкуснее. Красивые роллы, ароматный рис и сочная рыба.
Заказать суши довольно просто. Существует несколько способов заказа суши, включая сайт ресторана и мобильные приложения. Каждый из этих способов предлагает определенные плюсы и минусы.
Важно учитывать мнения других клиентов при выборе суши-ресторана. Почитайте, что говорят люди о качестве еды и обслуживании. Это поможет избежать разочарований и выбрать надежное заведение.
Проверьте меню заведения, прежде чем сделать заказ. Разные рестораны могут предлагать различные варианты суши и роллов. Выбор уникальных и необычных позиций может сделать ваш вечер интереснее.
При заказе обязательно уточните, когда ожидается доставка. Уточнение времени доставки поможет избежать ожидания и обеспечит комфортное времяпрепровождение. Кроме того, уточните возможность доставки в ваш район.
Любимые роллы с отличным вкусом — роллы недорого СПб на каждый день. Большой выбор и всегда свежие продукты.
В последние годы вок-заказ становится всё более востребованным методом доставки еды. Существует множество причин, почему вок-заказ стал любимым среди людей.
Вок-блюда можно заказать в больших и малых ресторанах, которые специализируются на этой кухне. Каждое заведение старается выделиться своим ассортиментом и акциями.
Рекомендуется ознакомиться с отзывами о заведениях, прежде чем делать заказ. Это позволит выбрать только те рестораны, которые предлагают отличное качество пищи.
Следите за специальными предложениями, которые могут сделать ваш заказ более выгодным. Это отличная возможность попробовать новые блюда по более низкой цене.
dragon slots casino dragon slots casino .
Con la compañía de exhibición de drones, obtienes mucho más que un show visual: creamos una experiencia envolvente que despierta admiración y conexión con el público desde el primer segundo.
La popularidad de los espectáculos de drones ha crecido exponencialmente en los últimos tiempos. Estos shows integran tecnología avanzada, creatividad y diversión. Las demostraciones de drones son frecuentemente vistas en festivales y celebraciones importantes.
Los drones iluminados crean patrones impresionantes en el cielo nocturno. Las audiencias suelen quedar asombradas por la combinación de luces y coreografías.
Varios organizadores deciden recurrir a compañías dedicadas a la producción de espectáculos de drones. Estas organizaciones poseen pilotos entrenados y tecnología avanzada.
El tema de la seguridad es vital en la planificación de estos shows. Se establecen medidas estrictas para asegurar la seguridad del público. El futuro de los espectáculos de drones es prometedor, con innovaciones constantes.
Full HD izleme deneyimi sunan platformumuzda, her türden film bulabilirsiniz. En yüksek kalite için full hd izle alanını tercih edin.
Yayın hizmetleri son birkaç yılda büyük bir popülerlik artışı yaşadı. Yüksek kaliteli içerikler, özellikle Full HD ve 4K filmler, izleyicilerin büyük ilgisini çekiyor. İnsanlar, netlik ve detaylara vurgu yapan etkileyici izleme deneyimleri arayışında.
1920×1080 piksel çözünürlükle Full HD filmler olağanüstü görsel kaliteyi beraberinde getirir. Büyük ekranlar bu çözünürlüğü gerçekten öne çıkararak detaylı bir izleme deneyimi sunar. Öte yandan, 4K filmler 3840×2160 piksel gibi daha yüksek çözünürlükle bu deneyimi geliştirir.
Bu talebi fark eden yayın hizmetleri, geniş Full HD ve 4K film koleksiyonları sağlamaya başladı. Böylece, seyirciler hem yeni yapımları hem de sevilen klasik filmleri en yüksek görsel kalitede izleyebiliyor. Bunun yanında, birçok yayın hizmeti yüksek çözünürlüklü formatlara özel orijinal içerik üretimine kaynak ayırıyor.
Kısaca, yayın platformlarında Full HD ve 4K filmlerin artması izleyici zevklerindeki değişimi ortaya koyuyor. Teknoloji ilerledikçe, görsel medyayı tüketme şeklimizde daha fazla gelişme bekleyebiliriz. Bu da şüphesiz sinema ve ev eğlencesinin geleceğini şekillendirecektir.
Требуется полная конфиденциальность? Наш анонимный наркологический стационар в Санкт-Петербурге гарантирует защиту ваших данных и деликатность.
Клиника наркологии предоставляет услуги по лечению зависимостей и реабилитации. Команда профессионалов в наркологической клинике обеспечивает индивидуальный подход к каждому пациенту.
Основной целью наркологической клиники является выявление и лечение проблем, связанных с зависимостями. Лечение осуществляется с использованием сочетания медикаментозной терапии и психологической поддержки.
Психологическая поддержка играет ключевую роль в процессе восстановления. Это помогает пациентам не только избавиться от физической зависимости, но и предотвратить рецидивы.
Процесс реабилитации может занять различное время, в зависимости от сложности случая. Несмотря на сложности, победа над зависимостью крайне ценна.
электрический карниз для штор купить karniz-motorizovannyj77.ru .
электрокарниз купить в москве электрокарниз купить в москве .
Современные тенденции и классика – в нашей подборке проектов готовых домов. Каждый проект создан для комфортной и счастливой жизни.
Проекты домов становятся все более популярными среди людей, ищущих идеальное жилье. Определение подходящего проекта дома является решающим шагом на пути к уюту и комфорту.
Разнообразие проектов домов включает в себя различные стили и типы. Каждый желающий может выбрать проект, отвечающий его личным предпочтениям.
Одним из основных факторов при выборе проекта является размер земельного участка. Не менее значимыми являются также условия окружающей среды и климат.
С использованием современных технологий возможно разработать индивидуальные проекты домов. Проекты могут модифицироваться в зависимости от предпочтений и потребностей клиентов.
Ищете качественный отдых без лишних трат? У нас вы найдете варианты для отдых в абхазии недорого.
Отдых в Абхазии — это настоящая находка для тех, кто ценит природу и атмосферу. Её живописные пейзажи, мягкий климат и теплое море привлекают туристов со всего мира.
Каждый год миллионы людей стремятся посетить Абхазию, чтобы насладиться её красотой. Отдых в Абхазии предлагает как спокойные пляжные дни, так и захватывающие приключения.
Выбор жилья в Абхазии впечатляет: от уютных гостевых домов до современных гостиниц. Кроме того, здесь можно насладиться вкусной местной кухней и разнообразием культурных мероприятий.
Независимо от времени года, отпуск в Абхазии будет незабываемым и полным позитивных эмоций. Абхазия ждёт вас с открытыми объятиями и множеством новых впечатлений.
Вас ждёт чистое море, красивые виды и приятный морской бриз — воспользуйтесь яхты сочи аренда и откройте для себя отдых в новом формате.
Аренда яхты — это увлекательный способ провести время на воде. Плавание на яхте открывает перед вами удивительные горизонты и дарит незабываемые впечатления.
Подбор яхты — ключевой момент, который стоит учитывать при планировании отдыха. Необходимо учитывать тип и размер яхты, чтобы она соответствовала вашим требованиям.
Перед подписанием контракта на прокат яхты обязательно ознакомьтесь с его условиями. Некоторые компании могут предлагать дополнительные услуги, такие как капитан или экипаж.
Наконец, не забудьте об организации маршрута. Исследуйте знаменитые пляжи и живописные ландшафты для незабываемых впечатлений.
У Степы оборвалось сердце, он пошатнулся. Как правильно перевести паспорт — Бюро нотариальных переводов Именно, что дело вчера было на Сходне, на даче у автора скетчей Хустова, куда этот Хустов и возил Степу в таксомоторе.
Качественная наркология в СПб доступна в нашей клинике. Современное оборудование, комфортабельный стационар и опытные врачи-наркологи.
Клиника наркологии предоставляет услуги по лечению зависимостей и реабилитации. Команда профессионалов в наркологической клинике обеспечивает индивидуальный подход к каждому пациенту.
Основной целью наркологической клиники является выявление и лечение проблем, связанных с зависимостями. Комплексный подход к лечению включает как медицинские, так и психологические методы.
Специалисты работают с клиентами над психологическими аспектами их зависимостей. Это помогает пациентам не только избавиться от физической зависимости, но и предотвратить рецидивы.
Каждый пациент проходит реабилитацию в своем темпе, что позволяет избежать стрессовых ситуаций. Несмотря на сложности, победа над зависимостью крайне ценна.
mostbet suallar və cavablar http://mostbet3041.ru/
От посуточной аренды комнаты до длительной аренды коттеджа – большой выбор жилья для вашего пребывания. снять жилье в архипо осиповке можно в пару кликов, изучив отзывы и фото.
Архипо-Осиповка — идеальное направление для вашего летнего отпуска. Множество отдыхающих выбирает Архипо-Осиповку, чтобы насладиться солнечными днями и красотой природы.
Пляжи этого курорта известны своим чистым песком и спокойными водами. На пляжах Архипо-Осиповки доступны различные водные виды спорта и развлекательные программы.
Разнообразие мест для проживания в Архипо-Осиповке удовлетворит любые потребности отдыхающих. Вы можете выбрать как роскошные отели, так и более бюджетные варианты, подходящие для всей семьи.
Местные развлечения порадуют как детей, так и взрослых. Прогулки по набережной, экскурсии и местные фестивали — все это создаст незабываемые впечатления.
enclomiphene for men enclomiphene citrate enclomiphene testosterone
https://farmaciaasequible.shop/# Farmacia Asequible
Familiarize yourself with all the core features and strategies in how do you play sweet bonanza, helping you spin smarter and win more often.
The Sweet Bonanza slot game has gained immense popularity among online casino enthusiasts. This game features vibrant graphics and exciting gameplay, making it a favorite.
The primary attraction of Sweet Bonanza lies in its unique features. The game employs a cascading reel system, enabling players to achieve several wins with one spin.
On top of that, Sweet Bonanza provides a free spins option that enhances the overall fun. Activating this feature can result in significant winnings, adding to its allure.
Ultimately, Sweet Bonanza proves to be an engaging slot option for enthusiasts. With its vibrant design and rewarding features, it appeals to both new and experienced players.
https://rxfreemeds.shop/# online pharmacy viagra generic
cariban sin receta Farmacia Asequible tadalafil 10 mg
Q
https://rxfreemeds.com/# pharmacy viagra price
https://enclomiphenebestprice.com/# enclomiphene citrate
RxFree Meds: rx express pharmacy panama city fl — tesco artane pharmacy
здравствуй подскажи почему я невижу ответы
йц
RxFree Meds RxFree Meds RxFree Meds
enclomiphene buy: enclomiphene online — enclomiphene buy