Project Embedded Linux Domaza. Elektronica-ICT. Dimitri Kozakiewiez Jonas Govaerts. Academiejaar 2014-2015



Vergelijkbare documenten
Niveaudetectie van gevulde wijnflessen

Programmeren van de Raspberry Pi.

Om een ander voorbeeld aan te halen waar er wel een opsplitsing van toepassing is:

DOBBELSTEEN 2.0. Stap-voor-stap instructie

Chris de Kok TDI 3. Vak: Software Architectuur Datum: Docent: Fons van Kesteren

Websitecursus deel 2 CSS

Raspberry Pi Interfacing.

Voor vragen: of mail naar

Gegevens uit een database tonen

Javascript oefenblad 1

Handleiding Woonz.nl iframe

Monopoly: Howest edition

WORKSHOP ORANGE PI & PYTHON v september 2017

Roc Zadkine. Javascript Car. Door: K.Bakker versie 1.0

HTML en CSS gevorderd

Basis-theme. Manage Wiki > Look and Feel > Themes > Change or make a new theme > Make a New Theme >

FFO Webdesign 1e jaar theorietoets NL niveau4... Totaal aantal vragen: 40

Seven segments of Pi

Software 1. php mysql. bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar semester 1

Les 9: formulier controle met javascript.

I'VE GOT EM FRONTEND DEVELOPMENT LES 3

Versie: 1.0 Gemaakt door: Whisper380 Eigenaar: Whisper380-computerhulp Datum:

Het hele scherm besturen

EmSE presentatie. Raspberry Pi: Mijn eerste hapjes

Min-height en min-width

WEBSITE-DESIGN CHRIS VERMAAS & FJODOR VAN SLOOTEN B

Templates maken voor Joomla! Hoe maak je zelf een template voor je Joomla! website

Programmeren. a. 0, 0, 0 b. 0, 0, 27 c. 15, 12, 0 d. 15, 12, 27

1. De basis 2. De basis uitbreiden

Beveiligingsmodule GIP Niels Van Damme VTI-LOKEREN

RESPONSIVE DRUPAL THEMING MET SASS, COMPASS, SUSY EN AURORA DRUPAL TECH TALK 25 APRIL 2013 MARC VAN GEND TRIQUANTA

Wat is een child-theme?

Zonnepanelen Hoe krijg je de data op je website?

Inhoud. Pagina 2 van 13

Eigen Widgets in CRM. Introductie. Limitering. Widgets beschikbaar stellen. Tips & Tricks Eigen Widgets in CRM

USB 2x. USB 2x DSI (DISPLAY) Audio HDMI. ETHERNET Power

Raspberry Pi HCC- Haaglanden Tim Woldring

Katholieke Hogeschool Kempen ASP

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

Taak Strict or Strong. Inhoud

Software Instructions for Real Kids - Felix Plesoianu (2009) en Kris Merckx (2013) - Creative Commons License

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Exercise assistant on-line

SQL INJECTIE Door Eoghain Verdonckt Beveiliging december 2013

Websitecursus deel 3 JavaScript

Sima. Programmeren. 2e graad

AJAX (XMLHttpRequest)

Scripting 2 TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. ellipse(screenwidth/2, screenheight/2, 140,140); DOOR THIERRY BRANDERHORST

Voor vragen: of mail naar

Dynamische Websites. Week 9

De Sense HAT programmeren Je eerste computerprogramma

Beleef het nieuwe Klantverwijssysteem

Beleef het nieuwe Klantverwijssysteem

API Specificatie Doc

Workshop Arduino voor beginners deel 2

SINT JORISINSTITUUT RASPBERRY PI. Karl

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

Hosting. Bestelformulier en domeinnaamcontrole. Januari, WeFact B.V. Kuiper 7a 5521 DG Eersel Nederland. w: e:

Inleiding Programmeren 2

Topic: College 3 opdrachten - analoge IO Modified: 27 september :12

Drupal theming. 28 april CVO Crescendo

