schemalägga fyra doserpumpar med python.

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
viggen82
Inlägg: 15
Blev medlem: 17 augusti 2012, 18:02:30

schemalägga fyra doserpumpar med python.

Inlägg av viggen82 »

Vet inte var jag ska börja, har försökt att sätta mig in i python men min hjärna verkar vara för gammal och mosig ;)

har fyra st pumpar som jag vill koppla till min Raspberry via ett reläkort, dessa pumpar ska dosera en gång per dygn, lämpligtvis vid midnatt enligt följande schema:

1. pump nr 1 går i t ex 10 sekunder
2.väntan i tio minuter

3. pump nr 2 går i t ex 10 sekunder
4.väntan i tio minuter

5. pump nr 3 går i t ex 10 sekunder
6.väntan i tio minuter

7. pump nr 4 går i t ex 10 sekunder
8.vänta tills nästa midnatt.

allt får gärna hoppa igång vid eventuellt strömavbrott.

använder denna: http://www.linuxsystems.it/raspbian-whe ... mal-image/ och fattar jag allt rätt så får den rätt tid automatiskt?

Var börjar jag?
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: schemalägga fyra doserpumpar med python.

Inlägg av Krille Krokodil »

Är du intresserad av styr & regler så kika på PLC:

Codesys Timers Part 7


"Due to technical problems the release of the full version of CODESYS Control for Raspberry Pi had to be shifted. The runtime is scheduled for mid of July (at the latest) with a price of 35€ per device license." http://store.codesys.com/systeme/codesy ... ry-pi.html

Men det är jättenkelt att göra i Python, gör en slinga som går 1 gång per sekund och ha en
variabel "tid" som håller reda på antalet sekunder sedan kl 00:00:00.

