קורס אמבדד – 001
מטרות :
1 .פיתוח מערכות אלקטרוניות משובצות מחשב , תרגול ושליטה בשפת C אמבדד בסביבות שונות .
2. העשרה והכרה של רכיבים אלקטורנים
3.העשרה והכרה של מיקרומעבדים שונים
4. העשרת השפה האנגלית בתחום האמבדד .
5. יכולת ניתוח מוצרים קיימים , בלוק דיאגרם של מוצר והערכת עלות וזמן פיתוח אב טיפוס ראשוני .
6.פיתוח מערכת שלמה מבוססת אמבדד , אמבדד RF
בקורס נעסוק במספר מעבדים
https://www.espressif.com/
https://www.espressif.com/en/support/documents/technical-documents
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
עבודה עם 4 מגה ביית של הציפ
https://thingpulse.com/esp32-how-to-use-psram/
תרגיל :
חפש :
ESP32-DevKitC-32E
ESP32-WROOM-32E
https://www.mouser.co.il/ProductDetail/356-ESP32-DEVKITC32E
חיפוש רכיבים אצל עשרות ספקים מובלים
https://www.findchips.com/search/STM32F103C8T6
קישור לערכה:
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html
Pinout
סכמה של מיקרו בקר :
https://uglyduck.vajn.icu/STM32_Pills/BlackPill_STM32F103.svgz
מבנה של פינים
תפקיד השעות , PLL
תפקיד RTC
תוכנה רגילה בשפת C
סימולטורים ושפת C
סימולטור : https://wokwi.com/ arduino
סימולטור שפת C :
https://www.interviewbit.com/online-c-compiler/
https://www.programiz.com/c-programming/online-compiler/
מבנה תוכנה אמבדד C embedded'
פלט :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include "stm32g0xx_hal.h" #define LED_PIN GPIO_PIN_5 #define LED_GPIO_PORT GPIOA int main(void) { setup(); loop(); } void setup(void) { HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = LED_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct); } void loop(void) { while (1) { HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN); HAL_Delay(1000); } } void SysTick_Handler(void) { HAL_IncTick(); } Footer © 2022 GitHub, Inc. |
יצירת פולס מחזורי : (בין 0 ל מתח עבודה של מיקרו מעבד )
תרגיל בנה תוכנית בשפת C המייצרת את הפולס הבא
pky
קלט (+פלט)
()sprintf
1 2 3 4 5 6 7 8 9 10 11 |
int time1 = 0; char buff[50]; void setup() { Serial.begin(9600); } void loop() { sprintf(buff, "the value is %d seconds", time1++); Serial.println(buff); delay(1000); } |
()dtostrf
1 2 3 4 5 6 7 8 9 10 11 |
static float speed = 8123.6794; static char outstr[15]; void setup() { dtostrf(speed,5, 3, outstr); Serial.begin(9600); Serial.println(outstr); } void loop(){ } |
תרגול שפת C וחזרה מעבר מהיר
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> int main() { // Create variables int myNum = 5; // Integer (whole number) float myFloatNum = 5.99; // Floating point number char myLetter = 'D'; // Character // Print variables printf("%d\n", myNum); printf("%f\n", myFloatNum); printf("%c\n", myLetter); return 0; } |
https://www.onlinegdb.com/
תרגיל :
1.בשפת C לולאה for עולה ויודדת
2.בשפת C לולאת WHILE
סרבו :
תכנות רמזור מעבר חציה למכוניות – ושער משמרות זהב
1.שלב ראשון נבנה רמזור למכוניות ושער להוכלי רגל – תוכנית פשוטה
לתכונית יש מספר בגים ונשפר אותה בשלב השני .
התחלת התוכנית – מצב קמזור למכוניות ירוק – לילדים שער סגור
2.לחיצה על כפתור ירוק – פתיחה
3.לחיצה על כפץור ירק – סגירה
קישור לתוכנית : https://wokwi.com/projects/348859059935380052
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
// robotics blocks - Trafic light - Kids road Gase #include <ESP32Servo.h> const int servoPin = 18; int buttonOpenState; int buttonCloseState; #define ledRed 4 #define ledGreen 2 #define buttonOpen 12 #define buttonClose 14 int pos = 90; Servo servo; void setup() { // initialize serial for debugging Serial.begin(115200); Serial.println("start....system"); pinMode(buttonOpen, INPUT_PULLUP); pinMode(buttonClose, INPUT_PULLUP); pinMode(ledRed,OUTPUT); pinMode(ledGreen,OUTPUT); servo.attach(servoPin, 500, 2400); servo.write(90); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk"); } void loop() { buttonOpenState = digitalRead(buttonOpen); buttonCloseState = digitalRead(buttonClose) ; if ( buttonOpenState==0) { // open gate digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); for (pos =90; pos <= 180; pos = pos + 1) { servo.write(pos); // Serial.println(pos); digitalWrite(ledRed, HIGH); delay(15); } Serial.println("Road close- kids can walk"); } if(buttonCloseState==0) { // close gate for (pos =180; pos >= 90; pos =pos- 1) { servo.write(pos); // Serial.println(pos); delay(15); } digitalWrite(ledRed , LOW); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk "); } } |
4. באלגוריתם התוכנה והמערכת קייים מספר בגים מה הם ?
רמז: (בדוק מה קורה אם לוחצים על הכפתור האדום בהתחלה במקום הירוק)
תוכנה לאחר תיקון הבאג
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
// robotics blocks - Trafic light - Kids road Gase #include <ESP32Servo.h> const int servoPin = 18; int buttonOpenState; int buttonCloseState; #define ledRed 4 #define ledGreen 2 #define buttonOpen 12 #define buttonClose 14 int pos = 90; Servo servo; char gateState=0; // 0= close , 1 = open void setup() { // initialize serial for debugging Serial.begin(115200); Serial.println("start....system"); pinMode(buttonOpen, INPUT_PULLUP); pinMode(buttonClose, INPUT_PULLUP); pinMode(ledRed,OUTPUT); pinMode(ledGreen,OUTPUT); servo.attach(servoPin, 500, 2400); servo.write(90); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk"); } void loop() { buttonOpenState = digitalRead(buttonOpen); buttonCloseState = digitalRead(buttonClose) ; if ( (buttonOpenState==0) && (gateState==0)) { // open gate digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); for (pos =90; pos <= 180; pos = pos + 1) { servo.write(pos); // Serial.println(pos); digitalWrite(ledRed, HIGH); delay(15); } gateState=1; Serial.println("Road close- kids can walk"); } if( (buttonCloseState==0) && (gateState==1) ) { // close gate if(pos>=180) // check if gate is already opemed { for (pos =180; pos >= 90; pos =pos- 1) { servo.write(pos); // Serial.println(pos); delay(15); } gateState=0; digitalWrite(ledRed , LOW); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk "); } } } |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
// robotics blocks - Trafic light - Kids road Gase #include <ESP32Servo.h> const int servoPin = 18; int buttonOpenState; int buttonCloseState; #define ledRed 4 #define ledGreen 2 #define buttonOpen 12 #define buttonClose 14 int pos = 90; Servo servo; char gateState=0; // 0= close , 1 = open void setup() { // initialize serial for debugging Serial.begin(115200); Serial.println("start....system"); pinMode(buttonOpen, INPUT_PULLUP); pinMode(buttonClose, INPUT_PULLUP); pinMode(ledRed,OUTPUT); pinMode(ledGreen,OUTPUT); servo.attach(servoPin, 500, 2400); servo.write(90); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk"); } void loop() { buttonOpenState = digitalRead(buttonOpen); buttonCloseState = digitalRead(buttonClose) ; if ( (buttonOpenState==0) && (gateState==0)) { // open gate digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); for (pos =90; pos <= 180; pos = pos + 1) { servo.write(pos); // Serial.println(pos); digitalWrite(ledRed, HIGH); delay(15); } gateState=1; Serial.println("Road close- kids can walk"); } if( (buttonCloseState==0) && (gateState==1) ) { // close gate if(pos>=180) // check if gate is already opemed { for (pos =180; pos >= 90; pos =pos- 1) { servo.write(pos); // Serial.println(pos); delay(15); } gateState=0; digitalWrite(ledRed , LOW); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk "); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
{ "version": 1, "author": "Uri Shaked", "editor": "wokwi", "parts": [ { "type": "wokwi-esp32-devkit-v1", "id": "esp", "top": 0, "left": 0, "attrs": {} }, { "type": "wokwi-servo", "id": "servo1", "top": 71.13, "left": 194.42, "attrs": {} }, { "type": "wokwi-led", "id": "led1", "top": -12.88, "left": 140.68, "attrs": { "color": "red" } }, { "type": "wokwi-resistor", "id": "r1", "top": 53.82, "left": 140.75, "rotate": 90, "attrs": { "value": "1000" } }, { "type": "wokwi-pushbutton", "id": "btn1", "top": 79.58, "left": -132.1, "rotate": 90, "attrs": { "color": "green" } }, { "type": "wokwi-led", "id": "led2", "top": -10.26, "left": 211.24, "attrs": { "color": "limegreen" } }, { "type": "wokwi-resistor", "id": "r2", "top": 60.14, "left": 210.02, "rotate": 90, "attrs": { "value": "1000" } }, { "type": "wokwi-pushbutton", "id": "btn2", "top": 84.31, "left": -259.65, "rotate": 90, "attrs": { "color": "black" } } ], "connections": [ [ "esp:TX0", "$serialMonitor:RX", "", [] ], [ "esp:RX0", "$serialMonitor:TX", "", [] ], [ "esp:D18", "servo1:PWM", "green", [ "h37.5", "v14.46" ] ], [ "esp:VIN", "servo1:V+", "red", [ "h-25.81", "v68.77", "h167.38", "v-149.25" ] ], [ "servo1:GND", "esp:GND.1", "black", [ "h-12.27", "v71.38" ] ], [ "led1:C", "esp:GND.1", "black", [ "v0" ] ], [ "led1:A", "r1:1", "yellow", [ "v0" ] ], [ "esp:D4", "r1:2", "yellow", [ "h69.9", "v-4.32" ] ], [ "esp:GND.2", "btn1:2.r", "black", [ "h0" ] ], [ "btn1:1.l", "esp:D12", "green", [ "v-4.41", "h67.94", "v44.89" ] ], [ "esp:GND.1", "led2:C", "black", [ "h0" ] ], [ "r2:1", "led2:A", "green", [ "h0" ] ], [ "esp:D2", "r2:2", "yellow", [ "v-4.59", "h139.72" ] ], [ "esp:D14", "btn2:1.l", "green", [ "h-15.19", "v-72.25", "h-197.58" ] ], [ "btn2:2.r", "esp:GND.2", "green", [ "v34.2", "h184.74" ] ] ] } |
ADC
בניית זרוע רובוטית ב 100 שקל
analogReadResolution(10);
תרגיל כיתה
1 2 3 4 5 6 7 8 9 10 11 |
#define POT_PIN 2 void setup() { Serial.begin(115200); pinMode(POT_PIN, INPUT); } void loop() { Serial.println(analogRead(POT_PIN)); delay(10); } |
https://wokwi.com/projects/350073658887111251
ADC TO VOLTAGE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): float voltage = sensorValue * (5.0 / 1023.0); // print out the value you read: Serial.println(voltage); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include "ESP32Servo.h" Servo myservo; int potpin = 34; int val; void setup() { myservo.attach(19); } void loop() { val = analogRead(potpin); val = map(val, 0, 4095, 0, 180); myservo.write(val); delay(15); } |
https://wokwi.com/projects/350074002468766290
ROBOT DOG
דגם רובוט עם יותר הסברים (העשרה)
בניית אב טיפוס חיפוש ומציאת רכיבים
https://www.sparkfun.com/