달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'작품'에 해당되는 글 34

  1. 2016.07.01 녹음
  2. 2016.02.12 A.I 소스
  3. 2016.02.12 마이크 녹음 하기
  4. 2016.02.12 test to speech
  5. 2016.02.10 google speech to text
  6. 2016.02.08 디지털 시계
  7. 2016.02.08 표시부 프로그램 및 완성
  8. 2016.02.08 제어부 케이스 제작
  9. 2016.02.08 표시부 케이스 제작
  10. 2016.02.08 74LS164을 이용한 기본 제어 코드
2016. 7. 1. 23:44

녹음 작품/A.I2016. 7. 1. 23:44



자동 녹음 with sox

https://www.youtube.com/watch?v=Q5ntlKE0ze4


sox -t alsa default ./record.flac silence 1 0.1 1% 1 2.0 1%

'작품 > A.I' 카테고리의 다른 글

A.I 소스  (0) 2016.02.12
마이크 녹음 하기  (0) 2016.02.12
test to speech  (0) 2016.02.12
google speech to text  (0) 2016.02.10
링크  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 12. 04:54

A.I 소스 작품/A.I2016. 2. 12. 04:54

초기 소스

AI.tar


다시 만든 소스

main.c

listening (sox program) -> stt(google speech api) -> reply (simimi api) -> tts (voicerss api) -> speak (mpg123 program)


**사용 방법

1. 다운 받는다.

2. (루트 계정으로) gcc -o main main.c

3. ./main

 

아무 폴더에 넣어도 됨.

실행하려면 녹음 프로그램인 sox랑 mp3파일 재생 프로그램인 mpg123을 설치해야 된다. 

$ apt-get install sox mpg123

실행하면 txt파일이랑 wav, mp3파일들이 생긴다. 

여기서 생성되는 txt파일에 사용자의 문장과 로봇이 대답하는 문징이 있고 이걸 이용해서 화면에 나타내면 될 것 같다.

 

지금 실행하면 대답이 안나오는데, 그 이유가 simsimi 무료 버전은 하루에 100번 사용 가능한데 내가 다 써버렸어 ㅠㅜ...

대답해주는 프로그램으로 simimi 말고 다른걸 찾아봐야겠다.


stt랑 simimi api 받아오는데 너무 오래걸려서 전체적으로 느리기때문에 시리우스 해보고 있다 ㅋㅋㅋㅋ

http://sirius.clarity-lab.org/sirius/

'작품 > A.I' 카테고리의 다른 글

녹음  (0) 2016.07.01
마이크 녹음 하기  (0) 2016.02.12
test to speech  (0) 2016.02.12
google speech to text  (0) 2016.02.10
링크  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 12. 04:14

마이크 녹음 하기 작품/A.I2016. 2. 12. 04:14


먼저 마이크가 컴퓨터에 연결되어서 인식되고 있는지 확인한다. 다음 명령어를 커맨드 라인에 쳐서 확인.

lsusb



그다음, 마이크 녹음 볼륨을 높여야 한다. 

다음 명령어를 입력하고 -> F6번을 눌리고 -> 오디오 장치를 선택한 후 -> F4를 누르고 -> 마이크의 음성을 높인다.

alsamixer

    

녹음 프로그램이 마이크를 제대로 인식하는 지 확인한다.

arecoed -l


녹음을 한다.

arecord -D plughw:1,0 test.wav


녹음한 것을 들어본다.

play test.wav






참고

http://diyhacking.com/best-voice-recognition-software-for-raspberry-pi/

http://linux.die.net/man/1/arecord

'작품 > A.I' 카테고리의 다른 글

녹음  (0) 2016.07.01
A.I 소스  (0) 2016.02.12
test to speech  (0) 2016.02.12
google speech to text  (0) 2016.02.10
링크  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 12. 00:02

test to speech 2016. 2. 12. 00:02

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2016. 2. 10. 00:21

google speech to text 2016. 2. 10. 00:21

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2016. 2. 8. 21:50

디지털 시계 작품/and..2016. 2. 8. 21:50

1. 멀티 LED로 투 칼라 세븐 세그먼트 만들기

아래의 멀티 LED를 사용하여 투 칼라 세븐세그먼트를 직접 만들었습니다.


이 멀티 LED는 중간에 가장 긴부분2에 -극을 연결한 다음, 1에 +를 연결하면 빨간색이 3에 +를 연결하면 초록색이 나옴니다.

이 멀티 LED를 이용하여 시험적으로 세븐세그 먼트를 만들어 보았습니다.

모든 세그먼트의 빨강(1)은 빨강끼리 묶고 초록(3)은 초록끼리 묶었습니다. 그러면 2개의 핀이 생김니다. 이 2개의 핀중에 어떤 핀을 선택하여 +를 주느냐에 따라 색깔이 결정 되게 됩니다.

그 다음 세븐세그먼트와 같이 abcdefg로 만들기 위해서 두 개씩 공통 캐소드를 묶어 줌니다. 그러면 7개의 핀이 생김니다. 이 7개의 핀 중에서 어떤 핀에 -를 주느냐에 따라 abcdefg중 어떤 부분이 켜지는지 결정 됩니다.



2. 시계 표시부 만들기

이런 기본적인 원리를 이용하여 세븐 세그먼트 6개를 만들어서 시,분,초를 만들었습니다.  
그래서 우선 멀티 LED를 다 박았어요.
 

6개의 각 세븐 세그먼트에는 빨강과 초록을 결정하는 2개의 핀이 있잖아요? 그리고 세븐 세그먼트 6개에 시, 분, 초 사이에 점이 2쌍 있으니까 총 빨강핀 8개 초록핀 8개 입니다.

이 색깔을 제어하는 데 16개의 핀이 드는 데, 핀 수를 3개로 줄이기 위해서 74595시프트 레지스터를 두개 사용하였습니다.

 

7447BCD/세븐 세그먼트 디코터를 6개 사용하여 시, 분, 초를 BCD로 제어할 수 있도록 하였습니다.

 

74157멀티 플렉서를 6개 사용하여 시, 분, 초 데이터를 2종류씩 넣을 수 있도록 하였습니다. 이 기능을 쓴 이유는 하나의 디스플레이에서 현재 시간과 알람 설정 시간 둘다를 볼 수 있도록 하기 위해서 추가한 기능 입니다. 하지만 알람 기능은 시간이 없어서 못 만들었기 때문에 하드웨어 적으로는 이 기능이 들어있었지만 실제로 사용은 못 했죠 ㅠㅜ 시간이 있을 때 꼭! 알람기능을 넣을 꺼에요!!

멀티 플렉서의 기능은 아래에 설명 해놨습니다.

 


솔직히 표시부 작업이 멀티 LED가 총130개가 들었는데 이 것들이 각각 발이 3개씩 있으니까 완전 개고생했습니다. ㅋㅋㅋㅋ

근데 하고 나니 뿌듯뿌듯;;;

표시부 만든 과정 동영상을 만들었습니다. 뿌듯뿌듯 ㅋㅋ

 


 

3. 시계 표시부 테스트 하기

표시부의 세븐 세그먼트를 하나씩을 만들면서 테스트를 해야합니다.

그래야 에러가 나면 어디서 삐꾸나 났는 지 쉽게 찾아 낼 수 있으니까요.

분명히 개별적으로 다 테스트된 멀티LED를 사용했지만 납땜 하고 나니 안되는 LED를 제거하기는 정말 힘들어요ㅜㅠ



그래서 저는 세븐 세그먼트 하나를 완성할 때마다 아두이노를 사용해서 잘 되는지 테스트를 하였습니다.



테스트 하기 위해 사용한 아두이노 코드는 밑에것 이에요.


const int DS = 2;

const int SH_CP = 3;

const int ST_CP = 4;

const int pin[4] = {8,9,10,11};

 

void setup()

{

  pinMode(DS, OUTPUT);

  pinMode(SH_CP, OUTPUT);

  pinMode(ST_CP, OUTPUT);
  for(int i=0; i<4; i++)
  {pinMode(pin[i], OUTPUT);}
}

 

void loop()

{

//0~10까지 자작 세그먼트에 표시
  for(int i=0; i<10; i++){
  update74595(0xFF, 0x00); //표시부의 색깔 핀으로 들어감
  outPin(i); //표시부의 데이터 핀으로 들어감
  delay(500);
  }

 

//다른 색으로 0~10까지 자작 세그먼트에 표시
  for(int i=0; i<10; i++){
  update74595(0x00, 0xFF); //표시부의 색깔 핀으로 들어감
  outPin(i); //표시부의 데이터 핀으로 들어감
  delay(500);
  }
}

