{"id":3783,"date":"2023-12-22T07:40:55","date_gmt":"2023-12-22T15:40:55","guid":{"rendered":"https:\/\/www.donluc.com\/?p=3783"},"modified":"2023-12-22T07:40:55","modified_gmt":"2023-12-22T15:40:55","slug":"project-8-servo-moteino-r2-rfm12b-mk02","status":"publish","type":"post","link":"https:\/\/www.donluc.com\/?p=3783","title":{"rendered":"Project #8: Servo &#8211; Moteino R2 (RFM12B) &#8211; Mk02"},"content":{"rendered":"<div style=\"width: 720px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-3783-1\" width=\"720\" height=\"480\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03W.mp4?_=1\" \/><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03W.mp4\">https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03W.mp4<\/a><\/video><\/div>\n<p>&#8212;&#8212;<\/p>\n<p>#DonLucElectronics #DonLuc #Servo #Moteino #Transceiver #RadioFrequency #Pololu #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant<\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03a.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03a.png\" alt=\"Moteino R2 (RFM12B)\" width=\"720\" height=\"614\" class=\"alignnone size-full wp-image-3785\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03a.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03a-300x256.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03b.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03b.png\" alt=\"Moteino R2 (RFM12B)\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3786\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03b.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03b-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03c.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03c.png\" alt=\"Moteino R2 (RFM12B)\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3787\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03c.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/12\/DL2310Mk03c-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><strong>Moteino<\/strong><\/p>\n<p>Moteino began as a low power wireless Arduino compatible development platform based on the popular ATmega328p chip used in the Arduino UNO. There are now several Moteino development boards including MoteinoMEGA based on the Atmega1284P and MoteinoM0 based on the SAMD21G18 Cortex M0+. For programming you will need an external FTDI-Adapter to load sketches, the advantages being lower cost, smaller size.<\/p>\n<p><strong>Servo Motor<\/strong><\/p>\n<p>A servo motor is a rotary actuator or linear actuator that allows for precise control of angular or linear position, velocity and acceleration. It consists of a suitable motor coupled to a sensor for position feedback. It also requires a relatively sophisticated controller, often a dedicated module designed specifically for use with servo motors.<\/p>\n<p>Servo motors have been around for a long time and are utilized in many applications. They are small in size but pack a big punch and are very energy-efficient. These features allow them to be used to operate remote-controlled or radio-controlled toy cars, robots and airplanes. Servo motors are also used in industrial applications, robotics, in-line manufacturing, pharmaceutics and food services.<\/p>\n<p><strong>Pololu Adjustable Boost Regulator 2.5-9.5 Volt<\/strong><\/p>\n<p>This powerful, adjustable boost regulator can generate an output voltage as high as 9.5 Volt from an input voltage as low as 1.5 Volt, all in a compact. A trimmer potentiometer lets you set the boost regulator\u2019s output voltage to a value between 2.5 and 9.5 Volt.<\/p>\n<p><strong>DL2310Mk03<\/strong><\/p>\n<p>2 x Moteino R2 (Transceiver RFM12B)<br \/>\n1 x Pololu Adjustable Boost Regulator 2.5-9.5V<br \/>\n2 x Lithium Ion Battery &#8211; 1Ah<br \/>\n1 x Sub-Micro Servo 3.7g<br \/>\n1 x LED Green<br \/>\n1 x Tactile Button<br \/>\n1 x Resistor 10K Ohm<br \/>\n1 x SparkFun FTDI Basic Breakout &#8211; 5V<br \/>\n1 x SparkFun Cerberus USB Cable<\/p>\n<p><strong>Moteino R2 (Send)<\/strong><\/p>\n<p>TR0 &#8211; Digital 2<br \/>\nTBI &#8211; Digital 6<br \/>\nLED &#8211; Digital 9<br \/>\nTR1 &#8211; Digital 10<br \/>\nTR2 &#8211; Digital 11<br \/>\nTR3 &#8211; Digital 12<br \/>\nTR4 &#8211; Digital 13<br \/>\nVIN &#8211; +5V<br \/>\nVIN &#8211; +3.3V<br \/>\nGND &#8211; GND<\/p>\n<p>&#8212;&#8212;<\/p>\n<p><strong>DL2310Mk03ps.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/* ***** Don Luc Electronics \u00a9 *****\r\nSoftware Version Information\r\nProject #8: Servo - Radio Frequency - Mk02\r\n6-02\r\nSend\r\nDL2310Mk03ps.ino\r\n2 x Moteino R2 (Transceiver RFM12B)\r\n1 x Pololu Adjustable Boost Regulator 2.5-9.5V\r\n2 x Lithium Ion Battery - 1Ah\r\n1 x Sub-Micro Servo 3.7g\r\n1 x LED Green\r\n1 x Tactile Button\r\n1 x Resistor 10K Ohm\r\n1 x SparkFun FTDI Basic Breakout - 5V\r\n1 x SparkFun Cerberus USB Cable\r\n*\/\r\n\r\n\/\/ Include the Library Code\r\n\/\/ RFM12B Radio\r\n#include &lt;RFM12B.h&gt;\r\n\/\/ Sleep\r\n#include &lt;avr\/sleep.h&gt;\r\n\r\n\/\/ You will need to initialize the radio by telling it what ID\r\n\/\/ it has and what network it&#039;s on\r\n\/\/ The NodeID takes values from 1-127, 0 is reserved for sending \r\n\/\/ broadcast messages (send to all nodes)\r\n\/\/ The Network ID takes values from 0-255\r\n\/\/ By default the SPI-SS line used is D10 on Atmega328. \r\n\/\/ You can change it by calling .SetCS(pin) where pin can be {8,9,10}\r\n\/\/ Network ID used for this unit\r\n#define NODEID        2\r\n\/\/ The network ID we are on\r\n#define NETWORKID    99\r\n\/\/ The node ID we&#039;re sending to\r\n#define GATEWAYID     1\r\n\/\/ # of ms to wait for an ack\r\n#define ACK_TIME     50\r\n\/\/ Serial\r\n#define SERIAL_BAUD  115200\r\n\r\n\/\/ Encryption is OPTIONAL\r\n\/\/ to enable encryption you will need to:\r\n\/\/ - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)\r\n\/\/ - to call .Encrypt(KEY) to start encrypting\r\n\/\/ - to stop encrypting call .Encrypt(NULL)\r\nuint8_t KEY[] = &quot;ABCDABCDABCDABCD&quot;;\r\n\r\n\/\/ Wait this many ms between sending packets\r\nint interPacketDelay = 50;\r\n\/\/ Input\r\nchar input = 0;\r\n\r\n\/\/ Need an instance of the RFM12B Radio Module\r\nRFM12B radio;\r\n\/\/ Send Size\r\nbyte sendSize = 0;\r\n\/\/ Payload\r\nchar payload[100];\r\n\/\/ Request ACK\r\nbool requestACK = false;\r\n\r\n\/\/ LED\r\nint iLED = 9;\r\n\r\n\/\/ The number of the Tactile Button pin\r\nint iTButton = 6;\r\n\/\/ Variable for reading the button status\r\nint TButtonState = 0;\r\n\/\/ The previous reading from the input pin\r\nint lastTButtonState = LOW;\r\n\/\/ The following variables are unsigned longs \r\n\/\/ because the time, measured in\r\n\/\/ milliseconds, will quickly become a bigger \r\n\/\/ number than can be stored in an int.\r\n\/\/ The last time the output pin was toggled\r\nunsigned long lastDebounceTime = 0;\r\n\/\/ The debounce time; increase if the output flickers\r\nunsigned long debounceDelay = 50;\r\n\r\n\/\/ String\r\nString zzzzzz = &quot;&quot;;\r\nint iSER = 0;\r\n\r\n\/\/ Software Version Information\r\nString sver = &quot;8-02&quot;;\r\n\r\nvoid loop()\r\n{\r\n\r\n  \/\/ Tactile Button\r\n  isTButton();\r\n  \r\n  \/\/ is RFM12B Radio\r\n  isRFM12BRadio();\r\n\r\n  \/\/ Inter Packet Delay\r\n  delay(interPacketDelay);\r\n  \r\n}\r\n<\/pre>\n<p><strong>getRFM12BRadio.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ RFM12B Radio\r\nvoid isSetupRFM12BRadio(){\r\n\r\n  \/\/ RFM12B Radio\r\n  radio.Initialize(NODEID, RF12_433MHZ, NETWORKID);\r\n  \/\/ Encryption\r\n  radio.Encrypt(KEY);\r\n  \/\/ Sleep right away to save power\r\n  radio.Sleep();\r\n  \/\/ Transmitting\r\n  Serial.println(&quot;Transmitting...\\n\\n&quot;);\r\n  \r\n}\r\n\/\/ is RFM12 BRadio\r\nvoid isRFM12BRadio(){\r\n\r\n  \/\/ zzzzzz &quot;&quot;\r\n  zzzzzz = &quot;&quot;;\r\n  \r\n  \/\/ zzzzz = &quot;&lt;SER|&quot; + iSER + &quot;|*&quot;;\r\n  zzzzzz = &quot;&lt;SER|&quot;;\r\n  zzzzzz = zzzzzz + iSER;\r\n  zzzzzz = zzzzzz + &quot;|*&quot;;\r\n  \r\n  \/\/ sendSize Length\r\n  sendSize = zzzzzz.length();\r\n\r\n  \/\/ sendSize\r\n  payload[sendSize];\r\n\r\n  \/\/ sendSize, charAt\r\n  for(byte i = 0; i &lt; sendSize+1; i++){\r\n\r\n    payload[i] = zzzzzz.charAt(i);\r\n    \r\n  }\r\n    \r\n  \/\/ payload\r\n  Serial.print(payload);\r\n  \r\n  \/\/ Request ACK\r\n  requestACK = sendSize;\r\n  \r\n  \/\/ Wakeup\r\n  radio.Wakeup();\r\n  \r\n  \/\/ Turn the LED on HIGH\r\n  digitalWrite( iLED , HIGH);\r\n  \r\n  \/\/ Send\r\n  radio.Send(GATEWAYID, payload, sendSize, requestACK);\r\n\r\n  \/\/ Request ACK\r\n  if (requestACK)\r\n  {\r\n    \r\n    Serial.print(&quot; - waiting for ACK...&quot;);\r\n    if (waitForAck()){\r\n      \r\n      Serial.print(&quot;Ok!&quot;);\r\n      \r\n    }\r\n    else Serial.print(&quot;nothing...&quot;);\r\n    \r\n  }\r\n\r\n  \/\/ Turn the LED on LOW\r\n  digitalWrite( iLED , LOW);\r\n\r\n  \/\/ Sleep\r\n  radio.Sleep();\r\n\r\n  \/\/ Serial\r\n  Serial.println();\r\n\r\n}\r\n\/\/ Wait a few milliseconds for proper ACK, return true if received\r\nstatic bool waitForAck(){\r\n  \r\n  \/\/ Now\r\n  long now = millis();\r\n\r\n  \/\/ ACK\r\n  while (millis() - now &lt;= ACK_TIME){\r\n    \r\n\r\n    if (radio.ACKReceived(GATEWAYID)){\r\n      \r\n      return true;\r\n\r\n    }\r\n\r\n  }\r\n  \r\n  return false;\r\n  \r\n}\r\n<\/pre>\n<p><strong>getTButton.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Tactile Button\r\nvoid isTButton(){\r\n\r\n  \/\/ Read the state of the Button value:\r\n  int reading = digitalRead(iTButton);\r\n\r\n  \/\/ Check to see if you just pressed the TButton\r\n  \/\/ (i.e. the input went from LOW to HIGH), and you&#039;ve waited long enough\r\n  \/\/ since the last press to ignore any noise:\r\n\r\n  \/\/ If the TButton changed, due to noise or pressing:\r\n  if (reading != lastTButtonState) {\r\n    \r\n    \/\/ Reset the debouncing timer\r\n    lastDebounceTime = millis();\r\n    \r\n  }\r\n\r\n  if ((millis() - lastDebounceTime) &gt; debounceDelay) {\r\n    \r\n    \/\/ Whatever the reading is at, it&#039;s been there for \r\n    \/\/ longer than the debounce\r\n    \/\/ delay, so take it as the actual current state:\r\n\r\n    \/\/ if the button state has changed:\r\n    if (reading != TButtonState) {\r\n      \r\n      TButtonState = reading;\r\n\r\n      \/\/ Check if the TButton is pressed. If it is, the TButtonState is HIGH:\r\n      if (TButtonState == HIGH) {\r\n\r\n        iSER = 1;\r\n\r\n      } else {\r\n\r\n        iSER = 0;\r\n    \r\n      }\r\n\r\n      \r\n      \r\n    }\r\n  }\r\n  \r\n  \/\/ Save the reading. Next time through the loop, \r\n  \/\/ it&#039;ll be the lastTButtonState:\r\n  lastTButtonState = reading;\r\n  \r\n}\r\n<\/pre>\n<p><strong>setup.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Setup\r\nvoid setup(){\r\n\r\n  \/\/ Serial\r\n  Serial.begin(SERIAL_BAUD);\r\n\r\n  \/\/ LED\r\n  pinMode( iLED , OUTPUT);\r\n\r\n  \/\/ Initialize the Button pin as an input\r\n  pinMode(iTButton, INPUT);\r\n\r\n  \/\/ Setup RFM12B Radio\r\n  isSetupRFM12BRadio();\r\n\r\n}\r\n<\/pre>\n<p><strong>Moteino R2 (Receive)<\/strong><\/p>\n<p>TR0 &#8211; Digital 2<br \/>\nLED &#8211; Digital 9<br \/>\nTR1 &#8211; Digital 10<br \/>\nTR2 &#8211; Digital 11<br \/>\nTR3 &#8211; Digital 12<br \/>\nTR4 &#8211; Digital 13<br \/>\nVIN &#8211; +5V<br \/>\nVIN &#8211; +3.3V<br \/>\nGND &#8211; GND<\/p>\n<p>&#8212;<\/p>\n<p><strong>DL2310Mk03Mkpr.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/* ***** Don Luc Electronics \u00a9 *****\r\nSoftware Version Information\r\nProject #8: Servo - Radio Frequency - Mk02\r\n6-02\r\nReceive\r\nDL2310Mk03pr.ino\r\n2 x Moteino R2 (RFM12B)\r\n1 x Pololu Adjustable Boost Regulator 2.5-9.5V\r\n2 x Lithium Ion Battery - 1Ah\r\n1 x Sub-Micro Servo 3.7g\r\n1 x LED Green\r\n1 x Tactile Button\r\n1 x Resistor 10K Ohm\r\n1 x SparkFun FTDI Basic Breakout - 5V\r\n1 x SparkFun Cerberus USB Cable\r\n*\/\r\n\r\n\/\/ Include the Library Code\r\n\/\/ RFM12B Radio\r\n#include &lt;RFM12B.h&gt;\r\n\/\/ Servo\r\n#include &lt;Servo.h&gt;\r\n\r\n\/\/ You will need to initialize the radio by telling it what ID\r\n\/\/ it has and what network it&#039;s on\r\n\/\/ The NodeID takes values from 1-127, 0 is reserved for sending \r\n\/\/ broadcast messages (send to all nodes)\r\n\/\/ The Network ID takes values from 0-255\r\n\/\/ By default the SPI-SS line used is D10 on Atmega328. \r\n\/\/ You can change it by calling .SetCS(pin) where pin can be {8,9,10}\r\n\/\/ Network ID used for this unit\r\n#define NODEID        1\r\n\/\/ The network ID we are on\r\n#define NETWORKID    99\r\n\/\/ Serial\r\n#define SERIAL_BAUD  115200\r\n\r\n\/\/ Encryption is OPTIONAL\r\n\/\/ to enable encryption you will need to:\r\n\/\/ - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)\r\n\/\/ - to call .Encrypt(KEY) to start encrypting\r\n\/\/ - to stop encrypting call .Encrypt(NULL)\r\nuint8_t KEY[] = &quot;ABCDABCDABCDABCD&quot;;\r\n\r\n\/\/ Need an instance of the RFM12B Radio Module\r\nRFM12B radio;\r\n\r\n\/\/ Message\r\nString msg = &quot;&quot;;\r\n\r\n\/\/ Servo\r\nint iSER = 0;\r\nString sSER = &quot;&quot;;\r\nint firstClosingBracket = 0;\r\n\r\n\/\/ LED\r\nint iLED = 9;\r\nint iLEDG = 7;\r\n\r\n\/\/ Servo control\r\nServo serv;\r\nconst int pinServo = 6;\r\n\r\n\/\/ Software Version Information\r\nString sver = &quot;8-02&quot;;\r\n\r\nvoid loop() {\r\n\r\n  \/\/ is RFM12B Radio\r\n  isRFM12BRadio();\r\n\r\n}\r\n<\/pre>\n<p><strong>getRFM12BRadio.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ RFM12B Radio\r\nvoid isSetupRFM12BRadio()\r\n{\r\n\r\n  \/\/ RFM12B Radio\r\n  radio.Initialize(NODEID, RF12_433MHZ, NETWORKID);\r\n  \/\/ Encryption\r\n  radio.Encrypt(KEY);\r\n  \/\/ Transmitting\r\n  Serial.println(&quot;Listening...&quot;);\r\n  \r\n}\r\n\/\/ is RFM12 BRadio\r\nvoid isRFM12BRadio()\r\n{\r\n\r\n  \/\/ Receive\r\n  if (radio.ReceiveComplete())\r\n  {\r\n    \r\n    \/\/ CRC Pass\r\n    if (radio.CRCPass())\r\n    {\r\n      \r\n      \/\/ Serial\r\n      Serial.print(&#039;[&#039;);\r\n      Serial.print(radio.GetSender());\r\n      Serial.print(&quot;] &quot;);\r\n\r\n      \/\/ Message\r\n      msg = &quot;&quot;;\r\n      \r\n      \/\/ Can also use radio.GetDataLen() if you don&#039;t like pointers\r\n      for (byte i = 0; i &lt; *radio.DataLen; i++)\r\n      {\r\n        \r\n        Serial.print((char)radio.Data[i]);\r\n        msg = msg + (char)radio.Data[i];\r\n        \r\n      }\r\n\r\n      \/\/ Turn the LED on HIGH\r\n      digitalWrite( iLED , HIGH);\r\n\r\n      \/\/ Servo\r\n      isServo();\r\n  \r\n      \/\/ ACK Requested\r\n      if (radio.ACKRequested())\r\n      {\r\n        \r\n        \/\/ Send ACK\r\n        radio.SendACK();\r\n        Serial.print(&quot; - ACK Sent&quot;);\r\n        \r\n      }\r\n\r\n      \/\/ Turn the LED on LOW\r\n      digitalWrite( iLED , LOW);\r\n    \r\n    }\r\n    else\r\n    {\r\n      \r\n      \/\/ BAD-CRC\r\n      Serial.print(&quot;BAD-CRC&quot;);\r\n\r\n    }\r\n\r\n    \/\/ Serial\r\n    Serial.println();\r\n\r\n  } \r\n  \r\n}\r\n<\/pre>\n<p><strong>getServo.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Servo\r\nvoid isServo(){\r\n\r\n  \/\/ Message\r\n  \/\/Serial.println( msg );\r\n  \/\/ msg = &quot;&lt;SER|0|*&quot;;\r\n  firstClosingBracket = 0;\r\n  \/\/ &quot;&lt;SER|&quot;\r\n  firstClosingBracket = msg.indexOf(&#039;|&#039;);\r\n  \/\/Serial.println( msg );\r\n  msg.remove(0, 5);\r\n  \/\/Serial.println( msg );\r\n  \/\/ Servo\r\n  firstClosingBracket = msg.indexOf(&#039;|&#039;);     \r\n  sSER = msg;\r\n  sSER.remove(firstClosingBracket);\r\n  \/\/Serial.println( sSER );\r\n  iSER = sSER.toInt();\r\n  \/\/Serial.println( iSER );\r\n  int x = iSER;\r\n\r\n  if (x == 1) {\r\n\r\n    digitalWrite(iLEDG, HIGH);\r\n    \/\/ Set servo to unlock\r\n    serv.write( 0 );\r\n    delay(15);\r\n    \r\n  } else {\r\n\r\n    digitalWrite(iLEDG, LOW);\r\n    \/\/ Set servo to lock\r\n    serv.write( 90 );\r\n    delay(15);\r\n    \r\n  }\r\n\r\n}\r\n<\/pre>\n<p><strong>setup.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Setup\r\nvoid setup()\r\n{\r\n\r\n  \/\/ Serial\r\n  Serial.begin(SERIAL_BAUD);\r\n\r\n  \/\/ LED\r\n  pinMode( iLED , OUTPUT);\r\n  pinMode( iLEDG , OUTPUT);\r\n\r\n  \/\/ Attach Servo\r\n  serv.attach( pinServo );\r\n\r\n  \/\/ RFM12B Radio\r\n  isSetupRFM12BRadio();\r\n\r\n}\r\n<\/pre>\n<p>&#8212;&#8212;<\/p>\n<p><strong>People can contact us:<\/strong> https:\/\/www.donluc.com\/?page_id=1927<\/p>\n<p><strong>Teacher, Instructor, E-Mentor, R&#038;D and Consulting<\/strong><\/p>\n<ul>\n<li>Programming Language<\/li>\n<li>Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi, Arm, Silicon Labs, Espressif, Etc&#8230;)<\/li>\n<li>IoT<\/li>\n<li>Wireless (Radio Frequency, Bluetooth, WiFi, Etc&#8230;)<\/li>\n<li>Robotics<\/li>\n<li>Automation<\/li>\n<li>Camera and Video Capture Receiver Stationary, Wheel\/Tank and Underwater Vehicle<\/li>\n<li>Unmanned Vehicles Terrestrial and Marine<\/li>\n<li>Machine Learning<\/li>\n<li>Artificial Intelligence (AI)<\/li>\n<li>RTOS<\/li>\n<li>eHealth Sensors, Biosensor, and Biometric<\/li>\n<li>Research &#038; Development (R &#038; D)<\/li>\n<li>Consulting<\/li>\n<\/ul>\n<p><strong>Follow Us<\/strong><\/p>\n<p><strong>Luc Paquin \u2013 Curriculum Vitae &#8211; 2023<\/strong><br \/>\nhttps:\/\/www.donluc.com\/luc\/<\/p>\n<p><strong>Web:<\/strong> https:\/\/www.donluc.com\/<br \/>\n<strong>Facebook:<\/strong> https:\/\/www.facebook.com\/neosteam.labs.9\/<br \/>\n<strong>YouTube:<\/strong> https:\/\/www.youtube.com\/@thesass2063<br \/>\n<strong>Twitter:<\/strong> https:\/\/twitter.com\/labs_steam<br \/>\n<strong>Pinterest:<\/strong> https:\/\/www.pinterest.com\/NeoSteamLabs\/<br \/>\n<strong>Instagram:<\/strong> https:\/\/www.instagram.com\/neosteamlabs\/<\/p>\n<p><strong>Don Luc<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8212;&#8212; #DonLucElectronics #DonLuc #Servo #Moteino #Transceiver #RadioFrequency #Pololu #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; Moteino Moteino began as a low power wireless Arduino compatible development platform based on the popular ATmega328p chip used in the Arduino UNO. There are now several Moteino development boards including MoteinoMEGA based on the Atmega1284P &#8230; <a title=\"Project #8: Servo &#8211; Moteino R2 (RFM12B) &#8211; Mk02\" class=\"read-more\" href=\"https:\/\/www.donluc.com\/?p=3783\" aria-label=\"Read more about Project #8: Servo &#8211; Moteino R2 (RFM12B) &#8211; Mk02\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75,50,49,38,59,115,5,261,46,287,58,10],"tags":[6,92,102,4,19,85,24,263,310,103,9,27,264,95,97,311,33,34,108],"class_list":["post-3783","post","type-post","status-publish","format-standard","hentry","category-servo","category-arduino","category-consultant","category-digitalelectronics","category-fritzing","category-e-mentor","category-microcontrollers","category-moteino","category-pololu","category-program","category-arduino-programming","category-projects","tag-arduino","tag-battery","tag-components","tag-consultant","tag-electronics","tag-fritzing","tag-microcontroller","tag-moteino","tag-moteino-r2-rfm12b","tag-pololu","tag-programming","tag-projects-2","tag-radio-frequency","tag-robotic","tag-servo","tag-servo-motor","tag-technology","tag-video-blog","tag-vlog"],"_links":{"self":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3783"}],"version-history":[{"count":1,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3783\/revisions"}],"predecessor-version":[{"id":3788,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3783\/revisions\/3788"}],"wp:attachment":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}