{"id":535,"date":"2025-06-04T23:39:20","date_gmt":"2025-06-04T20:39:20","guid":{"rendered":"https:\/\/eugo.ro\/?p=535"},"modified":"2025-06-05T22:14:09","modified_gmt":"2025-06-05T19:14:09","slug":"ce-este-un-microcontroler","status":"publish","type":"post","link":"https:\/\/eugo.ro\/?p=535","title":{"rendered":"Ce este un microcontroler"},"content":{"rendered":"<p>&nbsp;<br \/>\n<strong>Ce este un microcontroler ?<\/strong><br \/>\nUn microcontroler este un circuit integrat care con\u021bine un procesor, memorie \u0219i periferice, toate integrate \u00eentr-un singur chip. Acesta este folosit pentru a controla diverse dispozitive electronice, fiind esen\u021bial \u00een aplica\u021bii de automatizare, robotica, electronic\u0103 de consum \u0219i multe altele.<br \/>\n&nbsp;<br \/>\n<strong>Care este structura interna a unui microcontroler ?<\/strong><br \/>\n<em><strong>Unitate Central\u0103 de Procesare (CPU)<\/strong><\/em>: Este inima microcontrolerului, responsabil\u0103 cu executarea instruc\u021biunilor \u0219i coordonarea operatiunilor.<br \/>\n&nbsp;<br \/>\n<em><strong>Memorie<\/strong><\/em><br \/>\n<em><strong>Memorie RAM (Random Access Memory<\/strong><\/em>: Folosit\u0103 pentru stocarea temporar\u0103 a datelor \u00een timpul execu\u021biei programului.<br \/>\n<strong>Memorie Flash sau EEPROM<\/strong>: Pentru stocarea permanent\u0103 a codului \u0219i a datelor care trebuie p\u0103strate \u0219i dup\u0103 oprirea aliment\u0103rii.<br \/>\n<em><strong>Interfe\u021be de intrare\/ie\u0219ire (I\/O)<\/strong><\/em>: Permite comunicarea cu alte dispozitive externe, cum ar fi senzori, motoare sau LED-uri.<br \/>\n<em><strong>Periferice<\/strong>:<\/em> Acestea pot include convertoare analogic-digitale (ADC), temporizatoare, comunicare serial\u0103 (UART, SPI, I2C).<br \/>\n<em><strong>Unit\u0103\u021bi de suport<\/strong><\/em>: Pot include module pentru generarea de semnale PWM, pentru controlul unor func\u021bii specifice sau pentru gestionarea alimentarii.<br \/>\n&nbsp;<br \/>\n<strong>Cum se poate programa un microcontroler ?<\/strong><br \/>\nProgramarea unui microcontroler se face \u00een general folosind un limbaj de programare, cele mai utilizate fiind C \u0219i Assembly. Pasii generali sunt urmatorii:<br \/>\n<em><strong>Scrierea Codului<\/strong><\/em>: Folosind un mediu de dezvoltare (IDE) specific pentru microcontrolerul ales (de exemplu, MPLAB pentru PIC, Arduino IDE pentru Arduino).<br \/>\n<em><strong>Compilarea<\/strong><\/em>: Codul scris este compilat pentru a fi transformat intr-un fi\u0219ier binar pe care microcontrolerul il poate intelege.<br \/>\n<em><strong>Inc\u0103rcarea Programului<\/strong><\/em>: Utiliz\u00e2nd un programator (hardware care faciliteaz\u0103 transferul codului), codul este \u00eenc\u0103rcat \u00een memoria flash a microcontrolerului.<br \/>\n<em><strong>Testare \u0219i Debugging<\/strong><\/em>: Verificarea \u0219i ajustarea programului pentru a se asigura c\u0103 func\u021bia dorit\u0103 este realizat\u0103 corect.<br \/>\n&nbsp;<br \/>\n<strong>Un exemplu de aplica\u021bie practica cu microcontroler !<\/strong><br \/>\nUn exemplu comun este un sistem de automatizare a iluminatului. Acest sistem poate folosi un microcontroler (de exemplu, Arduino) pentru a controla iluminatul \u00eentr-o camer\u0103 pe baza detec\u021biei mi\u0219c\u0103rii.<br \/>\n&nbsp;<br \/>\n<em><strong>Func\u021bionare<\/strong><\/em><br \/>\nUn senzor de mi\u0219care (PIR) detecteaz\u0103 prezen\u021ba unei persoane.<br \/>\n&#8211; Microcontrolerul prime\u0219te semnal de la senzor \u0219i activeaz\u0103 un releu care porne\u0219te luminile.<br \/>\n&#8211; C\u00e2nd nu mai este detectat\u0103 mi\u0219care pentru un anumit timp, microcontrolerul opre\u0219te lumina.<\/p>\n<p>Acest tip de aplica\u021bie este eficient at\u00e2t pentru confortul utilizatorului, c\u00e2t \u0219i pentru economisirea energiei.<\/p>\n<p><em><strong>Codul sursa \u00een limbajul C++ pt un sistem de automatizare a iluminatului care folose\u0219te un microcontroler Arduino, un senzor de mi\u0219care PIR, si un releu.<\/strong><\/em><\/p>\n<p>Principalul de func\u021bionare este urmatorul:<br \/>\nSenzorul de mi\u0219care PIR detecteaz\u0103 mi\u0219carea unei persoane.<br \/>\nMicrocontrolerul prime\u0219te semnalul de la senzorul PIR \u0219i activeaz\u0103 un releu care aprinde luminile.<br \/>\nC\u00e2nd nu mai este detectata mi\u0219carea dup\u0103 un anumit timp stabilit ,microcontrolerul ac\u021bioneaz\u0103 releul iar acesta \u00eentrerupe circuitul de alimentare a becurilor.<br \/>\n&nbsp;<br \/>\n<em>Un exemplu de cod surs\u0103 \u00een C++ pentru un sistem de automatizare a iluminatului folosind un microcontroler Arduino, un senzor de mi\u0219care PIR \u0219i un releu.<\/em><br \/>\n&nbsp;<br \/>\n<strong>Cod surs\u0103<\/strong><br \/>\n<code><br \/>\n\/\/ Definirea pinilor<br \/>\nconst int pirPin = 2;  \/\/ Pinul pentru senzorul PIR<br \/>\nconst int relayPin = 13;  \/\/ Pinul pentru releu<br \/>\nconst unsigned long timeout = 10000; \/\/ Timpul (\u00een milisecunde) dup\u0103 care se va opri lumina (10 secunde)<\/p>\n<p>unsigned long lastMotionTime;<br \/>\nbool lightOn = false;<\/p>\n<p>void setup() {<br \/>\n    pinMode(pirPin, INPUT);  \/\/ Set\u0103m pinul PIR ca intrare<br \/>\n    pinMode(relayPin, OUTPUT);  \/\/ Set\u0103m pinul releu ca ie\u0219ire<br \/>\n    digitalWrite(relayPin, LOW); \/\/ Ini\u021bial, releul este oprit (lumina este stins\u0103)<br \/>\n    Serial.begin(9600);  \/\/ Ini\u021bializarea comunic\u0103rii seriale pentru debugging<br \/>\n}<\/p>\n<p>void loop() {<br \/>\n    int pirState = digitalRead(pirPin); \/\/ Citim starea senzorului PIR<\/p>\n<p>   if (pirState == HIGH) {<br \/>\n        Serial.println(\"Mi\u0219care detectat\u0103!\"); \/\/ Dac\u0103 se detecteaz\u0103 mi\u0219care <\/p>\n<p>        \/\/ Dac\u0103 lumina nu este deja aprins\u0103, aprindem lumina<br \/>\n        if (!lightOn) {<br \/>\n            digitalWrite(relayPin, HIGH);<br \/>\n            lightOn = true;<br \/>\n            lastMotionTime = millis(); \/\/ Actualiz\u0103m timpul ultimei mi\u0219c\u0103ri<br \/>\n        } else {<br \/>\n            lastMotionTime = millis(); \/\/ Actualiz\u0103m timpul ultimei mi\u0219c\u0103ri<br \/>\n        }<br \/>\n    } else {<br \/>\n        \/\/ Dac\u0103 nu s-a detectat mi\u0219care \u0219i lumina este aprins\u0103<br \/>\n        if (lightOn && (millis() - lastMotionTime >= timeout)) {<br \/>\n            Serial.println(\"Mi\u0219care ne\u00eent\u00e2lnit\u0103. Oprire lumina.\");<br \/>\n            digitalWrite(relayPin, LOW); \/\/ Oprim lumina<br \/>\n            lightOn = false; \/\/ Set\u0103m starea luminii ca stins\u0103<br \/>\n        }<br \/>\n    }<\/p>\n<p>    delay(100); \/\/ \u00cent\u00e2rziere pentru a evita citiri false<br \/>\n}<br \/>\n<\/code><br \/>\n&nbsp;<br \/>\n<em><strong>Explica\u021bia codului<\/strong><\/em><br \/>\nAcest cod este scris pentru o aplica\u021bie bazat\u0103 pe Arduino care folose\u0219te un senzor PIR (Passive Infrared Sensor) pentru a detecta mi\u0219carea \u0219i un releu pentru a controla o surs\u0103 de lumin\u0103. Iat\u0103 o explica\u021bie detaliat\u0103 a fiec\u0103rei p\u0103r\u021bi a codului:<\/p>\n<p>1. Definirea pinilor \u0219i variabilelor:<\/p>\n<p><code><br \/>\n const int pirPin = 2;  \/\/ Pinul pentru senzorul PIR<br \/>\n   const int relayPin = 13;  \/\/ Pinul pentru releu<br \/>\n   const unsigned long timeout = 10000; \/\/ Timpul (\u00een milisecunde) dup\u0103 care se va opri lumina (10 secunde)<\/p>\n<p>   unsigned long lastMotionTime; \/\/ Timpul ultimei detec\u021bii de mi\u0219care<br \/>\n   bool lightOn = false; \/\/ Starea curent\u0103 a luminii (aprins\u0103\/stins\u0103)<br \/>\n   ```<\/p>\n<p>   - `pirPin` \/\/este pinul la care este conectat senzorul PIR.<br \/>\n   - `relayPin` \/\/este pinul la care este conectat releul.<br \/>\n   - `timeout` \/\/define\u0219te timpul \u00een milisecunde dup\u0103 care lumina se va opri dac\u0103 nu se detecteaz\u0103 mi\u0219care.<br \/>\n   - `lastMotionTime` \/\/re\u021bine timpul ultimei detec\u021bii de mi\u0219care.<br \/>\n   - `lightOn` \/\/indic\u0103 dac\u0103 lumina este aprins\u0103 sau stins\u0103.<br \/>\n<\/code><br \/>\n&nbsp;<br \/>\n<strong>Func\u021bia `setup()<\/strong><br \/>\n<code><br \/>\nvoid setup() {<br \/>\n       pinMode(pirPin, INPUT);    \/\/ Set\u0103m pinul PIR ca intrare<br \/>\n       pinMode(relayPin, OUTPUT);  \/\/ Set\u0103m pinul releu ca ie\u0219ire<br \/>\n       digitalWrite(relayPin, LOW); \/\/ Ini\u021bial, releul este oprit (lumina este stins\u0103)<br \/>\n       Serial.begin(9600);          \/\/ Ini\u021bializarea comunic\u0103rii seriale pentru debugging<br \/>\n   }<br \/>\n   ```<br \/>\n    \/\/Configureaz\u0103 pinul PIR ca intrare \u0219i pinul releu ca ie\u0219ire.<br \/>\n    \/\/Ini\u021bializeaz\u0103 releul \u00een stare oprit\u0103 (lumina este stins\u0103) \u0219i deschide comunicarea serial\u0103 <\/br> \/\/pentru a permite debugul.<br \/>\n<\/code><br \/>\n&nbsp;<br \/>\n<strong>Func\u021bia `loop()<\/strong><br \/>\n<code><br \/>\nvoid loop() {<br \/>\n       int pirState = digitalRead(pirPin); \/\/ Citim starea senzorului PIR<\/p>\n<p>       if (pirState == HIGH) { \/\/ Dac\u0103 se detecteaz\u0103 mi\u0219care<br \/>\n           Serial.println(\"Mi\u0219care detectat\u0103!\");<\/p>\n<p>           if (!lightOn) { \/\/ Dac\u0103 lumina nu este deja aprins\u0103<br \/>\n               digitalWrite(relayPin, HIGH); \/\/ Aprindem lumina<br \/>\n               lightOn = true;<br \/>\n               lastMotionTime = millis(); \/\/ Actualiz\u0103m timpul ultimei mi\u0219c\u0103ri<br \/>\n           } else {<br \/>\n               lastMotionTime = millis(); \/\/ Actualiz\u0103m timpul ultimei mi\u0219c\u0103ri<br \/>\n           }<br \/>\n       } else {<br \/>\n           \/\/ Dac\u0103 nu s-a detectat mi\u0219care \u0219i lumina este aprins\u0103<br \/>\n           if (lightOn && (millis() - lastMotionTime >= timeout)) {<br \/>\n               Serial.println(\"Mi\u0219care ne\u00eent\u00e2lnit\u0103. Oprire lumina.\");<br \/>\n               digitalWrite(relayPin, LOW); \/\/ Oprim lumina<br \/>\n               lightOn = false; \/\/ Set\u0103m starea luminii ca stins\u0103<br \/>\n           }<br \/>\n       }<\/p>\n<p>       delay(100); \/\/ \u00cent\u00e2rziere pentru a evita citiri false<br \/>\n   }<\/p>\n<p>\/\/ Citeste starea senzorului PIR.<br \/>\n   \/\/ Dac\u0103 senzorul detecteaz\u0103 mi\u0219care (`pirState == HIGH`), se verific\u0103 dac\u0103 lumina este aprins\u0103 sau nu.<br \/>\n   \/\/ Dac\u0103 lumina nu este aprins\u0103, aceasta se aprinde \u0219i se actualizeaz\u0103 `lastMotionTime`.<br \/>\n   \/\/ Dac\u0103 lumina este deja aprins\u0103, se actualizeaz\u0103 doar `lastMotionTime`.<br \/>\n   \/\/ Dac\u0103 nu se detecteaz\u0103 mi\u0219care \u0219i lumina este aprins\u0103, se verific\u0103 dac\u0103 a trecut timpul `timeout`.<\/br><br \/>\n   \/\/ Dac\u0103 da, se opre\u0219te lumina.<br \/>\n   \/\/ O \u00eent\u00e2rziere de 100 ms este inclus\u0103 pentru a preveni citirile false.<br \/>\n<\/code><\/p>\n<p><!-- Start of StatCounter Code --><br \/>\n  <script type=\"text\/javascript\">\nvar sc_project=5241295; \nvar sc_invisible=1; \nvar sc_security=\"f184e0a9\"; \n    <\/script><br \/>\n  <script type=\"text\/javascript\"\nsrc=\"http:\/\/www.statcounter.com\/counter\/counter.js\"><\/script><br \/>\n  <noscript><br \/>\n  <\/noscript>\n<\/div>\n<p><noscript><\/p>\n<div\nclass=\"statcounter\"><\/p>\n<div align=\"center\"><a title=\"weebly reliable statistics\"\nhref=\"http:\/\/www.statcounter.com\/weebly\/\"\ntarget=\"_blank\"><img class=\"statcounter\"\nsrc=\"http:\/\/c.statcounter.com\/5241295\/0\/f184e0a9\/1\/\"\nalt=\"weebly reliable statistics\" ><\/a><\/div>\n<\/div>\n<p><\/noscript><\/p>\n<div align=\"center\">\n    <!-- End of StatCounter Code --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Ce este un microcontroler ? Un microcontroler este un circuit integrat care con\u021bine un procesor, memorie \u0219i periferice, toate integrate \u00eentr-un singur chip. Acesta este folosit pentru a controla diverse dispozitive electronice, fiind esen\u021bial \u00een aplica\u021bii de automatizare, robotica, electronic\u0103 de consum \u0219i multe altele. &nbsp; Care este structura interna a unui microcontroler ? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-535","post","type-post","status-publish","format-standard","hentry","category-electronica"],"_links":{"self":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts\/535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=535"}],"version-history":[{"count":30,"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts\/535\/revisions"}],"predecessor-version":[{"id":565,"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts\/535\/revisions\/565"}],"wp:attachment":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}