このプロジェクトでは、デジタルポテンショメータをarduinoとインターフェースさせます。このデモンストレーションでは、ポテンショメータMCP41010が使用されていますが、MC41 **シリーズの任意のデジタルポテンショメータを使用できます。
アンキット・ネギ
MC41010の紹介
デジタルポテンショメータは、3つの端子を備えたアナログポテンショメータとまったく同じですが、違いは1つだけです。アナログではワイパーの位置を手動で変更する必要がありますが、デジタルポテンショメータの場合、ワイパーの位置はマイクロコントローラまたはマイクロプロセッサを使用してポテンショメータに与えられた信号に従って設定されます。
図。 MC41010ICのピン配列
MC41010は、8ピンデュアルインラインパッケージICです。他のアナログポテンショメータと同様に、このICには5k、10k、50k、および100kがあります。この回路では、10kポテンショメータが使用されています
MC4131には次の8つの端子があります。
ピン番号ピン名簡単な説明
1 CSこのピンは、arduinoに接続されているスレーブまたは周辺機器を選択するために使用されます。これが
低の場合はMC41010が選択され、これが高の場合はMC41010の選択が解除されます。
2 SCLK共有/シリアルクロック、arduinoはからのデータ転送の初期化のためのクロックを提供します
ArduinoからICへ、またはその逆。
3 SDI / SDOシリアルデータはこのピンを介してarduinoとICの間で転送されます
4arduinoのVSSグランド端子はICのこのピンに接続されています。
5PA0これはポテンショメータの1つの端子です。
6 PW0この端子はポテンショメータのワイパー端子です(抵抗を変更するため)
7PB0これはポテンショメータのもう1つの端子です。
8 VCCICへの電力はこのピンを介して供給されます。
このICにはポテンショメータが1つしか含まれていません。一部のICには、最大2つのポテンショメータが組み込まれています。この
ワイパーと他の端子間の抵抗値は、0から255まで256ステップで変更されます。10kの抵抗を使用しているため、抵抗の値は次のステップで変更されます。
10k / 256 = 0〜255のステップあたり39オーム
コンポーネント
このプロジェクトには、次のコンポーネントが必要です。
“電子通信方法: ”
1. ARDUINO
2. MC41010 IC
3. 220OHM抵抗器
4. LED
5.ワイヤーの接続
図のように接続します。
1.csピンをデジタルピン10に接続します。
2.SCKピンをデジタルピン13に接続します。
3. SDI / SDOピンをデジタルピン11に接続します。
4.arduinoのグランドピンへのVSS
5.arduinoのPA0から5vピン
6.PB0からarduinoのグラウンドへ
7.arduinoのアナログピンA0へのPWO。
8.5vのarduinoへのVCC。
プログラムコード1
このコードは、ArduinoIDEのシリアルモニターのワイパー端子とアース間の電圧変化を出力します。
#include
int CS = 10 // initialising variable CS pin as pin 10 of arduino
int x // initialising variable x
float Voltage // initialising variable voltage
int I // this is the variable which changes in steps and hence changes resistance accordingly.
void setup()
{
pinMode (CS , OUTPUT) // initialising 10 pin as output pin
pinMode (A0, INPUT) // initialising pin A0 as input pin
SPI.begin() // this begins Serial peripheral interfece
Serial.begin(9600) // this begins serial communications between arduino and ic.
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i) // this writes level i to ic which determines resistance of ic
delay(10)
x = analogRead(A0) // read analog values from pin A0
Voltage = (x * 5.0 )/ 1024.0// this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
delay(500)
for (int i = 255 i >= 0 i--) // this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
x = analogRead(A0)
Voltage = (x * 5.0 )/ 1024.0 // this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
}
int digitalPotWrite(int value) // this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)
コードの説明1:
arduinoでデジタルポテンショメータを使用するには、最初にarduinoIDE自体で提供されるSPIライブラリを含める必要があります。次のコマンドでライブラリを呼び出すだけです。
#include
ボイド設定では、ピンは出力または入力として割り当てられます。また、arduinoとic間のSPIおよびシリアル通信を開始するコマンドも提供されています。
#include
int CS = 10
int x
float Voltage
int i
void setup()
{
pinMode (CS , OUTPUT)
pinMode (A0, INPUT)
SPI.begin()// this begins Serial peripheral interfece
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i)// this writes level i to ic which determines resistance of ic
delay(10)
}
delay(500)
for (int i = 255 i >= 0 i--)// this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
}
}
int digitalPotWrite(int value)// this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)
}
ボイドループでは、forループを使用してデジタルポットの抵抗を合計256ステップで変更します。最初に0から255まで、次に再び0に戻り、各ステップの間に10ミリ秒の遅延があります。
SPI.begin() and Serial.begin(9600)
digitalPotWrite(i)関数は、これらの値を書き込んで、icの特定のアドレスの抵抗を変更します。
ワイパーとエンドターミナル間の抵抗は、次の式を使用して計算できます。
R1 = 10k *(256レベル)/ 256 + Rw
そして
R2 = 10k *レベル/ 256 + Rw
ここで、R1 =ワイパーと1つの端子間の抵抗
R2 =ワイパーと他の端子間の抵抗
レベル=特定の瞬間のステップ(forループで使用される変数「I」)
Rw =ワイパー端子の抵抗(icのデータシートに記載されています)
digitalPotWrite()関数を使用して、CSピンにLOW電圧を割り当てることにより、デジタルポテンショメータチップを選択します。これで、icが選択されたときに、データが書き込まれるアドレスを呼び出す必要があります。コードの最後の部分:
SPI.transfer(B00010001)
データが書き込まれるICのワイパー端子を選択するためにB00010001であるアドレスが呼び出されます。したがって、forループの値、つまりiは抵抗を変更するように記述されています。
回路動作:
iの値がarduinoのA0ピンへの入力を変更し続ける限り、0から1023の間でも変化し続けます。これは、ワイパー端子がA0ピンに直接接続され、ポテンショメータの他の端子がそれぞれ5ボルトとグランドに接続されているために発生します。抵抗が変化すると、その両端の電圧も変化します。これは、arduinoによって直接入力として取得されるため、シリアルモニターで特定の抵抗値の電圧値を取得します。
シミュレーション1:
これらは、iのさまざまな値でのこの回路のシミュレーション画像です。
次に、図に示すように、220オームの抵抗と直列に接続されたLEDをICのワイパー端子に接続します。
コード2:
for (int i = 0 i <= 255 i++) and for (int i = 255 i>= 0 i--)
コード2の説明:
このコードは、このコードにシリアルコマンドがないことを除いて、コード1と同様です。したがって、シリアルモニターには値は出力されません。
作業説明
抵抗が変化するとLEDがワイパー端子とアースの間に接続されるため、LEDの両端の電圧も変化します。したがって、LEDが接続されている抵抗が0オームから最大に上昇すると、LEDの輝度も上昇します。最大から0vへの抵抗の減少により、これもゆっくりと消えていきます。
シミュレーション2
シミュレーション3
前:ジョイスティックを使用してサーボモーターを制御する方法 次へ:Arduinoを使用してこの高度なデジタル電流計を作成します