정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노로 스피커 소리 제어
강배에엥 | 2019-11-13

안녕하세요!

아두이노로 프로그램을 하나 계획 중인데요...

적외선 센서를 사용하여 온도를 감지하고, 그 온도가 올라가면 스피커를 통해 소리가 작아지고,

온도가 내려가면 스피커를 통해 소리가 커지는 프로그램을 만들고 싶은데요,

이게 아두이노 상으로 구성이 가능한가요???

현재

일정 온도 이상 되었을 때에 스피커에 소리가 나긴 하지만, 그 소리를 아직 조절을 못하고 있습니다 ㅠ

감사합니다

#include <i2cmaster.h>
int speakerPin = 8;
int LED = 4;
unsigned long int reg;

void setup(){
  Serial.begin(9600);
  Serial.println("Setup...");
  pinMode(LED, OUTPUT);
  pinMode (speakerPin, OUTPUT);
  reg = 0x55aa55aaL;
  i2c_init();
  PORTC = (1 << PORTC4) | (1 << PORTC5);
  }

void loop(){
 


    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;
    
    i2c_start_wait(dev+I2C_WRITE);
    i2c_write(0x07);
    i2c_rep_start(dev+I2C_READ);
    data_low = i2c_readAck();
    data_high = i2c_readAck();
    pec = i2c_readNak();
    i2c_stop();
    double tempFactor = 0.02;
    double tempData = 0x0000;
    int frac;
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01; 
    float celcius = tempData - 273.15;
    if (celcius > 35){
        digitalWrite(LED, HIGH);
        int sensorValue = analogRead(A0);
        for(int thresholdvalue=0; sensorValue>thresholdvalue; thresholdvalue--){
                   unsigned long int newr;
                   unsigned char lobit;
                   unsigned char b31, b29, b25, b24;
                   b31 = (reg & (1L << 31)) >> 31;
                   b29 = (reg & (1L << 29)) >> 29;
                   b25 = (reg & (1L << 25)) >> 25;
                   b24 = (reg & (1L << 24)) >> 24;
                   lobit = b31 ^ b29 ^ b25 ^ b24;
                   newr = (reg << 1) | lobit;
                   reg = newr;
                   digitalWrite (speakerPin, reg & 1);
                   delayMicroseconds(5);
                   }
    }else{
       digitalWrite(LED, LOW);
       delay(100);
    }
    Serial.println(celcius);
    Serial.println();
                
}

프로필사진

판다마니아 2019-11-13 14:02:27

피에조 부저 소리의 크기는 코드에서 제어하는 방법보다 회로에 저항을 연결해서 제어를 합니다.

 

GND 핀쪽에 연결된 선 중간에 저항을 연결하여 소리를 줄일수가 있습니다.

(가변저항을 이용하시거나 고정값 저항을 연결하시면 됩니다)

이전글   |    이2개코드 동시실행 가능한 코드로 합처주세요 ㅠㅠ... 2019-11-12
다음글   |    오렌지보드BLE를 쓰고있습니다. 모바일을 통해서 무선업로드가 가능하게하는 방법이 있을까요?... 2019-11-14