English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية 
BASIC StampコンピュータのマウスとPS2
Colin Fahey

1. はじめに

この記事はどのように説明できるPS/2マウスBASIC Stampエミュレートされたコンピュータです。 

この探査は、非公式のです。 
ps2_mouse_interior.jpg
古いスタイルのインテリア(動くボール)コンピュータのマウス: 「Microsoft Intellimouse」  (私の光センサーが長い配線に置き換えています。 )
マウスには2つの軸: 「X」と「Y」です。  「水平方向に」マウスを移動するときには、内部の「X」マウスホイールを回転します。  「垂直方向」にマウスを移動するときに(時の表面)は、内部の「Y」マウスホイールを回転します。  任意のマウスの動きは、車輪「X」と「Y」によると、 「水平」および「垂直」に移動するには、マウスの動きのコンポーネントです。 
ps2_mouse_interruptor_wheels.jpg
内部の光学式ホイールマウス断続
車輪の内側に注意して、マウスで穴を開けた。  ホイール回転時には、赤外線(IR)放出される光発光ダイオードIR繰り返し(LED)が中断するには、率に比例してホイールの回転率をします。  このように、マウスはどのように多くの「刻み」 ( 「ダニ」とも呼ばれる)が移動し、マウスの軸に、特定の期間です。 

運動の方向を決定するには2光センサーの使用を、非常に近い位置一緒に、軸に平行に沿って、ホイールの動きをします。  (両方を1つのセンサーは、 3ピンのコンポーネントを示す。 ) 
mouse_sensor01.jpg
マウスIR光センサー( IRには2つの探知機を1つのパッケージ)
ピンは、パッケージの中心は、正のコレクタ電圧; 
左と右のピンが左と右のセンサ出力エミッタです。 

ご連絡2つのセンサーは、パッケージ名「A」と「B」です。  仮定のホイールを回転角度が最初にこのような光がブロックさIRからは、両方のセンサーに到達します。 

車輪の回転としては、 IRエミッタからの光が最終的にできるように穴が開いて、ホイールを通過すると2つのセンサーの1つに達するなど、センサー「A」です。  ホイールの場合、続けて同じ方向に回転し、結局2番目のセンサー、 「B」 、 IR光が受信できるようにします。  ホイールの場合、続けて同じ方向に回転し、最終的に、光がブロックされるIRセンサーから「A」に達しています。  ホイールの場合、続けて同じ方向に回転し、最終的に、光がブロックされるIRセンサーから「B」に達しています。 

このように、シーケンスは: 
(A,B):   ..., (0,0), (1,0), (1,1), (0,1), ...
ホイールの場合、反対の方向に回転し、上の図を参照の4 -用語のシーケンスは逆に、最低料金の現在の状態です。
これらの2つのセンサ信号の回転率を決定すること、との方向にします。
ps2_mouse_circuit_board.jpg
回路基板は、 Microsoft Intellimouse
マウスを理解する回路の詳細についてはどのように解釈され、光センサーとの個人的はコンピュータと通信して(PC) (経由PS/2信号) 、私は大学で、回路基板のです。 

マイクロチップには、次の名前の印刷すること: SPCP05Aです。 

は、検索のためのインターネット「SPCP05A」という言葉は、チップを示して会社の名前が記載されて「Sunplus Technology Co.」です。  「SPCP05A」マイクロチップの情報を参照するにはその会社から取得します。 

ここでは、技術的な仕様については、マイクロチップ「SPCP05A」 : 
sunplus_ps2_3dmouse_datasheet.pdf
(技術的な仕様については、マイクロチップ「SPCP05A」 )
1125022 bytes
MD5: 359a9210275e021cc19a5e2391499dc5
は、次の画像は、信号のマイクロチップのピンを「SPCP05A (PS/2 3D mouse)」です。
spcp05a_chip_signals_bmp01.jpg
信号のマイクロチップのピンを「SPCP05A (PS/2 3D mouse)」
「SPCP05A」は、実際には、超小型コンピュータ!  それには、命令セット、およびRAM 、およびROM 、および内部タイマなど  実際には、マイクロチップを「SPCP05A」の説明書を提供される情報はほとんどSunplus Co.を参照して、特定の「コンピュータのマウスを」使用するマイクロチップの回路です。  このチップは、汎用マイクロコントローラです。 