Je hoeft je maar met twee bestanden bezig te houden:

Linux Gevorderden Basis installatie Linux. Elektronica-ICT. Selina Oudermans 2ICT4. Academiejaar

64 voor de BBC micro:bit

DrICTVoip.dll v 2.1 Informatie en handleiding

Opdrachtformulering (pagina 3 van 7)

Handleiding: Whitelabel Customersite

NVU work shop. Kees Moerman November Overzicht van een web site. Wat is een web site HTML files

API Specificatie Doc

Kris Merckx Javascript Programming - DIVARC - trigonometry en wrapping/warping text

Raspberry Pi Recepten - Deel 7

VAN HET PROGRAMMEREN. Inleiding

Raspberry Pi Webhosting Datacenter

Joomla! 1.5 templates

Webscripting. PCVO Gent & OBAC. Willem De Meyer

Wat is Arduino? Arduino = microprocessor (Atmel)

De tag aan het begin van het PHPscript is "<?php" aan het einde van het PHPscript gebruik je "?>".

GSM250 GSM OPENER PROGRAMMATIE HANDLEIDING

Dit document bevat een beschrijving van het proces van de Webdesign opdracht voor de cursus Informatie-uitwisseling van de opleiding Informatiekunde

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Descendant selectors toepassen

Domein API Handleiding

Connect a Thing! WORKSHOP solderen electronica raspberrypi websocket. onderzoek creativiteit IoT web sensoren. [ competenties 21 st Century Skills ]

Programmeren met Arduino-software

Deel 2 S7 Graph Ont4 - GA3

Les 3. Gebruik in volledige programma Default argumenten Vergelijken van objecten

LES 4 WERKEN EN ERVARING OPDOEN. NOG VIER WEBPAGINA'S MAKEN.

Om te beginnen heb je een geraamte van je website nodig. Maak een nieuwe map met de naam gevorderden_website aan om je website in te zetten.

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Formulier maken en opvangen met php

Les 12 : database koppeling, opmaken van template, webstructuur en afdrukken van gegevens. (deel2).

Inleiding Programmeren 2

INHOUD. Dankwoord...xvi Inleiding... xvii De basis... 2

Web building basis: HTML. Karel Nijs 2008/09

WEBSITE-DESIGN CHRIS VERMAAS & FJODOR VAN SLOOTEN B

Foutcontrole met Javascript

Configuratiehandleiding

Jarno Verhoogt 21 mei 2014 Stud. Nr Docent: Joost Faber. Deeltoets 2: Hoe maak je met javascript een eenvoudige slideshow?

Agenda. Wat is HTML? Meer over HTML... Waarom HTML leren? Aniel Bhulai. Inleiding Computergebruik - HTML 1. Waarin maak je een HTML-bestand?

Transcriptie:

Project Embedded Linux Domaza Elektronica-ICT Dimitri Kozakiewiez Jonas Govaerts Academiejaar 2014-2015 Campus Geel, Kleinhoefstraat 4, BE-2440 Geel 5

2 INHOUDSTAFEL INHOUDSTAFEL... 2 1 DOMAZA... 3 1.1 Inleiding... 3 1.1.1 Wie zijn we?... 3 1.1.2 Wat doen we?... 3 1.1.3 Wat is domotica?... 3 1.1.4 Projecten... 3 2 BESCHRIJVING PROJECT DOMOTICA... 4 2.1 Inleiding... 4 2.1.1 Eisen... 4 2.1.2 Specificaties... 4 2.1.2.1 Hardware... 4 2.1.2.2 Software... 4 3 LAY-OUT... 5 3.1 Uitleg... 5 3.2 Visuele opstelling... 5 3.3 Schematische opstelling... 5 4 SOFTWARE... 6 4.1 Python... 6 4.2 Crontab... 7 4.3 PHP... 7 4.3.1 Uitlezen GPIO pins... 7 4.3.2 Layout... 7 4.3.3 Index... 8 4.3.4 Javascript... 8 5 SCHEMA ELEKTRONICA... 9 5.1 Opstelling... 9 BESLUIT.... 10 BIJLAGE... 1 Lcd.py... 1 Index.php... 5 Script.js... 6

