Hoe je je eigen slimme koffiemachine bouwt
HoeAls u van koffie houdt, heeft u waarschijnlijk een prachtig espressoapparaat voor thuisgebruik. Misschien zelfs een Rancilio Silvia. De Silvia is een slanke, eenvoudige, robuuste machine van hoge kwaliteit.
Eén nadeel van dit koffiezetapparaat is echter dat het, net als vele andere, thermostaten gebruikt om de brouwtemperatuur te regelen. Het gebruik van thermostaten om precisie te verkrijgen en continue temperatuurregeling is niet erg effectief.
Daarom zie je dat high-end commerciële koffiemachines gebruikmaken van Proportional-Integral-Derivative (PID) -controllers.
Deze hack laat je zien hoe je een grafische gebruikersinterface kunt maken met precisie-temperatuurregeling in een eenvoudig koffiezetapparaat. Hacking-it-up met een Raspberry Pi betekent ook de mogelijkheid om het internet-van-dingen in de machine te integreren.
- Probeer meer geweldige Raspberry Pi-projecten uit
De eerste stap is om een paar dubbele espresso's neer te zetten. Dan is het tijd om aan de slag te gaan. Deze hack vereist wat aardige vaardigheden in Linux, Kivy (voor de front-end GUI) en Python.
Maar maak je geen zorgen als je slechts een beginner bent - deze tutorial is een geweldige manier om je vaardigheden op te bouwen. Je hebt ook een soldeerbout, eenvoudig elektronisch gereedschap en een stevige voorraad koffiebonen nodig (voor je eigen consumptie).
Afhankelijk van hoe ver je wilt gaan met de build, kun je ook een nieuw frontpaneel fabriceren (hoewel dit het een beetje duurder maakt).
Wat je nodig hebt
Hardware die nodig is voor de Silvia-Pi-build omvat:
- Raspberry Pi 2
- Raspberry Pi 7-inch touchscreen
- Elke koffiemachine die zou kunnen doen met een betere temperatuurregeling
- Solid State Relay (SSR)
- 2x tweepolige eenworp (DPST) relais
- 2x transistors & diodes (voor de stuurcircuits op de DPST-relais)
- Geïntegreerde voeding (de invoer van uw land V AC in, 5 V DC uit)
- thermokoppel van het k-type
- 1x thermokoppelversterker (1-draads MAX31850K)
Waarom gebruik je een SSR? Waarom gebruik je geen mechanisch relais om de ketel te regelen? Goed…
Dit komt door de potentieel hoge schakelsnelheid van de controller. In de praktijk is de schakelsnelheid relatief laag en sommige low-end machines maken wel gebruik van mechanische relais. Mechanische relais ontbreken echter meestal open. SSR's mislukken meestal niet.
Dit is absoluut iets om in gedachten te houden wanneer u denkt aan veiligheid op uw toepassing. Bovendien zijn mechanische relais alleen goed voor een bepaald aantal cycli. Bovendien maken mechanische relais een geluid, terwijl SSR's stil zijn.
Voor deze toepassing is een goede SSR om te gebruiken de Kudom KSI240D10-L SSR: 10A 240V AC, 4-32V DC.
Het thermokoppel-temperatuurbereik van het K-type ligt typisch tussen -250ºC tot 1250ºC en nauwkeurig tot ± 1ºC. Voor signaalverwerkingsdoeleinden is het K-type gemakkelijk te huisvesten.
Er zijn talloze varianten van geïntegreerde schakelingen die zijn verpakt met versterkers, filtering, koude junctiecompensatie en analoog / digitaal-omzetters die speciaal zijn gebouwd voor het thermokoppel van het K-type en die ook goedkoop zijn.
Hierdoor is het K-type perfect voor deze koffiemachine-applicatie.
Het touchscreen
Om problemen op te lossen, te debuggen en vertrouwd te raken met de functionaliteit, moet u beginnen met het instellen van dat 7-inch touchscreen op de Raspberry Pi.
Ga naar de website van element14 en bekijk hun Raspberry Pi 7-inch Touchscreen Display-zelfstudie. Als je eenmaal bent aangesloten, speel dan eens hoe mooi Debian, de Pi en het touchscreen samenwerken.
Een grafische gebruikersinterface
De GUI-specificatie is als volgt: een real-time plotgrafiek, een koffie-knop voor het trekken van een espresso-shot, een stoomknop om de melk te schuimen en een knop voor heet water.
Met de plotgrafiek kunt u zien hoe effectief het afstemmen van uw PID-regelaar is door de setpointgrafiek en de werkelijke temperatuur van de brouwtemperatuur op te nemen - en het geeft uw machine het hi-tech, precisieregelingbeeld dat het verdient. De Espresso-standaard geeft immers 88 ° C aan de uitloop van de mengkorf
Vertrouwd raken met Kivy
Kivy zal worden gebruikt om de GUI te bouwen. Waarom? Kivy is gebaseerd op een eenvoudig app-widgetsysteem. Het Kivy-widgetsysteem is eenvoudig te achterhalen. Kivy heeft goede API-ondersteuning en tutorials op de Kivy-website. Kivy heeft ook een widget-manager voor instellingen die gebruikmaakt van JSON-configuratiebestanden.
Dit maakt het bouwen van apps snel en eenvoudig. U kunt de standaard Kivy-instellingenwidget aanpassen om slaap- en wektijden in te sluiten. Hiermee kunt u de kop van de kom instellen om lekker warm te zijn tegen de tijd dat u uit bed komt en energie te sparen tijdens de daluren.
Kivy heeft een super handige plugin manager genaamd Kivy Garden. Kivy heeft ook platformonafhankelijke functionaliteit (Linux, Android, iOS, OS X, enz.). Kivy Garden heeft een aantal coole widgets voor plug-ins die deze hack zal gebruiken, zoals Graph. Deze hack gebruikt Graph voor de real-time plotter. Coderen met een FOSS IDE zoals Eclipse en Secure Shelling in the Pi via je desktop is een effectieve manier om deze hack te implementeren.
Dit betekent dat je Kivy zowel op je desktop als op je Raspberry Pi moet installeren. Ga je gang en doe dit door je aan te melden bij je terminal en in te voeren $ pip install kivy dan $ pip install kivy-garden gevolgd door $ garden install graph
Bouw je Kivy-app
Nadat Kivy is geïnstalleerd, kunt u beginnen met het bouwen van Kivy-apps en vertrouwd raken met de Kivy-modules. Ga naar de Kivy-website en kijk door de API-bibliotheek of volg zelfs de “eerste app” tutorial - een Pong-app - om je hoofd rond de code te krijgen en de algemene lay-out van het bouwen van Kivy-apps.
Hier gaan we een CoffeeApp bouwen, een combinatie van Kivy-widgets zoals BoxLayout, Button, Label, Graph. Dus, tijd om er achter te komen. In coffee.py:
#! / usr / bin / kivy importeren kivy van kivy.app importeren App van kivy.uix.boxlayout importeren BoxLayout-klasse CoffeeApp (App): def build (self): # Voeg bovenliggende widget root toe = BoxLayout (orientation = 'horizontal') verticalBtns = BoxLayout (orientation = 'vertical', size_hint_x = 0.25) # Voeg onderliggende widgets hier toe en voeg ze toe aan de hoofdmap 'root'. return root # Voer het script uit als __name__ == '__main__': CoffeeApp (). run ()
Met de bovenstaande code wordt een standaard BoxLayout Kivy-app gemaakt met een bovenliggende bovenliggende widget wortel. Je zult ook opmerken verticalBtns BoxLayout - u gebruikt dit om uw knoppen te scheiden van uw grafiek en ze verticaal weer te geven in het juiste deel van de app.
size_hint_x = 0,25. U kunt deze hint niet zien totdat u de grafiek later toevoegt. Het toevoegen van knoppen en grafieken aan de widget is net zo eenvoudig als het maken van de widget
coffeeButton = Knop (text = 'koffie')
en vervolgens toe te voegen aan de bovenliggende widget:
verticalBtns.add_widget (coffeeButton)
In dit geval voegt u de drie knoppen (koffie, stoom en water) toe door deze code voor elke knop te herhalen. U gebruikt de eenvoudige BoxLayout die de positie en de grootte van de knoppen binnen de bovenliggende widgetwortel van de app verwerkt. Daarom moet u verticalBtns aan de rootwidget toevoegen door het volgende toe te voegen:
root.add_widget (verticalBtns)
Het ol 'enkele lijndiagram voor de Silvia Pi-build. Lijkt veel op hiërogliefen uit het oude Egypte. Waarschijnlijk omdat ze aan een soortgelijk project werkten.Knoppen, bindingen en evenementen
Nu om je drie knoppen gesorteerd te krijgen. Voer de code uit en u ziet drie knoppen verticaal in de app gerangschikt. Als je via SSH of rechtstreeks naar je Raspberry Pi loopt, zie je dat de app rechtstreeks naar het 7-inch touchscreen loopt.
Druk op de knoppen om te zien wat er gebeurt ... Niet veel? Je zult zien dat de knoppen veranderen van grijs in lichtblauw, maar dat is het zo'n beetje. Tijd om die knoppen te binden om wat functionaliteit te krijgen. Door bindmethode te gebruiken en te definiëren on_press () en op vrijlating() methoden kunt u specificeren wat er gebeurt.
Begin met het toevoegen van functionaliteit aan de coffeeButton in uw code. Tussen het maken van de knoppen en het toevoegen van de knoppen aan de root, roept u de volgende bindmethode aan door de volgende code toe te voegen:
coffeeButton.bind (on_press = self.coffeePress_callback)
en
coffeeButton.bind (on_release = self.coffeeRelease_callback)
Nu moet je de methoden definiëren binnen de CoffeeApp-klasse:
coffeePress_callback (self, * args)
en
coffeeRelease_callback (self, * args)
Doe dit boven de bouwmethode binnen de klas. Voeg wat toe afdrukken uitspraken als tracers om te zien of er iets gebeurt tijdens drukken en loslaten en voer de app opnieuw uit.
Oh nee! Lijkt erop dat R2-D2 een hersenoperatie ondergaat! Nee, niet echt ... Het is de Pi die gesmeed wordt in de Silvia samen met de vereiste relais en stuurcircuits.U vindt nu bij het indrukken van de koffieknop dat uw afdrukken uitspraken worden uitgevoerd naar de terminal. Herhaal de bovenstaande stappen opnieuw voor de stoom- en waterknoppen.