研究して、回路基板上の回路トレースMicrosoft Intellimouseを形成するには、次のおおよその系統:
ps2_mouse_my_schematic.jpg
おおよその系統は、 Microsoft Intellimouse  (私は行方不明にいくつかのコンデンサ、しかし、この系統は、ほぼ完璧です。 )
Bui Van Chu 、オーストラリアでは、私の記事を読むと、より完全な回路図を送ってくれた、これは、次の画像が表示されています。
ms_ps2_mouse_schematic.jpg
PS/2マウスの系統は、オーストラリアから送ってくれたさBui Van Chu
この回路は非常に簡単です。 

マウスのボタン(左、中央、右) 、マイクロチップ上に直接アクセスして入力します。 

の3つのペアの光センサー、 ( ( 「X」 、 「Y」 、 「Z」 ) 、 (水平方向の動き、垂直方向の動き、およびマウスホイールの真ん中) )を他の入力信号を直接送信するには、チップです。 

PS/2信号のDATAとCLK (クロック)もI/O信号をチップ上に対応しています。 

私の回路図とすぐに理解して図面が完成します(次のトレースされ、回路基板上の)です。 

一つのことは私の道を理解しなかった当初のマイクロチップに接続しているがIR LEDs (ピン16 : 「PB1」 ) 、彼らの代わりに負の端子(陰極)だけが地面に直接接続しています。  これは重要なこと!

2. 私の最初の試みマウスの動きを制御する

モーションは、次のコメントを参照して単軸に沿って(のような「X」か、または水平、軸)です。 

まず最初に動いてみましたが、オブジェクトの間のIR LEDとセンサーのペア-の効果をシミュレートするには、マウスのホイールを回転します。  この作業です。  私が原因で、マウスカーソルを移動するだけで周りして、画面上に移動する障害物を通してIR光ビームを繰り返し、同じ方向にします。 

次に、私は3ピンセンサー部分を削除し、マウスからの回路基板、および回路基板の代わりにワイヤを取り付け、センサーです。  ワイヤを手動で接続する私の正の電圧センサーの活動をシミュレートする。  私の2つの信号を接続し、電源によると、次のパターン( 「0」を表すように「オフに」し、 「1」 「を」表します) :
(0,0), (1,0), (1,1), (0,1), ...
この作業です。  私がマウスカーソルを移動して、この単調で退屈して、画面上の配線の接続と切断では、パターン上の図を参照します。  逆のパターンは、シーケンスの現在の状態からは反対の方向にカーソルを移動してください。 

物事がとてもうまく行くので、私のワイヤをリレーに接続することを決めた( RS-232によって制御さ) 。  これは本質的にできるように私にこれを行うにはまさに私がゆるいワイヤ:センサーの信号を電源に接続して、該当する端子配列です。  唯一の違いという事実は、人間の( Me )ではないがこれを行うには退屈な接続と切断します。 

しかし… … うまくいきませんでした ! 

調整をした後、多くの抵抗とコンデンサ、等、私は、奇妙な発見:もし私は、特定の端末に触れるの回路、それがばっちり!  この謎の解決策を、次のセクションが表示されています。 

3. の赤外光変調する必要があります(IR)

私はいくつかイライラする実験をした後、新しい思考: IR光を高周波パルスかもしれない、とは、チップを受信するかもしれないこの周波数を期待します。  定数光(または[マイ模擬定数センサ出力)かもしれない拒否されました。  私はやや当惑しているという事実には、周囲の光を床にハロゲンランプは、まずまずですが、僕を知っていたことも白熱灯が検出変調が可能です。 

IRてみましたLEDは高周波パルスするとの予想によると、センサーブロックパターンです。  うまくいった! 

されたこと!  IR LEDsは、マウスの回路基板を高速で点滅しなければならない、とのマイクロチップを期待しなければ、この点滅に加えて、比較的低金利の光中断された回転ホイール(穴)です。 

パルスのIR LEDsされ、ブロックされていないと期待し、このセンサーの出力信号のパルスで、このチップは、任意の周囲を拒否IRマウス操作からの信号を妨害します。  たとえば、他の迷光(定数) IRソースinterefereをマウスではありません。 

私のオーディオアンプに接続してセンサーの出力]をクリックして、センサーを見に行く私は、周囲の光をダイカストで私のハロゲンフロアランプです。  (60 Hz)トーンをはっきりと聞いた。  淡色表示、ランプのときは、成長のかすかな音、そして最後に停止したときに光がオフになります。  そのため、このセンサーを簡単に60 Hzを拾って、私の変調は、白熱電球ハロゲンフロアランプ! 

