This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:iot-open:remotelab:sut:generalpurpose2:b7 [2020/07/20 11:26] – external edit 127.0.0.1 | en:iot-open:remotelab:sut:generalpurpose2:b7 [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| === Prerequisites === | === Prerequisites === | ||
| - | You need to understand how typical servomotor looks like and how it works.\\ | + | You need to understand how a typical servomotor looks like and how it works.\\ |
| - | The servo is controlled using predefined, precise PWM timing. Most servos share exactly the same model (0-180 degree servos), regardless of their size and power voltage. Classical, analogue servo frequency is 50Hz = 20ms period and duty cycle of the high signal is 1ms for 0deg and 2ms for 180deg. So changing the PWM duty cycle from 1ms to 2ms (5% to 10%) rotates servo. There is no need, however, to implement manually (still you can do) but you will use a predefined library instead of manually setting-up PWM. This brings features like range mapping to control servo logical way (i.e. providing angle, not duty cycle).\\ | + | The servo is controlled using predefined, precise PWM timing. Most servos share exactly the same model (0-180 degree servos), regardless of their size and power voltage. Classical, analogue servo frequency is 50Hz = 20ms period and duty cycle of the high signal is 1ms for 0deg and 2ms for 180deg. So changing the PWM duty cycle from 1ms to 2ms (5% to 10%) rotates servo. There is no need, however, to implement manually (still you can do it) but you will use a predefined library instead of manually setting up PWM. This brings features like range mapping to control servo logical way (i.e. providing angle, not duty cycle).\\ |
| The library is '' | The library is '' | ||
| Line 15: | Line 15: | ||
| === Scenario === | === Scenario === | ||
| - | In this scenario, you will rotate the servo to the 0 degrees, then 45, 90, 135 and 180 degrees counter wise, then 180, 90, 0, clockwise. Note - Arrow pointing left means servo is set to 0, pointing right is 180 degrees, and when 90 degrees, arrow points down. | + | In this scenario, you will rotate the servo to 0 degrees, then 45, 90, 135 and 180 degrees counter wise, then 180, 90, 0, clockwise. Note - Arrow pointing left means servo is set to 0, pointing right is 180 degrees, and when 90 degrees, arrow points down. |
| - | We use LCD to get feedback about requested servo angle and to compare it with the result, but please note, it is just for information only and is not necessary to implement servo rotation. | + | We use LCD to get feedback about the requested servo angle and to compare it with the result, but please note, it is just for information only and is not necessary to implement servo rotation. |
| <note warning> | <note warning> | ||
| Line 45: | Line 45: | ||
| <code c> | <code c> | ||
| ... | ... | ||
| - | int angles[] = {0, | + | byte angles[] = {0, |
| ... | ... | ||
| </ | </ | ||
| Line 53: | Line 53: | ||
| <code c> | <code c> | ||
| ... | ... | ||
| - | LiquidCrystal_I2C lcd(0x3F, | + | LiquidCrystal_I2C lcd(0x3F, |
| + | //8 and 9 for a 20 chars and 4 line display | ||
| // | // | ||
| ... | ... | ||
| Line 71: | Line 72: | ||
| ... | ... | ||
| </ | </ | ||
| - | Setting servo to desired angle is as simple as calling '' | + | Setting servo to the desired angle is as simple as calling '' |
| \\ | \\ | ||
| Line 81: | Line 82: | ||
| ... | ... | ||
| </ | </ | ||
| - | The '' | + | The '' |
| Line 87: | Line 88: | ||
| == Step 5 == | == Step 5 == | ||
| - | Keep '' | + | Keep '' |
| <code c> | <code c> | ||
| ... | ... | ||