Arduinoず氎族通

北むタリアず熱垯魚の共通点は䜕ですか しかし、誰が䜕を知っおいたすか -読者は蚀うでしょう。 そしお圌は正しいでしょう。 したがっお、明確にしたす。Arduinoに぀いお、より正確には氎槜のメンテナンスの自動化に぀いおお話したす。

それはすべお、容赊なく近づく䌑暇から始たりたした。 䌑暇䞭は、原則ずしお状況を倉えたいです。 しかし、氎族通の魚はこれを理解しおいないかもしれたせん。 それだけでなく、圌らは蚱さないかもしれたせん。 そしお、新しいフィルタヌ、自動フィヌダヌ、家電補品甚のタむマヌを泚文したした。 しかし、タむマヌは利甚できたせんでした。 したがっお、私はほずんど唯䞀の店舗の堎所をさたようこずを決定したしたそしお、これは郜垂で億䞇長者ず芋なされたす154 UAHでArduino Unoに出䌚いたした。 〜20ドル。 デバむスに぀いお䜕床も読みたしたが、圌らが蚀うように、私はそれを手に持っおいたせんでした。 買った。 そしおこの瞬間から、詊行錯誀ず勝利の物語が始たりたす。



Arduinoに出䌚っおいない人のために-私は説明したす。
これはハヌドりェアおよび゜フトりェアプラットフォヌムです。 ハヌドりェアはAtmel ATmegaマむクロコントロヌラヌに基づいおおり、倚くのI / Oポヌトを備えおいたす。 ゜フトりェア郚分は、開発環境ず䞀連のラむブラリです。 もちろん、鉄にはいくらかお金がかかり実際、䟡栌は、むタリアのオリゞナルでも手頃な䟡栌です、゜フトりェアは無料です。 公匏サむトからダりンロヌドしおください。 ゜フトりェアを䜿甚しお、I / Oポヌトを管理できたす。 PWMを備えたポヌトがありたす。

倚くのラむブラリがあるため、Arduinoでの䜜業は非垞に簡単です。 たずえば、枩床センサヌ、デゞタルおよびグラフィックはいディスプレむ、さたざたなプロトコルなどを操䜜するためのラむブラリがありたす。 䞀般的なケヌスでは、制埡したいたたはデヌタを受信する必芁がある電子回路を1぀たたは耇数のArduinoポヌトに接続し、適切なラむブラリ暙準パッケヌゞにない堎合をダりンロヌドし、Arduino蚀語Wiring蚀語に基づいおを䜿甚しおプログラムを䜜成する必芁がありたすArduino開発環境凊理環境に基づく。 コンパむルされたプログラムをUSB経由でArduinoの鉄補メモリに入れおください。 -目的の結果が埗られたすすべおが正しく行われた堎合。 そしお、はい、プログラムは電源を切っおも鉄片の蚘憶に残りたす。





Arduinoに任せたい䞻なタスクは、スケゞュヌルに埓っお照明を管理するこずでした。 はい、スズメの倧砲からですが、むタリアからのゲスト実際には䞭囜からですが、これはポむントではありたせんには、いく぀かの倧きな蚈画がありたす。

これたで、氎槜の照明は省゚ネ電球を䜿甚しお行われおいたしたが、手動でオン/オフする必芁がありたした。 特に週末には、厳密な時間管理が維持されなかったこずは明らかです。 珟圚、䜜業を簡玠化し、照明の耐久性を高めるために、12V LEDに切り替えるこずが決定されたした。 私はメヌタヌの防氎LEDストリップを買いたした。 組み立おられたshemku



画像



動䜜しおいないコンピュヌタヌPSUから電界効果トランゞスタヌがドロップされたした。 䞀般的に、手元にあるものを可胜な限り䜿甚しようずしたした。 ただし、IRFBC30など、ほずんど誰でも䜿甚できたす。 抵抗噚は回路の信頌性を確保するために必芁です。超䜎電流は「グランドに流れ蟌み」、電界効果トランゞスタはArduinoピンのハむずロヌの状態でのみ開閉したす。 たた、ゲヌトずポヌトの出力ずの間に100オヌムずオヌムの間に制限抵抗を配眮するこずをお勧めしたすが、この回路では無芖できたす。

曎新 コメントでは、圌らはただ制限抵抗噚を䞻匵しおいる。 さお、聞いおください。 Arduinoピンずゲヌトの間に100オヌムの抵抗を配眮したす。



次に、むンタヌネット䞊でむンタヌネットプログラムを芋぀けたしたこの䟋は、指のプログラムの構造を説明するためにのみ挿入したした。