3 1 DOMAZA 1.1 Inleiding Wij zijn Domaza, al een jaar maken wij domotica solutions alsof ze voor onszelf zijn. Degelijk en op maat gemaakt, nergens vindt je de kwaliteit en service van Domaza aan betere kwaliteit of aan een scherpere prijs. 1.1.1 Wie zijn we? Domaza werd in 2014 opgericht door slechts 2 personen, Dimitri Kozakiewiez en Jonas Govaerts. Wij wisten toen dat er een grote toekomst zat in de domotica. Domaza sloot contracten af met Thomas More en later met de Domoticamaatschappij. Deze contracten waren van zeer groot belang voor het bestaan van Domaza. Anno 2014 is Domaza een van de wereldleiders in domotica solutions geworden. 1.1.2 Wat doen we? Domaza heeft een uitgebreid aanbod van domotica solutions. De prijzen van deze industriële installaties varieert van de aard van de opdracht, alsook de plaats en materiaal hiervan. Zo kan een Domaza klant hun domotica solution zelf naar eigen wensen laten personaliseren. 1.1.3 Wat is domotica? Domotica is de toepassing van diverse technieken in een woning met als bedoeling het leef- en wooncomfort te verhogen. De toegepaste technieken hebben betrekking op automatische regelingen op vijf verschillende domeinen: verlichting, klimatisatie, huishoudtoestellen, beveiliging en communicatie. 1.1.4 Projecten Een van onze eerste projecten was om een domotica solution uit te bouwen voor een klant. Meer informatie vindt u hieronder.

4 2 BESCHRIJVING PROJECT DOMOTICA 2.1 Inleiding De klant wou een domoticastructuur implementeren in zijn huis. Hiervoor moest het project uiteraard aan enkele eisen voldoen. 2.1.1 Eisen Hieronder vindt u de vereisten waaraan ons project moest voldoen. De klant kan in alle kamers in het huis de lichten aan of uit doen De klant kan de verwarming hoger of lager zetten De klant moet de streeftemperatuur alsook de huidige tijd kunnen aflezen van het LCD scherm. 2.1.2 Specificaties Hieronder vindt u de benodigdheden die we nodig hebben om ons project te kunnen realiseren. 2.1.2.1 Hardware Raspberry Pi Model B+ 8 x LED 8 x Weerstand Solderless Bread Board 2.1.2.2 Software WiringPi Appache Web Server

5 3 LAY-OUT 3.1 Uitleg Op de modelweergave van de woning kan je de 8 lampen in de kamers zien. Deze led lampen kan je aan en uit zetten d.m.v. de web interface. Er is ook nog een LCD-scherm te zien bij de opstelling. Hierop kan de klant de huidige tijd en de temperatuur waarnemen. De temperatuur kan geregeld worden via de potentiometer. Als we de temperatuur regelen wordt ook een bijhorende LED zachtjes aangezet. 3.2 Visuele opstelling 3.3 Schematische opstelling

6 4 SOFTWARE 4.1 Python Op de Raspberry Pi B+ maken we gebruik van de programmeertaal Python. We hebben op de Raspberry Pi B+ Wiring Pi geïnstalleerd. Dit stukje software zorgt ervoor dat we onze GPIO pins kunnen gebruiken. We hebben de belangrijkste code hieronder uitgelegd. De volledige code kan u terugvinden in de bijlage. In bovenstaande code lezen we de potentiometer uit en bepalen we de temperatuur alsook de waarde van de bijhorende LED. Vervolgens bouwen we onze tekst op en geven deze weer op de LCD. De temperatuur en huidige tijd + datum worden afgebeeld op de LCD alsook onze namen.

