├── GUI_progressBar.py ├── Master_Getratomat_progressBar.py ├── README.md ├── data.txt └── hx711.py /GUI_progressBar.py: -------------------------------------------------------------------------------- 1 | from PyQt4 import QtCore, QtGui 2 | 3 | try: 4 | _fromUtf8 = QtCore.QString.fromUtf8 5 | except AttributeError: 6 | def _fromUtf8(s): 7 | return s 8 | 9 | try: 10 | _encoding = QtGui.QApplication.UnicodeUTF8 11 | def _translate(context, text, disambig): 12 | return QtGui.QApplication.translate(context, text, disambig, _encoding) 13 | except AttributeError: 14 | def _translate(context, text, disambig): 15 | return QtGui.QApplication.translate(context, text, disambig) 16 | 17 | class Ui_MainWindow(object): 18 | def setupUi(self, MainWindow): 19 | MainWindow.setObjectName(_fromUtf8("MainWindow")) 20 | MainWindow.resize(800, 480) 21 | MainWindow.setMinimumSize(QtCore.QSize(800, 480)) 22 | MainWindow.setMaximumSize(QtCore.QSize(800, 480)) 23 | self.centralwidget = QtGui.QWidget(MainWindow) 24 | self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 25 | self.B_100 = QtGui.QPushButton(self.centralwidget) 26 | self.B_100.setGeometry(QtCore.QRect(20, 10, 231, 101)) 27 | font = QtGui.QFont() 28 | font.setPointSize(25) 29 | self.B_100.setFont(font) 30 | self.B_100.setStyleSheet(_fromUtf8("")) 31 | self.B_100.setCheckable(True) 32 | self.B_100.setObjectName(_fromUtf8("B_100")) 33 | self.B_300 = QtGui.QPushButton(self.centralwidget) 34 | self.B_300.setGeometry(QtCore.QRect(540, 10, 231, 101)) 35 | font = QtGui.QFont() 36 | font.setPointSize(25) 37 | self.B_300.setFont(font) 38 | self.B_300.setStyleSheet(_fromUtf8("")) 39 | self.B_300.setCheckable(True) 40 | self.B_300.setObjectName(_fromUtf8("B_300")) 41 | self.B_200 = QtGui.QPushButton(self.centralwidget) 42 | self.B_200.setGeometry(QtCore.QRect(280, 10, 231, 101)) 43 | font = QtGui.QFont() 44 | font.setPointSize(25) 45 | self.B_200.setFont(font) 46 | self.B_200.setStyleSheet(_fromUtf8("")) 47 | self.B_200.setObjectName(_fromUtf8("B_200")) 48 | self.B_200.setCheckable(True) 49 | self.B_2 = QtGui.QPushButton(self.centralwidget) 50 | self.B_2.setCheckable(True) 51 | self.B_2.setGeometry(QtCore.QRect(280, 150, 231, 71)) 52 | font = QtGui.QFont() 53 | font.setPointSize(20) 54 | self.B_2.setFont(font) 55 | self.B_2.setObjectName(_fromUtf8("B_2")) 56 | self.B_3 = QtGui.QPushButton(self.centralwidget) 57 | self.B_3.setCheckable(True) 58 | self.B_3.setGeometry(QtCore.QRect(540, 150, 231, 71)) 59 | font = QtGui.QFont() 60 | font.setPointSize(20) 61 | self.B_3.setFont(font) 62 | self.B_3.setObjectName(_fromUtf8("B_3")) 63 | self.B_1 = QtGui.QPushButton(self.centralwidget) 64 | self.B_1.setCheckable(True) 65 | self.B_1.setGeometry(QtCore.QRect(20, 150, 231, 71)) 66 | font = QtGui.QFont() 67 | font.setPointSize(20) 68 | self.B_1.setFont(font) 69 | self.B_1.setObjectName(_fromUtf8("B_1")) 70 | self.B_5 = QtGui.QPushButton(self.centralwidget) 71 | self.B_5.setCheckable(True) 72 | self.B_5.setGeometry(QtCore.QRect(280, 230, 231, 71)) 73 | font = QtGui.QFont() 74 | font.setPointSize(20) 75 | self.B_5.setFont(font) 76 | self.B_5.setObjectName(_fromUtf8("B_5")) 77 | self.B_6 = QtGui.QPushButton(self.centralwidget) 78 | self.B_6.setCheckable(True) 79 | self.B_6.setGeometry(QtCore.QRect(540, 230, 231, 71)) 80 | font = QtGui.QFont() 81 | font.setPointSize(20) 82 | self.B_6.setFont(font) 83 | self.B_6.setObjectName(_fromUtf8("B_6")) 84 | self.B_4 = QtGui.QPushButton(self.centralwidget) 85 | self.B_4.setCheckable(True) 86 | self.B_4.setGeometry(QtCore.QRect(20, 230, 231, 71)) 87 | font = QtGui.QFont() 88 | font.setPointSize(20) 89 | self.B_4.setFont(font) 90 | self.B_4.setObjectName(_fromUtf8("B_4")) 91 | self.B_8 = QtGui.QPushButton(self.centralwidget) 92 | self.B_8.setCheckable(True) 93 | self.B_8.setGeometry(QtCore.QRect(280, 310, 231, 71)) 94 | font = QtGui.QFont() 95 | font.setPointSize(20) 96 | self.B_8.setFont(font) 97 | self.B_8.setObjectName(_fromUtf8("B_8")) 98 | self.B_9 = QtGui.QPushButton(self.centralwidget) 99 | self.B_9.setCheckable(True) 100 | self.B_9.setGeometry(QtCore.QRect(540, 310, 231, 71)) 101 | font = QtGui.QFont() 102 | font.setPointSize(20) 103 | self.B_9.setFont(font) 104 | self.B_9.setObjectName(_fromUtf8("B_9")) 105 | self.B_7 = QtGui.QPushButton(self.centralwidget) 106 | self.B_7.setCheckable(True) 107 | self.B_7.setGeometry(QtCore.QRect(20, 310, 231, 71)) 108 | font = QtGui.QFont() 109 | font.setPointSize(20) 110 | self.B_7.setFont(font) 111 | self.B_7.setObjectName(_fromUtf8("B_7")) 112 | self.B_abbruch = QtGui.QPushButton(self.centralwidget) 113 | self.B_abbruch.setGeometry(QtCore.QRect(20, 390, 491, 41)) 114 | font = QtGui.QFont() 115 | font.setPointSize(16) 116 | self.B_abbruch.setFont(font) 117 | self.B_abbruch.setObjectName(_fromUtf8("B_abbruch")) 118 | self.progressBar = QtGui.QProgressBar(self.centralwidget) 119 | self.progressBar.setGeometry(QtCore.QRect(20, 120, 751, 21)) 120 | self.progressBar.setProperty("value", 0) 121 | self.progressBar.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) 122 | self.progressBar.setTextVisible(True) 123 | self.progressBar.setObjectName(_fromUtf8("progressBar")) 124 | self.lcdNumber = QtGui.QLCDNumber(self.centralwidget) 125 | self.lcdNumber.setGeometry(QtCore.QRect(590, 390, 121, 41)) 126 | self.lcdNumber.setObjectName(_fromUtf8("lcdNumber")) 127 | self.label = QtGui.QLabel(self.centralwidget) 128 | self.label.setGeometry(QtCore.QRect(720, 400, 61, 31)) 129 | font = QtGui.QFont() 130 | font.setFamily(_fromUtf8("Monospac821 BT")) 131 | font.setPointSize(15) 132 | self.label.setFont(font) 133 | self.label.setTextFormat(QtCore.Qt.AutoText) 134 | self.label.setObjectName(_fromUtf8("label")) 135 | 136 | MainWindow.setCentralWidget(self.centralwidget) 137 | self.statusbar = QtGui.QStatusBar(MainWindow) 138 | self.statusbar.setObjectName(_fromUtf8("statusbar")) 139 | MainWindow.setStatusBar(self.statusbar) 140 | 141 | self.retranslateUi(MainWindow) 142 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 143 | 144 | def retranslateUi(self, MainWindow): 145 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 146 | self.B_100.setText(_translate("MainWindow", "100 ml", None)) 147 | self.B_300.setText(_translate("MainWindow", "300 ml", None)) 148 | self.B_200.setText(_translate("MainWindow", "200 ml", None)) 149 | self.B_2.setText(_translate("MainWindow", "Monkey Wrench", None)) 150 | self.B_3.setText(_translate("MainWindow", "Painkiller", None)) 151 | self.B_1.setText(_translate("MainWindow", "Captain Cola", None)) 152 | self.B_5.setText(_translate("MainWindow", "SwimmingPool", None)) 153 | self.B_6.setText(_translate("MainWindow", "Wodka Sunrise", None)) 154 | self.B_4.setText(_translate("MainWindow", "Wodka-O", None)) 155 | self.B_8.setText(_translate("MainWindow", "Chi-Chi", None)) 156 | self.B_9.setText(_translate("MainWindow", "Zombie", None)) 157 | self.B_7.setText(_translate("MainWindow", "Long Island Icetea", None)) 158 | self.B_abbruch.setText(_translate("MainWindow", "Abbruch", None)) 159 | self.label.setText(_translate("MainWindow", "Liter", None)) -------------------------------------------------------------------------------- /Master_Getratomat_progressBar.py: -------------------------------------------------------------------------------- 1 | from PyQt4 import QtCore, QtGui 2 | import RPi.GPIO as GPIO 3 | import time 4 | import sys 5 | import os 6 | import subprocess 7 | from hx711 import HX711 8 | from GUI_progressBar import Ui_MainWindow 9 | #from matplotlib.pylab import * 10 | from numpy import * 11 | import numpy 12 | #import pygame 13 | GPIO.setmode(GPIO.BOARD) 14 | #GPIO.setwarnings(False) 15 | 16 | hx = HX711(29, 31) 17 | hx.set_reading_format("LSB", "MSB") 18 | hx.set_reference_unit(-1000) 19 | 20 | volume = 0 21 | tara = 0 22 | a = 0.0 23 | 24 | class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 25 | def __init__(self, parent = None): 26 | super(MainWindow, self).__init__(parent) 27 | self.setupUi(self) 28 | QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Q"), self, self.close) 29 | 30 | F = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","r") 31 | global a 32 | a = F.read() 33 | self.lcdNumber.display(a) 34 | F.close() 35 | 36 | self.B_1.clicked.connect(self.captain) # Captain Cola 37 | self.B_2.clicked.connect(self.monkey) # Monkey Wrrench 38 | self.B_3.clicked.connect(self.pain) # Painkiller 39 | self.B_4.clicked.connect(self.orange) # Wodka-O 40 | self.B_5.clicked.connect(self.pool) # Swimming Pool 41 | self.B_6.clicked.connect(self.sunrise) # Wodka Sunrise 42 | self.B_7.clicked.connect(self.icetea) # Long Island Icetea 43 | self.B_8.clicked.connect(self.chi) # Chi-Chi 44 | self.B_9.clicked.connect(self.zombie) # Zombie 45 | 46 | self.B_100.clicked.connect(self.klein) 47 | self.B_200.clicked.connect(self.mittel) 48 | self.B_300.clicked.connect(self.gross) 49 | 50 | self.B_abbruch.clicked.connect(self.cleanAndExit) 51 | 52 | GPIO.setup(3,GPIO.IN) #abschalten der GPIOS am Anfang 53 | GPIO.setup(5,GPIO.IN) 54 | GPIO.setup(11,GPIO.IN) 55 | GPIO.setup(13,GPIO.IN) 56 | GPIO.setup(18,GPIO.IN) 57 | GPIO.setup(12,GPIO.IN) 58 | GPIO.setup(16,GPIO.OUT) #Licht an! 59 | 60 | # hx = HX711(29, 31) 61 | # hx.set_reading_format("LSB", "MSB") 62 | # hx.set_reference_unit(-1000) 63 | hx.reset() 64 | hx.tare() 65 | # self.checker() 66 | 67 | #pygame.init() 68 | #pygame.mixer.init() 69 | 70 | # def checker(self): 71 | # if self.B_100.isChecked(): 72 | # volume = 100 73 | # #print(volume) 74 | # self.B_200.setChecked(False) 75 | # self.B_300.setChecked(False) 76 | # elif self.B_200.isChecked(): 77 | # volume = 200 78 | # # print(volume) 79 | # self.B_100.setChecked(False) 80 | # self.B_300.setChecked(False) 81 | # elif self.B_300.isChecked(): 82 | # volume = 300 83 | # #print(volume) 84 | # self.B_100.setChecked(False) 85 | # self.B_200.setChecked(False) 86 | 87 | def allesaus(self): 88 | GPIO.setup(3,GPIO.IN) 89 | GPIO.setup(5,GPIO.IN) 90 | GPIO.setup(11,GPIO.IN) 91 | GPIO.setup(13,GPIO.IN) 92 | GPIO.setup(18,GPIO.IN) 93 | 94 | def klein(self): 95 | self.B_100.setChecked(True) 96 | self.B_200.setChecked(False) 97 | self.B_300.setChecked(False) 98 | GPIO.setup(12,GPIO.OUT) 99 | volume = 100 100 | 101 | def mittel(self): 102 | self.B_100.setChecked(False) 103 | self.B_200.setChecked(True) 104 | self.B_300.setChecked(False) 105 | GPIO.setup(12,GPIO.OUT) 106 | volume = 200 107 | 108 | def gross(self): 109 | self.B_100.setChecked(False) 110 | self.B_200.setChecked(False) 111 | self.B_300.setChecked(True) 112 | GPIO.setup(12,GPIO.OUT) 113 | volume = 300 114 | 115 | def uncheck(self): 116 | self.B_100.setChecked(False) 117 | self.B_200.setChecked(False) 118 | self.B_300.setChecked(False) 119 | self.B_1.setChecked(False) 120 | self.B_2.setChecked(False) 121 | self.B_3.setChecked(False) 122 | self.B_4.setChecked(False) 123 | self.B_5.setChecked(False) 124 | self.B_6.setChecked(False) 125 | self.B_7.setChecked(False) 126 | self.B_8.setChecked(False) 127 | self.B_9.setChecked(False) 128 | 129 | def enable_all(self): 130 | self.B_100.setDisabled(False) 131 | self.B_200.setDisabled(False) 132 | self.B_300.setDisabled(False) 133 | self.B_1.setDisabled(False) 134 | self.B_2.setDisabled(False) 135 | self.B_3.setDisabled(False) 136 | self.B_4.setDisabled(False) 137 | self.B_5.setDisabled(False) 138 | self.B_6.setDisabled(False) 139 | self.B_7.setDisabled(False) 140 | self.B_8.setDisabled(False) 141 | self.B_9.setDisabled(False) 142 | 143 | def disable_all(self): 144 | self.B_100.setDisabled(True) 145 | self.B_200.setDisabled(True) 146 | self.B_300.setDisabled(True) 147 | self.B_1.setDisabled(True) 148 | self.B_2.setDisabled(True) 149 | self.B_3.setDisabled(True) 150 | self.B_4.setDisabled(True) 151 | self.B_5.setDisabled(True) 152 | self.B_6.setDisabled(True) 153 | self.B_7.setDisabled(True) 154 | self.B_8.setDisabled(True) 155 | self.B_9.setDisabled(True) 156 | 157 | def captain(self): 158 | tara = hx.get_weight(5) 159 | if self.B_100.isChecked(): 160 | volume = 100 161 | elif self.B_200.isChecked(): 162 | volume = 200 163 | elif self.B_300.isChecked(): 164 | volume = 300 165 | 166 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 167 | val = hx.get_weight(5) 168 | progress = 100*(val - tara)/(volume) 169 | self.progressBar.setProperty("value", progress) 170 | self.disable_all() 171 | 172 | if val+5 <25: 173 | self.uncheck() 174 | self.allesaus() 175 | self.progressBar.setProperty("value", 0) 176 | self.enable_all() 177 | break 178 | elif val < tara: 179 | self.uncheck() 180 | self.allesaus() 181 | self.progressBar.setProperty("value", 0) 182 | self.enable_all() 183 | break 184 | elif val - tara < volume*0.2: 185 | #os.system("mpg321 gay.mp3") 186 | #subprocess.Popen(["mpg321","gay.mp3"]) 187 | #music = os.popen('mpg321 gay.mp3', 'w') 188 | #music.close() 189 | GPIO.setup(5,GPIO.OUT) 190 | elif volume*0.2 < val - tara < volume: 191 | GPIO.setup(5,GPIO.IN) 192 | GPIO.setup(13,GPIO.OUT) 193 | elif val - tara > volume: 194 | GPIO.setup(13,GPIO.IN) 195 | self.uncheck() 196 | self.progressBar.setProperty("value", 0) 197 | self.enable_all() 198 | GPIO.setup(12,GPIO.IN) 199 | 200 | b = volume*0.001 201 | global a 202 | print(b+float(a)) 203 | a=b+float(a) 204 | self.lcdNumber.display(float(a)) 205 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 206 | E.write(str(a)) 207 | E.close() 208 | 209 | GPIO.setup(16,GPIO.IN) 210 | time.sleep(0.225) 211 | GPIO.setup(16,GPIO.OUT) 212 | time.sleep(0.225) 213 | GPIO.setup(16,GPIO.IN) 214 | time.sleep(0.225) 215 | GPIO.setup(16,GPIO.OUT) 216 | time.sleep(0.225) 217 | GPIO.setup(16,GPIO.IN) 218 | time.sleep(0.225) 219 | GPIO.setup(16,GPIO.OUT) 220 | time.sleep(0.225) 221 | GPIO.setup(16,GPIO.IN) 222 | time.sleep(0.225) 223 | GPIO.setup(16,GPIO.OUT) 224 | 225 | break 226 | else: 227 | continue 228 | 229 | hx.power_down() 230 | hx.power_up() 231 | time.sleep(0.2) 232 | 233 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 234 | self.uncheck() 235 | break 236 | 237 | def monkey(self): 238 | tara = hx.get_weight(5) 239 | if self.B_100.isChecked(): 240 | volume = 100 241 | elif self.B_200.isChecked(): 242 | volume = 200 243 | elif self.B_300.isChecked(): 244 | volume = 300 245 | 246 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 247 | val = hx.get_weight(5) 248 | progress = 100*(val - tara)/(volume) 249 | self.progressBar.setProperty("value", progress) 250 | self.disable_all() 251 | 252 | if val+5 <25: 253 | self.uncheck() 254 | self.allesaus() 255 | self.progressBar.setProperty("value", 0) 256 | self.enable_all() 257 | break 258 | elif val < tara: 259 | self.uncheck() 260 | GPIO.cleanup() 261 | self.progressBar.setProperty("value", 0) 262 | self.enable_all() 263 | break 264 | elif val - tara < volume*0.2: 265 | GPIO.setup(5,GPIO.OUT) 266 | elif volume*0.2 < val - tara < volume: 267 | GPIO.setup(5,GPIO.IN) 268 | GPIO.setup(18,GPIO.OUT) 269 | elif val - tara > volume: 270 | GPIO.setup(18,GPIO.IN) 271 | self.uncheck() 272 | self.progressBar.setProperty("value", 0) 273 | self.enable_all() 274 | GPIO.setup(12,GPIO.IN) 275 | 276 | b = volume*0.001 277 | global a 278 | print(b+float(a)) 279 | a=b+float(a) 280 | self.lcdNumber.display(float(a)) 281 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 282 | E.write(str(a)) 283 | E.close() 284 | 285 | GPIO.setup(16,GPIO.IN) 286 | time.sleep(0.225) 287 | GPIO.setup(16,GPIO.OUT) 288 | time.sleep(0.225) 289 | GPIO.setup(16,GPIO.IN) 290 | time.sleep(0.225) 291 | GPIO.setup(16,GPIO.OUT) 292 | time.sleep(0.225) 293 | GPIO.setup(16,GPIO.IN) 294 | time.sleep(0.225) 295 | GPIO.setup(16,GPIO.OUT) 296 | time.sleep(0.225) 297 | GPIO.setup(16,GPIO.IN) 298 | time.sleep(0.225) 299 | GPIO.setup(16,GPIO.OUT) 300 | 301 | break 302 | else: 303 | continue 304 | hx.power_down() 305 | hx.power_up() 306 | time.sleep(0.2) 307 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 308 | self.uncheck() 309 | break 310 | 311 | 312 | def pain(self): 313 | tara = hx.get_weight(5) 314 | if self.B_100.isChecked(): 315 | volume = 100 316 | elif self.B_200.isChecked(): 317 | volume = 200 318 | elif self.B_300.isChecked(): 319 | volume = 300 320 | 321 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 322 | val = hx.get_weight(5) 323 | progress = 100*(val - tara)/(volume) 324 | self.progressBar.setProperty("value", progress) 325 | self.disable_all() 326 | 327 | if val+5 <25: 328 | self.uncheck() 329 | self.allesaus() 330 | self.progressBar.setProperty("value", 0) 331 | self.enable_all() 332 | break 333 | elif val < tara: 334 | self.uncheck() 335 | GPIO.cleanup() 336 | self.progressBar.setProperty("value", 0) 337 | self.enable_all() 338 | break 339 | elif val - tara < volume*0.2: 340 | GPIO.setup(5,GPIO.OUT) 341 | elif volume*0.2 < val - tara < volume*0.6: 342 | GPIO.setup(5,GPIO.IN) 343 | GPIO.setup(11,GPIO.OUT) 344 | elif volume*0.6 < val - tara < volume: 345 | GPIO.setup(11,GPIO.IN) 346 | GPIO.setup(18,GPIO.OUT) 347 | elif val - tara > volume: 348 | GPIO.setup(18,GPIO.IN) 349 | self.uncheck() 350 | self.progressBar.setProperty("value", 0) 351 | self.enable_all() 352 | GPIO.setup(12,GPIO.IN) 353 | 354 | b = volume*0.001 355 | global a 356 | print(b+float(a)) 357 | a=b+float(a) 358 | self.lcdNumber.display(float(a)) 359 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 360 | E.write(str(a)) 361 | E.close() 362 | 363 | GPIO.setup(16,GPIO.IN) 364 | time.sleep(0.225) 365 | GPIO.setup(16,GPIO.OUT) 366 | time.sleep(0.225) 367 | GPIO.setup(16,GPIO.IN) 368 | time.sleep(0.225) 369 | GPIO.setup(16,GPIO.OUT) 370 | time.sleep(0.225) 371 | GPIO.setup(16,GPIO.IN) 372 | time.sleep(0.225) 373 | GPIO.setup(16,GPIO.OUT) 374 | time.sleep(0.225) 375 | GPIO.setup(16,GPIO.IN) 376 | time.sleep(0.225) 377 | GPIO.setup(16,GPIO.OUT) 378 | 379 | break 380 | else: 381 | continue 382 | hx.power_down() 383 | hx.power_up() 384 | time.sleep(0.2) 385 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 386 | self.uncheck() 387 | break 388 | 389 | 390 | def orange(self): 391 | tara = hx.get_weight(5) 392 | if self.B_100.isChecked(): 393 | volume = 100 394 | elif self.B_200.isChecked(): 395 | volume = 200 396 | elif self.B_300.isChecked(): 397 | volume = 300 398 | 399 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 400 | val = hx.get_weight(5) 401 | progress = 100*(val - tara)/(volume) 402 | self.progressBar.setProperty("value", progress) 403 | self.disable_all() 404 | 405 | if val+5 <25: 406 | self.uncheck() 407 | self.allesaus() 408 | self.progressBar.setProperty("value", 0) 409 | self.enable_all() 410 | break 411 | elif val < tara: 412 | self.uncheck() 413 | GPIO.cleanup() 414 | self.progressBar.setProperty("value", 0) 415 | self.enable_all() 416 | break 417 | elif val - tara < volume*0.2: 418 | GPIO.setup(3,GPIO.OUT) 419 | elif volume*0.2 < val - tara < volume: 420 | GPIO.setup(3,GPIO.IN) 421 | GPIO.setup(11,GPIO.OUT) 422 | elif val - tara > volume: 423 | GPIO.setup(11,GPIO.IN) 424 | self.uncheck() 425 | self.progressBar.setProperty("value", 0) 426 | self.enable_all() 427 | GPIO.setup(12,GPIO.IN) 428 | 429 | b = volume*0.001 430 | global a 431 | print(b+float(a)) 432 | a=b+float(a) 433 | self.lcdNumber.display(float(a)) 434 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 435 | E.write(str(a)) 436 | E.close() 437 | 438 | GPIO.setup(16,GPIO.IN) 439 | time.sleep(0.225) 440 | GPIO.setup(16,GPIO.OUT) 441 | time.sleep(0.225) 442 | GPIO.setup(16,GPIO.IN) 443 | time.sleep(0.225) 444 | GPIO.setup(16,GPIO.OUT) 445 | time.sleep(0.225) 446 | GPIO.setup(16,GPIO.IN) 447 | time.sleep(0.225) 448 | GPIO.setup(16,GPIO.OUT) 449 | time.sleep(0.225) 450 | GPIO.setup(16,GPIO.IN) 451 | time.sleep(0.225) 452 | GPIO.setup(16,GPIO.OUT) 453 | 454 | break 455 | else: 456 | continue 457 | hx.power_down() 458 | hx.power_up() 459 | time.sleep(0.2) 460 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 461 | self.uncheck() 462 | break 463 | 464 | 465 | def pool(self): 466 | tara = hx.get_weight(5) 467 | if self.B_100.isChecked(): 468 | volume = 100 469 | elif self.B_200.isChecked(): 470 | volume = 200 471 | elif self.B_300.isChecked(): 472 | volume = 300 473 | 474 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 475 | val = hx.get_weight(5) 476 | progress = 100*(val - tara)/(volume) 477 | self.progressBar.setProperty("value", progress) 478 | self.disable_all() 479 | 480 | if val+5 <25: 481 | self.uncheck() 482 | self.allesaus() 483 | self.progressBar.setProperty("value", 0) 484 | self.enable_all() 485 | break 486 | elif val < tara: 487 | self.uncheck() 488 | GPIO.cleanup() 489 | self.progressBar.setProperty("value", 0) 490 | self.enable_all() 491 | break 492 | elif val - tara < volume*0.1428: 493 | GPIO.setup(5,GPIO.OUT) 494 | elif volume*0.1428 < val - tara < volume*0.2857: 495 | GPIO.setup(5,GPIO.IN) 496 | GPIO.setup(3,GPIO.OUT) 497 | elif volume*0.2857 < val - tara < volume: 498 | GPIO.setup(3,GPIO.IN) 499 | GPIO.setup(18,GPIO.OUT) 500 | elif val - tara > volume: 501 | GPIO.setup(18,GPIO.IN) 502 | self.uncheck() 503 | self.progressBar.setProperty("value", 0) 504 | self.enable_all() 505 | GPIO.setup(12,GPIO.IN) 506 | 507 | b = volume*0.001 508 | global a 509 | print(b+float(a)) 510 | a=b+float(a) 511 | self.lcdNumber.display(float(a)) 512 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 513 | E.write(str(a)) 514 | E.close() 515 | 516 | GPIO.setup(16,GPIO.IN) 517 | time.sleep(0.225) 518 | GPIO.setup(16,GPIO.OUT) 519 | time.sleep(0.225) 520 | GPIO.setup(16,GPIO.IN) 521 | time.sleep(0.225) 522 | GPIO.setup(16,GPIO.OUT) 523 | time.sleep(0.225) 524 | GPIO.setup(16,GPIO.IN) 525 | time.sleep(0.225) 526 | GPIO.setup(16,GPIO.OUT) 527 | time.sleep(0.225) 528 | GPIO.setup(16,GPIO.IN) 529 | time.sleep(0.225) 530 | GPIO.setup(16,GPIO.OUT) 531 | 532 | break 533 | else: 534 | continue 535 | hx.power_down() 536 | hx.power_up() 537 | time.sleep(0.2) 538 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 539 | self.uncheck() 540 | break 541 | 542 | 543 | def sunrise(self): 544 | tara = hx.get_weight(5) 545 | if self.B_100.isChecked(): 546 | volume = 100 547 | elif self.B_200.isChecked(): 548 | volume = 200 549 | elif self.B_300.isChecked(): 550 | volume = 300 551 | 552 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 553 | val = hx.get_weight(5) 554 | progress = 100*(val - tara)/(volume) 555 | self.progressBar.setProperty("value", progress) 556 | self.disable_all() 557 | 558 | if val+5 <25: 559 | self.uncheck() 560 | self.allesaus() 561 | self.progressBar.setProperty("value", 0) 562 | self.enable_all() 563 | break 564 | elif val < tara: 565 | self.uncheck() 566 | GPIO.cleanup() 567 | self.progressBar.setProperty("value", 0) 568 | self.enable_all() 569 | break 570 | elif val - tara < volume*0.3333: 571 | GPIO.setup(3,GPIO.OUT) 572 | elif volume*0.3333 < val - tara < volume*0.6666: 573 | GPIO.setup(3,GPIO.IN) 574 | GPIO.setup(11,GPIO.OUT) 575 | elif volume*0.6666 < val - tara < volume: 576 | GPIO.setup(11,GPIO.IN) 577 | GPIO.setup(18,GPIO.OUT) 578 | elif val - tara > volume: 579 | GPIO.setup(18,GPIO.IN) 580 | self.uncheck() 581 | self.progressBar.setProperty("value", 0) 582 | self.enable_all() 583 | GPIO.setup(12,GPIO.IN) 584 | 585 | b = volume*0.001 586 | global a 587 | print(b+float(a)) 588 | a=b+float(a) 589 | self.lcdNumber.display(float(a)) 590 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 591 | E.write(str(a)) 592 | E.close() 593 | 594 | GPIO.setup(16,GPIO.IN) 595 | time.sleep(0.225) 596 | GPIO.setup(16,GPIO.OUT) 597 | time.sleep(0.225) 598 | GPIO.setup(16,GPIO.IN) 599 | time.sleep(0.225) 600 | GPIO.setup(16,GPIO.OUT) 601 | time.sleep(0.225) 602 | GPIO.setup(16,GPIO.IN) 603 | time.sleep(0.225) 604 | GPIO.setup(16,GPIO.OUT) 605 | time.sleep(0.225) 606 | GPIO.setup(16,GPIO.IN) 607 | time.sleep(0.225) 608 | GPIO.setup(16,GPIO.OUT) 609 | 610 | break 611 | else: 612 | continue 613 | hx.power_down() 614 | hx.power_up() 615 | time.sleep(0.2) 616 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 617 | self.uncheck() 618 | break 619 | 620 | 621 | def icetea(self): 622 | tara = hx.get_weight(5) 623 | if self.B_100.isChecked(): 624 | volume = 100 625 | elif self.B_200.isChecked(): 626 | volume = 200 627 | elif self.B_300.isChecked(): 628 | volume = 300 629 | 630 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 631 | val = hx.get_weight(5) 632 | progress = 100*(val - tara)/(volume) 633 | self.progressBar.setProperty("value", progress) 634 | self.disable_all() 635 | 636 | if val+5 <25: 637 | self.uncheck() 638 | self.allesaus() 639 | self.progressBar.setProperty("value", 0) 640 | self.enable_all() 641 | break 642 | elif val < tara: 643 | self.uncheck() 644 | GPIO.cleanup() 645 | self.progressBar.setProperty("value", 0) 646 | self.enable_all() 647 | break 648 | elif val - tara < volume*0.1666: 649 | GPIO.setup(3,GPIO.OUT) 650 | elif volume*0.1666 < val - tara < volume*0.3333: 651 | GPIO.setup(3,GPIO.IN) 652 | GPIO.setup(5,GPIO.OUT) 653 | elif volume*0.3333 < val - tara < volume*0.6666: 654 | GPIO.setup(5,GPIO.IN) 655 | GPIO.setup(13,GPIO.OUT) 656 | elif volume*0.6666 < val - tara < volume: 657 | GPIO.setup(13,GPIO.IN) 658 | GPIO.setup(11,GPIO.OUT) 659 | elif val - tara > volume: 660 | GPIO.setup(11,GPIO.IN) 661 | self.uncheck() 662 | self.progressBar.setProperty("value", 0) 663 | self.enable_all() 664 | GPIO.setup(12,GPIO.IN) 665 | 666 | b = volume*0.001 667 | global a 668 | print(b+float(a)) 669 | a=b+float(a) 670 | self.lcdNumber.display(float(a)) 671 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 672 | E.write(str(a)) 673 | E.close() 674 | 675 | GPIO.setup(16,GPIO.IN) 676 | time.sleep(0.225) 677 | GPIO.setup(16,GPIO.OUT) 678 | time.sleep(0.225) 679 | GPIO.setup(16,GPIO.IN) 680 | time.sleep(0.225) 681 | GPIO.setup(16,GPIO.OUT) 682 | time.sleep(0.225) 683 | GPIO.setup(16,GPIO.IN) 684 | time.sleep(0.225) 685 | GPIO.setup(16,GPIO.OUT) 686 | time.sleep(0.225) 687 | GPIO.setup(16,GPIO.IN) 688 | time.sleep(0.225) 689 | GPIO.setup(16,GPIO.OUT) 690 | 691 | break 692 | else: 693 | continue 694 | hx.power_down() 695 | hx.power_up() 696 | time.sleep(0.2) 697 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 698 | self.uncheck() 699 | break 700 | 701 | 702 | def chi(self): 703 | tara = hx.get_weight(5) 704 | if self.B_100.isChecked(): 705 | volume = 100 706 | elif self.B_200.isChecked(): 707 | volume = 200 708 | elif self.B_300.isChecked(): 709 | volume = 300 710 | 711 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 712 | val = hx.get_weight(5) 713 | progress = 100*(val - tara)/(volume) 714 | self.progressBar.setProperty("value", progress) 715 | self.disable_all() 716 | 717 | if val+5 <25: 718 | self.uncheck() 719 | self.allesaus() 720 | self.progressBar.setProperty("value", 0) 721 | self.enable_all() 722 | break 723 | elif val < tara: 724 | self.uncheck() 725 | GPIO.cleanup() 726 | self.progressBar.setProperty("value", 0) 727 | self.enable_all() 728 | break 729 | elif val - tara < volume*0.3333: 730 | GPIO.setup(3,GPIO.OUT) 731 | elif volume*0.3333 < val - tara < volume: 732 | GPIO.setup(3,GPIO.IN) 733 | GPIO.setup(18,GPIO.OUT) 734 | elif val - tara > volume: 735 | GPIO.setup(18,GPIO.IN) 736 | self.uncheck() 737 | self.progressBar.setProperty("value", 0) 738 | self.enable_all() 739 | GPIO.setup(12,GPIO.IN) 740 | 741 | b = volume*0.001 742 | global a 743 | print(b+float(a)) 744 | a=b+float(a) 745 | self.lcdNumber.display(float(a)) 746 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 747 | E.write(str(a)) 748 | E.close() 749 | 750 | GPIO.setup(16,GPIO.IN) 751 | time.sleep(0.225) 752 | GPIO.setup(16,GPIO.OUT) 753 | time.sleep(0.225) 754 | GPIO.setup(16,GPIO.IN) 755 | time.sleep(0.225) 756 | GPIO.setup(16,GPIO.OUT) 757 | time.sleep(0.225) 758 | GPIO.setup(16,GPIO.IN) 759 | time.sleep(0.225) 760 | GPIO.setup(16,GPIO.OUT) 761 | time.sleep(0.225) 762 | GPIO.setup(16,GPIO.IN) 763 | time.sleep(0.225) 764 | GPIO.setup(16,GPIO.OUT) 765 | 766 | break 767 | else: 768 | continue 769 | hx.power_down() 770 | hx.power_up() 771 | time.sleep(0.2) 772 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 773 | self.uncheck() 774 | break 775 | 776 | 777 | def zombie(self): 778 | tara = hx.get_weight(5) 779 | if self.B_100.isChecked(): 780 | volume = 100 781 | elif self.B_200.isChecked(): 782 | volume = 200 783 | elif self.B_300.isChecked(): 784 | volume = 300 785 | 786 | while self.B_100.isChecked() or self.B_200.isChecked() or self.B_300.isChecked(): 787 | self.disable_all() 788 | val = hx.get_weight(5) 789 | progress = 100*(val - tara)/(volume) 790 | self.progressBar.setProperty("value", progress) 791 | 792 | 793 | if val+5 <25: 794 | self.uncheck() 795 | self.allesaus() 796 | self.progressBar.setProperty("value", 0) 797 | self.enable_all() 798 | break 799 | elif val < tara: 800 | self.uncheck() 801 | GPIO.cleanup() 802 | self.progressBar.setProperty("value", 0) 803 | self.enable_all() 804 | break 805 | elif val - tara < volume*0.1666 : 806 | GPIO.setup(3,GPIO.OUT) 807 | elif volume*0.1666 < val - tara < volume*0.3333: 808 | GPIO.setup(3,GPIO.IN) 809 | GPIO.setup(5,GPIO.OUT) 810 | elif volume*0.3333 < val - tara < volume*0.6666: 811 | GPIO.setup(5,GPIO.IN) 812 | GPIO.setup(13,GPIO.OUT) 813 | elif volume*0.6666 < val - tara < volume*0.8333: 814 | GPIO.setup(13,GPIO.IN) 815 | GPIO.setup(11,GPIO.OUT) 816 | elif volume*0.8333 < val - tara < volume: 817 | GPIO.setup(11,GPIO.IN) 818 | GPIO.setup(18,GPIO.OUT) 819 | elif val - tara > volume: 820 | GPIO.setup(18,GPIO.IN) 821 | self.uncheck() 822 | self.progressBar.setProperty("value", 0) 823 | self.enable_all() 824 | GPIO.setup(12,GPIO.IN) 825 | 826 | b = volume*0.001 827 | global a 828 | print(b+float(a)) 829 | a=b+float(a) 830 | self.lcdNumber.display(float(a)) 831 | E = open("/home/pi/codes/GetrAtomat/Version_Oktober_17/data.txt","w") 832 | E.write(str(a)) 833 | E.close() 834 | 835 | GPIO.setup(16,GPIO.IN) 836 | time.sleep(0.225) 837 | GPIO.setup(16,GPIO.OUT) 838 | time.sleep(0.225) 839 | GPIO.setup(16,GPIO.IN) 840 | time.sleep(0.225) 841 | GPIO.setup(16,GPIO.OUT) 842 | time.sleep(0.225) 843 | GPIO.setup(16,GPIO.IN) 844 | time.sleep(0.225) 845 | GPIO.setup(16,GPIO.OUT) 846 | time.sleep(0.225) 847 | GPIO.setup(16,GPIO.IN) 848 | time.sleep(0.225) 849 | GPIO.setup(16,GPIO.OUT) 850 | 851 | break 852 | else: 853 | continue 854 | hx.power_down() 855 | hx.power_up() 856 | time.sleep(0.2) 857 | while not self.B_100.isChecked() or not self.B_200.isChecked() or not self.B_300.isChecked(): 858 | self.uncheck() 859 | break 860 | 861 | 862 | def tarefunction(): 863 | tara = hx.get_weight(5) 864 | 865 | def cleanAndExit(self): 866 | print "Cleaning..." 867 | GPIO.cleanup() 868 | print "Bye!" 869 | sys.exit() 870 | 871 | if __name__ == '__main__': 872 | app = QtGui.QApplication(sys.argv) 873 | s = MainWindow() 874 | s.show() 875 | sys.exit(app.exec_()) 876 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # # Raspberry Pi powered cocktail machine 2 | 3 | This is the code for the cocktail machine i created. I am not a programmer and this is my first projekt ever but i try my best. The Machine has 5 basis liquids that can be mixed together to create a varietys of different cocktails. There is pressure applied to the bottles with a pump that pushes air into them. Upon opening magnetic valves that are controlled by relays the liquid can be poured into a glass. The specific amount of the liquids obviously is not always the same, so the valves are controlled by a scale the glass is placed on. 4 | 5 | ## Getting Started 6 | 7 | I usally have the most recent version of raspbian running on my RPi 3. This however should not matter too much. It should also work on other RPis. Only tested it for the Zero W though. 8 | 9 | Here is the link to * [imgur](https://imgur.com/gallery/Ow600) 10 | ### Prerequisites 11 | 12 | You need to install pyqt to run the ui. 13 | Other than that you should be good to go 14 | 15 | ## License 16 | 17 | This project is licensed under the MIT License 18 | 19 | -------------------------------------------------------------------------------- /data.txt: -------------------------------------------------------------------------------- 1 | 6.9 -------------------------------------------------------------------------------- /hx711.py: -------------------------------------------------------------------------------- 1 | import RPi.GPIO as GPIO 2 | import time 3 | import sys 4 | import numpy # sudo apt-get python-numpy 5 | GPIO.setmode(GPIO.BOARD) 6 | 7 | class HX711: 8 | def __init__(self, dout, pd_sck, gain=128): 9 | self.PD_SCK = pd_sck 10 | self.DOUT = dout 11 | 12 | GPIO.setmode(GPIO.BOARD) 13 | GPIO.setup(self.PD_SCK, GPIO.OUT) 14 | GPIO.setup(self.DOUT, GPIO.IN) 15 | 16 | self.GAIN = 0 17 | self.REFERENCE_UNIT = 1 # The value returned by the hx711 that corresponds to your reference unit AFTER dividing by the SCALE. 18 | 19 | self.OFFSET = 1 20 | self.lastVal = long(0) 21 | 22 | self.LSByte = [2, -1, -1] 23 | self.MSByte = [0, 3, 1] 24 | 25 | self.MSBit = [0, 8, 1] 26 | self.LSBit = [7, -1, -1] 27 | 28 | self.byte_range_values = self.LSByte 29 | self.bit_range_values = self.MSBit 30 | 31 | self.set_gain(gain) 32 | 33 | time.sleep(1) 34 | 35 | def is_ready(self): 36 | return GPIO.input(self.DOUT) == 0 37 | 38 | def set_gain(self, gain): 39 | if gain is 128: 40 | self.GAIN = 1 41 | elif gain is 64: 42 | self.GAIN = 3 43 | elif gain is 32: 44 | self.GAIN = 2 45 | 46 | GPIO.output(self.PD_SCK, False) 47 | self.read() 48 | 49 | def createBoolList(self, size=8): 50 | ret = [] 51 | for i in range(8): 52 | ret.append(False) 53 | return ret 54 | 55 | def read(self): 56 | while not self.is_ready(): 57 | #print("WAITING") 58 | pass 59 | 60 | dataBits = [self.createBoolList(), self.createBoolList(), self.createBoolList()] 61 | dataBytes = [0x0] * 4 62 | 63 | for j in range(self.byte_range_values[0], self.byte_range_values[1], self.byte_range_values[2]): 64 | for i in range(self.bit_range_values[0], self.bit_range_values[1], self.bit_range_values[2]): 65 | GPIO.output(self.PD_SCK, True) 66 | dataBits[j][i] = GPIO.input(self.DOUT) 67 | GPIO.output(self.PD_SCK, False) 68 | dataBytes[j] = numpy.packbits(numpy.uint8(dataBits[j])) 69 | 70 | #set channel and gain factor for next reading 71 | for i in range(self.GAIN): 72 | GPIO.output(self.PD_SCK, True) 73 | GPIO.output(self.PD_SCK, False) 74 | 75 | #check for all 1 76 | #if all(item is True for item in dataBits[0]): 77 | # return long(self.lastVal) 78 | 79 | dataBytes[2] ^= 0x80 80 | 81 | return dataBytes 82 | 83 | def get_binary_string(self): 84 | binary_format = "{0:b}" 85 | np_arr8 = self.read_np_arr8() 86 | binary_string = "" 87 | for i in range(4): 88 | # binary_segment = binary_format.format(np_arr8[i]) 89 | binary_segment = format(np_arr8[i], '#010b') 90 | binary_string += binary_segment + " " 91 | return binary_string 92 | 93 | def get_np_arr8_string(self): 94 | np_arr8 = self.read_np_arr8() 95 | np_arr8_string = "["; 96 | comma = ", " 97 | for i in range(4): 98 | if i is 3: 99 | comma = "" 100 | np_arr8_string += str(np_arr8[i]) + comma 101 | np_arr8_string += "]"; 102 | 103 | return np_arr8_string 104 | 105 | def read_np_arr8(self): 106 | dataBytes = self.read() 107 | np_arr8 = numpy.uint8(dataBytes) 108 | 109 | return np_arr8 110 | 111 | def read_long(self): 112 | np_arr8 = self.read_np_arr8() 113 | np_arr32 = np_arr8.view('uint32') 114 | self.lastVal = np_arr32 115 | 116 | return long(self.lastVal) 117 | 118 | def read_average(self, times=3): 119 | values = long(0) 120 | for i in range(times): 121 | values += self.read_long() 122 | 123 | return values / times 124 | 125 | def get_value(self, times=3): 126 | return self.read_average(times) - self.OFFSET 127 | 128 | def get_weight(self, times=3): 129 | value = self.get_value(times) 130 | value = value / self.REFERENCE_UNIT 131 | return value 132 | 133 | def tare(self, times=15): 134 | 135 | # Backup REFERENCE_UNIT value 136 | reference_unit = self.REFERENCE_UNIT 137 | self.set_reference_unit(1) 138 | 139 | value = self.read_average(times) 140 | self.set_offset(value) 141 | 142 | self.set_reference_unit(reference_unit) 143 | 144 | def set_reading_format(self, byte_format="LSB", bit_format="MSB"): 145 | if byte_format == "LSB": 146 | self.byte_range_values = self.LSByte 147 | elif byte_format == "MSB": 148 | self.byte_range_values = self.MSByte 149 | 150 | if bit_format == "LSB": 151 | self.bit_range_values = self.LSBit 152 | elif bit_format == "MSB": 153 | self.bit_range_values = self.MSBit 154 | 155 | def set_offset(self, offset): 156 | self.OFFSET = offset 157 | 158 | def set_reference_unit(self, reference_unit): 159 | self.REFERENCE_UNIT = reference_unit 160 | 161 | # HX711 datasheet states that setting the PDA_CLOCK pin on high for a more than 60 microseconds would power off the chip. 162 | # I used 100 microseconds, just in case. 163 | # I've found it is good practice to reset the hx711 if it wasn't used for more than a few seconds. 164 | def power_down(self): 165 | GPIO.output(self.PD_SCK, False) 166 | GPIO.output(self.PD_SCK, True) 167 | time.sleep(0.0001) 168 | 169 | def power_up(self): 170 | GPIO.output(self.PD_SCK, False) 171 | time.sleep(0.0001) 172 | 173 | def reset(self): 174 | self.power_down() 175 | self.power_up() 176 | --------------------------------------------------------------------------------