switch(tid) {
case 0:
Sätt på pump 1
Sätt på pump 2
case 10:
Stäng av pump 1
Stäng av pump 2
case 100:
Sätt på pump 3
case 110:
Stäng av pump 3
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: schemalägga fyra doserpumpar med python.

Inlägg av sodjan »

Det är ser inte ut att göra det efterfrågade, det är väl mer i stil med:

loop:

Vänta tills det är "midnatt"

Sätt på pump 1
Vänta 10 sek
Stäng av pump 1

Vänta 10 minuter

Sätt på pump 2
Vänta 10 sek
Stäng av pump 2

Vänta 10 minuter

Sätt på pump 3
Vänta 10 sek
Stäng av pump 3

Vänta 10 minuter

Sätt på pump 4
Vänta 10 sek
Stäng av pump 4

Gå till "loop"

Något slags PLC liknande (antingen en riktig PLC eller en PLC
programvara till t.ex en Rasp PI) fixar ju det lätt. Men även
en litet Python script gör det också. Man kan sannolikt använda
något delay funktion antingen i Python i sig eller via en OS anrop.
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: schemalägga fyra doserpumpar med python.

Inlägg av Icecap »

Nu är det ju frågan för om det viktiga är 1 gg/dygnet eller midnatt som gäller.

Själva sekvensen är enkel att programmera, en Raspberry Pi som kör Linux har en systemtimer och den kan användas.

Exakt vad kommandot är för att läsa av systemtimern vet jag inte men låta oss kalla den systime() i detta exempel. Den börjar på 0 när enheten startas.

Kod: Markera allt

long Now_Time, Pump_Start, Pump_Stop, Pump_Again;
unsigned char Pump_Sequence;

switch(Pump_Sequence)
  {
  case 0:
    if(Pump_Again <= systime())
      {
      Pump_Again += 86400000; // Kör igen nästa dygn
      Pump_Start = systime();
      Pump_Stop = Pump_Start + 10000; // systime() brukar räknas i ms
      Pump_Sequence++;
      }
    break;
  case 1:
    if((Pump_Start <= systime())  && (Pump_Stop <= systime())
      {
      // Start pump 1
      }
    else
      {
      // Stop pump 1
      Pump_Start += 610000;  // Vänta 10:10 från förra start
      Pump_Stop = Pump_Start + 10000; // 10 sek drifttid
      Pump_Sequence++;
      }
    break;
  case 2:
    if((Pump_Start <= systime())  && (Pump_Stop <= systime())
      {
      // Start pump 2
      }
    else
      {
      // Stop pump 2
      Pump_Start += 610000;  // Vänta 10:10 från förra start
      Pump_Stop = Pump_Start + 10000; // 10 sek drifttid
      Pump_Sequence++;
      }
    break;
  case 3:
    if((Pump_Start <= systime())  && (Pump_Stop <= systime())
      {
      // Start pump 3
      }
    else
      {
      // Stop pump 3
      Pump_Start += 610000;  // Vänta 10:10 från förra start
      Pump_Stop = Pump_Start + 10000; // 10 sek drifttid
      Pump_Sequence++;
      }
    break;
  case 4:
    if((Pump_Start <= systime())  && (Pump_Stop <= systime())
      {
      // Start pump 4
      }
    else
      {
      // Stop pump 4
      Pump_Sequence = 0;
      }
    break;
  default:
    Pump_Sequence = 0;
    break;
  }
Inte elegant eller liknande - men sannolikt ganska funktionsduglig.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: schemalägga fyra doserpumpar med python.

Inlägg av Lennart Aspenryd »

Personligen skulle jag tänka mig att man la upp en jobblista.
Jag tror att tio minuter mellan pumparna kan vilja ändras, liksom längden på resp pump.

Tid, enhet, längd i s.

00:00:30, Pump1, 10
00:00:45, Pump2, 12
00:01:00, Pump3, 9
00:01:20, Pump4, 15

Ett program som läser Åtgärdsfilen skulle då vara flexibelt!

Och som IceCap kommenterar medans jag skrev, vad är viktigt!
nifelheim
Den första
Inlägg: 2485
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: schemalägga fyra doserpumpar med python.

Inlägg av nifelheim »

installera raspian :
http://www.raspberrypi.org/downloads/

vill du göra det enkelt
skriv ett program för varje pump,
om du väljer python eller något annat språk beror på vad du råkar kunna bäst.

utan direkta förkunskaper förmodligen enklast med shell script
tex.
http://www.instructables.com/id/Control ... /?ALLSTEPS
(bara en träff på google när jag sökte liknande "script raspberry gpio")


lägg in dina program som cron-jobb
när du vill att dom ska köras, med crontab -e


edit: stavning
Användarvisningsbild
MiaM
Inlägg: 12760
Blev medlem: 6 maj 2009, 22:19:19

Re: schemalägga fyra doserpumpar med python.

Inlägg av MiaM »

med en riktig linuxdist så är väl ett cronjobb lämpligt för att hålla reda på när sakerna ska exekveras?
viggen82
Inlägg: 15
Blev medlem: 17 augusti 2012, 18:02:30

Re: schemalägga fyra doserpumpar med python.

Inlägg av viggen82 »

Jag köpte ett script för webiopi, det är för bevattning och så nu behöver jag modda det från minuter till sekunder, det borde ju vara gansla enkelt. Men jag har ett problem, programvaran är för 16 kanaler så jag behöver ju något expanderkort för detta eller så får jag skriva om programvaran, vet dock inte riktigt hur jag ska göra. Ska se om jag klarar av det själv, koden är ju nästan i klarspråk känns det som och det finns vettiga föklaringar skrivna överallt som sig bör :) Men va fan, kanske lika bra att köpa ett kort, jag har redan två saltvattenkar igång, jag skulle kunna köra denna dosering i dessa två och inom ett år så blir nog mitt stora kar också salt så då skulle jag totalt behöva 12 kanaler ändå haha :)
viggen82
Inlägg: 15
Blev medlem: 17 augusti 2012, 18:02:30

Re: schemalägga fyra doserpumpar med python.

Inlägg av viggen82 »

å här startar scriptet:

import webiopi
import json
import time
import datetime
import sys
from webiopi.devices.digital.mcp23XXX import MCP23S17

if sys.version_info.major >= 3:
import configparser as parser
else:
import ConfigParser as parser


## Convenient helper for OUT/IN and HIGH/LOW constants
GPIO = webiopi.GPIO

## Expander chip
mcp = MCP23S17() # PiFace (SPI)
# mcp = MCP23017() # IO PI (I2C)

## Channels count
CHANNELS = 16


Detta borde väl man kunna ändra på så att jag addreserar en GPIO pinne till fyra kanaler istället? För nu hämtar den väl info om expenderkort från webiopi?
Skriv svar