Hallo zusammen, wir bauen in der Schule derzeit eine Wetterstation und sollen Temperatur ,Luftfeuchtigkeit und Windrichtung ermitteln. Temperatur habe ich mit einem KTY-88 ermittelt den ich mit einem Widerstand Linearisiert habe und mit Spannungsteiler am ADC vom ATmega32 auswerte. Windrichtung habe ich mittels drei CNY70 und einem Greycode ermittelt. Bei dem Feuchtesensor stehe ich aber auf dem Schlauch und weiß auch nicht so ganz wie ich vorgehen soll. Genommen werden muss ein HCZ-H82A von Conrad Ich weiß das er 1V mit 1khz benötigt. Daher vermute ich das es ein Kapazitiv Sensor ist. 1.Die Rechnung zum Auswerten muss ich mit der Temperatur koppeln. 2.Daher meine Vermutung GND --->Sensor--->Widerstand--->1V 1KHZ | | V uC ADC 3. Kann ich die 1khz mit einem delay von 500us erzeugen? Bin über Hinweise zum vorgehen dankbar Gruß Marcel
Hallo Marcel, wie der genau funktioniert ist leider nicht exakt aus dem Datenblatt zu entnehmen: http://www.conrad.com/ce/en/product/1170515/HCZ-H82A Welche elektronischen Helferlein stehen dir zur Verfügung? Signalgenerator? Oszi? Wenn beides vorhanden, dann mal mit einem 1V 1kHz Sinussignal draufgehen(Signalgenerator) und schauen(Oszi) was passiert. Ob 500µs ausreichen errechnet sich ja aus deiner µC-Taktfrequenz, wenn du es nicht rechnen willst (rate ich von ab) kannst du dir dein erzeugtes Signal ja auf dem Oszi anzeigen lassen und dann iterativ vorgehen... Kannst du denn mit deinem µC ein Sinussignal erzeugen? Zum Verarbeiten des gemessenen Wertes schau dir einfach mal die Tabelle auf der letzten Seite des Datenblatts an. Die Tabelle kannst du dir im Flash oder EEPROM ablegen und mit deiner ermittelter Temperatur und dem Sensorwert die relative Luftfeuchte entsprechend der Tabelle interpolieren. Noch Fragen? beste grüße public
Heyho, also der HCZ-H82A war schonmal Inhalt von einem Thread Beitrag "2poligen Feuchtigkeitssensor am Arduino verwenden [Noob]" bitte genau durchlesen! :) grüße public
Zur verfügung habe ich nur ein Oszi. Funktionsgenerator habe ich leider nicht. Sinus sollte mit dem uC möglich sein. Über PWM und Timer kriegt man es annähernd Sinusförmig hin mit nachschlaten von RC-Gliedern. Den Beitrag habe ich bereits gelesen. Jedoch wird egal wo ich was lese davon abgeraten einen Kapazitiven Sensor zu nehmen. Jedoch habe ich keine Wahl da der Sensor vorgegeben ist. Alternativ würde ich einen XR-2206 benutzen um ein Sinus Signal zu erzeugen. Das mit der Tabelle hatte ich mir auch schon überlegt diese in Array`s zu legen und je nach Temperatur das Array zu wechseln. Oder hat jemand einen besseren Vorschlag zum weiteren Vorgehen?
Kann es nicht ein ganz gewöhnlicher DHT22 alias AM2302 mit digitaler Schnittstelle sein?
Habe ich nachgefragt der Lehrer meinte das wir diesen nehmen müssen. Hätte auch lieber einen Digitalen genommen aber keinen Chance. Er besteht darauf. Wegen dem Sinus könnte ich doch auch einen NE555 nehmen und dahinter einen TP setzen.
Hallo Marcel, zwei Überlegungen zum Anregungssignal: (1) mit der Sinusanregung kommst du widerstandsmesstechnisch höchstwahrscheinlich sehr nah an die im Datenblatt angegebenen Werte heran. Deshalb wäre es von Vorteil mal mit unterschiedlichen Signaltypen (Rechteck, Sinus, Dreieck...) auf den Sensor zu gehen und schauen was du als Widerstand messen kannst. (Tabelle machen!!!) (2) theoretisch bekommst du mit einem X-beliebigen Signal einen irgendwie gearteten ADC-Wert (sprich Digitalwert), den du dann eh noch interpretieren darfst, für den Fall musst du dir die Tabelle selber stricken... was uns wieder zu (1) führt. :) ;) Ich schätze du wirst also an einem Sinus nicht vorbeikommen, den kannst du ja mit deinem Oszi überprüfen. Zum erfassen des Signals würde ich auf jeden Fall einen Impedanzwandler dazwischenschalten, sonst hast du wahrscheinlich wieder trouble mit dem ADC-Wert und der Interpretation... Dann noch mal zum Algorithmus zum umrechnen. Vorschlag meinerseits: (1) 2x16-dimensionales Array erschaffen :D hammer Rechenleistung (2) Zellenindex 1 entspricht der Temperatur (3) Zellenindex 2 entspricht der relativen Luftfeuchte (4) als Inhalt in der Zelle jeweils den Widersstand aus der Tabelle ablegen Beispiel-code:
1 | int array[2][16] = {/* hier die Widerstandswerte ablegen */} |
2 | int temperaturGemessen = 0; |
3 | int widerstandGemessen = 0; |
4 | int relativeFeuchte = 20; |
5 | int rhCounter = 0; |
6 | |
7 | temperaturGemessen = getTemp(); // auf 1°C genau |
8 | widerstandGemessen = getWiderstand(); |
9 | /* Was getTemp und getWiderstand machen muss ich nicht erklären? */ |
10 | |
11 | while (widerstandGemessen < array[temperaturGemessen][rhCounter]) |
12 | { |
13 | rhCounter++; |
14 | } |
15 | |
16 | relativeFeuchte += rhCounter * 5; |
17 | |
18 | |
19 | /* Also passiert folgendes: |
20 | rhCounter = Zellenindexfaktor für Luftfeuchtestufen |
21 | 0 = 20%RH |
22 | 1 = 20%RH + 1*5 |
23 | 2 = 20%RH + 2*5 |
24 | 3 = 20%RH + 3*5 |
25 | ... */ |
Ich hoffe ich habe jetzt selber keinen Bock geschossen ;) beste grüße public
Heyho, doch ich hab nen kleinen Bock geschossen... Es müsste ein 11x16 Feld sein 11-Temperaturstufen 16-RH-Stufen :D ahja und die while-Schleife ist natürlich übertrieben groß Zwischenstufen benötigt? --> Interpolieren beste grüße public
Danke Public, Werde das nachher mal testen wenn ich Zeit finde andernfalls spätestens am Wochenende. Habe mir jetzt einen XR-2206 bestellt zwecks Sinus, denke damit geht es am leichtesten und am saubersten. Danke Dir schon mal. Gruß Marcel
Marcel M. schrieb: > Habe mir jetzt einen XR-2206 bestellt zwecks Sinus, denke damit geht es > am leichtesten und am saubersten. Irgendwie kommt mir das vor, wie mit Kanonen auf Spatzen schießen. Es geht doch wohl darum, die Impedanz eines Sensors bei ca. 1kHz zu messen. Dabei darf die Messspannung nicht größer als 1Vrms sin. Ein Rechteckt mit 1kHz zu erzeugen ist mit einem µC kein Problem. Da die Spannung auf jeden Fall zu hoch ist, muß runtergeteilt werden. Das bekommt man mit einem passiven Tiefpass leicht hin. Bei einem Tiefpass 2. Ordnung ist das für eine solche Messung schon ein prima Sinus. Alles andere ist für ein solches Schätzeisen overengineering. MfG Klaus
Hallo Klaus, also reicht es, aus dem Rechtecksignal einen Sinus zu erzeugen. Wenn der Sensor damit läuft soll mir das auch recht sein. Den XR-2206 nutzte ich dann zum Selbstbau eines Funktionsgenerators. Gruß Marcel
Hallo Klaus, sorry das es was länger gedauert hat. Also habe den Lehrer überzeugt bekommen doch den DHT22 zu nehmen da er den anderen selber nicht ans laufen bekommen hat. Der DHT22 läuft super. Ich gebe die Werte per LCD und Webpage auf dem Webserver von Ulrich Radig aus. Habe das Programm schon gekürzt für meine Bedürfnisse, jedoch habe ich eine Frage zu dem erzeugen der Webpage. if (strncasecmp_P("VA@",http_entry[index].new_page_pointer,3)==0) { b = (pgm_read_byte(http_entry[index].new_page_pointer+3)-48)*10; b +=(pgm_read_byte(http_entry[index].new_page_pointer+4)-48); dtostrf(var_array[b], 3, 1, var_conversion_buffer); str_len = strnlen(var_conversion_buffer,CONVERSION_BUFFER_LEN); memmove(ð_buffer[TCP_DATA_START+a],var_conversion_buffer,str_len); a = a + (str_len-1); http_entry[index].new_page_pointer=http_entry[index].new_page_pointer+5; } Der Obige Quellcode importiert ja Zahlen welche in dem Array stehen und setzt diese an die Platzhalter in der Webpage (z.B. VA@00). Wie müsste ich denn Code abändern um Text zu übergeben? Würde Gerne die Windrichtung übertragen. char *windrichtung[8] = {"N","NO","O","SO","S","SW","W","NW"}; Nur wie bekomme ich die in die Webpage übertragen? Gruß Marcel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.