Teichsteuerung mit Arduino und VB

  • Allgemein

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von A2theX.

    Teichsteuerung mit Arduino und VB

    Hallo,
    ich wollte euch mal meine Idee vorstellen.
    Erstmal zum Hintergrund.Ich und 2 Kollegen von mir haben momentan noch aus Hobbyzwecken eine kleine Forellenzucht und haben bisschen Geflügel (Hühner, Gänse, Wachteln).
    Da ich momentan jeden Tag 30 km fahren muss um die Forellen zu füttern habe ich eine Futtermaschine gebaut diese Funktioniert auch nur noch nicht so wie ich will.
    Ich habe daraufhin im Internet ein bisschen recherchiert und bin auf Arduino gestoßen und habe jetzt in ca. 3 Monaten ein für mich gutes Programm erstellt (man muss dazu sagen dass ich keinerlei Erfahrungen mit Programmieren sowie mit Elektrik habe).
    So nun will ich ja trotzdem nicht jeden Tag da runter fahren und alles Kontrollieren da habe ich mir gedacht ich schreibe ein Pc Programm und stelle ein Laptop an Teich den ich über es Internet steuern kann und auch sehen kann was Sache ist.
    Was mein Arduino machen muss ist folgendes:
    -Wassertemperatur messen
    -Wasserstand messen
    -Futterstand messen-Pelletfördermotor steuern
    -Streumotor steuern
    Nun muss ich noch das komplette Programm mit VB programmieren.
    Das muss folgendes können:
    -Temperatur, Wasserstand und Futterstand auslesen und bei bestimmten werten per E-Mail warnen
    -Steuerungen der verschieden Motoren dazu muss ich mit VB nur Buchstaben wie z.B ein "A" senden das Arduino läuft dann sein Programm ab
    -Fütterungen zeitlich Steuern
    -Anzahl der Fütterungen einstellen
    -Gewicht der verschiedenen Pellets Größen hinterlegen d.h. haben wir eine Pellets Größe von 4.5mm dann messe ich nach wieviel Gramm in 1sek, 10sek, 30sek und 60sek gefördert wird dies hinterlege im VB und wenn ich jetzt sage ich brauche am Tag 120g 4,5mm Pellets und 3 Fütterungen soll das VB berechne
    Bsp. 120g wird am Tag gebraucht
    Fütterungen 3x sprich 3x40gramm 1x 9:00Uhr 1x 13:00 Uhr 1x 17:00 Uhr
    40g in Bsp. 3 Sek. heißt der Motor muss 3 Sekunden laufen.
    Das ist das was ich momentan erreichen will.

    Später kommt noch dazu Kameraüberwachung der Anlage und Überwachung des Geflügels.
    Ich weiß das da viel Arbeit hinter Stecken wird aber da ich das mit dem Arduino hin bekommen habe denke ich ich werde es mit VB auch hinbekommen und ich hoffe ihr unterstützt mich da :D

    P.s. Falls ich was vergessen habe oder was unklar ist einfach fragen :)
    Bilder
    • Teich 1.jpg

      81,11 kB, 1.116×524, 394 mal angesehen
    • Einstellung.jpg

      61,08 kB, 892×474, 353 mal angesehen
    • Hauptmenü.jpg

      53,94 kB, 918×378, 373 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „A2theX“ ()

    Achso total vergessen kommen wir zum ersten Problem.
    Ich hatte bereits in einem anderem Thema gefragt und zwar habe ich mein Arduino am pc angeschlossen COM7 jetzt wollte ich mit VB Buchstaben ans Arduino senden und somit eine LED einschalten.
    Dies hat gerade auch funktioniert nur sobald ich die LED ausmache kommt wie auf dem Bild zu sehen folgender Fehler.
    Manchmal kommt dieser auch erst nach dem ausschalten er LED und beim erneuten versuch diese wieder einzuschalten.
    Bilder
    • Fehler.jpg

      322,32 kB, 1.366×768, 361 mal angesehen
    Ok da das läuft.
    Wie kann ich die Temperatur und die Entfernungsmessungen ( Ultraschall) Anzeigen lassen finde im Inet nix dazu.
    Und zur Fütterung wie kann ich Buttons mit zeit einstellen sprich zu sagen sende um 14:00 Uhr von montag bis Mittwoch ein "A" ans arduino ?
    Ein link oder sowas würde mir da helfen.
    Also das mit der Seriellen Schnittstelle läuft jetzt Super aber wie könnte ich jetzt z.b. die Temperatur auslesen ich müsste ja die Werte die das Arduino über die COM Schnittstelle auslesen und sagen lies Temperatur aus.
    Hier mal mein Arduino Programm zum auslesen der Temperatur.

    Quellcode

    1. #include <OneWire.h>;
    2. int DS18b20 = 9; //DS18b20 Temperatur Sensor
    3. OneWire ds(DS18b20); // auf digital pin 9
    4. void setup() {
    5. Serial.begin(9600);
    6. }
    7. void getTemperatureSensors(int pin) {
    8. byte type_s;
    9. OneWire ds(pin);
    10. byte addr[8];
    11. byte present = 0;
    12. byte data[12];
    13. float celsius;
    14. while(ds.search(addr)) {
    15. if (OneWire::crc8(addr, 7) != addr[7]) {
    16. Serial.println("CRC not valid");
    17. return;
    18. } else {
    19. switch (addr[0]) {
    20. case 0x10: // DS18S20 or old DS1820
    21. type_s = 1;
    22. break;
    23. case 0x28: // DS18B20
    24. type_s = 0;
    25. break;
    26. case 0x22: // DS1822
    27. type_s = 0;
    28. break;
    29. default: //Device is not a DS18x20 family device.
    30. type_s = -1;
    31. return;
    32. }
    33. // conversion
    34. ds.reset();
    35. ds.select(addr);
    36. ds.write(0x44,1); // start conversion
    37. delay(1000); // conversion wait
    38. present = ds.reset();
    39. ds.select(addr);
    40. ds.write(0xBE); // read sensor scratchpad
    41. for (int i = 0; i < 9; i++) {
    42. data[i] = ds.read();
    43. }
    44. // convert data to temperature
    45. int raw = (data[1] << 8) | data[0];
    46. if (type_s) {
    47. raw = raw << 3;
    48. if (data[7] == 0x10) {
    49. raw = (raw & 0xFFF0) + 12 - data[6];
    50. }
    51. } else {
    52. unsigned char t_mask[4] = {0x7, 0x3, 0x1, 0x0};
    53. byte cfg = (data[4] & 0x60) >> 5;
    54. raw &= ~t_mask[cfg];
    55. }
    56. Serial.print("ID: ");
    57. for(int i = 0; i < 8; i++) {
    58. Serial.print(addr[i], HEX);
    59. }
    60. celsius = (float)raw / 16.0;
    61. Serial.print(" ");
    62. Serial.print(celsius);
    63. Serial.println(" C");
    64. }
    65. }
    66. ds.reset_search();
    67. }
    68. void loop() {
    69. {
    70. getTemperatureSensors(9); // digital pin 9
    71. }
    72. }




    Ich hoffe könnt mir da weiter helfen wäre echt super von euch.

    A2theX schrieb:

    aber wie könnte ich jetzt z.b. die Temperatur auslesen ich müsste ja die Werte die das Arduino über die COM Schnittstelle auslesen und sagen lies Temperatur aus.


    Wie machst du denn die restliche Ansteuerung?

    Du musst im Arduino kontinuierlich den RS232-Eingang überwachen, und wenn ein Zeichen kommt, eben schaue, welches es ist (Switch Case) und je nachdem eben eine Funktion aufrufen.
    Momentan sende ich Via VB Befehle an mein Arduino und dieser Steuert nach einem Bestimmten Buchstaben eine bestimmte Funktion hier ein Bsp.


    VB:

    Quellcode

    1. ​SerialPort1.Write("A" & vbCr)
    2. SerialPort1.Write("B" & vbCr)
    3. usw...


    Arduino:

    Quellcode

    1. ​int inByte = Serial.read();
    2. switch (inByte)
    3. {
    4. case 'A':
    5. digitalWrite (pelletm, HIGH);
    6. digitalWrite(ledr, HIGH);
    7. Serial.println("Pellets Motor An");
    8. break;
    9. case 'B':
    10. digitalWrite(pelletm, LOW);
    11. digitalWrite(ledr, LOW);
    12. Serial.println("Pellets Motor Aus");
    13. break;
    Ich verstehe gar nichts.
    Du willst in deinem VB-Programm, dass Arduino dir Temperaturwerte schickt. Also schickst du "T" rüber und wartest im .DataReceived-Event des SerialPorts auf Daten, die zeigst du an.
    EDIT: Natürlich musst du im Arduino implementieren, dass bei "T" die Temperaturwerte an VB geschickt werden.
    WO ist das Problem?
    das bin glaube ich der auf dem schlauch steht.
    aber langsam kommt was.
    Also müsste ich im Arduino sagen das es beim Buchstaben T die Temperatur sendet.
    und am vb müsste ich das T mit der ListBox auslesen.
    Aber mit welchen befehl lese ich das T aus also senden von Buchstaben benutze ich ja Write also müsste das Lesen ja was mit Read sein und genau diesen befehl suche ich :)
    Ne das auslesen meine ich im VB das mit dem Arduino stellt kein Problem dar also senden vom Temperaturwert mit einem "T" diesen will ich jetzt am VB in einer ListBox anzeigen lassen.


    Edit:
    Also habe jetzt unter die ListBox ein button gemacht dieser hat folgende funktion.

    Quellcode

    1. SerialPort1.Write("T" & vbCr)

    dieser befehl liest am arduino die Temperatur aus.

    wie kann ich jetzt das was bei T gesendet wird in die ListBox anzeigen lassen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „A2theX“ ()

    Also das mit Arduino funktioniert.
    Durch ein Button frage ich die Temperatur ab dieser Button soll die Daten an die ListBox senden und dann müsste eigentlich alles funktionieren.
    Wie bekomme ich also den wert vom Button an die ListBox?