初心者プログラム
int ledPin = 5; //     5 void setup() { pinMode(ledPin, OUTPUT); //      () } void loop() { digitalWrite(ledPin, HIGH); //   delay(1000); //  1  digitalWrite(ledPin, LOW); //   delay(5000); //  5  }
      
      







皌いだ LEDは定期的に点滅したす。



プログラムの簡単な説明。

 void setup()
      
      



-この機胜は、鉄の起動ごずに起動されたす。

 void loop()
      
      



-サむクルで実珟したす。

残りはコメントから明らかです。

その埌、時間の同期に぀いおの質問が発生したした。 結局のずころ、電源をオフにしお再びオンにするず、プログラムは最初から開始されたす。 私は3぀のオプションを怜蚎したした。自家補のUPSを䜿甚したすそれほど安くなく、実装も簡単ではありたせん。 むンタヌネットず同期したす察応するボヌドは私のArduinoよりも高䟡です。 時蚈ず同期したす。 すぐに、World Wide Webの拡匵版で、Arduinoず互換性のあるRTCスキヌムリアルタむムクロック、はい、ロシア語では奇劙に聞こえたすを芋぀けたした。



画像



非垞にシンプルなスキヌム。 抵抗は4.7〜10 kOhmに蚭定できたす。 たた、DS1307クロックチップず32768 Hzクオヌツ時蚈、バッテリヌも必芁です。 バッテリヌCR 2032のホルダヌは、コンピュヌタヌのマザヌボヌドの容噚に入れられたした。 歎史的にLED制埡回路甚のトランゞスタはすでにボヌドにはんだ付けされおいたので、その隣にクロックを配眮したした。

急に時蚈を組み立おた埌、時蚈に時刻を蚭定できない堎合、たたは「立っおいる」堎合は、接続の正確性ず品質を確認しおください。 1぀の配線がマむクロ回路から離れるず、クロックの動䜜が悪くなりたす。 そしお、はい、DS1307をDIP゜ケットに配眮したす。

クロックを初期化する必芁がありたす。 正しい日付ず時刻を蚭定しおください。 これは次のように実行できたす。



クロック初期化プログラム
 #include <Wire.h> #include <DS1307.h> void setup() { Serial. begin(9600); RTC.stop(); //  RTC.set(DS1307_SEC, 0); //  RTC.set(DS1307_MIN, 36); //  RTC.set(DS1307_HR, 15); //  RTC.set(DS1307_DOW, 2); //   RTC.set(DS1307_DATE, 4); /   RTC.set(DS1307_MTH, 1); //  RTC.set(DS1307_YR, 14); //  RTC.start(); //  } void loop() { Serial.print(RTC.get(DS1307_HR, true)); //       Serial.print(":"); Serial.print(RTC.get(DS1307_MIN, false)); //     Serial.print(":"); Serial.print(RTC.get(DS1307_SEC, false)); //     Serial.println(" "); delay(1000); }
      
      







DS1307ラむブラリはここからダりンロヌドできたす 。

プログラムがコントロヌラヌにロヌドされた埌、コン゜ヌルで時間の経過を確認できたすシリアルモニタヌ、Ctrl + Shift + M。



しかし、私たちのスキヌムず詳现に戻りたす。

それから、1-Wireむンタヌフェヌスを介しおデヌタを送信するデゞタル枩床蚈DS18B20の接続図を芋たした。 この枩床蚈には、Arduinoの䞋に特別なラむブラリがあり、綱枡りが簡単でバむ゚ルンのストラむカヌのスピヌドで、読みやすい圢匏で枩床デヌタを簡単に取埗できたす。 接続、再生、再生--127⁰を瀺したす。 接続図が間違っおいるこずがわかりたしたそしお、有効電力の回路を遞択したした。 枩床蚈のドキュメントが圹立ちたした。 道埳サむト䞊のレむアりトは良奜であり、公匏文曞は優れおいたす。



以䞋は正しい図です。 耇数の枩床蚈を同じ1-Wireラむンに接続できたす。 同軞ケヌブルを䜿甚するこずをお勧めしたす。

画像



少し叙情的な䜙談。


私はこのプロゞェクトですべおを正しく行いたせんでしたアむデアが埗られたらタむミングスキヌムをはんだ付けし、ケヌスの接続を調敎したした、ケヌス、手に来た郚品を取り、機胜を远加する䜙地を実質的に残したせんでした-い぀でもすべおを行う必芁がありたすそれでもしなければなりたせんでした。 したがっお、反察のこずを行うこずをお勧めしたす。

1機胜を決定したす。

2詳现を決定したす。

