中国語のArduinoまたはArduinoノギス

良い一日!



6か月以上にわたり、「デジタルインターフェース」というフレーズが書かれている説明書に、安価な150mmの中国の電子バーを所有しています。 コンピューターに出力する機能はすぐに興味がありましたが、私はこの偉業を達成するのは今だけでした。



当初の動機は「好奇心」だったので、「そうだ!」そして「突然誰かが尋ねますが、私はそれを持っています!」、後で(実際には「判明しました!」)自家製のCNC工作機械を使ったプロジェクトに実際のアプリケーションがありました。





入門


しかし、主人公は、低価格(約8ドル)にもかかわらず、非常に正確なデバイスです。





動作原理:静電容量センサー。

すべてが大きなプレート(バースケール)に沿った小さなプレート(バーの頭)の動きに関連していますが、大きなプレートの充電されていない部分は充電されており、これらのプレートによって形成されるコンデンサを流れる電荷は小さなプレートの動きに比例しているようです。 そのようなもの。



検索する


デジタルインターフェイスに関する情報を最初に検索したところ、多くの人がそれを見て、一部の人はそれを知っていましたが、誰もその使い方を知りませんでした。



ロシア語以外のリソースの詳細な検索により、より生産的な結果が得られました。 最初は、すべてが非常にシンプルで明確で、オシロスコープで噛まれ、YouTubeで撮影されているなどのように見えましたが、最終的な機能する「すぐに」オプションはありませんでした。



そのため、主な問題は情報の検索でした。

2番目の問題は、このコネクタへのプラグの製造でした(これは、一般に、まったくコネクタではなく、ボード上のむき出しのトラックです)。 連絡先は頑固に保持したくありませんでした。 結局、LPTポートから消しゴムの足を突き刺すことになると思いました。 ピースは信頼できないことが判明しましたが、テストには非常に適していました。 将来的には、ボードに直接はんだ付けし、コネクタ(マザーボードからのピンCD-IN)を必ず出力することにしました。



解決策


instructables.comの記事につまずいたのでこの偉業を繰り返すことにしました。



最初に、コンパス上の連絡先の位置と接続図とともに、そこから大胆に盗まれた写真を持ち込みます(私は自分自身を再描画するポイントはわかりませんが、私のものとして配ることは一般的に許されません):



ピン:





スキーム:





電圧を一致させるために、推奨どおり200オームの抵抗を使用しました。 10uFにはコンデンサがなく、死んだマザーボードから100uFをはんだ付けしました。



結果


はんだ付けを扱ったので、スケッチを書き始めました。 ちなみに、ブレッドボードがない場合、同じマザーボードからIDEポートから「クリブ」の回路を収集することで状況から抜け出しました。



上記の記事で提供されたスケッチは問題なく機能しましたが、満足は得られませんでした。

コメントからの中国のスケッチは「即座に」機能することを拒否しましたが、より深刻な印象を与え、その結果、深刻な「仕上げ」を受けました。



以下がその理由です(またはArduino UNOの既製のスケッチ、バージョンIDE 0022):

//CyberKot ( ...  ! Shadow) // Arduino,      COM- //   int dataIn = 11; // ,   int clockIn = 2; // clock,  ,   (  attachInterrupt) int isin = 0; //=1 =0 int isfs = 0; // int index; //  unsigned long xData, oData; //    (   ) int ledPin = 13; //  13  (,   ,    ) int ledState = LOW; //  long previousMillis = 0; //    long interval = 500; //   long previousGetMillis = 0; long Timeout = 8; //     float stringOne; //    char charBuf[5]; char charBuf2[8]; void setup(){ digitalWrite (dataIn, 1); digitalWrite (clockIn, 1); pinMode (dataIn, INPUT); //    dataIn pinMode (clockIn, INPUT); // clock  2  attachInterrupt(0,getBit,RISING); //  clock   2  Serial.begin(9600); delay(500); index = 0; xData = 0; oData = 999; } void loop(){ if ((index !=0) && (millis() - previousGetMillis > Timeout) ) { //    index = 0; xData = 0; }; if (index >23) { //    if (oData !=xData) { /*    ,   ,     if (isin==1){ // Serial.print("inch: "); stringOne =xData*5/10000.00000; stringOne *=pow(-1,isfs); Serial.println(floatToString(charBuf2,stringOne,5,5)); }else { // Serial.print("mm: "); stringOne =xData/100.00; stringOne *=pow(-1,isfs); Serial.println(floatToString(charBuf,stringOne,2,5)); }; */ if (isin==1){ // if (isfs==1){ // Serial.print("inch: -"); }else { Serial.print("inch: "); } stringOne =xData*5/10000.00000; Serial.println(floatToString(charBuf2,stringOne,5,5)); }else { // if (isfs==1){ // Serial.print("mm: -"); }else { Serial.print("mm: "); } stringOne =xData/100.00; Serial.println(floatToString(charBuf,stringOne,2,5)); }; }; oData =xData; index=0; xData=0; }; if (millis() - previousMillis > interval) { // previousMillis = millis(); if (ledState == LOW) ledState = HIGH; else ledState = LOW; digitalWrite(ledPin, ledState); } } void getBit(){ //    previousGetMillis=millis(); if(index < 20){ if(digitalRead(dataIn)==1){ xData|= 1<<index; } } else { if (index==20) // isfs=digitalRead(dataIn); if (index==23) // isin=digitalRead(dataIn); }; index++; } //      float   char * floatToString(char * outstr, double val, byte precision, byte widthp){ //  , ,  ( ),   char temp[16]; byte i; //  double roundingFactor = 0.5; unsigned long mult = 1; for (i = 0; i < precision; i++) { roundingFactor /= 10.0; mult *= 10; } temp[0]='\0'; outstr[0]='\0'; if(val < 0.0){ strcpy(outstr,"-\0"); val = -val; } val += roundingFactor; strcat(outstr, itoa(int(val),temp,10)); //   if( precision > 0) { strcat(outstr, ".\0"); //  unsigned long frac; unsigned long mult = 1; byte padding = precision -1; while(precision--) mult *=10; if(val >= 0) frac = (val - int(val)) * mult; else frac = (int(val)- val ) * mult; unsigned long frac1 = frac; while(frac1 /= 10) padding--; while(padding--) strcat(outstr,"0\0"); strcat(outstr,itoa(frac,temp,10)); } //  ( ) if ((widthp != 0)&&(widthp >= strlen(outstr))){ byte J=0; J = widthp - strlen(outstr); for (i=0; i< J; i++) { temp[i] = ' '; } temp[i++] = '\0'; strcat(temp,outstr); strcpy(outstr,temp); } return outstr; }
      
      







まとめ


結果に満足したので、私は最終的な写真を作成し、その効果を「少し」宣伝することにしました。





あとがき


プロトコルの説明には、いくつかの興味深いプラスも含まれているため、「将来のために」バックログにインセンティブがあります





[リンク]




All Articles