感じで、今すぐ、 PS/2は、マウスの系統は、回路基板、 IR LEDsの意義は、ピンを接続しているが、マイクロチップ(の代わりにして直流電流)は、明白です。  点滅を制御して、マイクロチップIR LEDsを通じてI/Oピン、およびマイクロチップは、その意図をフラッシュの相関ID LEDsの受信、センサー入力、およびそのため任意の浮遊信号を拒否( IR光の点滅のために非) 。  (ただし、相関する必要はありません。検知するだけの最小数をカウントが点滅しきい値を受け入れるセンサー入力してください。 ) 

4. センサーをIRバンドパスフィルタ

特別IR見つけることができますセンサー、トランジスタのようなパッケージで提供され3つのフォームにリードされて「同調」を特定のIR光周波数変調(例えば、 38 kHz ) 。 
tuned_sensor01.jpg
同調IR光センサー(最大感度を38 kHz光変調)
回路は、デバイスのバンドに含まれるとともに、 IRフォトトランジスタのです。 

そのため、 IR LEDするには、通常のパルス周波数38 kHzを受け取るように、センサーの電気信号の光をご存知でしたら、センサーに行くの出力を提供します。 

を伝える情報については、 IR LEDからの光が中断さを比較的低金利(例えば、 1から100回1秒)です。  この低周波と連携の着実なパルスは、高周波パルス;すなわち、低周波パルス変調することと見なされる高周波パルスです。  高周波パルスが「波」のように「キャリア」が管理し、情報信号(の比較的低い周波数変調)が運ばれる。 

しかし、私は、 IR検証Microsoft Intellimouseセンサーは、このような変調フィルタリングはありません 。  しかし、回路が動作する必要があるIR光変調されるいくつかの方法で、低周波に加えて、光の中断されたホイールに穴です。 

は、次のスケッチの違いを示してIR LED定数センサーの信号を光と光の点滅IR LED異なる段階のマウスのホイールを回転します。
ps2_mouse_quadrature_sketch.jpg
センサーの出力信号を光のケースとIR定数IR光の点滅するケースです。

5. マウスからの入力をシミュレートするコンピュータを使用してBASIC Stamp

「BASIC Stamp 2」コンピュータのプログラミングを実装するのに十分なPS/2プロトコルです。  したがって、コンピュータの「BASIC Stamp 2」できるPS/2ポートに直接接続し、パーソナルコンピュータの(PC)とPS/2マウスやキーボードのエミュレートをすることです。 

5.1 プロトコルのPS/2

1998は、年間を通じて2003は、大多数のパーソナルコンピュータは、マウスとキーボードのポートをPS/2です。 

PS/2ポートには4つの信号: (1) CLOCK ; (2) DATA ; (3) +5V ; (4) GROUNDです。 

ポートを使用するデバイスをPS/2データを送信するホスト、およびホスト5月のデバイスにデータを送信します。  すべての当事者は、 PS/2ポート(通常はほんのデバイスとホスト)を共有する必要があります信号を検出する必要があります別のパーティーの場合は、現在使用して、信号です。 

どうすれば信号で共有ですか?  信号( CLOCKまたはDATAなど)は、通常「フローティング」高さを意味して信号は、正電圧を介して接続して抵抗を高抵抗(例えば、 4 kilo-Ohms ) 。  したがって、信号は、 「高」さの論理として解釈されるすべてのリスニングパーティーです。  どの党が引っ張ってくるにはラインをロー(経由TTLロジック)のデータを送信するときに党の意向です。  パーティー終了後のパケットを送信するときに、信号を無期限に行くことができるので、 float型高再びです。 