3最初の2぀のポむントに基づいおケヌスを遞択したす。

4最初の3぀のポむントに基づいお料金を匕き出したす。

したがっお、ほずんどすべおの電子プロゞェクトで行う必芁がありたす。

これたたはそのアむデアをテストする必芁がある堎合-特別なブレッドボヌドず䞀連の接続を䜿甚したす。 はい、私は知っおいたす、圌らの䟡栌は噛み぀きたす。 しかし、私を信じお、倚くの時間ず神経を節玄しおください。



それからディスプレむの回転でしたたあ、同じ枩床を衚瀺せずにどうすればいいですか。 16文字の暙準テキストを2行取りたした。 接続枈み。 皌いだ。 圌は䜓枩蚈ず時蚈を衚瀺したした。 私はその時間が無駄に費やされおいないこずに気付きたした。 バックラむトがディスプレむを倧幅に加熱したため、オフになりたした。

Arduinoディスプレむ

接続図を衚瀺したす。



ディスプレむのコントラストを蚭定するには、調敎抵抗が必芁です。 ボタンK1はバックラむトに電力を䟛絊したす。

ディスプレむの4番目の接点は、アドレス信号の行です。 A0たたはRSずしお知られおいたす。 0たたは1のどちらであるかに応じお、ディスプレむは「カヌ゜ルを移動する」などのデヌタ行にコマンドがあるか、衚瀺する文字コヌドがあるかを認識したす。

6番目の衚瀺ピンは、デヌタアクセスむネヌブルラむンです。 Eたたは有効化ずしお知られおいたす。 この行が1行になるず、ディスプレむはコマンドを実行するか、デヌタ行の文字を衚瀺したす。

ディスプレむの11番目、12番目、13番目、14番目の接点はデヌタ線です。 DB4、DB5、DB6、DB7ずしお知られおいたす。



「ハヌドりェアで」クロックずディスプレむ。

Arduinoディスプレむ



電源の回転が来たした。その前に、ディスプレむずクロックに5V、ArduinoずLEDに9Vの2぀の異なる電源を䜿甚したためです。 繰り返しになりたすが、24V、1.7AのPSUが手元にありたしたが、Arduino LEDにはこれだけでは䞍十分だずすぐに蚀わなければなりたせん。 3AでPSUを䜿甚し、PWMを䜿甚しお茝床を制埡するこずをお勧めしたす。 5Vず10Vを埗るには、LM317Tで回路図を組み立おる必芁がありたした。 なぜ10Vなのか Arduinoの資料によるず、12Vを超える電圧を䟛絊しない方が良いです。䜎電圧のLEDも長持ちするはずです。 したがっお、10Vを取埗するこずにしたした。 実際、10.4Vが出おきたした。 繰り返したすが、賢明にならず、最小限の詳现で収集されたした。 スキヌム。

画像



しかし、時間、欲求、機䌚がある堎合は、10-11Vから2-2.5Aで出力する本栌的なパルス電源を組み立おるこずをお勧めしたす。

LM317は非垞に熱くなっおいるため、PIIのラゞ゚ヌタヌに取り付けたしたIntelのスロットCPUがあったこずを思い出しおください。抵抗噚が取り付けられたした。 党䜓を゚ポキシで満たした。 泚意LM317ケヌスは出力レッグに接続されおいるため、1぀のラゞ゚ヌタヌに異なる電圧のLM317を取り付ける堎合、少なくずもN-1個のマむクロ回路をラゞ゚ヌタヌから絶瞁する必芁がありたす。 そしおそれよりも良い。 無線コンポヌネントの郚分では、ラゞ゚ヌタヌをプラスチックカバヌで閉じ、リブを「裞」のたたにしたした。 目を匕いた9ピンRS232は、スタビラむザヌの出力からの電源コネクタヌずしお機胜したした。



すべおをたずめる時間です。 そしお、困難が蚪れたした。 そうではないが。 䞀時的な接続線を氞久的なものに倉曎し始めたずきに問題が発生したした。 取り残されたそれらは、手元に来た4線匏電話ケヌブルから取りたした。

サむズに䜙裕がある広々ずしたケヌスは、私にずっおはずお぀もなく高䟡です-10ドル以䞊。 ケヌスのためにボヌドを分離した堎合、問題はありたせんが、即興で䜜らなければなりたせんでした。 ケヌスMaszczyk KM51を取りたした。 回路基板は、カバヌに取り付けられたArduinoの2぀の郚分に分割する必芁がありたした。 そしおすべおは、やり盎すのが面倒だったずいう事実のためです。

これが起こったこずです。

画像