void outPin(int num)//십진수를 이진수 출력으로 바꿔줌
{
  for(int i=0 ; i<4; i++){
  boolean oneBit = bitRead(num, i);
  digitalWrite(pin[i], oneBit);
  }
}

void update74595(int data1, int data2) //data1과 data2는 색깔이 다름.
{

  digitalWrite(ST_CP, LOW);

  shiftData(DS, SH_CP, data1 , data2);

  digitalWrite(ST_CP, HIGH);//rising edge on storage register

}

 

void shiftData(int DS, int SH_CP, int data1, int data2)

{

  for(int i=7; i>=0; i--)

  {

    digitalWrite(SH_CP, LOW);

    boolean oneBit = bitRead(data2, i);

    digitalWrite(DS, oneBit);

    digitalWrite(SH_CP, HIGH);//rising edge on shift register

  }
 for(int i=7; i>=0; i--)

  {

    digitalWrite(SH_CP, LOW);

    boolean oneBit = bitRead(data1, i);

    digitalWrite(DS, oneBit);

    digitalWrite(SH_CP, HIGH);//rising edge on shift register

  }
} 



4. 시간 제어





5. 케이스 제작 및 완성

'












 


'작품 > and..' 카테고리의 다른 글

라인 트레이서  (0) 2016.02.08
자동차 백 라이트  (0) 2016.02.08
빛 감지 전자 주사위  (0) 2016.02.08
레이저 보안 경보 장치  (0) 2016.02.08
무선 전류 감지기  (0) 2016.02.08
:
Posted by youjin.A
현재 버스 장류장 안내 장치:



 
Bus Information Board:

 버스 내부에 버스 노선도를 LED를 이용하여 시각효과를 줘봤습니다.
 
토글 스위치는 각각 앞문과 뒷문이 열리는 신호를 의미합니다.
앞문과 뒷문이 모두 열리는 경우, 한칸 시프트 합니다.
 
그런데 만약 버스 기사 아저씨가 정류장 하나를 멈추지 않고
그냥 지나치는 경우가 발생할 수 있습니다.
그런 경우에는 음성신호를 받아서 위치를 한칸 이동하도록 하였습니다.
음성신호가 문이 열리는 신호 없이 연속해서 두번 들어가는 경우, 한칸 시프트 합니다.
 
아싸 상받았닷ㅎㅎㅎ
 
아두이노는 컨트롤부 내부에:
 
 
 
코드:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
const int ser_in = 19;
const int CLK = 18;
const int Tswitch = 1;
const int Pswitch = 0;
const int dir[5] = {13, 14, 15, 16, 17};
const int pos[11] = {2,3,4,5,6,7,8,9,10,11,12};
int p=0; //the number of dir, order from right down to right up is 0,1,2,3,4. 
int moment=0; // although switch is pushed long time, to move only one unit.
int avil=1;
int countPswitch=0;
 
void setup()
{
  pinMode(ser_in, OUTPUT);
  digitalWrite(ser_in, HIGH);
  pinMode(CLK, OUTPUT); 
  for(int i=0; i<5; i++)
     pinMode(dir[i], OUTPUT);
  for(int i=0; i<11; i++)
    pinMode(pos[i], OUTPUT);
  pinMode(Tswitch, INPUT);
  pinMode(Pswitch, INPUT);
  
  //initialize setting display
  display_position_setting(p);
  display_direction_setting(p);
}
 
void loop() 
{
  //Pwitch
  if(digitalRead(Pswitch)==HIGH)
    {avil=1;} //if Pswitch isn't pushed, initialize avail for next Pswitch push.
  if(digitalRead(Pswitch)==LOW && avil == 1)
//because if P Switch is pushed second the series, that is same with Tswitch pushed.
  {
    countPswitch++;
    avil=0; //only for the moment that touch the Pswitch.
  }
 
 
  //seting the OUTPUT pins
  moment=0;//to make possible to move right, 'check' have to be initialized.
  while( digitalRead(Tswitch)==LOW || (digitalRead(Pswitch)&&countPswitch==2) )
  {
    countPswitch=0;
    if(moment==0) // the moment that the switch is pushed.
       {
         moment=1;//if in the state  that is pushed long time, move only one unit
         p++;
         if(p == 21)//over number, initialize
          p=1;
         
         display_position_setting(p);
         display_direction_setting(p);
       }
    if(p<11)
      five_pulse(CLK); // if in the state  that is pushed long time, the LED shift have to continue.
    else
      one_left_pulse(p); 
 }
    if(p<11)
      five_pulse(CLK); // if in the state  that is pushed long time, the LED shift have to continue.
    else
      one_left_pulse(p); 
}
 
