Нам нужно подключить пищалку к измерительному комплексу.




Пьезокерамические излучатели звука (пьезодинамики) — акустические устройства для воспроизведения звука, использующие пьезоэлектрический эффект. Пьезоизлучатели получили широкое распространение: их используют в различных электронных устройствах — будильниках, телефонах, игрушках и в другой бытовой технике.

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

Пьезокерамический излучатель (пьезопищалка) состоит из металлической пластины, на которую нанесена пьезоэлектрическая керамика, имеющая токопроводящее напыление (смотри фото ниже). Пластина и напыление являются контактами пьезоизлучателя, при этом устройство имеет полярность — плюс и минус.

Возможные трудности:

Нет звука
Учитывая размер и форму пищалки легко промахнуться мимо нужного отверстия в плате.
Попробуйте еще раз проверить его размещение.
Все равно не работает, не пойму почему
Попробуйте вытянуть пищалку из платы и снова воткнуть ее на свое место, а потом загрузите код программы в плату Arduino.

Скетч:

· #include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define trigPin 13
#define echoPin 12
#define servoPin 9
#define soundPin 3

Servo servo; // Создаем объект
LiquidCrystal_I2C lcd(0x3F,16,2); // Задаем адрес и размерность дисплея.

char serialData; //буф. переменная приема из COM порта

int t =1000;
long distance = 100;
int grd = 90;
int crnt_grd = 90;
int answ_grd = 90;
int delta_grd = 10;

int OutData_1 = 0; // номер команды исполнения
int OutData_2 = 0; // градус установки серво
int OutData_3 = 0; // измерение дистанции от сонара

String out_str;
int mode_num = 0;
String inString = "", LedInString = "";
String InStrData1 = "", InStrData2 = "", InStrData3 = "", InStrData4 = "";
int InData1 = 0, InData2 = 0, InData3 = 0, InData4 = 0, InDataNum = 0;

// ФУНКЦИЯ УСТАНОВКИ КОНФИГУРАЦИИ ARDUINO
void setup() {
Serial.begin (9600);
pinMode(soundPin, OUTPUT); // звуковая индикация
pinMode(trigPin, OUTPUT); // пин сигнала триг сонара
pinMode(echoPin, INPUT); // пин сигнала эха сонара

lcd.begin(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
// Курсор находится в начале 1 строки
lcd.print("Arduino..."); // Выводим текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("PC_data..."); // Выводим текст

servo.attach(servoPin); // Указываем объекту класса Servo, что серво присоединен к пину 9
// начальная установка положение серво и проверка управления:
start_servo(); // запускаем функцию стартовой позициорирования серво (90-80-90)
}
// ФУНКЦИЯ ОСНОВНОГО ЦИКЛА ИСПОЛНЕНИЯ ПРОГРАММЫ
void loop() {
// читаем данные из порта (если есть)
while (Serial.available()) {
char inChar = Serial.read();
// если читаемый символ равен конец строки то..., иначе дописываем в буферную строку inString
if (inChar == '\n') {
// на дисплей выводим данные COM порта out(1 строка) и in (2 строка)
//lcd.setCursor(0,0);
//lcd.print(out_str);
LedInString = InStrData1 + " " + InStrData2 + " " + InStrData3 + " " + InStrData4;
// в режиме начала работы удаляем setup демо строку "PC_data..."
if(mode_num == 0){
lcd.setCursor(0,1);
lcd.print("- - - ");
mode_num = 1;
}
lcd.setCursor(0,1);
lcd.print(LedInString);
//tone(soundPin, 1000);
delay(500);
// через паузу стираем с дисплея текущие данные
//noTone(soundPin);
delay(500);
//lcd.setCursor(0,0);
//lcd.print("- - - ");
lcd.setCursor(0,1);
lcd.print("- - - ");
delay(100);
// Начинаем исполнение команды от PC

InData1 = InStrData1.toInt(); // номер команды от PC
InData2 = InStrData2.toInt(); // начальная установка серво
InData3 = InStrData3.toInt(); // конечная установка серво
InData4 = InStrData4.toInt(); // шаг перемещения серво
switch(InData1) {
case 1:
crnt_grd = servo.read();
if (InData2!= crnt_grd)
answ_grd = control_servo(InData2);
distance = distance_meter();
if (distance >= 200 || distance <= 0){
OutData_3 = 501; // Условная величина - Вне диапазона
}
else {
OutData_3 = distance;
}
OutData_1 = 1;
OutData_2 = InData2;
out_str = String(OutData_1)+" "+String(OutData_2)+" "+String(OutData_3);
serial_pk_out(OutData_1,OutData_2,OutData_3);
if(mode_num == 0){
lcd.setCursor(0,0);
lcd.print("- - - ");
mode_num = 1;
}
lcd.setCursor(0,0);
lcd.print(out_str);
delay(500);
lcd.setCursor(0,0);
lcd.print("- - - ");

break;
case 2:

break;
default:
break;
}

 

inString = "";
// Инициализируем буферные переменные чтения строчного входного пакета (InData1,InData2,InData3,InData3)
InDataNum = 0; InStrData1 = ""; InStrData2=""; InStrData3=""; InStrData4=""; LedInString = "";
}
else
inString += inChar;
// по номеру пробела суммируем входной символ с соответствующей частью входной строки
switch(InDataNum) {
case 0:
if(inChar == ' ')
InDataNum += 1;
break;
case 1:
inString += inChar;
if(inChar == ' ')
InDataNum += 1;
else
InStrData1 += inChar;
break;
case 2:
inString += inChar;
if(inChar == ' ')
InDataNum += 1;
else
InStrData2 +=

·

inChar;
break;
case 3:
inString += inChar;
if(inChar == ' ')
InDataNum += 1;
else
InStrData3 += inChar;
break;
case 4:
inString += inChar;
if(inChar == ' ')
InDataNum += 1;
else
InStrData4 += inChar;
break;
default:
break;
}

}

}

//**************************************************************************
// ФУНКЦИИ:

// функция передачи в СОМ порт пакета данных "X Y Z \n"
void serial_pk_out(int X,int Y, int Z)
{
Serial.print(X);
Serial.print(" ");
Serial.print(Y);
Serial.print(" ");
Serial.print(Z);
Serial.print("\n");
}


// функция измерения расстояния
long distance_meter()
{
long duration, dist;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
dist = (duration/2) / 29.1;
return dist;
}
// функция управления сервоприводом
int control_servo(int fn_set_grd)
{
int fn_check_grd, fn_answer;
servo.write(fn_set_grd);
delay(100);
fn_check_grd = servo.read();
if (fn_check_grd == fn_set_grd)
fn_answer = fn_check_grd;
else
fn_answer = -1;
return fn_answer;
}
// функция начальной установки положение серво и проверка управления:
void start_servo()
{
// Устанавливаем серво на 90 градусов и качаем на 10 градусов
servo.write(90);
delay(t);
servo.write(80);
delay(t);
servo.write(90);
delay(t);
}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-01-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: