このプロジェクトでは、ATMEGA8マイクロコントローラーと火災センサーを使用して火災警報システムを作成します。火炎センサーはどのタイプでもかまいませんが、IR(赤外線)ベースの火炎センサーを使用しています。IRベースの火災センサーには、主に不正確さといういくつかの欠点がありますが、火災を検出するための最も安価で簡単な方法です。
IRベースの火災センサーは感知視力が低いため、サーボモーターに火災センサーを取り付けます。サーボは振り子を180度回転させます。火災センサーを搭載すると、270度以上の火災検知ビジョンが得られます。サーボは継続的に回転するため、完全な室内火災警報システムが提供されます。精度を上げるために、煙センサーをシステムに追加できます。これにより、より高い精度を得ることができます。
回路部品
ハードウェア: + 5v電源、サーボモーター(sg90)、ATMEGA8、ブザー、ボタン、10KΩ抵抗、1KΩ抵抗、220Ω抵抗、100nFコンデンサ、AVR-ISPプログラマー。
ソフトウェア: Atmel studio 6.1、progispまたはflashmagic。
回路図と動作
サーボシャフトを左に移動させるには、1/18のターンオン比を与える必要があり、シャフトを左端まで回転させるには、デューティ比2/18のPWMを与える必要があります。ATMEGA8をプログラムして、サーボシャフトを180に回転させ、一定の遅延後に0に回転させるPWM信号を出力します。
完全な時間の間、火炎センサーがオンになり、コントローラーは完全に警告します。火災が発生した場合、センサーはコントローラーによって検出されると、このパルスに高パルスを提供し、アラームを設定します。アラームは、それに接続されているリセットボタンを押すとオフになります。
3つのPWMチャネル用のatmega8では、3つのピンを指定しました。これらのピンでのみPWM出力を取得できます。我々はPWM1を使用しているので、我々はOC1Aピン(PORTB 1にPWM信号を取るべきST PIN)。回路図に示すように、サーボ信号をOC1Aピンに接続しています。ここでもう1つは、3つのPWMチャネルです。2つは8ビットPWMチャネルで、1つは16ビットPWMチャネルです。ここでは16ビットPWMチャネルを使用します。
ATMEGAにはPWMを生成する方法がいくつかあります。
1.位相補正PWM。
2.高速PWM。
ここではすべてを単純に保つため、FASTPWM方式を使用してPWM信号を生成します。
最初にPWMの周波数を選択します。これは通常、アプリケーションによって異なります。LEDの場合、50Hzを超える周波数でもかまいません。そのため、カウンタークロック1MHZを選択しているため、プリスケーラーは選択していません。プリスカラーは、カウンタークロックを小さくするために選択された数値です。たとえば、オシレータクロックが8Mhzの場合、「8」のプリスケーラを選択して、カウンタ用の1MHzクロックを取得できます。プリスケーラは周波数に基づいて選択されます。より多くの周期パルスが必要な場合は、より高いプリスケーラーを選択する必要があります。
ここで、ATMEGAから50HzクロックのFAST PWMを取り出すには、「TCCR1B」レジスタの適切なビットを有効にする必要があります。
ここに、
CS10、CS11、CS12(YELLOW)-カウンタクロックを選択するためのプリスケーラを選択します。適切なプリスケーラの表を以下の表に示します。したがって、1つをプリスケーリングする場合(オシレータクロック=カウンタクロック)。
したがって、CS10 = 1、他の2ビットはゼロです。
赤(WGM10-WGM13):高速PWMのために、以下の表に基づいて波形生成モードを選択するように変更されています。WGM11、WGM12、およびWGM12が1に設定されています。
これで、PWMは異なるデューティ比または異なるターンオンターンオフ時間の信号であることがわかりました。これまで、PWMの周波数とタイプを選択してきました。この章の主なテーマはこのセクションにあります。異なるデューティ比を取得するために、0〜255の値を選択します(8ビットのため2 ^ 8)。値180を選択すると、カウンターが0からカウントを開始し、値180に達すると、出力応答がトリガーされる可能性があります。このトリガーは、反転または非反転の場合があります。つまり、出力はカウントに達するとプルアップするように指示することも、カウントに達するとプルダウンするように指示することもできます。
緑(COM1A1、COM1A0):このプルアップまたはプルダウンの選択は、CM1A0およびCM1A1ビットによって選択されます。
表に示すように、比較時に出力がハイになり、最大値になるまで出力はハイのままになります。そのためには反転モードを選択する必要があるため、COM1A0 = 1; COM1A1 = 1。
下の図に示すように、OCR1A(出力比較レジスタ1A)は、ユーザーが選択した値を格納するバイトです。したがって、OCR1A = 180を変更すると、カウンターが0から180に達すると、コントローラーが変更(高)をトリガーします。
OCR1Aは、180度の場合は19999-600、0度の場合は19999-2400である必要があります。