void five_pulse(int CLK)
{
  digitalWrite(ser_in, HIGH);
  
  for(int i=0; i<5; i++)
    {
     digitalWrite(CLK, HIGH);
     delay(15);
     digitalWrite(CLK, LOW);
     delay(15);
    }
}
 
void display_direction_setting(int p) //setting 74164 chip.
{
  int d = ((p+1)/2)-1; //the variation for direction pin
  if(d==-1)
     d=0;
  if(d>4)//clock direction
     d=9-d;
   
   for(int i=0; i<5; i++)
     digitalWrite(dir[i], HIGH);//deactivate
    
  digitalWrite(dir[d], LOW); // the state of LOW is active on dir LED.
}
 
void display_position_setting(int num) //setting connecting wire.
{
  if(num>10)
    num = 20-num;
  
  for(int i=0; i<11; i++)
    digitalWrite(pos[i], LOW);//deacitivate MultiLED
    
  digitalWrite(pos[num], HIGH); //activate
}
 
void one_left_pulse(int p) //difficult control 74164 for diffrent direction.
     {
       int d = ((p+1)/2)-1; //the variation for direction pin, d is -1~4, 5~9.
       if(d==-1)
       d=0;
       if(d>4)
       d=9-d;
       
       
               for(int i = 0; i<16; i++)
            {
              digitalWrite(dir[d], HIGH);
              digitalWrite(ser_in, LOW); clock(1);
              digitalWrite(ser_in, HIGH); clock(i);
              digitalWrite(ser_in, LOW); clock(15-i);
              digitalWrite(dir[d], LOW);
             delay(25);
           }
     }
     
 
void clock(int count)//fast clock
{
  for(int i=0; i<count; i++)
  {
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
  }
}

 

 

 

 

다른 버젼들:

'작품 > LED 버스 노선도' 카테고리의 다른 글

제어부 케이스 제작  (0) 2016.02.08
표시부 케이스 제작  (0) 2016.02.08
74LS164을 이용한 기본 제어 코드  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 8. 21:45

제어부 케이스 제작 작품/LED 버스 노선도2016. 2. 8. 21:45





'작품 > LED 버스 노선도' 카테고리의 다른 글

표시부 프로그램 및 완성  (0) 2016.02.08
표시부 케이스 제작  (0) 2016.02.08
74LS164을 이용한 기본 제어 코드  (0) 2016.02.08
:
Posted by youjin.A
2016. 2. 8. 21:44

표시부 케이스 제작 작품/LED 버스 노선도2016. 2. 8. 21:44

시범 제작

 





케이스 수정본


케이스 시범

 



  




'작품 > LED 버스 노선도' 카테고리의 다른 글

표시부 프로그램 및 완성  (0) 2016.02.08
제어부 케이스 제작  (0) 2016.02.08
74LS164을 이용한 기본 제어 코드  (0) 2016.02.08
:
Posted by youjin.A

 

const int clockPin = 2;
const int switchPin=3;
const int resetPin = 4;
int i;

void setup()
{
  pinMode(clockPin, OUTPUT);
  pinMode(switchPin, INPUT);
  digitalWrite(switchPin, HIGH);
  
  pinMode(resetPin, OUTPUT);
  digitalWrite(resetPin, LOW);
  digitalWrite(resetPin, HIGH);
}

void loop()
{
  if(digitalRead(switchPin)==LOW)
     {
       clock(10);
       i++;
       if(i>40)
       {digitalWrite(resetPin, LOW);
        digitalWrite(resetPin, HIGH);
        i=0;}
     }
}

void clock(int time)
{
  digitalWrite(clockPin, HIGH);
  delay(time);
  digitalWrite(clockPin, LOW);
  delay(time);
}


'작품 > LED 버스 노선도' 카테고리의 다른 글

표시부 프로그램 및 완성  (0) 2016.02.08
제어부 케이스 제작  (0) 2016.02.08
표시부 케이스 제작  (0) 2016.02.08
:
Posted by youjin.A