<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
	<id>https://www.htxarduino.dk/index.php?action=history&amp;feed=atom&amp;title=Arduino_Lys_og_N%C3%A6rhed</id>
	<title>Arduino Lys og Nærhed - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://www.htxarduino.dk/index.php?action=history&amp;feed=atom&amp;title=Arduino_Lys_og_N%C3%A6rhed"/>
	<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=Arduino_Lys_og_N%C3%A6rhed&amp;action=history"/>
	<updated>2026-06-13T13:57:59Z</updated>
	<subtitle>Versionshistorie for denne side i HTX Arduino</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.htxarduino.dk/index.php?title=Arduino_Lys_og_N%C3%A6rhed&amp;diff=3941&amp;oldid=prev</id>
		<title>Bar: 1 version importeret</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=Arduino_Lys_og_N%C3%A6rhed&amp;diff=3941&amp;oldid=prev"/>
		<updated>2022-10-26T12:50:08Z</updated>

		<summary type="html">&lt;p&gt;1 version importeret&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 26. okt. 2022, 14:50&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;da&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Ingen forskel)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
	<entry>
		<id>https://www.htxarduino.dk/index.php?title=Arduino_Lys_og_N%C3%A6rhed&amp;diff=3940&amp;oldid=prev</id>
		<title>htx_&gt;Bar med 13. apr. 2018, 12:27</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=Arduino_Lys_og_N%C3%A6rhed&amp;diff=3940&amp;oldid=prev"/>
		<updated>2018-04-13T12:27:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Image:APDS-9930-Light.png|300px|thumb|right|I2C Lys og Nærheds module APDS-9930 3,3V]]&lt;br /&gt;
