自動植物散水および灌漑システム–回路、コードおよびプロジェクトレポート
自動プラント 水やり システム–完全なソースコード、回路およびプロジェクトレポート–PDFダウンロード
はじめに
植物への水やりに関連する日常業務では、最も重要な文化的慣習であり、最も労働集約的な作業です。どんな天候でも、暑すぎて寒すぎても、乾きすぎて濡れていても、植物に到達する水の量を制御することは非常に重要です。ですから、必要なときに植物に水をやる自動植物散水システムのアイデアを使うことは効果的です。このプロジェクトの重要な側面は、「いつ、どれだけ水をやる」ということです。人間から水やりまでの手作業を減らすために、植物の水やりシステムのアイデアが採用されています。土壌の水分レベルを継続的に監視し、水やりが必要かどうか、および植物の土壌に必要な水量を決定するために採用された方法。このプロジェクトは、次のようなサブシステムにグループ化できます。電源、リレー、電磁弁、Arduino GSMシールド、土壌水分センサー、LCD。
基本的に、システムは、センサーの水分レベルが指定値よりも低い場合に、土壌水分センサーが特定の時点で植物の水分レベルを感知するように設計およびプログラムされています。特定のプラントの水の必要量に応じて事前定義されたしきい値の場合、事前定義されたしきい値に達するまで、必要な量の水が供給されます。
システムは現在の状態を報告し、植物に水をまき、タンクに水を追加することについてのリマインダーメッセージを送信します。この通知はすべて、ArduinoGSMシールドを使用して行うことができます。
- 関連プロジェクト:雨警報回路–雪、水、雨の検出器プロジェクト
プロジェクトの目的:
今日から、高度なテクノロジーとエレクトロニクスの時代に、人間のライフスタイルは私が賢く、よりシンプルに、より簡単に、そしてはるかに便利になるはずです。したがって、;人間の日常生活の中で、日常の活動や仕事を減らすために、多くの自動化されたシステムが必要です。ここでは、自動植物散水システムと呼ばれるそのようなシステムのアイデアが非常に役立ちます。多くの人々が庭の植物に水をやるのに多くの問題に直面しているので、特に彼らが家から離れているとき。このモデルは、マイクロコントローラーを備えたセンサーテクノロジーを使用して、何百万人もの人々を支援するスマートスイッチングデバイスを作成します。
最も基本的な形式では、システムは、センサーの水分レベルが特定の時点で植物からの水分レベルを感知するようにプログラムされています。は、特定の植物に応じて事前定義されたしきい値の指定値よりも少なく、水分レベルが事前定義されたしきい値に達するまで、植物に必要な量の水が供給されます。システムには、システムの現在の雰囲気を追跡し、散水が発生したときに影響を与える湿度および温度センサーが含まれます。ソレノイドバルブはシステム内の水の流れを制御し、Arduinoが水分センサーから値を読み取ると、目的の条件に従ってソレノイドバルブをトリガーします。さらに、システムは現在の状態を報告し、水やり植物に関するリマインダーメッセージを送信し、受信者からSMSを取得します。この通知はすべて、ArduinoGSMシールドを使用して行うことができます。
- 関連プロジェクト:水位インジケーターの回路図-2つの簡単なプロジェクト
システムの背景
学校では、科学の本から、植物は多くの面ですべての人類にとって非常に不可欠であることが研究されています。彼らは時々新鮮な酸素を生成することによって環境をきれいに保ちます。自動植物散水システムは、高度な技術に接続されている日常のオブジェクトの増加に伴い、はるかに多くなっていることが見られており、これらのシステムはますます実装されています。家のような場所だけでなく、産業レベルでも。これらのシステムの主な用途は、効率性と使いやすさです。
植物の散水システムは、さまざまな種類のセンサーテクノロジーなどの効率的で信頼性の高いコンポーネントを使用することで、愛好家が離れている間に家の植物を手に入れる機能を提供します。
必要な自動化のレベルに応じて、屋内植物の散水システムにはいくつかの異なる/複雑でないタイプがあります。
- 関連プロジェクト:スマート灌漑システム–回路図とコード
最終的なPDFレポート(無料でダウンロード可能なリンクは投稿コンテンツの最後にあります)では、次のセクションが詳細に説明されています。
- 植物に水をまく地球儀とスパイク
- 屋内点滴散水システム
- センサーテクノロジー
- 温度および湿度センサー
- 温度センサー
- 湿度センサー
- 土壌水分センサー
- バイメタリックサーモスタット
- サーミスタ
- 抵抗温度検出器(RTD)
- 熱電対
- センサーIC、LM35
- デジタル温度センサー(ADT7301)
- DHT11およびDHT22
- GSMモジュール
- GSMアーキテクチャ
- リレー
- トランジスタ
- 日立16×2LCD
関連プロジェクト:ATMegaマイクロコントローラーとは何ですか?それを使用してLEDプロジェクトを作成する方法は?
製品とコンポーネントの仕様
要件ID | SRS-GSM-001 |
システムにはGSMモジュールが含まれており、アラートSMSを受信者に送信し、ユーザーからSMSを受信します。 | |
要件ID | SRS-マイクロコントローラー-001 |
ATmega328p | |
システムには、通常ArduinoUnoに付属しているマイクロコントローラーが含まれています。このマイクロコントローラーはセンサーからの読み取り値を読み取り、システム全体を制御します。 | |
要件ID | SRS-温度と湿度-001 |
DHT11 | |
システムには、周囲からの現在の温度と湿度の値を追跡し、読み取り値をマイクロコントローラーに送り返す温度と湿度のセンサーが含まれています。 | |
要件ID | SRS-Moisture-001 |
タイトル | グローブ土壌水分センサー |
説明 | システムには、土壌水分センサーが含まれています。このセンサーは、土壌の水分から読み取り値を取得し、その読み取り値をマイクロコントローラーに送り返します。 |
バージョン | バージョン1.0 |
要件ID | SRS-LCD-001 |
システムには、システム内のさまざまなセンサーによって取得された読み取り値を表示する、ユーザー用のLCDインターフェースが含まれています。 | |
関連記事:Arduinoプログラミング:Arduinoとは何ですか?それをプログラムする方法は?
Arduinoベースの自動植物散水システム:
自動植物散水ブロック図
自動植物散水および灌漑システムの概略回路図
このシステムによると、このプロジェクトには、水分センサーとモーター/ウォーターポンプの2つの機能コンポーネントがあります。最も基本的な形では、水分センサーは土壌水分のレベルを感知します。次に、モーター/送水ポンプが植物に水を供給します。
画像をクリックすると拡大します
上記の図の回路図は、システムの全体的な動作を示しています。プロジェクトはArduinoUnoを使用してモーターを制御します。これは、サーボモーターの流れ、つまりクロックまたはアンチクロックの方向を制御するHブリッジで構成されています。水分センサーが土壌のレベルを測定し、信号をArduinoに送信します。その後、水やりが必要な場合、Arduinoはサーボモーターを開きます。次に、モーター/送水ポンプは、目的の水分レベルに達するまで植物に水を供給します。
上の図のプロトタイプを作成すると、水分センサーが水分レベルを検知して信号をArduinoに送信し、ArduinoがHブリッジを使用して送水ポンプを開き、特定の植物に水を供給します。これは、ArduinoIDEソフトウェアを使用して行われます。
関連プロジェクト:IC4017および555タイマーを使用した信号機制御電子プロジェクト
プロジェクトデザイン
このセクションでは、ソフトウェア設計とハードウェア設計で終了した作業について説明します。また、システムに何が含まれているのか、完全に完成した自動植物給水システムを作成するためにさまざまなコンポーネントが選択された理由についても説明します。図の図を考えてみましょう。選択したコンポーネントを使用したシステムの基本的な概念モデルを示しています。
自動植物給水システムの上の図に示されているブロック図の機能を以下に示します。
- システムには、SMSを受信者に送信し、受信者からSMSを受信するGSMモジュールが含まれています。
- 土壌の水分、温度、湿度センサーを使用します。
- ソレノイドバルブと、ソレノイドバルブを通る水の流れを制御するソレノイド回路も含まれています。
- 水分センサーは、特定の植物の水分レベルを決定するために使用されます。この水分レベルは、マイクロコントローラーがループしてセンサーからの値がしきい値を超えているかどうかを確認するときに、マイクロコントローラーによって読み取られます。値が事前定義値を上回っている場合、GSMモジュールはSMSを受信者に送信する準備ができています。
- 温度および湿度センサーは、植物にとって高温であるか、湿度が高すぎて処理できないかを判断するために使用されます。これは、Arduino UnoのATmega328p(ATmegaとは何ですか)チップによって読み取られます。これらの読み取り値は、システム内のすべてのソレノイドをオンにするかオフにするかを決定するために使用されます。
コンポーネントの詳細については、PDFファイル(下記)をご覧ください
関連プロジェクト:ラズベリーパイとは何ですか? RaspberryPiを使用したプロジェクトの作成
ハードウェアデザイン
センサー回路図
下の図は、センサー回路の回路図を示しています。すべてのセンサーがArduinoアナログピンA0-A3に接続されているように。ピンA0は温度および湿度センサー用に予約されており、ピンA1〜A3は水分センサー用に予約されています。回路図に示すように、すべてのセンサーには共通の電力5Vとアースがあります。
LCD回路図 :
下の図は、LCDの回路図を示しています。回路図に示すように、デジタルピン8〜13はLCD用に予約されています。ピン1とピン3は電源とグランドであり、ピン2はLCDのコントラストピンであり、コントラストを制御し、ポテンショメータに接続されています。 LCDを接続するときは、ArduinoのデジタルピンとLCDのデータピンを正しい順序で接続する必要があることに注意する必要があります。そうしないと、LCDは画面にゴミだけを表示します。
ソレノイド回路図
下の図の下の図は、ソレノイド回路の回路図を示しています。デジタルピン4〜7はソレノイド用に予約されています。回路はソレノイドではなくリレー、トランジスタ、抵抗、LEDで構成されているため(CadStarにはソレノイド記号がありません)。回路図では、リレーは5Vを使用しています。 5VもリレーのNOチャネルに入るのに対し、これは回路図ではLEDが(5V)で動作するソレノイドに置き換わり、その後に220オームの抵抗が続くためです。
- 関連プロジェクト:音声認識ベースのホームオートメーションシステム
つまり、トランジスタのベースに電圧が印加されたとき。トランジスタはアースに切り替わり、リレーのコイルが磁化されて通常閉チャネルに切り替わります。これにより、その特定のリレーに接続されているLEDがオンになり、トランジスタベースに印加される電圧が低下すると、トランジスタは通常に戻ります。リレーのコイルは消磁され、リレーは再びNOチャネルに切り替わります。これにより、LEDが再びオフになります。
回路のすべての回路図を完成させたら、次のステップはVeroboardでそれらを構築することです。 Veroboardで回路を設計するには、次のような特定の原則があるため、事前にストリップボードレイアウト計画シートで回路を設計することが重要です。
- ストリップボードレイアウト計画シートの右上で、最初にVsとGNDの電力線をマークします。
- ICのピン間のトラックをカットすることを忘れないでください。図のカットをXでマークします。
- 抵抗器とアキシャルコンデンサをストリップボード上に平らに置くようにしてください。抵抗器には通常4穴のギャップが必要であり、コンデンサには8穴のギャップが必要です。
- 可能であれば、ICのピンに番号を付けます。Veroboardの底面は、電圧が水平方向に流れる銅製のトラックで構成されています。上記の回路図面のさまざまなVeroboard設計を以下に示します。
関連プロジェクト:SRF04を使用した全自動水位コントローラー
ソフトウェア設計
ハードウェアを完成させたら、ソフトウェアでハードウェアをテストします。このセクションでは、システム内で使用されるさまざまな自動化/テクノロジーごとに、ソフトウェア設計の実装について詳しく説明します。これには、Arduinoに記述およびアップロードされたArduinoコードが含まれます。
最初に行われたことは、ソレノイド回路を機能させ、マイクロコントローラーの観点からソレノイドがどのように機能するかを確認することでした。このために、上の図のソフトウェアフローセクションの下に表示される小さなフローチャートが作成されました。
Arduino IDEを使用して、Arduinoにソフトウェアをアップロードしました。基本的なソレノイド回路については、基本的に1秒ごとにLEDを点滅させる簡単なプログラムを作成しました。プログラムと回路をテストするデジタルピン4、5、6、7が最初に定義されました。したがって、プログラムが実行されると、すべての基本的な初期化が行われ、void setup()ですべての出力ピンが定義されてから、voidループ()にジャンプし、そこで常に実行され、1秒ごとにLEDが点滅します。
その後、小さなプログラムが作成され、Arduinoにアップロードされました。このプログラムは、さまざまなセンサーから読み取り値を取得し、LCDに印刷します。このために、小さなフローチャートが作成されました。これは、特定の図のソフトウェアフローセクションにも表示されます。プログラムがvoidループ()に入ると、センサーから読み取り値を取得し、すべての基本的な計算を実行してLCDに出力します。
関連する基本的な電子機器プロジェクト:LDRおよびBC547トランジスタを使用した自動街路灯制御システム
次は、GSMモジュール用のソフトウェアをArduinoにアップロードします。これにより、GSMはマイクロコントローラーと通信できます。モデムテストは最初に行われ、GSMのすべての基本的な初期化とライブラリを実行し、IMEI番号を取得して、Arduinoとの通信を開始するとモデムが正しく機能しているかどうかを確認します。次のステップは、基本的にGSMを初期化し、GSMモジュールがサポートできる他のすべてのネットワークを表示するネットワーク接続テストです。
GSMモジュールがテストされ、正しく機能したら、GSMモジュールを使用して受信者と通信します。つまり、受信者にSMSを送信し、受信者からSMSを受信します。それを行うために、別の簡単なArduino配線プログラムが作成され、Arduinoにアップロードされました。プログラムはGSMを初期化し、SMSを受信者に送信します。これとは対照的に、GSMがエンドユーザーからSMSを受信する別のArduinoプログラムが作成されました。
最後に、すべてのソフトウェア設計が完了したら、すべてのソフトウェア設計をマージして、システムの最終的な動作ソフトウェアを構築します。さまざまなアルゴリズムアプローチが適用されました。これは、ソフトウェアフローのセクションで確認でき、最終的なソフトウェアを機能させ、想定どおりに実行します。上の図は、読み取りを行い、SMSを送信し、SMSを受信し、以前と同じように実行を開始する最終的なソフトウェアの動作を示しています。
注:すべてのソフトウェアコードは、以下の付録に記載されています。
注:すべてのソフトウェアコードは付録で確認できます。実際のレポートはハードウェアの提出後に行われたため、モデムテストとネットワーク接続テストの出力はレポートに含まれていませんでした。
関連プロジェクト:LabVIEWで基本的な電気電子プロジェクトを作成する方法
プロジェクトの構築とソフトウェアのテスト
すべてのハードウェアとソフトウェアの設計が正常に完了したら、プロジェクトの構築とテストを行います。レポートのこのセクションでは、さまざまなハードウェア設計がどのように実装およびテストされるかについて詳しく説明します。このセクションでは、ソフトウェアコード内に、トラブルシューティングと退避、およびプロジェクトの正常なビルドに重要な隠れた問題があったかどうかについても説明します。ステップバイステップのプロセスは、建設やテスト手順など、以下に示すpdfファイルの完全なプロジェクトレポートで確認できます。
ソフトウェアテスト
ソフトウェアテストフェーズもプロジェクト開発の重要な側面です。ソフトウェアテストは、ソフトウェアのバグを見つけることを目的としてプログラムまたはアプリケーションを実行する手順です。同様に、ソフトウェアプログラムまたはアプリケーションがその技術要件を満たし、受け入れられたとおりに機能し、同様の商標で実行できることを検証および検証するプロセスとして表現できます。ソフトウェアテストを行うために、さまざまなアプローチが採用されました。ソフトウェアシステムの予想される動作に完全に対応したソフトウェア要件仕様(SRS)ドキュメントが作成されました。
関連プロジェクト:555タイマーを使用したクラップスイッチ回路電子プロジェクト
要件ID | SRS-センサー-010 |
V 1.0 |
要件ID | SRS-データ-020 |
V1.0 |
要件ID | SRS-マイクロコントローラー-030 |
システム内のマイクロコントローラーは、システム内のすべてを管理するシステムの頭脳として機能します | |
V1.0 |
要件ID | SRS-ラッチ-040 |
V1.0 |
SRS- GSM-050 |
GSM |
システムは、マイクロコントローラーが受信者にSMSアラートを送信するように指示するたびに、受信者にSMSアラートを送信することで対応します。 |
V1.0 |
SRSドキュメントを作成した後、ソフトウェア設計はドキュメントのレビューを含む静的テストフェーズに移行しました。ここで、要件の検証が行われます。以下に定義されている4つの異なるタイプの検証方法があります。
- 検査(I):管理または視覚的検証
- 分析(A):分析的証拠に基づく検証
- デモンストレーション(D):定量的測定を行わない、運用特性の検証。
- テスト(T):定量的測定による定量的特性の検証。 SRSドキュメントの要件ごとに、I、A、D、およびTの省略形で検証方法が定義されています。
確認:
要件ID | 要件のタイトル | メソッド |
REQ-010 | システムのセンサーが読み取り値を取得することを確認します | 私 |
REQ-020 | データが画面に表示されていることを確認します。 | D |
REQ-030 | すべてのリクエストに対して100%の結果が得られるため、システムのマイクロコントローラーが適切に管理または動作していることが確認されます。 | D |
REQ-040 | ラッチ回路が想定どおりに動作していたことを確認します。それはsin3入力を受け取り、8ピンを吐き出します | A |
REQ-050 | SMSがGSMによって送受信されたことを確認します | D |
結果
すべてのテストが満足のいく結果で行われたように。文書化する必要のあるそのような特定の結果はないので。システムは湿気とDHT11(温度と湿度)センサーで動作するため、現在の室温と湿度に応じて読み取りを行います。回路内の水分センサーからの読み取り値は、プラントの現在の水分レベルにも依存します。そうでなければ、機能性の観点から回路から得られる全体的な結果は、モチベーションに良いものでした。
関連記事:ArduinoPWMプログラミングとArduinoでのその機能
自動散水プラントと灌漑システムの最終的な完全なソフトウェアコード
注: プロジェクトに関連するその他のコードは、PDFファイルにあります。たとえば、電磁弁をテストするためのサンプルコード、システムセンサーをテストするためのコード、GSMモデムテストコード、GSMネットワーク接続コード、GSMはSMSアラートコードを送信し、GSMはSMSコードを受信します。
最終的な自動散水プラントプロジェクトコード
#include <dht.h> #define dht_dpin A0 dht DHT; //———————– #include <LiquidCrystal.h> LiquidCrystal lcd (8, 9, 10, 11, 12, 13); //———————————- int plantPotMoisture[3] = {A1, A2, A3}; //——————— #include <GSM.h> #define PINNUMBER “” GSM gsmAccess; // include a ‘true’ parameter for debug enabled GSM_SMS sms; char remoteNumber[] = “0899506304”; String moistureMessage = “Moisture is Low on sensor: “; String SMS_Alert = “Sending SMS!”; String humidityMsg = “Humidity is High. Open All Solenoids”; String tempMsg = “Temperature is too HIGH!..Open ALl Solenoids “; String messageBuffer = “”; char senderNumber[20]; String stringOne = “Opens1”; String stringTwo = “Opens2”; String stringThree = “Opens3”; String stringFour = “OpenAll”; //————— #define solenoidData 5 #define solenoidClockster 4 #define solenoidLatch 6 //————— const int master = 0; const int slave1 = 1; const int slave2 = 2; const int slave3 = 3; boolean takeReadings = true; int serialSolenoidOutput = 0; void setup() { pinMode(solenoidData, OUTPUT); pinMode(solenoidClockster, OUTPUT); pinMode(solenoidLatch, OUTPUT); digitalWrite(solenoidLatch, HIGH); digitalWrite(solenoidLatch, LOW); shiftOut(solenoidData, solenoidClockster, MSBFIRST, 0); digitalWrite(solenoidLatch, HIGH); //————————- Serial.begin(9600); lcd.begin (16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print(“Wait Until”); lcd.setCursor(0, 1); lcd.print(“GSM Initialized!”); boolean notConnected = true; while (notConnected) { if (gsmAccess.begin(PINNUMBER) == GSM_READY) notConnected = false; else { Serial.println(“Not connected”); delay(1000); } } } void loop() { if (takeReadings) { moistureSensor(); TempAndHumidity (); if (DHT.humidity > 50 || DHT.temperature > 25 && takeReadings ) { takeReadings = false; if (DHT.humidity > 50) { sendSMS(humidityMsg); } else if (DHT.temperature > 25) { sendSMS(tempMsg); } while (!takeReadings) recieveSMS(); } if (plantPotMoisture[0] > 30 || plantPotMoisture[1] > 30 || plantPotMoisture[2] > 30 && takeReadings) { takeReadings = false; if (plantPotMoisture[0] > 30) { sendSMS(moistureMessage + “1”); } else if (plantPotMoisture[1] > 30) { sendSMS(moistureMessage + “2”); } else { sendSMS(moistureMessage + “3”); } while (!takeReadings) recieveSMS(); } } } void moistureSensor() { for (int i = 0 ; i < 3; i++) { lcd.clear(); plantPotMoisture[i] = analogRead(i); plantPotMoisture[i] = map(plantPotMoisture[i], 550, 0, 0, 100); Serial.print(“Mositure” + i ); lcd.print(“Mositure” + i); Serial.print(plantPotMoisture[i]); lcd.print(plantPotMoisture[i]); Serial.println(“%”); lcd.print(“%”); delay(1000); } } void TempAndHumidity () { DHT.read11(dht_dpin); lcd.setCursor(0, 0); lcd.print(“Humidity=”); Serial.print(“Current humidity = “); Serial.print(DHT.humidity); lcd.print(DHT.humidity); lcd.print(“%”); Serial.print(“%”); Serial.print(“temperature = “); Serial.print(DHT.temperature); Serial.println(“C”); lcd.setCursor(0, 1); lcd.print(“temp=”); lcd.print(DHT.temperature); lcd.print(“C “); delay(1000); lcd.clear(); } void sendSMS(String messageToSend) { Serial.print(“Sending a message to mobile number: “); Serial.println(remoteNumber); Serial.println(“SENDING”); lcd.print(SMS_Alert); Serial.println(); Serial.println(“Message:”); Serial.println(messageToSend); sms.beginSMS(remoteNumber); sms.print(messageToSend); sms.endSMS(); Serial.println(“\nCOMPLETE!\n”); lcd.clear(); lcd.print(“Completed!!!”); } void recieveSMS() { char c; if (sms.available()) { lcd.clear(); lcd.print(“Message received from:”); delay(800); lcd.clear(); sms.remoteNumber(senderNumber, 20); lcd.print(senderNumber); while (c = sms.read()) { Serial.println(c); messageBuffer += c; } Serial.println(messageBuffer); if (messageBuffer == stringOne) { toggleSolenoid1(); takeReadings = true; } else if (messageBuffer == stringTwo) { toggleSolenoid2(); takeReadings = true; } else if (messageBuffer == stringThree) { toggleSolenoid3(); takeReadings = true; } else if (messageBuffer == stringFour) { toggleAll(); takeReadings = true; } else { takeReadings = true; } messageBuffer = “”; Serial.println(“\nEND OF MESSAGE”); // Delete message from modem memory sms.flush(); Serial.println(“MESSAGE DELETED”); } delay(1000); } void toggleSolenoid1() { solenoidWrite(master, HIGH); delay(1000); solenoidWrite(slave1, HIGH); delay(1000); solenoidWrite(slave1, LOW); delay(1000); solenoidWrite(master, LOW); delay(1000); } void toggleSolenoid2() { solenoidWrite(master, HIGH); delay(1000); solenoidWrite(slave2, HIGH); delay(1000); solenoidWrite(slave2, LOW); delay(1000); solenoidWrite(master, LOW); delay(1000); } void toggleSolenoid3() { solenoidWrite(master, HIGH); delay(1000); solenoidWrite(slave3, HIGH); delay(1000); solenoidWrite(slave3, LOW); delay(1000); solenoidWrite(master, LOW); delay(1000); } void toggleAll() { solenoidWrite(master, HIGH); delay(1000); solenoidWrite(slave1, HIGH); delay(1000); solenoidWrite(slave2, HIGH); delay(1000); solenoidWrite(slave3, HIGH); delay(1000); solenoidWrite(slave1, LOW); delay(1000); solenoidWrite(slave2, LOW); delay(1000); solenoidWrite(slave3, LOW); delay(1000); solenoidWrite(master, LOW); delay(1000); } void solenoidWrite(int pin, bool state) { if ( pin >= 0 && pin < 8) { if (state) serialSolenoidOutput |= (1 << pin); else serialSolenoidOutput &= ~(1 << pin); } digitalWrite(solenoidLatch, LOW); shiftOut(solenoidData, solenoidClockster, MSBFIRST, serialSolenoidOutput); digitalWrite(solenoidLatch, HIGH); }
Full Project Report Automatic Watering Plants System (PDF) Free Download
- Title:
- Format:
- Size:
- Pages:
- Download:
関連記事:PCBを設計する方法(ステップバイステップと図解)
About the author
-Department of Engineering School of Informatics &Engineering Institute of Technology, Blanchardstown Dublin 15産業技術