7 4.2 Crontab We hebben gebruikt gemaakt van een Crontab. Een crontab is een proces dat op bepaalde tijd start. We hebben ingesteld dat ons programma automatisch opstart bij het opstarten van de Raspberry Pi. Na een stroompanne moet de klant het programma niet meer manueel starten maar gebeurd dit automatisch. 4.3 PHP Omdat onze klant de lichten in zijn woning wou beheren maken we gebruik van een webserver. Op de webserver draait een PHP-pagina waarmee we oproepen welke leds actief zijn en welke niet. 4.3.1 Uitlezen GPIO pins Omdat we zeker willen zijn dat het licht in een bepaalde kamer al dan niet al aan staat hebben we een PHP-script geschreven dat gaat lezen welke GPIO-pins actief staan en welke niet. 4.3.2 Layout We hebben een gebruiksvriendelijke interface gemaakt waarmee de lichten in huis makkelijk en overzichtelijk bestuurd kunnen worden.

8 4.3.3 Index Om de layout op te bouwen hebben we gebruik gemaakt van onderstaande code. Hierin gaan we via PHP kijken welke lichten al aan staan en geven we de juiste afbeelding. De volledige code en de bijhorende css kan u terugvinden in de bijlage. 4.3.4 Javascript We maken gebruik van javascript om de GPIO pins uit te lezen en de juiste waarde door te geven met de bijhorende afbeelding. De volledige javascript code kan u terugvinden in de bijlage.

9 5 SCHEMA ELEKTRONICA 5.1 Opstelling Hieronder vindt u de schematische opstelling van het elektronica schema.

10 BESLUIT. Dit was een uitdagend maar leuk project. We hebben bepaalde technieken leren combineren en samenbrengen naar 1 geheel. We zijn wel enkele obstakels tegengekomen maar we hebben deze op een goede manier kunnen oplossen. Het project was een leuke herhaling van de verschillende methodes die we in de les hebben gezien.

1 BIJLAGE Lcd.py import RPi.GPIO as GPIO import time import datetime GPIO.setmode(GPIO.BCM) # use GPIO numbers GPIO.setwarnings(False) LCD_RS = 7 LCD_E = 8 LCD_D4 = 25 LCD_D5 = 24 LCD_D6 = 23 LCD_D7 = 18 LED_ON = 15 LCD_WIDTH = 16 LCD_CHR = True LCD_CMD = False LCD_LINE_1 = 0x80 LCD_LINE_2 = 0xC0 E_PULSE = 0.00005 E_DELAY = 0.00005 def readadc(adc, clk, Din, Dout, cs): if ((adc > 7) or (adc < 0)): return -1 GPIO.output(cs, True) GPIO.output(clk, False) GPIO.output(cs, False) commandout = adc commandout = 0x18 commandout <<= 3 for i in range(5): if (commandout & 0x80): GPIO.output(Din, True) else: GPIO.output(Din, False) commandout <<= 1 GPIO.output(clk, True) GPIO.output(clk, False) adcout = 0 for i in range(12): GPIO.output(clk, True) GPIO.output(clk, False) adcout <<= 1 if (GPIO.input(Dout)): adcout = 0x1 GPIO.output(cs, True) adcout >>= 1 return adcout clk = 11 Dout = 9

2 Din = 10 cs = 22 GPIO.setup(Din, GPIO.OUT) GPIO.setup(Dout, GPIO.IN) GPIO.setup(clk, GPIO.OUT) GPIO.setup(cs, GPIO.OUT) GPIO.setup(5,GPIO.OUT) p=gpio.pwm(5,50) p.start(0) adc = 0 graden = 0 def main(): GPIO.setup(LCD_E, GPIO.OUT) GPIO.setup(LCD_RS, GPIO.OUT) GPIO.setup(LCD_D4, GPIO.OUT) GPIO.setup(LCD_D5, GPIO.OUT) GPIO.setup(LCD_D6, GPIO.OUT) GPIO.setup(LCD_D7, GPIO.OUT) GPIO.setup(LED_ON, GPIO.OUT) lcd_init() while True: trim_pot = readadc(adc, clk, Din, Dout, cs) if trim_pot < 100: graden = 15 led=10 elif trim_pot > 100 and trim_pot < 200: graden = 16 led=20 elif trim_pot > 200 and trim_pot < 300: graden = 17 led=30 elif trim_pot > 300 and trim_pot < 400: graden = 18 led=40 elif trim_pot > 400 and trim_pot < 500: graden = 19 led=50 elif trim_pot > 500 and trim_pot < 600: graden = 20 led=60 elif trim_pot > 600 and trim_pot < 700: graden = 21 led=70 elif trim_pot > 700 and trim_pot < 800: graden = 22 led=80 elif trim_pot > 800 and trim_pot < 900: graden = 23 led=90 elif trim_pot > 900: graden = 24 led=100 time.sleep(0.1) now = datetime.datetime.now()

