Зачем фотографу микрофон? Чтобы сфотографировать бурные авиации. :) Если без шуток, то очень нужная возможность при съёмке воды, взрывов и всего того что создаёт звуковые волны. Примеры снимков я покажу в самой последней статье про «Машину Времени» - МВ.
В сети можно найти с десяток различных примеров как подключить микрофон к Arduino. Большинство из них - усилитель на одном транзисторе с парой конденсаторов и резисторов. Как для фотографии этого было бы достаточно. Ведь для фотографии не нужен супер усилитель High Fidelify(HiFi) или High-end качества. Я отказался от «простой» схемы. Выбор схемы определила не цена, а микрофон. Зачем нужен усилитель «с лучшими параметрами»? У меня дома три различных электретных микрофона и для МВ я купил ещё один китайский(2$) у всех разная чувствительность. Опыт мой враг. Пару лет назад я разрабатывал индустриальный микшер для фирмы Thales. Микрофонов было всего 4 типа, микрофоны были от правильных производителей с высокой чувствительностью. Даже у них разброс чувствительности отличался на порядок. Чтобы как то удовлетворить китайские микрофоны я потратил один доллар на интегрированный усилитель с постоянным усилением в 20дБ, меньшего размера чем транзистор. :) После небольших поисков выбор пал на усилитель фирмы Maxim MAX9812. В пробной схеме я поставил вариант с питанием 3.3V. В заключительной схеме будет стоять чип на 5V. Вся схема занимает очень мало места на плате и при желании усилитель можно выключить.
Пока плата сделана для удобства с выводами. Можно всё попробовать в Breadboard.
Маленькая тестовая программа проверки работы усилителя.
#include <PCD8544.h>
#include <Encoder.h>
Encoder myEnc(3, 4);
volatile long newPosition = 0;
volatile long oldPosition = 0;
// A custom glyph (a smiley)...
static const byte glyph[] = { B00010000, B00110100, B00110000, B00110100, B00010000 };
static PCD8544 lcd;
static const byte LCD_WIDTH = 84;
static const byte LCD_HEIGHT = 48;
const int analogInPin = A7;
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
int sensorMAX = 0;
unsigned long time =0;
void setup() {
// PCD8544-compatible displays may have a different resolution...
lcd.begin(84, 48);
// Add the smiley to position "0" of the ASCII table...
lcd.createChar(0, glyph);
//Serial.begin(9600);
}
void loop() {
newPosition = myEnc.read();
sensorValue = analogRead(analogInPin);
if (sensorValue > sensorMAX) sensorMAX = sensorValue;
if (millis() > time){
sensorMAX = 0;
time = millis() + 3000;
}
lcd.setCursor(0, 2);
lcd.clearLine();
lcd.print(sensorValue, DEC);
lcd.setCursor(0, 3);
lcd.clearLine();
lcd.print(sensorMAX, DEC);
lcd.setCursor(30, 0);
//lcd.clearLine();
lcd.drawColumn(84, map(sensorValue, 0, 1023, 0, LCD_HEIGHT));
//delay(10); // wait 100ms for next reading
if (newPosition != oldPosition) {
oldPosition = newPosition;
lcd.setCursor(0, 0);
lcd.print("Encoder");
lcd.setCursor(0, 1);
lcd.clearLine();
//Serial.println(newPosition);
lcd.print(newPosition, DEC);
}
}
Успешных вам кадров.
© Andrew Buckin.
Shutterstock Dreamstime
Fotostream http://www.flickr.com
Keine Kommentare:
Kommentar veröffentlichen