デバイスからデータを送信する(例えば、マウスまたはキーボード)をコンピュータの個人的は(PC)にする必要があります11ビットのデータを送信するパケットには、次のビット構成: (1)スタートビット(「0」) ; (2) 8データビット(最初のLSB ) ; (3)パリティビット( 「奇数」パリティ) ; (4)ストップビット( 「1」 ) 。  「奇数パリティ」は、ときに注意しての合計数は「1」ビットのデータビットとパリティビットの組み合わせは、奇数番号です。 

は、次の図を示し、 1つのデータパケットの伝送が可能: 
ps2_clock_data_dev2pc01_adj.jpg
PS/2プロトコル:デバイスをホストする(PC)パケット
DATAラインの適切な値を設定する必要がありますCLOCKラインの前にもたらす低い。  DATA値は設定のままの行が返されるまでのCLOCK省略して高い。  CLOCKときにラインが確認される高は、 DATA値は、次のビットの値に変更してください。 

典型的なクロック速度が比較的遅く、約10 kHzを17 kHzです。  には100マイクロ秒〜 70マイクロ秒ごとにダウンクロック周期です。 

(PC)のシナリオは、ホストのデバイスにデータを送信すると類似して、デバイスのホストにデータを送信する、しかし、すべてのデバイスの場合、データ伝送中に信号を制御してCLOCKそのものです。  また、ホストから送信されるデータビット( CLOCK低温時のデバイスの設定)は、デバイスのときにラッチを使用すると、信号CLOCKの移行を作る高い。 

明らかに、インターネット検索では多くの信号との説明をPS/2の詳細についてはプロトコルです。 

5.2 PS/2マウスデータパケット

ときには、コンピュータが起動する時、オペレーティングシステムが起動し、通信をすると、マウスを最終決定するタイプのマウスです。  デフォルトでは、汎用的なマウスの5月PS/2マウスのように振る舞う。  しかし、オペレーティングシステムが判断した場合は、マウスのは、実際には「3D PS/2」マウス(例えば、マウスのホイール) 、伝えることができる3D PS/2すると、マウスを変更するにはマウスのプロトコルです。 

マウスを移動するときに、またはマウスボタンまたはを押して、発売すると、マウスの回路にデータを送信するホスト(PC) 、どのような状態を示す変化が起きて以来、以前の状態に適応します。 

PS/2 、汎用のマウスにパケットを送信し、次の3つのホスト: 
    ------------------------
    D7 D6 D5 D4 D3 D2 D1 D0  (The D0 bit (LSB) is sent first)
    ------------------------