3 tijd = now.strftime('%h:%m') datum = str(now.day) + "/" + str(now.month) + "/" + str(now.year) tijddatum = str(tijd) + " " + str(datum) temperatuur = "Temp: " + str(graden) + "C" p.changedutycycle(led) GPIO.output(LED_ON, True) time.sleep(2) lcd_byte(lcd_line_1, LCD_CMD) lcd_string("project Embedded Linux") lcd_byte(lcd_line_2, LCD_CMD) lcd_string("jonas / Dimitri") time.sleep(2) lcd_byte(lcd_line_1, LCD_CMD) lcd_string(temperatuur) lcd_byte(lcd_line_2, LCD_CMD) lcd_string(tijddatum) def lcd_init(): lcd_byte(0x33,lcd_cmd) lcd_byte(0x32,lcd_cmd) lcd_byte(0x28,lcd_cmd) lcd_byte(0x0c,lcd_cmd) lcd_byte(0x06,lcd_cmd) lcd_byte(0x01,lcd_cmd) def lcd_string(message): message = message.ljust(lcd_width," ") for i in range(lcd_width): lcd_byte(ord(message[i]),lcd_chr) def lcd_byte(bits, mode): GPIO.output(LCD_RS, mode) GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x10==0x10: GPIO.output(LCD_D4, True) if bits&0x20==0x20: GPIO.output(LCD_D5, True) if bits&0x40==0x40: GPIO.output(LCD_D6, True) if bits&0x80==0x80: GPIO.output(LCD_D7, True) time.sleep(e_delay) GPIO.output(LCD_E, True) time.sleep(e_pulse) GPIO.output(LCD_E, False) time.sleep(e_delay) GPIO.output(LCD_D4, False)

4 GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x01==0x01: GPIO.output(LCD_D4, True) if bits&0x02==0x02: GPIO.output(LCD_D5, True) if bits&0x04==0x04: GPIO.output(LCD_D6, True) if bits&0x08==0x08: GPIO.output(LCD_D7, True) time.sleep(e_delay) GPIO.output(LCD_E, True) time.sleep(e_pulse) GPIO.output(LCD_E, False) time.sleep(e_delay) main()