はい、熱くはありたせんが、穏やかに眮くず芋えたす。 そしお、必芁なこずは、ケヌスの寞法ず開口郚に合わせおボヌドを調敎し、ピンをはんだ付けし、Arduinoをその䞊に眮くこずだけでした。 それは玠晎らしく、信頌できるでしょう。 䞀般的に-䞊蚘の写真のようにしないでください 。



このバヌゞョンでは、これはすべお長く機胜したせんでした-クラフトは䞀週間の䌑暇を生き延びたせんでした。 そのため、やり盎す必芁がありたした。

今回は、Arduinoを接続するために適切なサむズのボヌドを甚意し、その䞊にピンを配眮したした。 むしろ、コントロヌラヌボヌドの䞡偎に2぀のコネクタヌがあり、ピンの列党䜓で2.54 mmの距離が維持されないため、2぀のボヌドです。 芋た目はあたり良くありたせんでしたが、うたくいきたした。



画像



配眮されたアむテム。



画像

画像



組み立おられたした。
画像

画像

画像



ボヌドには3぀のコネクタがありたした枩床センサヌ、LED、電源より倧きなコネクタをはんだ付けした堎合に備えお、将来、突然耇数の電圧を印加する必芁がありたす。 ケヌスUSB、Arduino電源盎接䜿甚しない、回路党䜓+ 12Vぞの電源。

今回、私は2぀の電圧を拒吊し、1぀を提出したした-結局のずころ、Arduinoはコネクタの1぀に5Vを䞎えたす。 True-珟圚の電流はかなり匱いですが、時蚈ずディスプレむは時蚈が機胜するのに十分です。 マむクロボタン䞊の写真に衚瀺を介しお、バックラむトに電力を䟛絊したした。 これで、画面を簡単に匷調衚瀺できたす。

別の枩床蚈を賌入し、氎槜内ず郚屋内の2぀の枩床の衚瀺を考慮しおプログラムを倉曎したした。 DS18B20を接続するには、シヌルド「マむナス」付きのケヌブルを䜿甚する方が良いですが、手元にありたせんでした-同じ電話4線ケヌブルを䜿甚したした。



最終プログラム。
 /* */ #include <Wire.h> //     #include <OneWire.h> //      1-Wire #include <DS1307.h> //       DS1307 #include <LiquidCrystal.h> //      LCD   #include <DallasTemperature.h> //       18B20 #define TempPin 2 // pin    int ledPin = 3; //  ,   pin 3 LiquidCrystal lcd(6, 7, 10, 11, 12, 13); //  OneWire oneWire(TempPin); // ,        DallasTemperature tempSensor(&oneWire); //       long tmIntv = 1000; //        long tempIntv = 30000; //   ,     long prvMlsTm = 0; //       long prvMlsTemp = 0; //       long prvMlsLght = 0; //       long lghtIntv = 60000; //   /  , 1  int lghtStat = 0; //  ,   1 int upLghtTime = 8; //  8  int downLghtTime = 17; //  17  int isNight = 0; //   , ..     int prevSec = 0; //       //   Arduino void setup(){ pinMode(ledPin, OUTPUT); //      () tempSensor.begin(); //  lcd.begin(16, 2); //,   16     lcd.print("Time:"); // "Time" if (upLghtTime > downLghtTime) { //   isNight = 1; } } void printTemp () { //    float aTemp; //  float rTemp; //  tempSensor.requestTemperatures(); //      rTemp = tempSensor.getTempCByIndex(0); //       0 aTemp = tempSensor.getTempCByIndex(1); //       1 lcd.setCursor(0, 1); //   lcd.print("R: "); lcd.print(rTemp); //   lcd.setCursor(7, 1); lcd.print(" A: "); lcd.print(aTemp); //   lcd.setCursor(15, 1); lcd.print(" "); lcd.home(); //  ,     32  } void light () { ///   int hr; int isLght = 0; hr = RTC.get(DS1307_HR, true); //   if (isNight == 0) { //  if (hr >= upLghtTime && hr < downLghtTime) { //  isLght = 1; //    } else { isLght = 0; } } else { //  if(hr - upLghtTime >= 0) { //     ,     isLght = 1; //    } else { if(hr < downLghtTime) { //   ,     isLght = 1; //    } else { isLght = 0; } } } //  :   ? if((isLght == 1) && (lghtStat == 0)) { //          lghtStat = 1; digitalWrite(ledPin, HIGH); //,       } else { if(isLght == 0 && lghtStat == 1) { lghtStat = 0; digitalWrite(ledPin, LOW); //,       } } } void printTime () { //-     int hr; int minut; int sec; lcd.setCursor(7, 0); hr = RTC.get(DS1307_HR, true); //  if( hr < 10) { lcd.print('0'); //  0    10 } lcd.print(hr); lcd.print(":"); minut = RTC.get(DS1307_MIN, false); //  if( minut < 10) { lcd.print('0'); //  0    10 } lcd.print(minut); lcd.print(":"); sec = RTC.get(DS1307_SEC, false); //  if( sec < 10) { lcd.print('0'); //  0    10 } //  ,    ,        -   if(prevSec == sec) { RTC.start(); } prevSec = sec; lcd.print(sec); } void loop() //    { unsigned long currentMillis = millis(); //    //  ,     delay(),      , //    -  //          //        ,    if(currentMillis - prvMlsTm > tmIntv) { prvMlsTm = currentMillis; printTime(); // -      } //        ,    if(currentMillis - prvMlsTemp > tempIntv) { prvMlsTemp = currentMillis; printTemp(); // } //       / ,    if(currentMillis - prvMlsLght > lghtIntv) { prvMlsLght = currentMillis; light(); // -   /  } }
      
      







ラむブラリは、 ダラス 枩床 、 OneWireからダりンロヌドできたす。

氎族通の照明をオン/オフにする必芁性は、毎分、枩床-30秒ごずにチェックされ、時間は毎秒曎新されたす。



倉換されたデバむスは、苊情なしで1週間機胜したした。



繰り返したすが、良い方法で、少し間違ったこずをしお、䞀般的にワむダを取り陀くこずが必芁でした。 しかし、私は少し小さめのディスプレむを賌入しおケヌスを固定するための穎を塞いだボヌドを繁殖させるのが面倒でした。 しかし、䟋えば、接続を分離するために䞡面ファむバヌグラスコントロヌラヌずディスプレむ自䜓のコネクタヌの数を考えるず、片偎が管理する可胜性は䜎いを䜿甚する堎合、次のようなものを埗るこずができたす



実装オプション
画像



倏が来お、私たちの囜では暑くなる可胜性があるので、枩床蚈に基づいお氎槜を冷华するためにファン制埡を実装する予定です。 私は2぀のオプションを怜蚎しおいたすバックラむトず同じ方法でスむッチを入れる12Vファン、たたは230V ACファン。 この堎合、LEDの代わりに、+ 12Vの制埡電圧ず230Vのスむッチを備えたリレヌが回路に含たれおいたす。

画像

同じ方匏に埓っお、リレヌ回路のヒヌタヌをオンにするこずにより、冬の氎槜の加熱を制埡するこずができたす。



既にあるものから他に䜕が改善できたすか たずえば、PWM出力を䜿甚しおバックラむトを埐々にオンおよびオフにしたす。 この堎合、䞀定の間隔で、次を実行する必芁がありたす。



analogWrite(pin, value);







ここで、pinはArduinoのポヌト番号で、オンにするず倀が0から255に倉化し、氎槜のバックラむトがオフにするず255から0に倉化したす。

照明を手動でオンにする必芁がある堎合もありたす。 これには別のランプがありたすが、ランプがない堎合は、Arduinoを䜿甚しお実装できたす。 この堎合の考え方は次のずおりです。 非ラッチボタンを介しお、+ 5V出力からArduino入力の1぀に電圧を印加したす。 10kΩの抵抗を介しお同じ入力にグランドを接続したす。 次に、ボタンのクリックを監芖したす。



 int isLight = 0; buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { if (isLight == 0) { //   isLight == 1; } else { //   isLight == 0; } }
      
      







buttonPinは、ボタンが接続されおいるポヌト番号です。 isLight-珟圚の状態を蚘憶し、ボタンをクリックするず反転する倉数。 このコヌドでは、コメントの埌にLEDの察応する行のオン/オフを含める必芁がありたす。 初めおボタンを抌すず、照明が点灯し、もう䞀床抌すず消灯したす。

匕き続き可胜ですが、おそらくArduinoによる絊逌を自動化する必芁がありたす。 結局のずころ、販売されおいるフィヌダヌは高䟡であるか、必芁な機胜を備えおいないか、たたはその䞡方です。

そしおもちろん、良い点ずしお、Arduinoをフラッシュせずに照明間隔のむンストヌルを実装する必芁がありたす。 たずえば、これに2぀たたは1぀のボタンを割り圓おたす。



そしお、これがArduinoに実装できるすべおではありたせん。 Arduino Unoでさえ、氎槜を維持する際にデヌタの管理ず受信の䞡方の可胜性がありたす。 そしお、これには倚倧な珟金ず時間の費甚がかかりたせん。



All Articles