Ik heb al jaren een paar arduino's in de kast liggen voor allerlei projecten waar ik vervolgens nooit wat mee gedaan heb, jullie kennen dat vast wel...
Maar sinds kort heb ik een leuk projectje gevonden waarvoor ik weer eens zin had om een arduino voor te gebruiken!
Ik heb een patch kast gekocht, en ik wil remote in de gaten houden hoe warm het daarbinnen wordt (hij komt in de meterkast te hangen dus koeling is best belangrijk).
Ik ben dus begonnen met een arduino als controller, waarbij ik 2 eisen had: Ik wil dat het boardje zijn eigen bootloader heeft zodat ik zelf niet met avrdude etc. hoef te hannessen, en ik wil dat het apparaat via USB gevoed kan worden, zodat ik geen externe adapter hoef aan te sluiten.
Uiteindelijk ben ik op een Adafruit Feather 328p uitgekomen, waarvan ik er 1 besteld heb. Dit omdat deze lekker klein is, wat handig is met mijn breadboard, en omdat de Atmega328p die erop zit meer dan genoeg is voor wat dit apparaatje hoeft te doen.
Ik heb er een onewire temperatuursensor bij gekocht, een aantal weerstandjes had ik nog liggen van vorige pogingen en ik ben begonnen met een basis programma in elkaar te zetten.
Al vrij snel had ik mijn eerste temperatuur waarden uit de USB monitor!
Met deze setup ben ik dus gaan stoeien, De fan die hier aangesloten is is een 5V Noctua fan. Deze is dus geschikt om met USB te voeden! Dat maakt het voor mij een stuk makkelijker omdat ik dan niet ook nog ergens 12v vandaan hoef te halen.
Daarna was het tijd om de boel van het breadboardje te halen, dus heb ik Fritzing erbij gepakt en heb ik een (ontzettend beginners) PCB'tje geschetst. Deze heb ik maar gelijk laten maken, omdat ik tevreden was met het ontwerp.
Na een paar daagjes kwamen ze binnen dus ik heb er pin headers op gesoldeerd en zie hier het resultaat!
Nou alleen het remote gedeelte nog, toch?
Gelukkig, omdat het dingetje met USB gevoed wordt, kan ik de ingebouwde USB Serialport gebruiken om data te exporteren. En omdat ik veel met JSON werk leek het me handig om de gegevens die de arduino gebruikt voor het PWM signaal in dat formaat te verzenden.
Dus even vrotten met de programmering en een paar libraries later heb ik dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| #include <OneWire.h>
#include <DallasTemperature.h>
#include <ArduinoJson.h>
const int capacity = JSON_OBJECT_SIZE(2);
StaticJsonDocument<capacity> doc;
JsonObject object=doc.to<JsonObject>();
char buffer[100];
float temp = 0.0; //Temperature read from sensor
int outWire = 3;
int oneWireBus = 5; // Temperature sensor Pin
OneWire oneWire(oneWireBus); // Onewire Init
DallasTemperature sensors(&oneWire); // Onewire Init
float minTemp = 20.0; // Minimum temp that maps to 0
float maxTemp = 60.0; // Maximum temp that maps to 255
int dutyCycle = 0;
void setup(void) {
pinMode(LED_BUILTIN, OUTPUT); // Disable builtin LED on pin 13
digitalWrite(LED_BUILTIN, LOW);
object["temp"] = 0.0;
object["power"] = 0.0;
Serial.begin(9600);
sensors.begin();
}
void loop(void) {
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
dutyCycle = map(temp, minTemp, maxTemp, 0, 255);
object["temp"] = temp;
object["power"] = dutyCycle;
serializeJson(doc, buffer);
Serial.println(buffer);
if (minTemp > dutyCycle) {
digitalWrite(outWire, LOW);
} else {
analogWrite(outWire, dutyCycle);
}
delay(1000);
} |
Dit programma'tje is net 8KB dus past makkelijk in de controller, en 1x per seconde is meer dan snel zat om te reageren op temperatuur wisselingen.
De output van deze serial connection is
code:
1
| {"temp":33.125,"power":82} |
,wat natuurlijk super makkelijk de decoden is.
Via een custom nodejs appje decode ik dit, en stuur ik het door naar een prometheus instance die ik op een servertje heb draaien. Grafana ervoor en dit is het resultaat!
Al met al ben ik best tevreden met het resultaat!
Ik kan nu precies zien wat het dingetje aan het doen is, hoe warm het wordt bij de sensor (deze komt uiteindelijk natuurlijk in het rack te hangen, tegen de bovenwand) en hoeveel power (in de vorm van PWM signal) de fans krijgen in een poging de boel weer af te koelen.
Wat vinden jullie ervan?
[
Voor 31% gewijzigd door
Dutchess_Nicole op 01-08-2020 16:20
]
Kia E-Niro 2019 Executiveline. OTGW/HA Enthousiasteling.