5 Index.php <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>raspberry Pi Gpio</title> <style> img{ margin: 15px 15px 5px 15px; ul { list-style: none; margin-left: 0px; li { float: left; width: 100px; text-align: center; li p { color: white; margin-top: 0px; </style> </head> <body style="background-color: Black;"> <?php $status = array (0, 0, 0, 0, 0, 0, 0, 0); $naam = array ("Badkamer","Living","Keuken","Hal","Slaapkamer 1","Slaapkamer 2","Garage","Veranda"); echo "<ul>"; for ($i = 0; $i < count($status); $i++) { //set the pin's mode to output and read them system("gpio mode ".$i." out"); exec ("gpio read ".$i, $status[$i], $return ); echo "<li>"; //if off if ($status[$i][0] == 0 ) { echo ("<img id='button_".$i."' src='data/img/red/red.jpg' alt='off'/>"); //if on if ($status[$i][0] == 1 ) { echo ("<img id='button_".$i."' src='data/img/green/green.jpg' alt='on'/>"); echo "<p>". $naam[$i]. "</p>"; echo "</li>"; echo "</ul>";?> <script src="script.js"></script> </body> </html>

6 Script.js var button_0 = document.getelementbyid("button_0"); var button_1 = document.getelementbyid("button_1"); var button_2 = document.getelementbyid("button_2"); var button_3 = document.getelementbyid("button_3"); var button_4 = document.getelementbyid("button_4"); var button_5 = document.getelementbyid("button_5"); var button_6 = document.getelementbyid("button_6"); var button_7 = document.getelementbyid("button_7"); function change_pin (pin, status) { var request = new XMLHttpRequest(); request.open( "GET", "gpio.php?pin=" + pin + "&status=" + status ); request.send(null); request.onreadystatechange = function () { if (request.readystate == 4 && request.status == 200) { return (parseint(request.responsetext)); else if (request.readystate == 4 && request.status == 500) { alert ("server error"); return ("fail"); else { return ("fail"); button_0.addeventlistener("click", function () { //if red if ( button_0.alt === "off" ) { var new_status = change_pin ( 22, 0); button_0.alt = "on" button_0.src = "data/img/green/green.jpg"; //if green if ( button_0.alt === "on" ) { var new_status = change_pin ( 22, 1); button_0.alt = "off" button_0.src = "data/img/red/red.jpg"; ); button_1.addeventlistener("click", function () { //if red if ( button_1.alt === "off" ) { var new_status = change_pin ( 23, 0); button_1.alt = "on" button_1.src = "data/img/green/green.jpg";

7 ); //if green if ( button_1.alt === "on" ) { var new_status = change_pin ( 23, 1); button_1.alt = "off" button_1.src = "data/img/red/red.jpg"; button_2.addeventlistener("click", function () { //if red if ( button_2.alt === "off" ) { var new_status = change_pin ( 24, 0); button_2.alt = "on" button_2.src = "data/img/green/green.jpg"; //if green if ( button_2.alt === "on" ) { var new_status = change_pin ( 24, 1); button_2.alt = "off" button_2.src = "data/img/red/red.jpg"; ); button_3.addeventlistener("click", function () { //if red if ( button_3.alt === "off" ) { var new_status = change_pin ( 25, 0); button_3.alt = "on" button_3.src = "data/img/green/green.jpg"; //if green if ( button_3.alt === "on" ) { var new_status = change_pin ( 25, 1); button_3.alt = "off" button_3.src = "data/img/red/red.jpg";

8 ); button_4.addeventlistener("click", function () { //if red if ( button_4.alt === "off" ) { var new_status = change_pin ( 26, 0); button_4.alt = "on" button_4.src = "data/img/green/green.jpg"; //if green if ( button_4.alt === "on" ) { var new_status = change_pin ( 26, 1); button_4.alt = "off" button_4.src = "data/img/red/red.jpg"; ); button_5.addeventlistener("click", function () { //if red if ( button_5.alt === "off" ) { var new_status = change_pin ( 27, 0); button_5.alt = "on" button_5.src = "data/img/green/green.jpg"; //if green if ( button_5.alt === "on" ) { var new_status = change_pin ( 27, 1); button_5.alt = "off" button_5.src = "data/img/red/red.jpg"; ); button_6.addeventlistener("click", function () { //if red if ( button_6.alt === "off" ) { var new_status = change_pin ( 28, 0); button_6.alt = "on"

9 ); button_6.src = "data/img/green/green.jpg"; //if green if ( button_6.alt === "on" ) { var new_status = change_pin ( 28, 1); button_6.alt = "off" button_6.src = "data/img/red/red.jpg"; button_7.addeventlistener("click", function () { //if red if ( button_7.alt === "off" ) { var new_status = change_pin ( 29, 0); button_7.alt = "on" button_7.src = "data/img/green/green.jpg"; //if green if ( button_7.alt === "on" ) { var new_status = change_pin ( 29, 1); button_7.alt = "off" button_7.src = "data/img/red/red.jpg"; );