APDS-9930 er et lille [[I2C]] modul der kan måle lys og nærhed 3,3V Forsyning !!!.&lt;br /&gt;
[[Image:APDS-9960-Light.jpg|300px|thumb|right|I2C Lys og Nærheds module APDS-9960 5V]]&lt;br /&gt;
APDS-9960 er et lille [[I2C]] modul der kan måle lys og nærhed Kan arbejde på 5V Forsyning !!!.&lt;br /&gt;
&lt;br /&gt;
Modulet er anskaffet i Kina&amp;lt;ref&amp;gt;[https://www.aliexpress.com/item/Free-shipping-10Pcs-APDS-9930-RGB-and-Gesture-Sensor-Proximity-Attitude-Sensor-Approaching-and-Non-Contact/32576290533.html Købsside til modulet]&amp;lt;/ref&amp;gt; til en pris omkring $2,50 og er dokumenteret i følgende datablad&amp;lt;ref&amp;gt;[https://octopart.com/apds-9930-broadcom-71127187 Leverandør med henvisning til Datablad over modulet]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Modulet tilsluttes GND og +3,3V samt SCL og SDA som [[I2C]] protokollen specificerer (modulerne med 6 ben).&lt;br /&gt;
Modulerne med 5 ben har en regulator indbygget, så de kan tåle 5V.&lt;br /&gt;
&lt;br /&gt;
==Lignende moduler==&lt;br /&gt;
Vi har 3 forskellige moduler, der ligner hinanden en del, men kan lidt forskelligt.&lt;br /&gt;
&lt;br /&gt;
*[[Media:Broadcom-APDS-9900-datasheet.pdf|APDS-9900 Datablad]] Proximity og light-sensor med standard egenskaber&lt;br /&gt;
*[[Media:Broadcom-APDS-9930-datasheet.pdf|APDS-9930 Datablad]] Proximity og light-sensor med egenskaber til lav belysning&lt;br /&gt;
*[[Media:Broadcom-APDS-9960-datasheet.pdf|APDS-9960 Datablad]] Proximity og light-sensor med RGB muligheder&lt;br /&gt;
&lt;br /&gt;
På denne side er det kun APDS-9930 der er dokumenteret, men software-biblioteker kan hentes her:&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/Depau/APDS9930 GitHub software bibliotek til APDS-9900 er ikke lavet, så der henvises til APDS-9930], men biblioteket kan sikkert tilrettes.&lt;br /&gt;
*[https://github.com/Depau/APDS9930 GitHub software bibliotek til APDS-9930]&lt;br /&gt;
*[https://github.com/sparkfun/SparkFun_APDS-9960_Sensor_Arduino_Library GitHub software bibliotek til APDS-9960]&lt;br /&gt;
&lt;br /&gt;
==Elektrisk tilslutning==&lt;br /&gt;
Modulet kommer med et 6 polet stik, der kan tilsluttes Arduinoen som følger:&lt;br /&gt;
&lt;br /&gt;
VIGTIGT - VIGTIGT - APDS-9930 kan kun acceptere 3,3V forsyning&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Funktion!!Arduino&lt;br /&gt;
|-&lt;br /&gt;
|VL||Tilsluttes ikke&lt;br /&gt;
|-&lt;br /&gt;
|GND||GND&lt;br /&gt;
|-&lt;br /&gt;
|VCC||+3.3V&lt;br /&gt;
|-&lt;br /&gt;
|SCL||SCL - A5&lt;br /&gt;
|-&lt;br /&gt;
|SDA||SDA - A4&lt;br /&gt;
|-&lt;br /&gt;
|INT||Tilsluttes ikke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Biblioteket der anvendes ligger på [https://github.com/Davideddu/APDS9930 GitHub]&amp;lt;ref&amp;gt;[https://github.com/Davideddu/APDS9930 APDS-9930 bibliotek] placeret ved GitHub&amp;lt;/ref&amp;gt;. Biblioteket downloades og installeres som beskrevet under [[Arduinos_Biblioteker#Tilføjelse_af_biblioteker|Arduinos biblioteker]].&lt;br /&gt;
&lt;br /&gt;
Til test anvendes AmbientLightSensor der kommer med som eksempel til biblioteket. Der er også mange andre eksempler man kan lege med.&lt;br /&gt;
&lt;br /&gt;
Her gennemgås kun de grundlæggende dele af modulet.&lt;br /&gt;
&lt;br /&gt;
===Anvendelsen af softwaren===&lt;br /&gt;
Som alle andre biblioteker skal der sættes de grundlæggende ting op for at kontakte biblioteket. Der oprettes et objekt htu, der refererer til sensoren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define DUMP_REGS&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;APDS9930.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Global Variables&lt;br /&gt;
APDS9930 apds = APDS9930();&lt;br /&gt;
float ambient_light = 0; // can also be an unsigned long&lt;br /&gt;
uint16_t ch0 = 0;&lt;br /&gt;
uint16_t ch1 = 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inde i [[setup()]] skal der sættes gang i den serielle port til test ved hjælp af begin-metoden, og modulet initialiseres som vist her:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(F(&amp;quot;--------------------------------&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;APDS-9930 - Ambient light sensor&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;--------------------------------&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  // Initialize APDS-9930 (configure I2C and initial values)&lt;br /&gt;
  if ( apds.init() ) {&lt;br /&gt;
    Serial.println(F(&amp;quot;APDS-9930 initialization complete&amp;quot;));&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(F(&amp;quot;Something went wrong during APDS-9930 init!&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Start running the APDS-9930 light sensor (no interrupts)&lt;br /&gt;
  if ( apds.enableLightSensor(false) ) {&lt;br /&gt;
    Serial.println(F(&amp;quot;Light sensor is now running&amp;quot;));&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(F(&amp;quot;Something went wrong during light sensor init!&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
#ifdef DUMP_REGS&lt;br /&gt;
  /* Register dump */&lt;br /&gt;
  uint8_t reg;&lt;br /&gt;
  uint8_t val;&lt;br /&gt;
&lt;br /&gt;
  for(reg = 0x00; reg &amp;lt;= 0x19; reg++) {&lt;br /&gt;
    if( (reg != 0x10) &amp;amp;&amp;amp; \&lt;br /&gt;
        (reg != 0x11) )&lt;br /&gt;
    {&lt;br /&gt;
      apds.wireReadDataByte(reg, val);&lt;br /&gt;
      Serial.print(reg, HEX);&lt;br /&gt;
      Serial.print(&amp;quot;: 0x&amp;quot;);&lt;br /&gt;
      Serial.println(val, HEX);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  apds.wireReadDataByte(0x1E, val);&lt;br /&gt;
  Serial.print(0x1E, HEX);&lt;br /&gt;
  Serial.print(&amp;quot;: 0x&amp;quot;);&lt;br /&gt;
  Serial.println(val, HEX);&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
  // Wait for initialization and calibration to finish&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I [[loop()]] læses de tre lys-værdier og de skrives ud til [[Serial Monitor]] hvert sekund, det gøres med følgende kode:.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Read the light levels (ambient, red, green, blue)&lt;br /&gt;
  if (  !apds.readAmbientLightLux(ambient_light) ||&lt;br /&gt;
        !apds.readCh0Light(ch0) || &lt;br /&gt;
        !apds.readCh1Light(ch1) ) {&lt;br /&gt;
    Serial.println(F(&amp;quot;Error reading light values&amp;quot;));&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.print(F(&amp;quot;Ambient: &amp;quot;));&lt;br /&gt;
    Serial.print(ambient_light);&lt;br /&gt;
    Serial.print(F(&amp;quot;  Ch0: &amp;quot;));&lt;br /&gt;
    Serial.print(ch0);&lt;br /&gt;
    Serial.print(F(&amp;quot;  Ch1: &amp;quot;));&lt;br /&gt;
    Serial.println(ch1);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Wait 1 second before next reading&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Yderligere muligheder i softwaren===&lt;br /&gt;
Der ligger yderligere muligheder i biblioteket man kan anvende, hvis man ønsker andre måder at anvende sensoren på:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
    bool init();&lt;br /&gt;
    uint8_t getMode();&lt;br /&gt;
    bool setMode(uint8_t mode, uint8_t enable);&lt;br /&gt;
    &lt;br /&gt;
    /* Turn the APDS-9930 on and off */&lt;br /&gt;
    bool enablePower();&lt;br /&gt;
    bool disablePower();&lt;br /&gt;
    &lt;br /&gt;
    /* Enable or disable specific sensors */&lt;br /&gt;
    bool enableLightSensor(bool interrupts = false);&lt;br /&gt;
    bool disableLightSensor();&lt;br /&gt;
    bool enableProximitySensor(bool interrupts = false);&lt;br /&gt;
    bool disableProximitySensor();&lt;br /&gt;
&lt;br /&gt;
    /* LED drive strength control */&lt;br /&gt;
    uint8_t getLEDDrive();&lt;br /&gt;
    bool setLEDDrive(uint8_t drive);&lt;br /&gt;
    // uint8_t getGestureLEDDrive();&lt;br /&gt;
    // bool setGestureLEDDrive(uint8_t drive);&lt;br /&gt;
    &lt;br /&gt;
    /* Gain control */&lt;br /&gt;
    uint8_t getAmbientLightGain();&lt;br /&gt;
    bool setAmbientLightGain(uint8_t gain);&lt;br /&gt;
    uint8_t getProximityGain();&lt;br /&gt;
    bool setProximityGain(uint8_t gain);&lt;br /&gt;
    bool setProximityDiode(uint8_t drive);&lt;br /&gt;
    uint8_t getProximityDiode();&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    /* Get and set light interrupt thresholds */&lt;br /&gt;
    bool getLightIntLowThreshold(uint16_t &amp;amp;threshold);&lt;br /&gt;
    bool setLightIntLowThreshold(uint16_t threshold);&lt;br /&gt;
    bool getLightIntHighThreshold(uint16_t &amp;amp;threshold);&lt;br /&gt;
    bool setLightIntHighThreshold(uint16_t threshold);&lt;br /&gt;
    &lt;br /&gt;
    /* Get and set interrupt enables */&lt;br /&gt;
    uint8_t getAmbientLightIntEnable();&lt;br /&gt;
    bool setAmbientLightIntEnable(uint8_t enable);&lt;br /&gt;
    uint8_t getProximityIntEnable();&lt;br /&gt;
    bool setProximityIntEnable(uint8_t enable);&lt;br /&gt;
    &lt;br /&gt;
    /* Clear interrupts */&lt;br /&gt;
    bool clearAmbientLightInt();&lt;br /&gt;
    bool clearProximityInt();&lt;br /&gt;
    bool clearAllInts();&lt;br /&gt;
    &lt;br /&gt;
    /* Proximity methods */&lt;br /&gt;
    bool readProximity(uint16_t &amp;amp;val);&lt;br /&gt;
&lt;br /&gt;
    /* Ambient light methods */&lt;br /&gt;
    bool readAmbientLightLux(float &amp;amp;val);&lt;br /&gt;
    bool readAmbientLightLux(unsigned long &amp;amp;val);&lt;br /&gt;
    float floatAmbientToLux(uint16_t Ch0, uint16_t Ch1);&lt;br /&gt;
    unsigned long ulongAmbientToLux(uint16_t Ch0, uint16_t Ch1);&lt;br /&gt;
    bool readCh0Light(uint16_t &amp;amp;val);&lt;br /&gt;
    bool readCh1Light(uint16_t &amp;amp;val);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En del af disse funktioner er vist i koden, mens andre kan anvendes hvis man har lyst.&lt;br /&gt;
&lt;br /&gt;
==Test==&lt;br /&gt;
Test af softwaren viser at der kan læses nogle lys-værdier, men der er ganske givet mere at komme efter.&lt;br /&gt;
&lt;br /&gt;
==Referencer==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
{{Arduino-Modul-Oversigt}}&lt;br /&gt;
[[Kategori:Arduino Moduler]]&lt;/div&gt;</summary>
		<author><name>htx_&gt;Bar</name></author>
	</entry>
</feed>