https://interactionstation.wdka.hro.nl/mediawiki/api.php?action=feedcontributions&user=Boris&feedformat=atomInteraction Station Wiki - User contributions [en]2024-03-29T07:11:08ZUser contributionsMediaWiki 1.35.7https://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Resources&diff=10548Resources2024-01-12T08:47:19Z<p>Boris: /* Online dutch */</p>
<hr />
<div><br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Websites<includeonly>]]<br></includeonly></onlyinclude>==<br />
* [http://www.instructables.com/ Instructables]<br />
* [https://learn.adafruit.com/ Adafruit learning section]<br />
* [https://learn.sparkfun.com/tutorials Sparkfun learning section]<br />
* [https://lynda.com Lynda.com (login with your student account]<br />
* [http://www.kobakant.at/DIY/ Kobakant's How To Get What You Want]<br />
* [http://playground.arduino.cc/ Arduino Playground]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Presenting digital work<includeonly>]]<br></includeonly></onlyinclude>==<br />
Startup items:<br />
* [http://www.macworld.com/article/2047747/take-control-of-startup-and-login-items.html OS X Startup & Login items]<br />
* [https://www.howtogeek.com/208224/how-to-add-programs-files-and-folders-to-system-startup-in-windows-8.1/ Windows Startup items]<br />
* [https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/ Raspberry PI startup items]<br />
Power management:<br />
* [https://support.apple.com/kb/PH13808?locale=en_US Preventing your mac from sleeping]<br />
* [http://www.intowindows.com/how-to-enable-or-disable-sleep-mode-in-windows-10/ Preventing your pc from sleeping]<br />
Browser kiosk mode (prevent the user from leaving the website):<br />
* [https://chrome.google.com/webstore/detail/kiosk/afhcomalholahplbjhnmahkoekoijban?hl=en Kiosk plugin for chrome (use ctrl-a to administer)]<br />
Playing video files<br />
* [http://www.tomsguide.com/faq/id-2363631/set-playlist-vlc.html Set up a playlist in VLC]<br />
* [[Making VLC start up in fullscreen mode]]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Circuit elements & theory<includeonly>]]<br></includeonly></onlyinclude>==<br />
* [http://www.electronics-tutorials.ws/resistor/res_3.html Resistors in Series]<br />
* [http://www.electronics-tutorials.ws/resistor/res_4.html Resistors in parallel]<br />
* [http://www.electronics-tutorials.ws/resistor/res_2.html Resistor color code]<br />
* [http://www.resistorguide.com/resistor-color-code-calculator/ Resistor color code calculator]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Tutorials & Information<includeonly>]]<br></includeonly></onlyinclude>==<br />
* [https://learn.adafruit.com/multimeters/overview Ladyada on Multimeters]<br />
* [https://www.youtube.com/watch?v=SX01x1z7fTY 555 monostable and astable modes explained]<br />
* [https://learn.sparkfun.com/tutorials/using-eagle-schematic SparkFun EAGLE Schematic tutorial]<br />
* [https://learn.sparkfun.com/tutorials/using-eagle-board-layout SparkFun EAGLE PCB Layout tutorial]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Circuit collections<includeonly>]]<br></includeonly></onlyinclude>==<br />
=== 555 ===<br />
* [http://www.555-timer-circuits.com/ 555 timer circuits]<br />
* http://www.talkingelectronics.com/projects/50%20-%20555%20Circuits/50%20-%20555%20Circuits.html<br />
* http://electronicsclub.info/555timer.htm<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Programs<includeonly>]]<br></includeonly></onlyinclude>==<br />
<br />
=== electronics CAD packages ===<br />
* [http://www.cadsoftusa.com/ Cadsoft Eagle]<br />
* [http://www.kicad-pcb.org/display/KICAD/KiCad+EDA+Software+Suite KiCAD]<br />
* [http://www.geda-project.org/ gEDA]<br />
=== circuit simulation ===<br />
* [http://www.falstad.com/circuit/e-index.html online java circuit simulator with many examples]<br />
* [https://www.circuitlab.com/ quite good online circuit simulator (timed trial)]<br />
=== Programming ===<br />
* [https://processing.org/ Processing]<br />
* [https://www.arduino.cc/ Arduino ]<br />
* [http://openframeworks.cc/ Openframeworks]<br />
* ==== Visual programming languages====<br />
* [https://cycling74.com/products/max/ Max]<br />
* [https://puredata.info/ PureData]<br />
<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Buy components<includeonly>]]<br></includeonly></onlyinclude>==<br />
=== Shops ===<br />
* Rotterdam: https://www.elektronicaonderdelenshop.nl/ (Van Oldenbarneveltplaats 450, 3012 AP Rotterdam)<br />
* Den Haag: http://www.radiotwenthe.nl/<br />
* Vlaardingen: http://www.brokxelectronics.nl/<br />
* Delft: http://members.ziggo.nl/hecdelft/ (???)<br />
* Utrecht: http://radiocentrum.com/<br />
* Amsterdam: http://www.muco-amsterdam.nl/<br />
* Amsterdam: http://www.rotor.eu/<br />
* Amsterdam: http://www.eoo-bv.nl/ (online shop, afhalen)<br />
* Haarlem: http://www.hf-electronics.nl/<br />
* Nijmegen: http://www.technica-electronica.nl/<br />
* Arnhem: http://www.radiopiet.nl/<br />
<br />
=== Online dutch ===<br />
* https://opencircuit.nl/<br />
* http://www.conrad.nl<br />
* http://www.floris.cc<br />
* http://www.eztronics.nl<br />
* http://www.antratek.nl<br />
* http://www.sossolutions.nl<br />
* https://www.kiwi-electronics.nl<br />
* https://www.tinytronics.nl/shop/en<br />
<br />
=== Online international ===<br />
* http://www.sparkfun.com<br />
* http://www.adafruit.com<br />
=== Wholesale (may need VAT) ===<br />
* https://www.tme.eu/nl/en/<br />
* http://www.farnell.nl<br />
* http://www.rs-components.nl<br />
* http://www.mouser.com<br />
* http://www.digikey.nl<br />
<br />
== Notes & References ==<br />
<div class="references-small"> <references /> </div><br />
<br />
[[Category:Electronics]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Resources&diff=10547Resources2024-01-12T08:47:06Z<p>Boris: /* Shops */</p>
<hr />
<div><br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Websites<includeonly>]]<br></includeonly></onlyinclude>==<br />
* [http://www.instructables.com/ Instructables]<br />
* [https://learn.adafruit.com/ Adafruit learning section]<br />
* [https://learn.sparkfun.com/tutorials Sparkfun learning section]<br />
* [https://lynda.com Lynda.com (login with your student account]<br />
* [http://www.kobakant.at/DIY/ Kobakant's How To Get What You Want]<br />
* [http://playground.arduino.cc/ Arduino Playground]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Presenting digital work<includeonly>]]<br></includeonly></onlyinclude>==<br />
Startup items:<br />
* [http://www.macworld.com/article/2047747/take-control-of-startup-and-login-items.html OS X Startup & Login items]<br />
* [https://www.howtogeek.com/208224/how-to-add-programs-files-and-folders-to-system-startup-in-windows-8.1/ Windows Startup items]<br />
* [https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/ Raspberry PI startup items]<br />
Power management:<br />
* [https://support.apple.com/kb/PH13808?locale=en_US Preventing your mac from sleeping]<br />
* [http://www.intowindows.com/how-to-enable-or-disable-sleep-mode-in-windows-10/ Preventing your pc from sleeping]<br />
Browser kiosk mode (prevent the user from leaving the website):<br />
* [https://chrome.google.com/webstore/detail/kiosk/afhcomalholahplbjhnmahkoekoijban?hl=en Kiosk plugin for chrome (use ctrl-a to administer)]<br />
Playing video files<br />
* [http://www.tomsguide.com/faq/id-2363631/set-playlist-vlc.html Set up a playlist in VLC]<br />
* [[Making VLC start up in fullscreen mode]]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Circuit elements & theory<includeonly>]]<br></includeonly></onlyinclude>==<br />
* [http://www.electronics-tutorials.ws/resistor/res_3.html Resistors in Series]<br />
* [http://www.electronics-tutorials.ws/resistor/res_4.html Resistors in parallel]<br />
* [http://www.electronics-tutorials.ws/resistor/res_2.html Resistor color code]<br />
* [http://www.resistorguide.com/resistor-color-code-calculator/ Resistor color code calculator]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Tutorials & Information<includeonly>]]<br></includeonly></onlyinclude>==<br />
* [https://learn.adafruit.com/multimeters/overview Ladyada on Multimeters]<br />
* [https://www.youtube.com/watch?v=SX01x1z7fTY 555 monostable and astable modes explained]<br />
* [https://learn.sparkfun.com/tutorials/using-eagle-schematic SparkFun EAGLE Schematic tutorial]<br />
* [https://learn.sparkfun.com/tutorials/using-eagle-board-layout SparkFun EAGLE PCB Layout tutorial]<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Circuit collections<includeonly>]]<br></includeonly></onlyinclude>==<br />
=== 555 ===<br />
* [http://www.555-timer-circuits.com/ 555 timer circuits]<br />
* http://www.talkingelectronics.com/projects/50%20-%20555%20Circuits/50%20-%20555%20Circuits.html<br />
* http://electronicsclub.info/555timer.htm<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Programs<includeonly>]]<br></includeonly></onlyinclude>==<br />
<br />
=== electronics CAD packages ===<br />
* [http://www.cadsoftusa.com/ Cadsoft Eagle]<br />
* [http://www.kicad-pcb.org/display/KICAD/KiCad+EDA+Software+Suite KiCAD]<br />
* [http://www.geda-project.org/ gEDA]<br />
=== circuit simulation ===<br />
* [http://www.falstad.com/circuit/e-index.html online java circuit simulator with many examples]<br />
* [https://www.circuitlab.com/ quite good online circuit simulator (timed trial)]<br />
=== Programming ===<br />
* [https://processing.org/ Processing]<br />
* [https://www.arduino.cc/ Arduino ]<br />
* [http://openframeworks.cc/ Openframeworks]<br />
* ==== Visual programming languages====<br />
* [https://cycling74.com/products/max/ Max]<br />
* [https://puredata.info/ PureData]<br />
<br />
<br />
==<onlyinclude><includeonly>[[Resources#</includeonly>Buy components<includeonly>]]<br></includeonly></onlyinclude>==<br />
=== Shops ===<br />
* Rotterdam: https://www.elektronicaonderdelenshop.nl/ (Van Oldenbarneveltplaats 450, 3012 AP Rotterdam)<br />
* Den Haag: http://www.radiotwenthe.nl/<br />
* Vlaardingen: http://www.brokxelectronics.nl/<br />
* Delft: http://members.ziggo.nl/hecdelft/ (???)<br />
* Utrecht: http://radiocentrum.com/<br />
* Amsterdam: http://www.muco-amsterdam.nl/<br />
* Amsterdam: http://www.rotor.eu/<br />
* Amsterdam: http://www.eoo-bv.nl/ (online shop, afhalen)<br />
* Haarlem: http://www.hf-electronics.nl/<br />
* Nijmegen: http://www.technica-electronica.nl/<br />
* Arnhem: http://www.radiopiet.nl/<br />
<br />
=== Online dutch ===<br />
*https://opencircuit.nl/<br />
* http://www.conrad.nl<br />
* http://www.floris.cc<br />
* http://www.eztronics.nl<br />
* http://www.antratek.nl<br />
* http://www.sossolutions.nl<br />
* https://www.kiwi-electronics.nl<br />
* https://www.tinytronics.nl/shop/en<br />
<br />
=== Online international ===<br />
* http://www.sparkfun.com<br />
* http://www.adafruit.com<br />
=== Wholesale (may need VAT) ===<br />
* https://www.tme.eu/nl/en/<br />
* http://www.farnell.nl<br />
* http://www.rs-components.nl<br />
* http://www.mouser.com<br />
* http://www.digikey.nl<br />
<br />
== Notes & References ==<br />
<div class="references-small"> <references /> </div><br />
<br />
[[Category:Electronics]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10533Vlc-sync2023-12-19T10:04:06Z<p>Boris: /* Requirements */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
* Linux based operating system<br />
* A recent version of [https://www.python.org/downloads/ Python 3]<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10532Vlc-sync2023-12-19T10:03:52Z<p>Boris: /* Requirements */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
Linux based operating system<br />
A recent version of [https://www.python.org/downloads/ Python 3]<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10531Vlc-sync2023-12-19T09:50:07Z<p>Boris: /* Requirements */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
A recent version of [https://www.python.org/downloads/ Python 3]<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10530Vlc-sync2023-12-19T09:49:03Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10529Vlc-sync2023-12-19T09:48:45Z<p>Boris: </p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="shell"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
<syntaxhighlight lang="bash"><br />
user@host ~/test $ ls "abc"<br />
abc<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10528Vlc-sync2023-12-19T09:48:04Z<p>Boris: </p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="shell"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10527Vlc-sync2023-12-19T09:43:59Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10526Vlc-sync2023-12-19T09:43:41Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10525Vlc-sync2023-12-19T09:42:43Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
<br />
<br />
<syntaxhighlight lang="bash"><br />
ls -la<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10524Vlc-sync2023-12-19T09:42:22Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<syntaxhighlight lang="c++"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10523Vlc-sync2023-12-19T09:41:22Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10522Vlc-sync2023-12-19T09:40:17Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<syntaxhighlight lang="golang"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10521Vlc-sync2023-12-19T09:40:06Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<syntaxhighlight lang="Shell scripts"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10520Vlc-sync2023-12-19T09:39:57Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<syntaxhighlight lang="shell"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10519Vlc-sync2023-12-19T09:38:39Z<p>Boris: /* Installing */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<syntaxhighlight lang="bash"><br />
python3 -m venv venv<br />
pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10518Vlc-sync2023-12-19T09:34:38Z<p>Boris: </p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
== Getting started ==<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
== Running vlc-sync ==<br />
<br />
=== Requirements ===<br />
<br />
<br />
<br />
=== Installing === <br />
<code>pip install -r requirements.txt</code><br />
<br />
== Raspberry Pi images ==<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10517Vlc-sync2023-12-19T09:34:12Z<p>Boris: /* Running vlc-sync */</p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
=== Getting started ===<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
=== Running vlc-sync ===<br />
<br />
==== Requirements ====<br />
<br />
<br />
<br />
==== Installing ==== <br />
<code>pip install -r requirements.txt</code><br />
<br />
=== Raspberry Pi images ===<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10516Vlc-sync2023-12-19T09:31:38Z<p>Boris: </p>
<hr />
<div>[https://github.com/turingmachine/omxplayer-sync <code>vlc-sync</code>] is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
=== Getting started ===<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
=== Running vlc-sync ===<br />
<br />
=== Raspberry Pi images ===<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10515Vlc-sync2023-12-19T09:30:04Z<p>Boris: </p>
<hr />
<div><code>vlc-sync</code> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
=== Getting started ===<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the [[#Raspberry Pi images | ready-to-use Raspberry Pi images]].<br />
<br />
=== Running vlc-sync ===<br />
<br />
=== Raspberry Pi images ===<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10514Vlc-sync2023-12-19T09:29:30Z<p>Boris: </p>
<hr />
<div><code>vlc-sync</code> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
=== Getting started ===<br />
There are two ways to start using <code>vlc-sync</code>. [[#Running vlc-sync | Running the script manually]] or using the ready-to-use Raspberry Pi images.<br />
<br />
=== Running vlc-sync ===<br />
<br />
=== Raspberry Pi images ===<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10513Vlc-sync2023-12-19T09:29:06Z<p>Boris: </p>
<hr />
<div><code>vlc-sync</code> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
=== Getting started ===<br />
There are two ways to start using <code>vlc-sync</code>. [[#See also | wow]] Running the script manually or using the ready-to-use Raspberry Pi images.<br />
<br />
=== Running vlc-sync ===<br />
<br />
=== Raspberry Pi images ===<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10512Vlc-sync2023-12-19T09:26:52Z<p>Boris: </p>
<hr />
<div><code>vlc-sync</code> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
=== Getting started ===<br />
There are two ways to start using <code>vlc-sync</code>. Running <code>vlc-sync</code> manually or using the ready-to-use Raspberry Pi images.<br />
<br />
=== Running vlc-sync ===<br />
<br />
=== Raspberry Pi images ===<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10511Vlc-sync2023-12-19T09:22:27Z<p>Boris: </p>
<hr />
<div><code>vlc-sync</code> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
=== Getting started ===<br />
There are two ways to start using <code>vlc-sync</code>. Using the ready-to-use Raspberry Pi images or running the <code>vlc-sync</code> manually.<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10510Vlc-sync2023-12-19T09:20:01Z<p>Boris: </p>
<hr />
<div><code>vlc-sync</code> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
There are two ways to start using <code>vlc-sync</code>. Using the ready-to-use Raspberry Pi images or running the <code>vlc-sync</code> manually.<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10509Vlc-sync2023-12-19T09:03:30Z<p>Boris: </p>
<hr />
<div><code>VLC-Sync</code> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10508Vlc-sync2023-12-19T09:02:14Z<p>Boris: </p>
<hr />
<div><source enclose="none">VLC-Sync</source> is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10507Vlc-sync2023-12-19T09:00:06Z<p>Boris: vlc-sync, vlc, raspberry pi, multichannel, video installation, omxplayer</p>
<hr />
<div>`VLC-Sync` is a modern adaptation of [https://github.com/turingmachine/omxplayer-sync OMXPlayer-Sync], using VLC as a replacement for the [https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65d3a1caa86dc79d2863a8f067c8e3f8 deprecated OMXPlayer]. This implementation facilitates the synchronization of multiple VLC instances across a network, following a conductor/follower model. You are also able to use a single conductor for a simple video loop.<br />
<br />
[[Category:Raspberry Pi]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=MediaWiki:Common.css&diff=10506MediaWiki:Common.css2023-12-19T08:55:20Z<p>Boris: </p>
<hr />
<div>/* CSS placed here will be applied to all skins */<br />
.rgb { background-image: url(http://interactionstation.wdka.hro.nl/mediawiki/images/1/16/Rgifb.gif);}<br />
.image100px img { width: 100px; }<br />
.image320px img { width: 320px; border-width: 1px solid #000000; }<br />
.image480px img { width: 480px; }<br />
<br />
.title {<br />
font-size:20px;<br />
position:fixed;<br />
writing-mode: vertical-rl;<br />
bottom:37px;<br />
left:28px;<br />
z-index:1000;<br />
}<br />
<br />
.rooms {<br />
position:fixed;background:white;<br />
border:solid 1px black;<br />
transition:all 2s;<br />
}<br />
<br />
.openArea {<br />
top:30vmin;height:30vmin;left:40.1vmin;width:29.9vmin;<br />
border-right:0.1px solid white;<br />
}<br />
<br />
.prototypingSpace {<br />
top:30vmin;height:30vmin;left:70.2vmin;width:39vmin;<br />
border-left:0.1px solid white;<br />
}<br />
<br />
.prototypingSpaceText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.prototypingSpace:hover .prototypingSpaceText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.instructionRoom {<br />
top:30vmin;height:24vmin;left:24vmin;width:18vmin;<br />
}<br />
<br />
.computerRoom {<br />
top:60vmin;height:19vmin;left:24vmin;width:23vmin;<br />
}<br />
<br />
.computerRoom2 {<br />
top:60vmin;height:19vmin;left:47.1vmin;width:17vmin;<br />
}<br />
<br />
.interactiveInstallation {<br />
top:60vmin;height:19vmin;left:64vmin;width:20vmin;<br />
}<br />
<br />
.interactiveInstallationText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.interactiveInstallation:hover .interactiveInstallationText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.office {<br />
top:36vmin;height:7vmin;left:60vmin;width:10vmin;<br />
}<br />
<br />
.officeText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.office:hover .officeText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.rooms:hover {<br />
background:black;<br />
}<br />
<br />
#terminal {<br />
position:fixed;<br />
background:rgba(0,2,2,0.83);<br />
border: 1px solid white;<br />
bottom:35px;<br />
right:30px;<br />
height:400px;<br />
width:600px;<br />
box-shadow: 0px 0px 24px #8CACAC, 0px 0px 60px #AF8C9D;<br />
z-index:1001;<br />
}<br />
<br />
#terminal:hover {<br />
background:rgba(0,2,2,0.9);<br />
}<br />
<br />
.terminalIntro {<br />
position: relative;<br />
line-height:20px;<br />
display: inline-block;<br />
color: black;<br />
min-width: 1px;<br />
min-height: 24px;<br />
}<br />
<br />
.terminalIntro:after {<br />
content: "";<br />
position: absolute;<br />
top: 5%;<br />
right: -2px;<br />
width: 1px;<br />
height: 90%;<br />
border-right: 2px solid #FFF;<br />
animation: blink .5s infinite ease;<br />
}<br />
<br />
<br />
@keyframes blink {<br />
0% { background-color: black; }<br />
49% { background-color: black; }<br />
50% { background-color: transparent; }<br />
99% { background-color: transparent; }<br />
100% { background-color: #ccc; }<br />
}<br />
<br />
.terminalCore {<br />
padding:20px;<br />
position: relative;<br />
line-height:20px;<br />
display: inline-block;<br />
color: white;<br />
opacity:0.7;<br />
min-width: 1px;<br />
min-height: 24px;<br />
}<br />
<br />
.terminalCore:after {<br />
content: "";<br />
position: absolute;<br />
top: 5%;<br />
right: -2px;<br />
width: 1px;<br />
height: 90%;<br />
border-right: 2px solid #FFF;<br />
animation: blink .5s infinite ease;<br />
}<br />
<br />
.terminalButton {<br />
position:relative;<br />
left:10px;top:3px;<br />
}<br />
<br />
.line{<br />
position:relative;<br />
width: 100%;<br />
height: 30px;<br />
border-bottom: 1px solid white;<br />
}<br />
<br />
#curtains {<br />
position: absolute;<br />
background: #f7f5f5;<br />
top: 168px;<br />
left: 13px;<br />
height: 310px;<br />
width: 133px;<br />
z-index: 1001;<br />
transition: 3s;<br />
}<br />
<br />
#curtains:hover {<br />
opacity:0;<br />
z-index:0;<br />
}<br />
<br />
#lessonsTitle {<br />
position:fixed;<br />
font-size:2,5vw;<br />
color:black;<br />
top:120px;<br />
right:50px;<br />
text-shadow: #F5E3E6 1px 0 10px;<br />
writing-mode:vertical-rl;<br />
text-orientation: upright;<br />
z-index:1003;<br />
}<br />
<br />
#lessons {<br />
position:fixed;<br />
opacity:0.2;<br />
overflow-x:auto;<br />
top:100px;<br />
right:26px;<br />
padding:16px;<br />
padding-left:30px;<br />
width:350px;<br />
height:270px;<br />
font-size:11px;<br />
text-transform:uppercase;<br />
border:solid 1px black;<br />
box-shadow:0px 0px 30px black, 0px 0px 90px rgba(0,2,2,0.39);<br />
z-index:1;<br />
}<br />
<br />
#lessons:hover {<br />
opacity:1;<br />
background-color:rgb(255,250,250,0.82);<br />
font-size:11px; <br />
z-index:1002;<br />
}<br />
<br />
div.keywords {<br />
display: none !important;<br />
}</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=MediaWiki:Common.css&diff=10505MediaWiki:Common.css2023-12-19T08:54:28Z<p>Boris: </p>
<hr />
<div>/* CSS placed here will be applied to all skins */<br />
.rgb { background-image: url(http://interactionstation.wdka.hro.nl/mediawiki/images/1/16/Rgifb.gif);}<br />
.image100px img { width: 100px; }<br />
.image320px img { width: 320px; border-width: 1px solid #000000; }<br />
.image480px img { width: 480px; }<br />
<br />
.title {<br />
font-size:20px;<br />
position:fixed;<br />
writing-mode: vertical-rl;<br />
bottom:37px;<br />
left:28px;<br />
z-index:1000;<br />
}<br />
<br />
.rooms {<br />
position:fixed;background:white;<br />
border:solid 1px black;<br />
transition:all 2s;<br />
}<br />
<br />
.openArea {<br />
top:30vmin;height:30vmin;left:40.1vmin;width:29.9vmin;<br />
border-right:0.1px solid white;<br />
}<br />
<br />
.prototypingSpace {<br />
top:30vmin;height:30vmin;left:70.2vmin;width:39vmin;<br />
border-left:0.1px solid white;<br />
}<br />
<br />
.prototypingSpaceText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.prototypingSpace:hover .prototypingSpaceText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.instructionRoom {<br />
top:30vmin;height:24vmin;left:24vmin;width:18vmin;<br />
}<br />
<br />
.computerRoom {<br />
top:60vmin;height:19vmin;left:24vmin;width:23vmin;<br />
}<br />
<br />
.computerRoom2 {<br />
top:60vmin;height:19vmin;left:47.1vmin;width:17vmin;<br />
}<br />
<br />
.interactiveInstallation {<br />
top:60vmin;height:19vmin;left:64vmin;width:20vmin;<br />
}<br />
<br />
.interactiveInstallationText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.interactiveInstallation:hover .interactiveInstallationText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.office {<br />
top:36vmin;height:7vmin;left:60vmin;width:10vmin;<br />
}<br />
<br />
.officeText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.office:hover .officeText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.rooms:hover {<br />
background:black;<br />
}<br />
<br />
#terminal {<br />
position:fixed;<br />
background:rgba(0,2,2,0.83);<br />
border: 1px solid white;<br />
bottom:35px;<br />
right:30px;<br />
height:400px;<br />
width:600px;<br />
box-shadow: 0px 0px 24px #8CACAC, 0px 0px 60px #AF8C9D;<br />
z-index:1001;<br />
}<br />
<br />
#terminal:hover {<br />
background:rgba(0,2,2,0.9);<br />
}<br />
<br />
.terminalIntro {<br />
position: relative;<br />
line-height:20px;<br />
display: inline-block;<br />
color: black;<br />
min-width: 1px;<br />
min-height: 24px;<br />
}<br />
<br />
.terminalIntro:after {<br />
content: "";<br />
position: absolute;<br />
top: 5%;<br />
right: -2px;<br />
width: 1px;<br />
height: 90%;<br />
border-right: 2px solid #FFF;<br />
animation: blink .5s infinite ease;<br />
}<br />
<br />
<br />
@keyframes blink {<br />
0% { background-color: black; }<br />
49% { background-color: black; }<br />
50% { background-color: transparent; }<br />
99% { background-color: transparent; }<br />
100% { background-color: #ccc; }<br />
}<br />
<br />
.terminalCore {<br />
padding:20px;<br />
position: relative;<br />
line-height:20px;<br />
display: inline-block;<br />
color: white;<br />
opacity:0.7;<br />
min-width: 1px;<br />
min-height: 24px;<br />
}<br />
<br />
.terminalCore:after {<br />
content: "";<br />
position: absolute;<br />
top: 5%;<br />
right: -2px;<br />
width: 1px;<br />
height: 90%;<br />
border-right: 2px solid #FFF;<br />
animation: blink .5s infinite ease;<br />
}<br />
<br />
.terminalButton {<br />
position:relative;<br />
left:10px;top:3px;<br />
}<br />
<br />
.line{<br />
position:relative;<br />
width: 100%;<br />
height: 30px;<br />
border-bottom: 1px solid white;<br />
}<br />
<br />
#curtains {<br />
position: absolute;<br />
background: #f7f5f5;<br />
top: 168px;<br />
left: 13px;<br />
height: 310px;<br />
width: 133px;<br />
z-index: 1001;<br />
transition: 3s;<br />
}<br />
<br />
#curtains:hover {<br />
opacity:0;<br />
z-index:0;<br />
}<br />
<br />
#lessonsTitle {<br />
position:fixed;<br />
font-size:2,5vw;<br />
color:black;<br />
top:120px;<br />
right:50px;<br />
text-shadow: #F5E3E6 1px 0 10px;<br />
writing-mode:vertical-rl;<br />
text-orientation: upright;<br />
z-index:1003;<br />
}<br />
<br />
#lessons {<br />
position:fixed;<br />
opacity:0.2;<br />
overflow-x:auto;<br />
top:100px;<br />
right:26px;<br />
padding:16px;<br />
padding-left:30px;<br />
width:350px;<br />
height:270px;<br />
font-size:11px;<br />
text-transform:uppercase;<br />
border:solid 1px black;<br />
box-shadow:0px 0px 30px black, 0px 0px 90px rgba(0,2,2,0.39);<br />
z-index:1;<br />
}<br />
<br />
#lessons:hover {<br />
opacity:1;<br />
background-color:rgb(255,250,250,0.82);<br />
font-size:11px; <br />
z-index:1002;<br />
}<br />
<br />
div.keywords {<br />
display: none!none;<br />
}</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=MediaWiki:Common.css&diff=10504MediaWiki:Common.css2023-12-19T08:53:57Z<p>Boris: </p>
<hr />
<div>/* CSS placed here will be applied to all skins */<br />
.rgb { background-image: url(http://interactionstation.wdka.hro.nl/mediawiki/images/1/16/Rgifb.gif);}<br />
.image100px img { width: 100px; }<br />
.image320px img { width: 320px; border-width: 1px solid #000000; }<br />
.image480px img { width: 480px; }<br />
<br />
.title {<br />
font-size:20px;<br />
position:fixed;<br />
writing-mode: vertical-rl;<br />
bottom:37px;<br />
left:28px;<br />
z-index:1000;<br />
}<br />
<br />
.rooms {<br />
position:fixed;background:white;<br />
border:solid 1px black;<br />
transition:all 2s;<br />
}<br />
<br />
.openArea {<br />
top:30vmin;height:30vmin;left:40.1vmin;width:29.9vmin;<br />
border-right:0.1px solid white;<br />
}<br />
<br />
.prototypingSpace {<br />
top:30vmin;height:30vmin;left:70.2vmin;width:39vmin;<br />
border-left:0.1px solid white;<br />
}<br />
<br />
.prototypingSpaceText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.prototypingSpace:hover .prototypingSpaceText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.instructionRoom {<br />
top:30vmin;height:24vmin;left:24vmin;width:18vmin;<br />
}<br />
<br />
.computerRoom {<br />
top:60vmin;height:19vmin;left:24vmin;width:23vmin;<br />
}<br />
<br />
.computerRoom2 {<br />
top:60vmin;height:19vmin;left:47.1vmin;width:17vmin;<br />
}<br />
<br />
.interactiveInstallation {<br />
top:60vmin;height:19vmin;left:64vmin;width:20vmin;<br />
}<br />
<br />
.interactiveInstallationText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.interactiveInstallation:hover .interactiveInstallationText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.office {<br />
top:36vmin;height:7vmin;left:60vmin;width:10vmin;<br />
}<br />
<br />
.officeText {<br />
display:none;<br />
z-index:1000;<br />
transition:all 2s;<br />
}<br />
<br />
.office:hover .officeText {<br />
display:block;<br />
position:fixed;<br />
right:10vw;<br />
width:20vw;<br />
top:20vh;<br />
}<br />
<br />
.rooms:hover {<br />
background:black;<br />
}<br />
<br />
#terminal {<br />
position:fixed;<br />
background:rgba(0,2,2,0.83);<br />
border: 1px solid white;<br />
bottom:35px;<br />
right:30px;<br />
height:400px;<br />
width:600px;<br />
box-shadow: 0px 0px 24px #8CACAC, 0px 0px 60px #AF8C9D;<br />
z-index:1001;<br />
}<br />
<br />
#terminal:hover {<br />
background:rgba(0,2,2,0.9);<br />
}<br />
<br />
.terminalIntro {<br />
position: relative;<br />
line-height:20px;<br />
display: inline-block;<br />
color: black;<br />
min-width: 1px;<br />
min-height: 24px;<br />
}<br />
<br />
.terminalIntro:after {<br />
content: "";<br />
position: absolute;<br />
top: 5%;<br />
right: -2px;<br />
width: 1px;<br />
height: 90%;<br />
border-right: 2px solid #FFF;<br />
animation: blink .5s infinite ease;<br />
}<br />
<br />
<br />
@keyframes blink {<br />
0% { background-color: black; }<br />
49% { background-color: black; }<br />
50% { background-color: transparent; }<br />
99% { background-color: transparent; }<br />
100% { background-color: #ccc; }<br />
}<br />
<br />
.terminalCore {<br />
padding:20px;<br />
position: relative;<br />
line-height:20px;<br />
display: inline-block;<br />
color: white;<br />
opacity:0.7;<br />
min-width: 1px;<br />
min-height: 24px;<br />
}<br />
<br />
.terminalCore:after {<br />
content: "";<br />
position: absolute;<br />
top: 5%;<br />
right: -2px;<br />
width: 1px;<br />
height: 90%;<br />
border-right: 2px solid #FFF;<br />
animation: blink .5s infinite ease;<br />
}<br />
<br />
.terminalButton {<br />
position:relative;<br />
left:10px;top:3px;<br />
}<br />
<br />
.line{<br />
position:relative;<br />
width: 100%;<br />
height: 30px;<br />
border-bottom: 1px solid white;<br />
}<br />
<br />
#curtains {<br />
position: absolute;<br />
background: #f7f5f5;<br />
top: 168px;<br />
left: 13px;<br />
height: 310px;<br />
width: 133px;<br />
z-index: 1001;<br />
transition: 3s;<br />
}<br />
<br />
#curtains:hover {<br />
opacity:0;<br />
z-index:0;<br />
}<br />
<br />
#lessonsTitle {<br />
position:fixed;<br />
font-size:2,5vw;<br />
color:black;<br />
top:120px;<br />
right:50px;<br />
text-shadow: #F5E3E6 1px 0 10px;<br />
writing-mode:vertical-rl;<br />
text-orientation: upright;<br />
z-index:1003;<br />
}<br />
<br />
#lessons {<br />
position:fixed;<br />
opacity:0.2;<br />
overflow-x:auto;<br />
top:100px;<br />
right:26px;<br />
padding:16px;<br />
padding-left:30px;<br />
width:350px;<br />
height:270px;<br />
font-size:11px;<br />
text-transform:uppercase;<br />
border:solid 1px black;<br />
box-shadow:0px 0px 30px black, 0px 0px 90px rgba(0,2,2,0.39);<br />
z-index:1;<br />
}<br />
<br />
#lessons:hover {<br />
opacity:1;<br />
background-color:rgb(255,250,250,0.82);<br />
font-size:11px; <br />
z-index:1002;<br />
}<br />
<br />
.keywords {<br />
display: none;<br />
}</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10503Vlc-sync2023-12-19T08:53:23Z<p>Boris: </p>
<hr />
<div>[[Category:Raspberry Pi]]<br />
<div class="keywords">vlc-sync, vlc, raspberry pi, multichannel, video installation, omxplayer</div></div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Vlc-sync&diff=10502Vlc-sync2023-12-19T08:47:35Z<p>Boris: Created page with "<div class="keywords">vlc-sync, vlc, raspberry pi, multichannel, video installation, omxplayer</div>"</p>
<hr />
<div><div class="keywords">vlc-sync, vlc, raspberry pi, multichannel, video installation, omxplayer</div></div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10227Zoönology2023-03-07T07:57:03Z<p>Boris: /* Code */</p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Board ==<br />
https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html#installing-using-arduino-ide<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("Temperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
==== Schematic ====<br />
[[File:PresTempAltitude-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include <SPI.h><br />
#include <Adafruit_BMP280.h><br />
<br />
Adafruit_BMP280 bmp; // adafruit library to talk to the BMP280 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600);<br />
<br />
if (! bmp.begin()) {<br />
// this checks if the board can find the BMP280 sensor<br />
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Temperature: "));<br />
Serial.print(bmp.readTemperature());<br />
Serial.println(" *C");<br />
<br />
Serial.print("Pressure: "));<br />
Serial.print(bmp.readPressure());<br />
Serial.println(" Pa");<br />
<br />
Serial.print("Approx altitude: ");<br />
Serial.print(bmp.readAltitude(1028)); // Adjusted to local forecast: https://meteologix.com/nl/observations/zuid-holland/pressure-qnh/20230203-1500z.html<br />
Serial.println(" m"); <br />
<br />
delay(2000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
== Code ==<br />
The server code for the ESP32 can be found on our [https://github.com/mywdka/esp32-captive-webserver Github repository].<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10208Zoönology2023-02-07T08:41:59Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Board ==<br />
https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html#installing-using-arduino-ide<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("Temperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
==== Schematic ====<br />
[[File:PresTempAltitude-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include <SPI.h><br />
#include <Adafruit_BMP280.h><br />
<br />
Adafruit_BMP280 bmp; // adafruit library to talk to the BMP280 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600);<br />
<br />
if (! bmp.begin()) {<br />
// this checks if the board can find the BMP280 sensor<br />
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Temperature: "));<br />
Serial.print(bmp.readTemperature());<br />
Serial.println(" *C");<br />
<br />
Serial.print("Pressure: "));<br />
Serial.print(bmp.readPressure());<br />
Serial.println(" Pa");<br />
<br />
Serial.print("Approx altitude: ");<br />
Serial.print(bmp.readAltitude(1028)); // Adjusted to local forecast: https://meteologix.com/nl/observations/zuid-holland/pressure-qnh/20230203-1500z.html<br />
Serial.println(" m"); <br />
<br />
delay(2000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10207Zoönology2023-02-07T08:39:41Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Board ==<br />
[[Board manager https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html#installing-using-arduino-ide]]<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("Temperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
==== Schematic ====<br />
[[File:PresTempAltitude-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include <SPI.h><br />
#include <Adafruit_BMP280.h><br />
<br />
Adafruit_BMP280 bmp; // adafruit library to talk to the BMP280 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600);<br />
<br />
if (! bmp.begin()) {<br />
// this checks if the board can find the BMP280 sensor<br />
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Temperature: "));<br />
Serial.print(bmp.readTemperature());<br />
Serial.println(" *C");<br />
<br />
Serial.print("Pressure: "));<br />
Serial.print(bmp.readPressure());<br />
Serial.println(" Pa");<br />
<br />
Serial.print("Approx altitude: ");<br />
Serial.print(bmp.readAltitude(1028)); // Adjusted to local forecast: https://meteologix.com/nl/observations/zuid-holland/pressure-qnh/20230203-1500z.html<br />
Serial.println(" m"); <br />
<br />
delay(2000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10206Zoönology2023-02-07T08:38:16Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Board ==<br />
[Board manager https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html#installing-using-arduino-ide]<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("Temperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
==== Schematic ====<br />
[[File:PresTempAltitude-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include <SPI.h><br />
#include <Adafruit_BMP280.h><br />
<br />
Adafruit_BMP280 bmp; // adafruit library to talk to the BMP280 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600);<br />
<br />
if (! bmp.begin()) {<br />
// this checks if the board can find the BMP280 sensor<br />
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Temperature: "));<br />
Serial.print(bmp.readTemperature());<br />
Serial.println(" *C");<br />
<br />
Serial.print("Pressure: "));<br />
Serial.print(bmp.readPressure());<br />
Serial.println(" Pa");<br />
<br />
Serial.print("Approx altitude: ");<br />
Serial.print(bmp.readAltitude(1028)); // Adjusted to local forecast: https://meteologix.com/nl/observations/zuid-holland/pressure-qnh/20230203-1500z.html<br />
Serial.println(" m"); <br />
<br />
delay(2000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=File:PresTempAltitude-Sensor-fritzing.jpeg&diff=10203File:PresTempAltitude-Sensor-fritzing.jpeg2023-02-03T15:38:12Z<p>Boris: </p>
<hr />
<div></div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10202Zoönology2023-02-03T15:37:58Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("Temperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
==== Schematic ====<br />
[[File:PresTempAltitude-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include <SPI.h><br />
#include <Adafruit_BMP280.h><br />
<br />
Adafruit_BMP280 bmp; // adafruit library to talk to the BMP280 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600);<br />
<br />
if (! bmp.begin()) {<br />
// this checks if the board can find the BMP280 sensor<br />
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Temperature: "));<br />
Serial.print(bmp.readTemperature());<br />
Serial.println(" *C");<br />
<br />
Serial.print("Pressure: "));<br />
Serial.print(bmp.readPressure());<br />
Serial.println(" Pa");<br />
<br />
Serial.print("Approx altitude: ");<br />
Serial.print(bmp.readAltitude(1028)); // Adjusted to local forecast: https://meteologix.com/nl/observations/zuid-holland/pressure-qnh/20230203-1500z.html<br />
Serial.println(" m"); <br />
<br />
delay(2000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10201Zoönology2023-02-03T15:37:18Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("Temperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
==== Schematic ====<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include <SPI.h><br />
#include <Adafruit_BMP280.h><br />
<br />
Adafruit_BMP280 bmp; // adafruit library to talk to the BMP280 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600);<br />
<br />
if (! bmp.begin()) {<br />
// this checks if the board can find the BMP280 sensor<br />
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Temperature: "));<br />
Serial.print(bmp.readTemperature());<br />
Serial.println(" *C");<br />
<br />
Serial.print("Pressure: "));<br />
Serial.print(bmp.readPressure());<br />
Serial.println(" Pa");<br />
<br />
Serial.print("Approx altitude: ");<br />
Serial.print(bmp.readAltitude(1028)); // Adjusted to local forecast: https://meteologix.com/nl/observations/zuid-holland/pressure-qnh/20230203-1500z.html<br />
Serial.println(" m"); <br />
<br />
delay(2000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10180Zoönology2023-02-03T15:00:40Z<p>Boris: /* Pressure/Temperature/Altitude sensor */</p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("\tTemperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10178Zoönology2023-02-03T15:00:20Z<p>Boris: /* Pressure/Temperature/Altitude sensor */</p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("\tTemperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor.jpeg|thumb|[https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all Adafruit BMP280 Barometric Pressure & Altitude Sensor]]]<br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=File:PresTempAltitudeSensor.jpeg&diff=10177File:PresTempAltitudeSensor.jpeg2023-02-03T14:59:59Z<p>Boris: </p>
<hr />
<div></div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10175Zoönology2023-02-03T14:56:31Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor?view=all Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("\tTemperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor|thumb|Adafruit BMP280 Barometric Pressure & Altitude Sensor]]<br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10174Zoönology2023-02-03T14:55:48Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|200px|thumb|Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("\tTemperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor|thumb|Adafruit BMP280 Barometric Pressure & Altitude Sensor]]<br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10173Zoönology2023-02-03T14:55:24Z<p>Boris: /* Temperature/Humidity Sensor */</p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor.jpeg|thumb|Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("\tTemperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor|thumb|Adafruit BMP280 Barometric Pressure & Altitude Sensor]]<br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=File:TemperatureHumiditySensor.jpeg&diff=10172File:TemperatureHumiditySensor.jpeg2023-02-03T14:55:00Z<p>Boris: </p>
<hr />
<div></div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=File:TempHumidity-fritzing.jpeg&diff=10168File:TempHumidity-fritzing.jpeg2023-02-03T14:50:05Z<p>Boris: </p>
<hr />
<div></div>Borishttps://interactionstation.wdka.hro.nl/mediawiki/index.php?title=Zo%C3%B6nology&diff=10167Zoönology2023-02-03T14:49:52Z<p>Boris: </p>
<hr />
<div>[[File:BMPlant.png|120px|frameless]]<br />
[[File:Lolin-d32.png|thumb|ESP32 microcontroller (Lolin D32 Pro)]]<br />
== Zoöp ==<br />
"Zoöp" is an experimental model for organizations to transition towards ecological justice - by not only preaching, but radically practicing it. In a Zoöp, non-humans have an equal voice next to humans, on all levels of the organization and its decision-making. As the initiators describe it: “Zoöp is short for Zoöperation: coöperation with zoë – (Greek for ‘life’) Together with other Zoöps we work towards the transformation of our economy into a regenerative human-inclusive ecosystem, a network of exchange of matter, energy and meaning that supports all bodies in their existence”. <sup><small>[[https://zoop.hetnieuweinstituut.nl/zoop-manifesto Zoöp manifesto]]</small></sup><br />
<br />
== Zoönology: Observing & Sensing ==<br />
The name of this workshop, "Zoönology", is the combination of technology and zoë. It may seem paradoxical to combine computation and the model of Zoöp as computation depends on the extraction of finite resources. Therefore, as we make the connection during the workshop by making, the question arises to whether computing and network technologies could have a place in regenerative, human-inclusive, reciprocal ecosystems <sup><small>[[https://zoop.earth/ zoop.earth]]</small></sup>. In the workshop we will use a low powered ESP32 micro controller and a environmental sensor to observe non-human or non-living entities. <br />
<br />
== Environmental sensors ==<br />
=== Soil moisture sensor ===<br />
[[File:SoilMoistureSensor.jpeg|200px|thumb|[https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide SparkFun Soil Moisture Sensor]]]<br />
==== Schematic ====<br />
[[File:SoilMoistureSensor-fritzing.jpeg|400px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
int soilPin = 32; // the sensor signal pin is connected to pin 32 on the board<br />
int soilValue = 0; // we set the initial value of the soil sensor to 0<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
}<br />
<br />
void loop() {<br />
soilValue = analogRead(soilPin); // read value from the soil pin (32)<br />
Serial.println(soilValue); // send value to the computer<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== UV/IR/Visible Light sensor ===<br />
[[File:UR-IR-VisibleLight-Sensor.jpeg|200px|thumb|[https://learn.adafruit.com/adafruit-si1145-breakout-board-uv-ir-visible-sensor Adafruit SI1145 Digital UV Index / IR / Visible Light Sensor]]]<br />
==== Schematic ====<br />
[[File:UR-IR-VisibleLight-Sensor-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SI1145.h"<br />
<br />
Adafruit_SI1145 uv = Adafruit_SI1145(); // adafruit library to talk to the Si1145 sensor<br />
<br />
float uvIndex; // variable to store the uv index sensor value<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! uv.begin()) {<br />
// this checks if the board can find the Si1145 sensor<br />
Serial.println("Didn't find Si1145");<br />
while (1); // and stops if it cannot find the sensor<br />
}<br />
}<br />
<br />
void loop() {<br />
uvIndex = uv.readUV() / 100.0; // the UV is multiplied by 100 so we divide to get the UV index<br />
<br />
Serial.print("UV Index: ");<br />
Serial.println(uvIndex);<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Air Quality Sensor ===<br />
[[File:AirQualitySensor.png|200px|thumb|[https://learn.adafruit.com/adafruit-sgp30-gas-tvoc-eco2-mox-sensor?view=all Adafruit SGP30 Air Quality Sensor Breakout - VOC and eCO2]]]<br />
<br />
==== Schematic ====<br />
[[File:AirQuality-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
#include <Wire.h><br />
#include "Adafruit_SGP30.h"<br />
<br />
Adafruit_SGP30 sgp; // adafruit library to talk to the SGP30 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (! sgp.begin()){<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Didn't find SGP30");<br />
while (1);<br />
}<br />
}<br />
<br />
void loop() {<br />
if (! sgp.IAQmeasure()) {<br />
// this checks if we can make a measurement<br />
Serial.println("Measurement failed");<br />
return;<br />
}<br />
<br />
// Output the eC02 value to the computer<br />
Serial.print("eCO2: ");<br />
Serial.print(sgp.eCO2); <br />
Serial.println(" ppm");<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Temperature/Humidity Sensor ===<br />
[[File:TemperatureHumiditySensor|thumb|Adafruit Si7021 Temperature & Humidity Sensor Breakout Board]]<br />
<br />
==== Schematic ====<br />
[[File:TempHumidity-fritzing.jpeg|500px|frameless|center]]<br />
<br />
==== Code ====<br />
<syntaxhighlight lang="c++"><br />
<br />
#include "Adafruit_Si7021.h"<br />
<br />
Adafruit_Si7021 sensor = Adafruit_Si7021(); // adafruit library to talk to the Si7021 sensor<br />
<br />
void setup() {<br />
Serial.begin(9600); // make a connection to the computer<br />
<br />
if (!sensor.begin()) {<br />
// this checks if the board can find the SGP30 sensor<br />
Serial.println("Did not find the Si7021 sensor!");<br />
while (true);<br />
}<br />
}<br />
<br />
void loop() {<br />
Serial.print("Humidity: ");<br />
Serial.print(sensor.readHumidity(), 2); // read humidity value with 2 digits after comma<br />
<br />
Serial.print("\tTemperature: ");<br />
Serial.println(sensor.readTemperature(), 2); // read temperature value with 2 digits after comma<br />
<br />
delay(1000); // wait 1 second (1000 milliseconds)<br />
}<br />
</syntaxhighlight><br />
<br />
=== Pressure/Temperature/Altitude sensor ===<br />
[[File:PresTempAltitudeSensor|thumb|Adafruit BMP280 Barometric Pressure & Altitude Sensor]]<br />
<br />
== Code ==<br />
All the starter templates and final code can be found on our [https://github.com/mywdka/captive-portal Github] page.<br />
<br />
== Planning: ==<br />
==== Week 1: (7th of February) ====<br />
* Introduction in the ESP32 micro controller & sensors<br />
* Picking your environmental sensor for coming weeks<br />
* Research your sensor<br />
==== Week 2: (14th of February) ====<br />
* Connecting your sensor to the Lolin D32 Pro<br />
* Saving sensor data to the SD card<br />
==== Week 3: (21st of February) ====<br />
* Displaying sensor values on a local captive portal<br />
==== Week 5: (7th of March) ====<br />
* Field testing<br />
==== Week 6: (14th of March) ====<br />
* Extracting sensor values from the field test<br />
* Documenting findings on the captive portal<br />
==== Week 7: (21th of March) ====<br />
No class<br />
==== Week 8: (28th of March) ====<br />
* Finishing up the captive portal<br />
<br />
== Tutorials ==<br />
To be added ...<br />
<br />
== Sources & References ==<br />
[https://solar.lowtechmagazine.com/ Low Tech Magazine]<br><br />
[https://feralatlas.supdigital.org/ Feral Atlas]<br><br />
[https://permacomputing.net/ Permacomputing]<br><br />
<br />
[[Category:2023]]</div>Boris