В данной статье пойдёт речь о том как сделать машинку на радиоуправлении своими руками на базе микроконтроллера 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
Маленькое видео
Можно поподробнее как компилировать что для чего ато ничего ни понимаю что в микрокантролер что куда напишите пожалуйста
спасибо большое если возникнут вопросы напишу
подскажи пожалуйста а как в эклипс импортировать если можно по подробнее просто неочень разбираюсь
спасибо буду разбиратся
здравствуй спасибо за помощь разобрался но возник вод такой вопрос как подключить в эту схему радио модуль nrf 24l01
Уважаемый автор у меня вопрос по вашему уникальному труду. У вас по данной схеме управление двумя приводами,а возможно ли сделать так чтобы было восемь приводов и каждый управлялся бы отдельной командой?Если да то как?
Здравствуйте немоглибы вы выложить схему управления которое подключается к компьютеру
Подскажи модуль сс1101 получится использовать
подскажи как запустить програму управления в jar формати онаже скомпилированая 1 раз запустил сейчас немогу
извини запустил только он в конект невыходит
Программу запустил по модулювидно что что-то передаётся но команды не отображаются
И подскажи пожалуйста программу собрал а какой именно фаил писать в микроконтроллер
подкажи частоту которую надо у микроконтролера ставить
подскажи такое ощущение что с программой для микроконтролера чтото нето собираю компелирую ошибок нету зашиваю неработает беру собираю схему в протеуси записываю туда програмку на микроконтроллере мигают ena иenb ну и на com порте при нажатии на кнопки и всё больше ничего непроисходит мигают просто так с определенной частотой
Здравствуйте подскажите вы тему закрыли или как ато неодного ответа неполучил
выставил как ты написал тоже самое уже весь мозг сломал
http://lisinoprilus.com/# zestoretic 20
zithromax 250 mg australia: zithromax cost uk — zithromax coupon
lisinopril price in canada lisinopril 5mg pill prinivil 10 mg tab
http://ciprofloxacin.cheap/# ciprofloxacin over the counter
Cytotec 200mcg price: buy cytotec pills online cheap — cytotec buy online usa
https://azithromycinus.com/# zithromax online
buy ciprofloxacin buy ciprofloxacin over the counter ciprofloxacin mail online
Cytotec 200mcg price: buy misoprostol over the counter — buy cytotec online fast delivery
cipro for sale where to buy cipro online cipro
https://azithromycinus.com/# buy zithromax 1000 mg online
prinivil 5 mg: buy 20mg lisinopril — lisinopril 40 mg daily
п»їkamagra: Kamagra Oral Jelly — Kamagra 100mg price
drugs1st: is ed reversible — buying pills online
cheap ed drugs: buy ed medication online — ed med online
https://semaglutidetablets.store/# cheap semaglutide pills
rybelsus semaglutide tablets: semaglutide tablets for weight loss — cheap semaglutide pills
https://kamagra.men/# sildenafil oral jelly 100mg kamagra
drugs1st ed cures that work drugs1st
https://drugs1st.pro/# drugs1st
https://cenforce.icu/# cheapest cenforce
Cenforce 150 mg online: cenforce.icu — cheapest cenforce
buy semaglutide: semaglutide tablets store — semaglutide tablets store
super kamagra: super kamagra — Kamagra Oral Jelly
Cenforce 100mg tablets for sale: cenforce for sale — cenforce for sale
http://edpills.men/# п»їed pills online
Kamagra 100mg: Kamagra Oral Jelly — Kamagra Oral Jelly
http://edpills.men/# ed med online
https://semaglutidetablets.store/# buy semaglutide
buy ed meds online: order ed pills — cheap ed meds online
drugs1st: drugs and medications — ed drugs list
ed drugs online: cheapest ed treatment — online ed pharmacy
https://kamagra.men/# sildenafil oral jelly 100mg kamagra
http://kamagra.men/# buy kamagra online usa
https://semaglutidetablets.store/# semaglutide tablets price
drugs1st: best ed pills that work — drugs1st
https://kamagra.men/# Kamagra 100mg price
https://cenforce.icu/# cenforce.icu
buy kamagra online usa: Kamagra tablets — super kamagra
https://drugs1st.pro/# drugs1st
sildenafil oral jelly 100mg kamagra: super kamagra — buy Kamagra
buy Kamagra: Kamagra Oral Jelly — super kamagra
cheap ed pills: low cost ed meds — online ed medications
https://drugs1st.pro/# pharmacy online
errectile dysfunction drugs1st cheapest ed pills
https://kamagra.men/# Kamagra tablets
drugs1st: buy medications online — drugs1st
https://cenforce.icu/# cenforce.icu
bahis giriЕџ: deneme bonusu veren siteler 2025 — ilk Гјyelik deneme bonusu veren siteler
пин ап казино: pinup2025.com — пин ап вход
casino siteleri 2024: yeni aГ§Д±lan bahis siteleri — 30 tl bonus veren bahis siteleri
slot oyunlar? puf noktalar? slot oyunlar? puf noktalar? en cok kazand?ran slot oyunlar?
https://casinositeleri2025.pro/# gazino isimleri
https://casinositeleri2025.pro/# bilinmeyen siteler
http://casinositeleri2025.pro/# casino Еџans oyunlarД±
az parayla cok kazandiran slot oyunlar?: slot oyunlar? — en kazancl? slot oyunlar?
slot siteleri slot oyunlar? slot tr online
пин ап вход: пин ап вход — пинап казино
https://casinositeleri2025.pro/# yasal Еџans oyunlarД± siteleri
pinup 2025 [url=http://pinup2025.com/#]пин ап казино[/url] pinup 2025
en cok kazand?ran slot oyunlar?: az parayla cok kazandiran slot oyunlar? — slot tr online
bonus veren yasal siteler: bonus veren site — bahis siteleri 2024
пин ап казино зеркало: пин ап вход — пин ап казино зеркало
https://casinositeleri2025.pro/# en Г§ok kazandД±ran casino sitesi
http://casinositeleri2025.pro/# bet turkiye
deneme bonusu veren bahis siteleri 2025: casino bahis siteleri — yeni gГјncel deneme bonusu veren siteler
пинап казино [url=https://pinup2025.com/#]пин ап казино официальный сайт[/url] пин ап вход
http://slottr.top/# slot oyunlar?
az parayla cok kazandiran slot oyunlar? en cok kazand?ran slot oyunlar? en cok kazand?ran slot oyunlar?
пин ап зеркало: пинап казино — пин ап вход
pinup 2025: пин ап — пин ап казино официальный сайт
пин ап казино зеркало: пин ап зеркало — пин ап
iddaa siteleri +18 canli yayin siteleri gГјvenilir oyun siteleri
slot siteleri: en kazancl? slot oyunlar? — az parayla cok kazandiran slot oyunlar?
пин ап казино зеркало пин ап пин ап
az parayla cok kazandiran slot oyunlar?: slot oyunlar? puf noktalar? — en kazancl? slot oyunlar?
superbeting slot oyna casino kumar oyunlarД±
пин ап вход: pinup 2025 — пин ап казино
пин ап казино официальный сайт пинап казино pinup 2025
https://slottr.top/# en kazancl? slot oyunlar?
en gГјvenilir site: gГјvenli siteler — gГјvenilir casino
yeni bahis siteleri deneme bonusu casino giriЕџ deneme+bonusu+yeni
пин ап: пин ап казино — пин ап
az parayla cok kazandiran slot oyunlar? en cok kazand?ran slot oyunlar? en cok kazand?ran slot oyunlar?
пин ап вход: пин ап зеркало — pinup 2025
пин ап вход пин ап казино официальный сайт пин ап
yeni casino siteleri: vidobet giriЕџ — para kazandiran kumar oyunlarД±
пин ап вход pinup 2025 пин ап казино зеркало
пин ап: пин ап казино зеркало — пин ап казино зеркало
2025 yatД±rД±m ЕџartsД±z deneme bonusu veren siteler: superbetin giriЕџ — deneme bonusu veren siteler casino
pinup2025.com пин ап казино зеркало пинап казино
bonus veren siteler yeni: bonus veren site — deneme bonusu veren seat
пин ап казино зеркало: пин ап вход — пин ап
https://casinositeleri2025.pro/# deneme bonusu veren seat
kumar oynama siteleri tГјrk partner siteleri casino site
sГјpernetin: en iyi oyun siteleri — casino site
http://pinup2025.com/# пин ап казино зеркало
пин ап казино официальный сайт: пин ап вход — pinup 2025
Тут можно купить сейфы для офисаофисные сейфы недорого
en kazancl? slot oyunlar? slot oyunlar? en cok kazand?ran slot oyunlar?
en kazancl? slot oyunlar?: slot oyunlar? — slot oyunlar? puf noktalar?
pinup2025.com: пин ап — пин ап казино официальный сайт
Тут можно сейф цена купитьсейф купить москва
free spin casino en iyi oyun siteleri oyun dene
en kazancl? slot oyunlar?: slot siteleri — az parayla cok kazandiran slot oyunlar?
slot oyunlar? puf noktalar?: slot oyunlar? puf noktalar? — slot oyunlar?
пинап казино пин ап казино зеркало pinup2025.com
http://pinup2025.com/# pinup 2025
пинап казино: пин ап казино — пин ап
pinup2025.com: пин ап вход — пин ап зеркало
slot siteleri az parayla cok kazandiran slot oyunlar? az parayla cok kazandiran slot oyunlar?
slot oyunlar? puf noktalar?: en kazancl? slot oyunlar? — az parayla cok kazandiran slot oyunlar?
medicine for ed: canadianpharmi — legal to buy prescription drugs without prescription
mexican online pharmacies prescription drugs: Legit online Mexican pharmacy — mexico drug stores pharmacies
best online pharmacy india Online India pharmacy world pharmacy india
india pharmacy: Top online pharmacy in India — india pharmacy mail order
https://canadianpharmi.com/# ed drug comparison
http://canadianpharmi.com/# homeopathic remedies for ed
http://canadianpharmi.com/# new ed drugs
reputable indian online pharmacy Best Indian pharmacy cheapest online pharmacy india
http://mexicanpharmi.com/# mexican pharmaceuticals online
errection problems: Canada pharmacy online — is ed reversible
https://canadianpharmi.com/# 100mg viagra without a doctor prescription
indian pharmacies safe India online pharmacy international shipping online shopping pharmacy india
best pill for ed: canadian pharmi — medication drugs
http://mexicanpharmi.com/# mexican border pharmacies shipping to usa
mexican border pharmacies shipping to usa: Best online Mexican pharmacy — medication from mexico pharmacy
https://mexicanpharmi.com/# mexican mail order pharmacies
indianpharmacy com Online medicine home delivery indian pharmacies safe
mexican online pharmacies prescription drugs: Cheapest online pharmacy — purple pharmacy mexico price list
https://mexicanpharmi.com/# buying from online mexican pharmacy
http://canadianpharmi.com/# what are ed drugs
mexico drug stores pharmacies Legit online Mexican pharmacy best online pharmacies in mexico
http://mexicanpharmi.com/# mexican border pharmacies shipping to usa
herbal remedies for ed: Best Canadian pharmacy — best canadian online pharmacy
http://canadianpharmi.com/# ed tablets
http://canadianpharmi.com/# cheap pills online
ed treatment canadian pharmacy canadian medications
https://indiapharmi.com/# india pharmacy
reputable mexican pharmacies online: mexican pharmi — mexico drug stores pharmacies
best ed pill: canadian pharmi — best male ed pills
mexican border pharmacies shipping to usa: Purple pharmacy online ordering — medicine in mexico pharmacies
how to help ed Canada Pharmacy canadian drug prices
http://mexicanpharmi.com/# mexican pharmaceuticals online
online shopping pharmacy india: India pharmacy delivery — reputable indian online pharmacy
http://indiapharmi.com/# top 10 online pharmacy in india
https://mexicanpharmi.com/# medication from mexico pharmacy
reputable indian online pharmacy India online pharmacy international shipping india online pharmacy
п»їlegitimate online pharmacies india: Online medicine home delivery — india online pharmacy
best male ed pills canadianpharmi errectile disfunction
https://mexicanpharmi.com/# pharmacies in mexico that ship to usa
http://canadianpharmi.com/# ed drugs list
indianpharmacy com: indiapharmi — buy medicines online in india
medication from mexico pharmacy: mexican pharmi — mexican pharmaceuticals online
new ed drugs: Canada Pharmacy online reviews — best ed pills that work
http://indiapharmi.com/# best india pharmacy
pharmacies in mexico that ship to usa mexicanpharmi buying from online mexican pharmacy
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телевизоров haier в москве, можете посмотреть на сайте: ремонт телевизоров haier
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
mexico pharmacies prescription drugs: mexicanpharmi — best online pharmacies in mexico
https://canadianpharmi.com/# how to overcome ed naturally
http://mexicanpharmi.com/# п»їbest mexican online pharmacies
ed drugs canadianpharmi cat antibiotics without pet prescription
best medication for ed: Canada Pharmacy — drug prices comparison
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов xiaomi цены, можете посмотреть на сайте: ремонт телефонов xiaomi адреса
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
https://canadianpharmi.com/# best ed pills that work
buying prescription drugs in mexico Purple pharmacy online ordering mexico drug stores pharmacies
http://indiapharmi.com/# reputable indian online pharmacy
https://indiapharmi.com/# best india pharmacy
india pharmacy mail order: India online pharmacy international shipping — india online pharmacy
https://indiapharmi.com/# world pharmacy india
cipro online no prescription in the usa: CiPharmDelivery — cipro
prednisone 5mg coupon: Predni Best — prednisone steroids
amoxicillin over the counter in canada: amoxicillin medicine — amoxicillin 750 mg price
where to buy cipro online CiPharmDelivery ciprofloxacin 500mg buy online
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов vivo цены, можете посмотреть на сайте: ремонт телефонов vivo адреса
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
http://amoxstar.com/# amoxicillin without a prescription
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов sony в москве, можете посмотреть на сайте: ремонт телефонов sony сервис
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов realme, можете посмотреть на сайте: ремонт телефонов realme рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
buying generic clomid tablets: clomid on pharm — how can i get clomid tablets
https://cipharmdelivery.com/# buy cipro cheap
prednisone 5mg price generic prednisone 10mg prednisone 40 mg price
http://clomidonpharm.com/# where to buy cheap clomid pill
https://clomidonpharm.com/# where can i get clomid
buy amoxicillin 250mg Amox Star amoxicillin 500 mg capsule
cipro: CiPharmDelivery — ciprofloxacin 500 mg tablet price
can you buy amoxicillin over the counter in canada: Amox Star — buy amoxicillin over the counter uk
ciprofloxacin mail online buy cipro online without prescription ciprofloxacin 500mg buy online
https://prednibest.com/# buy prednisone online usa
ciprofloxacin 500mg buy online buy cipro no rx antibiotics cipro
where can i buy generic clomid pill: clomid on pharm — can i get clomid without insurance
amoxicillin 500mg capsules price: AmoxStar — buy amoxicillin from canada
where can you buy amoxicillin over the counter Amox Star amoxicillin without a prescription
https://amoxstar.com/# amoxicillin for sale
http://clomidonpharm.com/# where to buy clomid without dr prescription
where can i get cheap clomid pill: clomid on pharm — how can i get generic clomid online
buy cipro online without prescription CiPharmDelivery ciprofloxacin order online
buy ciprofloxacin over the counter: ci pharm delivery — buy ciprofloxacin
http://prednibest.com/# prednisone 5 mg tablet without a prescription
amoxicillin 750 mg price: amoxicillin generic — generic amoxicillin 500mg
can i buy prednisone from canada without a script: 30mg prednisone — 40 mg daily prednisone
Здесь можно сейфы для ружьясейф для оружия купить
http://prednibest.com/# buy prednisone no prescription
cost cheap clomid pills clomidonpharm can i buy generic clomid
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов samsung адреса, можете посмотреть на сайте: ремонт телефонов samsung цены
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
get cheap clomid: can i purchase clomid without rx — how can i get clomid online
http://cipharmdelivery.com/# buy generic ciprofloxacin
order generic clomid prices clomid tablets can i order generic clomid online
Здесь можно сейф для дома купить купить сейфы для дома
can i buy prednisone online in uk: PredniBest — 30mg prednisone
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов meizu, можете посмотреть на сайте: ремонт телефонов meizu
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
http://clomidonpharm.com/# where to get clomid without insurance
where can i buy clomid without a prescription clomid on pharm cost cheap clomid pills
otc prednisone cream: prednisone online australia — prednisone prices
cipro online no prescription in the usa ciprofloxacin 500 mg tablet price buy cipro without rx
cipro ciprofloxacin: cipro 500mg best prices — where to buy cipro online
how can i get generic clomid for sale: clomidonpharm — can i get cheap clomid prices
amoxicillin buy online canada: Amox Star — amoxicillin 500mg capsule
Здесь можно где можно купить сейф для дома сейф домашний
prednisone 30: how much is prednisone 10 mg — where to buy prednisone without prescription