Генератор сигналів на базі Arduino Uno R3
- 640.00грн
-
Даний комплект є простим у складанні генератором синусоїдальних і прямокутних сигналів в діапазоні частот від 0 до 40МГц . Керується генератор дуже просто - за допомогою чотирьох кнопок - дві (вгору/вниз) для грубої настройки, і дві (ліворуч/праворуч) - для точної. Крок налаштування змінюється в залежності від поточної частоти.
Зібравши генератор, можна отримати корисний пристрій, а також освоїти програмування Arduino, в тому числі роботу з бібліотекою LiquidCrystal і підключення кількох кнопок на один вхід плати Arduino.
Комплект складається з плати Arduino Uno R3 , Шилд DFRobot LCD Keypad Shield , модуля генератора сигналів AD9850 DDS і необхідних проводів.
Програмна частина генератора написана мовою Wiring, а апаратна - з окремих модулів, що легко з'єднуються, завдяки чому генератор сигналів на базі Arduino зможе зробити своїми руками навіть людина без глибоких знань в електроніці та програмуванні.
Комплектація:
- Arduino Uno R3 в антистатичній упаковці
- шилд DFRobot LCD Keypad Shield
- модуль генератора сигналів AD9850 DDS
- 8 провідників для з'єднання модулів
- USB кабель
Інструкція по збірці:
1) Завантажте та встановіть Arduino IDE (рекомендуємо версію 1.0.4). На вказаному сайті також можна знайти інформацію щодо первинного настроювання та роботи з IDE, а також відповіді на основні питання щодо роботи з нею.
2) Підключіть до комп'ютера плату Arduino Uno і завантажте до неї наступний скетч:
#include < LiquidCrystal .h> // Підключення бібліотек LiquidCrystal lcd (8, 9, 4, 5, 6, 7); // Ініціалізація LCD із зазначенням пінів float freq = 10000; // Оголошення змінних - Частота float bigStep = 1000; // крок зміни частоти при натисканні вгору/вниз float littleStep = 10; // Крок зміни частоти при натисканні праворуч/ліворуч int lcd_key = 0; int adc_key_in = 0;#define btnRIGHT 0 // Створення директив для кнопок #define btnUP 1#define btnDOWN 2#define btnLEFT 3#define btnSELECT 4#define btnNONE 5 #define W_CL FQ_UD 16 // Пін A2 Arduino - підключений до FQ (FU) #define DATA 17 // Пін A3 Arduino - підключений до DATA #define RESET 18 // Пін A4 Arduino - підключений до RST #define pulseHigh(pin) { digitalWrite (pin , HIGH ); digitalWrite (pin, LOW ); } //--------------------------------------------------- ------- int read_LCD_buttons(){ // Функція зчитування натискання кнопок adc_key_in = analogRead (0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 150) return btnUP; if (adc_key_in < 315) return btnDOWN; if (adc_key_in < 600) return btnLEFT; if (adc_key_in < 850) return btnSELECT; return btnNONE;} //------------------------------------------------ ----------- void tfr_byte( byte data){ // Функція побитной відправки байта for ( int i=0; i<8; i++, data>>=1) { // даних у модуль генератора digitalWrite (DATA, data & 0x01); pulseHigh(W_CLK);}} // Подача імпульсу на CLK після кожного біта //-------------------------------- ----------------------- void sendFrequency( double frequency) { // Перетворення та відправка int32_t freq = frequency * 4294967295/125000000; // значення частоти for ( int b=0; b<4; b++, freq>>=8) {tfr_byte(freq & 0xFF);} tfr_byte(0x000); // Відправлення завершального контрольного байта pulseHigh(FQ_UD);} // Оновлення частоти генератора //------------------------------- --------------------- void setup () {lcd. begin (16, 2); // Старт бібліотеки. Вказівкою кількості символів та рядків pinMode (FQ_UD, OUTPUT ); pinMode (W_CLK, OUTPUT ); pinMode (DATA, OUTPUT ); pinMode (RESET, OUTPUT ); pulseHigh(RESET); // Відправлення імпульсів для запуску модуля генератора pulseHigh(W_CLK); pulseHigh(FQ_UD); } //--------------------------------------------------- ----- void loop () {lcd. setCursor (0,0); // Далі виведення поточного значення частоти lcd. print ( "Freq:" ); lcd. setCursor (6,0); lcd. print ( "" ); lcd. setCursor (6,0); if (freq<1000){lcd. print (freq);if ((freq>=1000)&&(freq<1000000)){lcd. print (freq/1000); lcd. print ( "kHz" );} if ((freq>=1000000)&&(freq<50000000)){lcd. print (freq/1000000); lcd. print ( "MHz" );} lcd. setCursor (0,1); lcd. print ( "Genie v1.0" ); if (freq <100) {bigStep = 10; // Визначення кроку грубої та точної littleStep = 1;} // Налаштування в залежності від частоти if ((freq> = 100) & & (freq <1000)) {bigStep = 100; littleStep = 1;} if ((freq> = 1000) & (freq <10000)) {bigStep = 1000; littleStep = 10;} if ((freq> = 10000) & (freq <100000)) {bigStep = 10000; littleStep = 100;} if ((freq>=100000)&&(freq<1000000)){bigStep = 100000; littleStep = 1000;} if ((freq> = 1000000) & (freq <10000000)) {bigStep = 1000000; littleStep = 10000;} if ((freq>=10000000)&&(freq<40000000)){bigStep = 10000000; littleStep = 100000;} lcd_key = read_LCD_buttons(); // Зчитування клавіш switch (lcd_key) // Далі обробка натискань клавіш { case btnRIGHT: {freq+=littleStep; break ;} case btnLEFT: {freq -= littleStep; break ;} case btnUP: {freq += bigStep; break ;} case btnDOWN: { if (freq == bigStep){freq -= (bigStep/10);} else {freq -= bigStep;} break ;} case btnSELECT: { break ;} case btnNONE: { break ;} } if (freq<1) freq=1; // Обмеження значень частоти if (freq>40000000) freq=40000000; sendFrequency(freq); // Виклик функції відправлення частоти delay (200); // Пауза 200 мс }
3) Якщо після завантаження скетчу Ви отримали повідомлення "Done uploading.", то все зроблено правильно і можна приступати до наступного етапу - з'єднання модулів. Keypad Shield потрібно просто встромити поверх Arduino Uno, а модуль генератора підключити за допомогою провідників, що йдуть в комплекті, за наступною схемою:
| Висновки Arduino | Висновки модуля генератора |
| +5V | VCC |
| GND | GND |
| A1 | W_CLK |
| A2 | FU_UD |
| A3 | DATA |
| A4 | RESET |
Вихідний сигнал знімається з пінів модуля генератора QOUT1, QOUT2(прямокутний), ZOUT1 та ZOUT2(синусоїдальний)
4) Після складання ще раз перевірте правильність підключення, якщо все правильно - на пристрій можна подавати живлення.
5) Через кілька секунд з'явиться значення частоти за замовчуванням - 10 кГц, яке можна змінити натисканням кнопок вгору/вниз та вправо/вліво. Пристрій готовий до роботи.