(1) YV XV YS XS  1  0  R  L  (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0  (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0  (Y movement; -128 to +127)

L  = Left  Button State (1 = pressed down)
R  = Right Button State (1 = pressed down)
XS = Direction of X movement (1 = LEFT)
YS = Direction of Y movement (1 = UP)
XV = Overflow of X movement value (1 = X overflow occured)
YV = Overflow of Y movement value (1 = Y overflow occured)
X7,...,X0 : X movement; 8-bit 2's-complement signed byte (-128 to +127)
Y7,...,Y0 : Y movement; 8-bit 2's-complement signed byte (-128 to +127)

Here are examples of data sent to the host (PC):
------------------------------------------------
(The least-significant bit of each data byte is sent first.)
Move Left  1 unit    :  0x18, 0xFF, 0x00
Move Right 1 unit    :  0x08, 0x01, 0x00
Move Down  1 unit    :  0x28, 0x00, 0xFF
Move Up    1 unit    :  0x08, 0x00, 0x01
Press   Left  Button :  0x09, 0x00, 0x00
Release Left  Button :  0x08, 0x00, 0x00
Press   Right Button :  0x0C, 0x00, 0x00
Release Right Button :  0x08, 0x00, 0x00
ことは非常に共通して「3D PS/2」は、マウス(例えば、マウスのホイールでも、真ん中のボタンとして機能する) 。  このようなマウスの4つのデータパケットを送信するホスト(PC)です。 
    ------------------------
    D7 D6 D5 D4 D3 D2 D1 D0  (The D0 bit (LSB) is sent first)
    ------------------------
(1) YV XV YS XS  1  M  R  L  (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0  (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0  (Y movement; -128 to +127)
(4) Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0  (Z movement; -128 to +127)

This is very similar to the generic PS/2 mouse,
with a few additions:

M = Middle Button State (1 = pressed down)
Z7,...,Z0 : Mouse wheel movement; 8-bit 2's-complement signed byte
    (The Z value is forced to a range of -8 to +7)

5.3 私の最初の回路をシミュレートするPS/2マウス

系統は私の最初の作業は、次のテクニックを取得するのに「BASIC Stamp 2」のコンピュータをホストにデータを送るPS/2マウス(PC)です。
2002june03_basicstamp_to_ps2mouse_circuit.jpg
系統の回路を可能にするBASIC Stampのコンピュータを(PC)のホストにパケットを送信PS/2です。
この回路に注意して電気的に分離(PC)マイコンピュータのホストコンピュータからBASIC Stampです。  に注意してもこの回路は、 電気的要件を満たすだけのPS/2データ伝送(からデバイスをホストする) 。  したがって、私はキーボードを使用してメッセージを送信PS/2これと同じ回路をプラグインですればよいPS/2キーボードポートは、ホスト(PC) ! 

以降の受信信号は一般的に非侵襲(すなわち、電気信号に干渉するリスニングはありません) 、ののみを許可することが必要となります。 「BASIC Stamp」コンピュータPS/2 CLOCKとDATAを受信するには、直接接続する信号は、これらの信号ピンを他のBASIC Stamp I/O (設定されて入力) 。  私種のバッファリングをいくつか試してみる-しかし、確かに光アイソレータを使用することはできません直接、それは〜に負荷がかかるので、フ「ローティング信」号(このように沈「没し」て! )です。  私が緩衝剤を使用して+5Vに動力を供給するには、バッファの出力を入力し、ドライブを使用して入力し、光アイソレータを最終的に信号を送るBASIC Stamp I/O端子(入力として構成され) 。 

は、次のイメージを示してマイコンピュータBASIC Stamp 2にマッチする系統の回路に接続してください。 
2002june03_basicstamp_mousecircuit01_adj.jpg
BASIC Stamp 2コンピュータに接続してPS/2マウスポートを介して光アイソレータ回路です。
BASIC Stamp 2は、次のプログラムでは、プログラミング言語で書かれたPBASIC 、うまくいった試みは私の最初のPS/2マウスを制御するコンピュータを経由してBASIC Stamp 2です。 

このプログラムにより、マウスカーソル単に小さな斜めの線に沿って移動します。 
'====================================================================
'{$STAMP  BS2} 'STAMP directive (specifies a BS2)

    DIR0 = %1 'Set pin 0 to OUTPUT
    DIR1 = %1 'Set pin 1 to OUTPUT
    OUT0 = %0 'Set DATA line high (pin low)
    OUT1 = %0 'Set CLOCK line high (pin low)
    tempData    VAR  BYTE
    tempParity  VAR  BYTE

'--------------------------------------------------------------------

MainLoop:

    tempCounter  VAR  WORD

    FOR tempCounter = 0 TO 10
    tempData = $28
    GOSUB TransmitPacket
    tempData = $01
    GOSUB TransmitPacket
    tempData = $ff
    GOSUB TransmitPacket
    tempData = $00
    GOSUB TransmitPacket
    PAUSE 100
    NEXT

    FOR tempCounter = 0 TO 10
    tempData = $18
    GOSUB TransmitPacket
    tempData = $ff
    GOSUB TransmitPacket
    tempData = $01
    GOSUB TransmitPacket
    tempData = $00
    GOSUB TransmitPacket
    PAUSE 100
    NEXT

    GOTO MainLoop

STOP

'--------------------------------------------------------------------

TransmitPacket:

    GOSUB ComputeParity       'First, compute parity

    tempData   = ~tempData    'Invert data bits
    tempParity = ~tempParity  'Invert parity bit

    '==== Start Bit ====
    OUT0 = %1 'Set data line low (output high)
    PULSOUT 1, 25   ' Pulse line 1 for (25*2) = 50 usec

    '==== Data Bits ====
    OUT0 = tempData.BIT0
    PULSOUT 1, 25
    OUT0 = tempData.BIT1
    PULSOUT 1, 25
    OUT0 = tempData.BIT2
    PULSOUT 1, 25
    OUT0 = tempData.BIT3
    PULSOUT 1, 25
    OUT0 = tempData.BIT4
    PULSOUT 1, 25
    OUT0 = tempData.BIT5
    PULSOUT 1, 25
    OUT0 = tempData.BIT6
    PULSOUT 1, 25
    OUT0 = tempData.BIT7
    PULSOUT 1, 25

    '==== Parity Bit ====
    OUT0 = tempParity.BIT0
    PULSOUT 1, 25

    '==== Stop Bit (high) ====
    OUT0 = %0  ' pin low is DATA high
    PULSOUT 1, 25

    PAUSE 1 ' Necessary? Provides 1 msec gap between packets...

RETURN

'--------------------------------------------------------------------

ComputeParity:

    tempParity = $01
    tempParity = tempParity + tempData.BIT0
    tempParity = tempParity + tempData.BIT1
    tempParity = tempParity + tempData.BIT2
    tempParity = tempParity + tempData.BIT3
    tempParity = tempParity + tempData.BIT4
    tempParity = tempParity + tempData.BIT5
    tempParity = tempParity + tempData.BIT6
    tempParity = tempParity + tempData.BIT7
    tempParity = tempParity & $01

RETURN

'====================================================================
このプログラムを完璧に動作します。  私はそれを実行する時、それは、マウスカーソルの移動の間に完全に正確な場所を検索する2つの画面を表示します。  これは私は何を探して:精密制御するには、マウスの対話をして私はソフトウェアです。 

私はインターネットを検索した後に発見さBASIC Stampの誰かのコンピュータを使用されるインターフェイスをPS/2 (キーボードをシミュレートする) 。  この人SHIFTOUT使用してPBASIC命令DATA信号を処理するにCLOCKと、これは本当に素晴らしいです。  これは自分の「TransmitPacket」サブルーチンずっと短い、おそらく5行のコードをトータル! 

私も見た他の人々に使用されるバッファTTL 、 PS/2からの入力信号を直接接続( CLOCKとDATA ) 、および出力ピンに直接接続しているマイコンチップです。  と同じ回路、出力ラインからのマイクロコントローラは直接ピンをトランジスタのベースに直接接続していた彼らのコレクターPS/2信号です。  すべての直接結合の異なる回路は、次のように悪い考えのように思えます、 1つの回路しないように、他の稚魚です。  わかんない私は何すればいいのPS/2フライドPCポートしています。  新しいマザーボードを買う、多分!  言い訳をアップグレードする。  PS/2ポートするとは思わないのマザーボードのメルトダウン性が高い、 [マイコンピュータ]しかし、私は即座にシャットダウンしてしまったときに短絡する信号+5VとGROUND行くPS/2マウスです。  たぶんそれは機能!  私が新しいボタンをクリックし、マウスを追加するというだけ短絡マウスの電源をシャットダウンするインスタントPCです。 ;-) 

ここのへのリンクをSHIFTOUTの情報については、使用するプロトコルをPS/2 :
http://ourworld.compuserve.com/homepages/steve_lawther/keybinfo.htm
を探しては、次のリンク:
KEYBTST.ZIP   gives a very basic program for the parallax
-----------
BASIC stamp II, to send key-codes to the PC's keyboard port.
It also gives a write-up of the XT and AT keyboard interfaces
(although IMO some details could be wrong / different to the
keyboards I've looked at).
局所的にキャッシュされたコピーファイル:
keybtst.zip

10655 bytes
MD5: c5667557f96db53fb878bd11bfbe4f74
詳細な情報については、次のリンクを提供PS/2マウスのインターフェース:
http://panda.cs.ndsu.nodak.edu/ 〜 achapwes/picmicro/ps2/ps2.htm
colinfahey.com
連絡先情報
English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية